diff --git a/build/linux/JUCE.make b/build/linux/JUCE.make index 6fc39b8bb5..fdd623f1f6 100644 --- a/build/linux/JUCE.make +++ b/build/linux/JUCE.make @@ -39,12 +39,14 @@ ifeq ($(CONFIG),Release) endif OBJECTS := \ - $(OBJDIR)/juce_FileLogger.o \ - $(OBJDIR)/juce_Logger.o \ - $(OBJDIR)/juce_Random.o \ - $(OBJDIR)/juce_RelativeTime.o \ - $(OBJDIR)/juce_SystemStats.o \ $(OBJDIR)/juce_Time.o \ + $(OBJDIR)/juce_SystemStats.o \ + $(OBJDIR)/juce_RelativeTime.o \ + $(OBJDIR)/juce_Random.o \ + $(OBJDIR)/juce_Logger.o \ + $(OBJDIR)/juce_FileLogger.o \ + $(OBJDIR)/juce_Uuid.o \ + $(OBJDIR)/juce_PerformanceCounter.o \ $(OBJDIR)/juce_BlowFish.o \ $(OBJDIR)/juce_MD5.o \ $(OBJDIR)/juce_Primes.o \ @@ -53,54 +55,50 @@ OBJECTS := \ $(OBJDIR)/juce_MemoryBlock.o \ $(OBJDIR)/juce_PropertySet.o \ $(OBJDIR)/juce_Variant.o \ - $(OBJDIR)/juce_InputStream.o \ - $(OBJDIR)/juce_OutputStream.o \ $(OBJDIR)/juce_DirectoryIterator.o \ $(OBJDIR)/juce_File.o \ $(OBJDIR)/juce_FileInputStream.o \ $(OBJDIR)/juce_FileOutputStream.o \ $(OBJDIR)/juce_FileSearchPath.o \ $(OBJDIR)/juce_NamedPipe.o \ - $(OBJDIR)/juce_URL.o \ + $(OBJDIR)/juce_ZipFile.o \ $(OBJDIR)/juce_Socket.o \ + $(OBJDIR)/juce_URL.o \ $(OBJDIR)/juce_BufferedInputStream.o \ $(OBJDIR)/juce_FileInputSource.o \ $(OBJDIR)/juce_GZIPCompressorOutputStream.o \ + $(OBJDIR)/juce_GZIPDecompressorInputStream.o \ $(OBJDIR)/juce_MemoryInputStream.o \ $(OBJDIR)/juce_MemoryOutputStream.o \ $(OBJDIR)/juce_SubregionStream.o \ - $(OBJDIR)/juce_GZIPDecompressorInputStream.o \ - $(OBJDIR)/juce_PerformanceCounter.o \ - $(OBJDIR)/juce_Uuid.o \ - $(OBJDIR)/juce_ZipFile.o \ + $(OBJDIR)/juce_InputStream.o \ + $(OBJDIR)/juce_OutputStream.o \ $(OBJDIR)/juce_CharacterFunctions.o \ $(OBJDIR)/juce_LocalisedStrings.o \ + $(OBJDIR)/juce_String.o \ $(OBJDIR)/juce_StringArray.o \ $(OBJDIR)/juce_StringPairArray.o \ $(OBJDIR)/juce_XmlDocument.o \ $(OBJDIR)/juce_XmlElement.o \ - $(OBJDIR)/juce_String.o \ $(OBJDIR)/juce_InterProcessLock.o \ $(OBJDIR)/juce_ReadWriteLock.o \ - $(OBJDIR)/juce_TimeSliceThread.o \ - $(OBJDIR)/juce_ThreadPool.o \ $(OBJDIR)/juce_Thread.o \ + $(OBJDIR)/juce_ThreadPool.o \ + $(OBJDIR)/juce_TimeSliceThread.o \ + $(OBJDIR)/juce_Application.o \ $(OBJDIR)/juce_ApplicationCommandInfo.o \ $(OBJDIR)/juce_ApplicationCommandManager.o \ $(OBJDIR)/juce_ApplicationCommandTarget.o \ $(OBJDIR)/juce_ApplicationProperties.o \ - $(OBJDIR)/juce_DeletedAtShutdown.o \ - $(OBJDIR)/juce_PropertiesFile.o \ - $(OBJDIR)/juce_Application.o \ $(OBJDIR)/juce_AudioDataConverters.o \ - $(OBJDIR)/juce_IIRFilter.o \ $(OBJDIR)/juce_AudioSampleBuffer.o \ + $(OBJDIR)/juce_IIRFilter.o \ $(OBJDIR)/juce_MidiBuffer.o \ + $(OBJDIR)/juce_MidiFile.o \ $(OBJDIR)/juce_MidiKeyboardState.o \ $(OBJDIR)/juce_MidiMessage.o \ $(OBJDIR)/juce_MidiMessageCollector.o \ $(OBJDIR)/juce_MidiMessageSequence.o \ - $(OBJDIR)/juce_MidiFile.o \ $(OBJDIR)/juce_AudioProcessor.o \ $(OBJDIR)/juce_AudioProcessorEditor.o \ $(OBJDIR)/juce_AudioProcessorGraph.o \ @@ -114,47 +112,49 @@ OBJECTS := \ $(OBJDIR)/juce_PluginDirectoryScanner.o \ $(OBJDIR)/juce_PluginListComponent.o \ $(OBJDIR)/juce_VSTPluginFormat.o \ - $(OBJDIR)/juce_WavAudioFormat.o \ + $(OBJDIR)/juce_AiffAudioFormat.o \ + $(OBJDIR)/juce_AudioCDReader.o \ $(OBJDIR)/juce_AudioFormat.o \ $(OBJDIR)/juce_AudioFormatManager.o \ + $(OBJDIR)/juce_AudioSubsectionReader.o \ $(OBJDIR)/juce_AudioThumbnail.o \ $(OBJDIR)/juce_AudioThumbnailCache.o \ - $(OBJDIR)/juce_FlacAudioFormat.o \ - $(OBJDIR)/juce_AiffAudioFormat.o \ + $(OBJDIR)/juce_WavAudioFormat.o \ $(OBJDIR)/juce_QuickTimeAudioFormat.o \ - $(OBJDIR)/juce_AudioCDReader.o \ + $(OBJDIR)/juce_FlacAudioFormat.o \ $(OBJDIR)/juce_OggVorbisAudioFormat.o \ - $(OBJDIR)/juce_AudioSubsectionReader.o \ $(OBJDIR)/juce_AudioFormatReaderSource.o \ $(OBJDIR)/juce_AudioSourcePlayer.o \ + $(OBJDIR)/juce_AudioTransportSource.o \ $(OBJDIR)/juce_BufferingAudioSource.o \ $(OBJDIR)/juce_ChannelRemappingAudioSource.o \ $(OBJDIR)/juce_IIRFilterAudioSource.o \ $(OBJDIR)/juce_MixerAudioSource.o \ $(OBJDIR)/juce_ResamplingAudioSource.o \ $(OBJDIR)/juce_ToneGeneratorAudioSource.o \ - $(OBJDIR)/juce_AudioTransportSource.o \ + $(OBJDIR)/juce_AudioDeviceManager.o \ $(OBJDIR)/juce_AudioIODevice.o \ $(OBJDIR)/juce_AudioIODeviceType.o \ $(OBJDIR)/juce_MidiOutput.o \ - $(OBJDIR)/juce_AudioDeviceManager.o \ - $(OBJDIR)/juce_Synthesiser.o \ $(OBJDIR)/juce_Sampler.o \ - $(OBJDIR)/juce_FileBasedDocument.o \ - $(OBJDIR)/juce_RecentlyOpenedFilesList.o \ - $(OBJDIR)/juce_UndoManager.o \ + $(OBJDIR)/juce_Synthesiser.o \ $(OBJDIR)/juce_ActionBroadcaster.o \ $(OBJDIR)/juce_ActionListenerList.o \ $(OBJDIR)/juce_AsyncUpdater.o \ $(OBJDIR)/juce_ChangeBroadcaster.o \ $(OBJDIR)/juce_ChangeListenerList.o \ + $(OBJDIR)/juce_InterprocessConnection.o \ $(OBJDIR)/juce_InterprocessConnectionServer.o \ $(OBJDIR)/juce_Message.o \ $(OBJDIR)/juce_MessageListener.o \ - $(OBJDIR)/juce_MultiTimer.o \ - $(OBJDIR)/juce_InterprocessConnection.o \ - $(OBJDIR)/juce_Timer.o \ $(OBJDIR)/juce_MessageManager.o \ + $(OBJDIR)/juce_MultiTimer.o \ + $(OBJDIR)/juce_Timer.o \ + $(OBJDIR)/juce_UndoManager.o \ + $(OBJDIR)/juce_PropertiesFile.o \ + $(OBJDIR)/juce_RecentlyOpenedFilesList.o \ + $(OBJDIR)/juce_FileBasedDocument.o \ + $(OBJDIR)/juce_DeletedAtShutdown.o \ $(OBJDIR)/juce_Brush.o \ $(OBJDIR)/juce_GradientBrush.o \ $(OBJDIR)/juce_ImageBrush.o \ @@ -162,12 +162,12 @@ OBJECTS := \ $(OBJDIR)/juce_Colour.o \ $(OBJDIR)/juce_ColourGradient.o \ $(OBJDIR)/juce_Colours.o \ + $(OBJDIR)/juce_EdgeTable.o \ $(OBJDIR)/juce_Graphics.o \ $(OBJDIR)/juce_Justification.o \ $(OBJDIR)/juce_LowLevelGraphicsPostScriptRenderer.o \ $(OBJDIR)/juce_LowLevelGraphicsSoftwareRenderer.o \ $(OBJDIR)/juce_RectanglePlacement.o \ - $(OBJDIR)/juce_EdgeTable.o \ $(OBJDIR)/juce_Drawable.o \ $(OBJDIR)/juce_DrawableComposite.o \ $(OBJDIR)/juce_DrawableImage.o \ @@ -186,41 +186,41 @@ OBJECTS := \ $(OBJDIR)/juce_Line.o \ $(OBJDIR)/juce_Path.o \ $(OBJDIR)/juce_PathIterator.o \ + $(OBJDIR)/juce_PathStrokeType.o \ $(OBJDIR)/juce_Point.o \ + $(OBJDIR)/juce_PositionedRectangle.o \ $(OBJDIR)/juce_Rectangle.o \ $(OBJDIR)/juce_RectangleList.o \ - $(OBJDIR)/juce_PositionedRectangle.o \ - $(OBJDIR)/juce_PathStrokeType.o \ $(OBJDIR)/juce_Image.o \ $(OBJDIR)/juce_ImageCache.o \ $(OBJDIR)/juce_ImageConvolutionKernel.o \ $(OBJDIR)/juce_ImageFileFormat.o \ $(OBJDIR)/juce_GIFLoader.o \ - $(OBJDIR)/juce_PNGLoader.o \ $(OBJDIR)/juce_JPEGLoader.o \ + $(OBJDIR)/juce_PNGLoader.o \ $(OBJDIR)/juce_Component.o \ $(OBJDIR)/juce_ComponentListener.o \ $(OBJDIR)/juce_Desktop.o \ $(OBJDIR)/juce_ArrowButton.o \ + $(OBJDIR)/juce_Button.o \ + $(OBJDIR)/juce_DrawableButton.o \ $(OBJDIR)/juce_HyperlinkButton.o \ + $(OBJDIR)/juce_ImageButton.o \ $(OBJDIR)/juce_ShapeButton.o \ $(OBJDIR)/juce_TextButton.o \ $(OBJDIR)/juce_ToggleButton.o \ - $(OBJDIR)/juce_DrawableButton.o \ - $(OBJDIR)/juce_ImageButton.o \ $(OBJDIR)/juce_ToolbarButton.o \ - $(OBJDIR)/juce_Button.o \ + $(OBJDIR)/juce_ComboBox.o \ + $(OBJDIR)/juce_Label.o \ + $(OBJDIR)/juce_ListBox.o \ $(OBJDIR)/juce_ProgressBar.o \ - $(OBJDIR)/juce_TextEditor.o \ + $(OBJDIR)/juce_Slider.o \ $(OBJDIR)/juce_TableHeaderComponent.o \ + $(OBJDIR)/juce_TableListBox.o \ + $(OBJDIR)/juce_TextEditor.o \ $(OBJDIR)/juce_Toolbar.o \ $(OBJDIR)/juce_ToolbarItemComponent.o \ $(OBJDIR)/juce_ToolbarItemPalette.o \ - $(OBJDIR)/juce_TableListBox.o \ - $(OBJDIR)/juce_Label.o \ - $(OBJDIR)/juce_Slider.o \ - $(OBJDIR)/juce_ListBox.o \ - $(OBJDIR)/juce_ComboBox.o \ $(OBJDIR)/juce_TreeView.o \ $(OBJDIR)/juce_DirectoryContentsDisplayComponent.o \ $(OBJDIR)/juce_DirectoryContentsList.o \ @@ -236,14 +236,16 @@ OBJECTS := \ $(OBJDIR)/juce_WildcardFileFilter.o \ $(OBJDIR)/juce_KeyboardFocusTraverser.o \ $(OBJDIR)/juce_KeyListener.o \ - $(OBJDIR)/juce_KeyPress.o \ - $(OBJDIR)/juce_ModifierKeys.o \ - $(OBJDIR)/juce_KeyPressMappingSet.o \ $(OBJDIR)/juce_KeyMappingEditorComponent.o \ + $(OBJDIR)/juce_KeyPress.o \ + $(OBJDIR)/juce_KeyPressMappingSet.o \ + $(OBJDIR)/juce_ModifierKeys.o \ $(OBJDIR)/juce_ComponentAnimator.o \ $(OBJDIR)/juce_ComponentBoundsConstrainer.o \ $(OBJDIR)/juce_ComponentMovementWatcher.o \ $(OBJDIR)/juce_GroupComponent.o \ + $(OBJDIR)/juce_MultiDocumentPanel.o \ + $(OBJDIR)/juce_ResizableBorderComponent.o \ $(OBJDIR)/juce_ResizableCornerComponent.o \ $(OBJDIR)/juce_ScrollBar.o \ $(OBJDIR)/juce_StretchableLayoutManager.o \ @@ -251,20 +253,18 @@ OBJECTS := \ $(OBJDIR)/juce_StretchableObjectResizer.o \ $(OBJDIR)/juce_TabbedButtonBar.o \ $(OBJDIR)/juce_TabbedComponent.o \ - $(OBJDIR)/juce_MultiDocumentPanel.o \ $(OBJDIR)/juce_Viewport.o \ - $(OBJDIR)/juce_ResizableBorderComponent.o \ - $(OBJDIR)/juce_OldSchoolLookAndFeel.o \ $(OBJDIR)/juce_LookAndFeel.o \ + $(OBJDIR)/juce_OldSchoolLookAndFeel.o \ $(OBJDIR)/juce_MenuBarComponent.o \ $(OBJDIR)/juce_MenuBarModel.o \ $(OBJDIR)/juce_PopupMenu.o \ $(OBJDIR)/juce_ComponentDragger.o \ + $(OBJDIR)/juce_DragAndDropContainer.o \ $(OBJDIR)/juce_MouseCursor.o \ $(OBJDIR)/juce_MouseEvent.o \ $(OBJDIR)/juce_MouseHoverDetector.o \ $(OBJDIR)/juce_MouseListener.o \ - $(OBJDIR)/juce_DragAndDropContainer.o \ $(OBJDIR)/juce_BooleanPropertyComponent.o \ $(OBJDIR)/juce_ButtonPropertyComponent.o \ $(OBJDIR)/juce_ChoicePropertyComponent.o \ @@ -278,31 +278,31 @@ OBJECTS := \ $(OBJDIR)/juce_ColourSelector.o \ $(OBJDIR)/juce_DropShadower.o \ $(OBJDIR)/juce_MagnifierComponent.o \ + $(OBJDIR)/juce_MidiKeyboardComponent.o \ $(OBJDIR)/juce_OpenGLComponent.o \ $(OBJDIR)/juce_PreferencesPanel.o \ $(OBJDIR)/juce_SystemTrayIconComponent.o \ - $(OBJDIR)/juce_MidiKeyboardComponent.o \ - $(OBJDIR)/juce_TooltipWindow.o \ + $(OBJDIR)/juce_AlertWindow.o \ + $(OBJDIR)/juce_ComponentPeer.o \ $(OBJDIR)/juce_DialogWindow.o \ $(OBJDIR)/juce_DocumentWindow.o \ $(OBJDIR)/juce_ResizableWindow.o \ $(OBJDIR)/juce_SplashScreen.o \ $(OBJDIR)/juce_ThreadWithProgressWindow.o \ + $(OBJDIR)/juce_TooltipWindow.o \ $(OBJDIR)/juce_TopLevelWindow.o \ - $(OBJDIR)/juce_ComponentPeer.o \ - $(OBJDIR)/juce_AlertWindow.o \ - $(OBJDIR)/juce_linux_Windowing.o \ - $(OBJDIR)/juce_linux_WebBrowserComponent.o \ - $(OBJDIR)/juce_linux_Threads.o \ - $(OBJDIR)/juce_linux_SystemStats.o \ - $(OBJDIR)/juce_linux_Network.o \ - $(OBJDIR)/juce_linux_Messaging.o \ - $(OBJDIR)/juce_linux_Midi.o \ + $(OBJDIR)/juce_linux_Audio.o \ + $(OBJDIR)/juce_linux_AudioCDReader.o \ + $(OBJDIR)/juce_linux_FileChooser.o \ $(OBJDIR)/juce_linux_Files.o \ $(OBJDIR)/juce_linux_Fonts.o \ - $(OBJDIR)/juce_linux_FileChooser.o \ - $(OBJDIR)/juce_linux_AudioCDReader.o \ - $(OBJDIR)/juce_linux_Audio.o \ + $(OBJDIR)/juce_linux_Messaging.o \ + $(OBJDIR)/juce_linux_Midi.o \ + $(OBJDIR)/juce_linux_Network.o \ + $(OBJDIR)/juce_linux_SystemStats.o \ + $(OBJDIR)/juce_linux_Threads.o \ + $(OBJDIR)/juce_linux_WebBrowserComponent.o \ + $(OBJDIR)/juce_linux_Windowing.o \ $(OBJDIR)/juce_linux_NativeCode.o \ MKDIR_TYPE := msdos @@ -345,1297 +345,1277 @@ else -@if exist $(subst /,\,$(OBJDIR)) rmdir /s /q $(subst /,\,$(OBJDIR)) endif -$(OBJDIR)/juce_FileLogger.o: ../../src/juce_core/basics/juce_FileLogger.cpp +$(OBJDIR)/juce_Time.o: ../../src/core/juce_Time.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Logger.o: ../../src/juce_core/basics/juce_Logger.cpp +$(OBJDIR)/juce_SystemStats.o: ../../src/core/juce_SystemStats.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Random.o: ../../src/juce_core/basics/juce_Random.cpp +$(OBJDIR)/juce_RelativeTime.o: ../../src/core/juce_RelativeTime.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_RelativeTime.o: ../../src/juce_core/basics/juce_RelativeTime.cpp +$(OBJDIR)/juce_Random.o: ../../src/core/juce_Random.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SystemStats.o: ../../src/juce_core/basics/juce_SystemStats.cpp +$(OBJDIR)/juce_Logger.o: ../../src/core/juce_Logger.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Time.o: ../../src/juce_core/basics/juce_Time.cpp +$(OBJDIR)/juce_FileLogger.o: ../../src/core/juce_FileLogger.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BlowFish.o: ../../src/juce_core/cryptography/juce_BlowFish.cpp +$(OBJDIR)/juce_Uuid.o: ../../src/core/juce_Uuid.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MD5.o: ../../src/juce_core/cryptography/juce_MD5.cpp +$(OBJDIR)/juce_PerformanceCounter.o: ../../src/core/juce_PerformanceCounter.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Primes.o: ../../src/juce_core/cryptography/juce_Primes.cpp +$(OBJDIR)/juce_BlowFish.o: ../../src/cryptography/juce_BlowFish.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_RSAKey.o: ../../src/juce_core/cryptography/juce_RSAKey.cpp +$(OBJDIR)/juce_MD5.o: ../../src/cryptography/juce_MD5.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BitArray.o: ../../src/juce_core/containers/juce_BitArray.cpp +$(OBJDIR)/juce_Primes.o: ../../src/cryptography/juce_Primes.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MemoryBlock.o: ../../src/juce_core/containers/juce_MemoryBlock.cpp +$(OBJDIR)/juce_RSAKey.o: ../../src/cryptography/juce_RSAKey.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PropertySet.o: ../../src/juce_core/containers/juce_PropertySet.cpp +$(OBJDIR)/juce_BitArray.o: ../../src/containers/juce_BitArray.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Variant.o: ../../src/juce_core/containers/juce_Variant.cpp +$(OBJDIR)/juce_MemoryBlock.o: ../../src/containers/juce_MemoryBlock.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_InputStream.o: ../../src/juce_core/io/juce_InputStream.cpp +$(OBJDIR)/juce_PropertySet.o: ../../src/containers/juce_PropertySet.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_OutputStream.o: ../../src/juce_core/io/juce_OutputStream.cpp +$(OBJDIR)/juce_Variant.o: ../../src/containers/juce_Variant.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DirectoryIterator.o: ../../src/juce_core/io/files/juce_DirectoryIterator.cpp +$(OBJDIR)/juce_DirectoryIterator.o: ../../src/io/files/juce_DirectoryIterator.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_File.o: ../../src/juce_core/io/files/juce_File.cpp +$(OBJDIR)/juce_File.o: ../../src/io/files/juce_File.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileInputStream.o: ../../src/juce_core/io/files/juce_FileInputStream.cpp +$(OBJDIR)/juce_FileInputStream.o: ../../src/io/files/juce_FileInputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileOutputStream.o: ../../src/juce_core/io/files/juce_FileOutputStream.cpp +$(OBJDIR)/juce_FileOutputStream.o: ../../src/io/files/juce_FileOutputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileSearchPath.o: ../../src/juce_core/io/files/juce_FileSearchPath.cpp +$(OBJDIR)/juce_FileSearchPath.o: ../../src/io/files/juce_FileSearchPath.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_NamedPipe.o: ../../src/juce_core/io/files/juce_NamedPipe.cpp +$(OBJDIR)/juce_NamedPipe.o: ../../src/io/files/juce_NamedPipe.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_URL.o: ../../src/juce_core/io/network/juce_URL.cpp +$(OBJDIR)/juce_ZipFile.o: ../../src/io/files/juce_ZipFile.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Socket.o: ../../src/juce_core/io/network/juce_Socket.cpp +$(OBJDIR)/juce_Socket.o: ../../src/io/network/juce_Socket.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BufferedInputStream.o: ../../src/juce_core/io/streams/juce_BufferedInputStream.cpp +$(OBJDIR)/juce_URL.o: ../../src/io/network/juce_URL.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileInputSource.o: ../../src/juce_core/io/streams/juce_FileInputSource.cpp +$(OBJDIR)/juce_BufferedInputStream.o: ../../src/io/streams/juce_BufferedInputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GZIPCompressorOutputStream.o: ../../src/juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp +$(OBJDIR)/juce_FileInputSource.o: ../../src/io/streams/juce_FileInputSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MemoryInputStream.o: ../../src/juce_core/io/streams/juce_MemoryInputStream.cpp +$(OBJDIR)/juce_GZIPCompressorOutputStream.o: ../../src/io/streams/juce_GZIPCompressorOutputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MemoryOutputStream.o: ../../src/juce_core/io/streams/juce_MemoryOutputStream.cpp +$(OBJDIR)/juce_GZIPDecompressorInputStream.o: ../../src/io/streams/juce_GZIPDecompressorInputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SubregionStream.o: ../../src/juce_core/io/streams/juce_SubregionStream.cpp +$(OBJDIR)/juce_MemoryInputStream.o: ../../src/io/streams/juce_MemoryInputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GZIPDecompressorInputStream.o: ../../src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp +$(OBJDIR)/juce_MemoryOutputStream.o: ../../src/io/streams/juce_MemoryOutputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PerformanceCounter.o: ../../src/juce_core/misc/juce_PerformanceCounter.cpp +$(OBJDIR)/juce_SubregionStream.o: ../../src/io/streams/juce_SubregionStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Uuid.o: ../../src/juce_core/misc/juce_Uuid.cpp +$(OBJDIR)/juce_InputStream.o: ../../src/io/streams/juce_InputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ZipFile.o: ../../src/juce_core/misc/juce_ZipFile.cpp +$(OBJDIR)/juce_OutputStream.o: ../../src/io/streams/juce_OutputStream.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_CharacterFunctions.o: ../../src/juce_core/text/juce_CharacterFunctions.cpp +$(OBJDIR)/juce_CharacterFunctions.o: ../../src/text/juce_CharacterFunctions.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_LocalisedStrings.o: ../../src/juce_core/text/juce_LocalisedStrings.cpp +$(OBJDIR)/juce_LocalisedStrings.o: ../../src/text/juce_LocalisedStrings.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_StringArray.o: ../../src/juce_core/text/juce_StringArray.cpp +$(OBJDIR)/juce_String.o: ../../src/text/juce_String.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_StringPairArray.o: ../../src/juce_core/text/juce_StringPairArray.cpp +$(OBJDIR)/juce_StringArray.o: ../../src/text/juce_StringArray.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_XmlDocument.o: ../../src/juce_core/text/juce_XmlDocument.cpp +$(OBJDIR)/juce_StringPairArray.o: ../../src/text/juce_StringPairArray.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_XmlElement.o: ../../src/juce_core/text/juce_XmlElement.cpp +$(OBJDIR)/juce_XmlDocument.o: ../../src/text/juce_XmlDocument.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_String.o: ../../src/juce_core/text/juce_String.cpp +$(OBJDIR)/juce_XmlElement.o: ../../src/text/juce_XmlElement.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_InterProcessLock.o: ../../src/juce_core/threads/juce_InterProcessLock.cpp +$(OBJDIR)/juce_InterProcessLock.o: ../../src/threads/juce_InterProcessLock.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ReadWriteLock.o: ../../src/juce_core/threads/juce_ReadWriteLock.cpp +$(OBJDIR)/juce_ReadWriteLock.o: ../../src/threads/juce_ReadWriteLock.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TimeSliceThread.o: ../../src/juce_core/threads/juce_TimeSliceThread.cpp +$(OBJDIR)/juce_Thread.o: ../../src/threads/juce_Thread.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ThreadPool.o: ../../src/juce_core/threads/juce_ThreadPool.cpp +$(OBJDIR)/juce_ThreadPool.o: ../../src/threads/juce_ThreadPool.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Thread.o: ../../src/juce_core/threads/juce_Thread.cpp +$(OBJDIR)/juce_TimeSliceThread.o: ../../src/threads/juce_TimeSliceThread.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ApplicationCommandInfo.o: ../../src/juce_appframework/application/juce_ApplicationCommandInfo.cpp +$(OBJDIR)/juce_Application.o: ../../src/application/juce_Application.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ApplicationCommandManager.o: ../../src/juce_appframework/application/juce_ApplicationCommandManager.cpp +$(OBJDIR)/juce_ApplicationCommandInfo.o: ../../src/application/juce_ApplicationCommandInfo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ApplicationCommandTarget.o: ../../src/juce_appframework/application/juce_ApplicationCommandTarget.cpp +$(OBJDIR)/juce_ApplicationCommandManager.o: ../../src/application/juce_ApplicationCommandManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ApplicationProperties.o: ../../src/juce_appframework/application/juce_ApplicationProperties.cpp +$(OBJDIR)/juce_ApplicationCommandTarget.o: ../../src/application/juce_ApplicationCommandTarget.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DeletedAtShutdown.o: ../../src/juce_appframework/application/juce_DeletedAtShutdown.cpp +$(OBJDIR)/juce_ApplicationProperties.o: ../../src/application/juce_ApplicationProperties.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PropertiesFile.o: ../../src/juce_appframework/application/juce_PropertiesFile.cpp +$(OBJDIR)/juce_AudioDataConverters.o: ../../src/audio/dsp/juce_AudioDataConverters.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Application.o: ../../src/juce_appframework/application/juce_Application.cpp +$(OBJDIR)/juce_AudioSampleBuffer.o: ../../src/audio/dsp/juce_AudioSampleBuffer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioDataConverters.o: ../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.cpp +$(OBJDIR)/juce_IIRFilter.o: ../../src/audio/dsp/juce_IIRFilter.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_IIRFilter.o: ../../src/juce_appframework/audio/dsp/juce_IIRFilter.cpp +$(OBJDIR)/juce_MidiBuffer.o: ../../src/audio/midi/juce_MidiBuffer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioSampleBuffer.o: ../../src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp +$(OBJDIR)/juce_MidiFile.o: ../../src/audio/midi/juce_MidiFile.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiBuffer.o: ../../src/juce_appframework/audio/midi/juce_MidiBuffer.cpp +$(OBJDIR)/juce_MidiKeyboardState.o: ../../src/audio/midi/juce_MidiKeyboardState.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiKeyboardState.o: ../../src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp +$(OBJDIR)/juce_MidiMessage.o: ../../src/audio/midi/juce_MidiMessage.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiMessage.o: ../../src/juce_appframework/audio/midi/juce_MidiMessage.cpp +$(OBJDIR)/juce_MidiMessageCollector.o: ../../src/audio/midi/juce_MidiMessageCollector.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiMessageCollector.o: ../../src/juce_appframework/audio/midi/juce_MidiMessageCollector.cpp +$(OBJDIR)/juce_MidiMessageSequence.o: ../../src/audio/midi/juce_MidiMessageSequence.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiMessageSequence.o: ../../src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp +$(OBJDIR)/juce_AudioProcessor.o: ../../src/audio/processors/juce_AudioProcessor.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiFile.o: ../../src/juce_appframework/audio/midi/juce_MidiFile.cpp +$(OBJDIR)/juce_AudioProcessorEditor.o: ../../src/audio/processors/juce_AudioProcessorEditor.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioProcessor.o: ../../src/juce_appframework/audio/processors/juce_AudioProcessor.cpp +$(OBJDIR)/juce_AudioProcessorGraph.o: ../../src/audio/processors/juce_AudioProcessorGraph.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioProcessorEditor.o: ../../src/juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp +$(OBJDIR)/juce_AudioProcessorPlayer.o: ../../src/audio/processors/juce_AudioProcessorPlayer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioProcessorGraph.o: ../../src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp +$(OBJDIR)/juce_GenericAudioProcessorEditor.o: ../../src/audio/processors/juce_GenericAudioProcessorEditor.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioProcessorPlayer.o: ../../src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp +$(OBJDIR)/juce_AudioPluginFormat.o: ../../src/audio/plugins/juce_AudioPluginFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GenericAudioProcessorEditor.o: ../../src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.cpp +$(OBJDIR)/juce_AudioPluginFormatManager.o: ../../src/audio/plugins/juce_AudioPluginFormatManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioPluginFormat.o: ../../src/juce_appframework/audio/plugins/juce_AudioPluginFormat.cpp +$(OBJDIR)/juce_AudioPluginInstance.o: ../../src/audio/plugins/juce_AudioPluginInstance.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioPluginFormatManager.o: ../../src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.cpp +$(OBJDIR)/juce_KnownPluginList.o: ../../src/audio/plugins/juce_KnownPluginList.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioPluginInstance.o: ../../src/juce_appframework/audio/plugins/juce_AudioPluginInstance.cpp +$(OBJDIR)/juce_PluginDescription.o: ../../src/audio/plugins/juce_PluginDescription.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_KnownPluginList.o: ../../src/juce_appframework/audio/plugins/juce_KnownPluginList.cpp +$(OBJDIR)/juce_PluginDirectoryScanner.o: ../../src/audio/plugins/juce_PluginDirectoryScanner.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PluginDescription.o: ../../src/juce_appframework/audio/plugins/juce_PluginDescription.cpp +$(OBJDIR)/juce_PluginListComponent.o: ../../src/audio/plugins/juce_PluginListComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PluginDirectoryScanner.o: ../../src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp +$(OBJDIR)/juce_VSTPluginFormat.o: ../../src/audio/plugins/formats/juce_VSTPluginFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PluginListComponent.o: ../../src/juce_appframework/audio/plugins/juce_PluginListComponent.cpp +$(OBJDIR)/juce_AiffAudioFormat.o: ../../src/audio/audio_file_formats/juce_AiffAudioFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_VSTPluginFormat.o: ../../src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.cpp +$(OBJDIR)/juce_AudioCDReader.o: ../../src/audio/audio_file_formats/juce_AudioCDReader.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_WavAudioFormat.o: ../../src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.cpp +$(OBJDIR)/juce_AudioFormat.o: ../../src/audio/audio_file_formats/juce_AudioFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioFormat.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.cpp +$(OBJDIR)/juce_AudioFormatManager.o: ../../src/audio/audio_file_formats/juce_AudioFormatManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioFormatManager.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.cpp +$(OBJDIR)/juce_AudioSubsectionReader.o: ../../src/audio/audio_file_formats/juce_AudioSubsectionReader.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioThumbnail.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.cpp +$(OBJDIR)/juce_AudioThumbnail.o: ../../src/audio/audio_file_formats/juce_AudioThumbnail.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioThumbnailCache.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.cpp +$(OBJDIR)/juce_AudioThumbnailCache.o: ../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FlacAudioFormat.o: ../../src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.cpp +$(OBJDIR)/juce_WavAudioFormat.o: ../../src/audio/audio_file_formats/juce_WavAudioFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AiffAudioFormat.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp +$(OBJDIR)/juce_QuickTimeAudioFormat.o: ../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_QuickTimeAudioFormat.o: ../../src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp +$(OBJDIR)/juce_FlacAudioFormat.o: ../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioCDReader.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.cpp +$(OBJDIR)/juce_OggVorbisAudioFormat.o: ../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_OggVorbisAudioFormat.o: ../../src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp +$(OBJDIR)/juce_AudioFormatReaderSource.o: ../../src/audio/audio_sources/juce_AudioFormatReaderSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioSubsectionReader.o: ../../src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.cpp +$(OBJDIR)/juce_AudioSourcePlayer.o: ../../src/audio/audio_sources/juce_AudioSourcePlayer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioFormatReaderSource.o: ../../src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.cpp +$(OBJDIR)/juce_AudioTransportSource.o: ../../src/audio/audio_sources/juce_AudioTransportSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioSourcePlayer.o: ../../src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp +$(OBJDIR)/juce_BufferingAudioSource.o: ../../src/audio/audio_sources/juce_BufferingAudioSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BufferingAudioSource.o: ../../src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.cpp +$(OBJDIR)/juce_ChannelRemappingAudioSource.o: ../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ChannelRemappingAudioSource.o: ../../src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp +$(OBJDIR)/juce_IIRFilterAudioSource.o: ../../src/audio/audio_sources/juce_IIRFilterAudioSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_IIRFilterAudioSource.o: ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp +$(OBJDIR)/juce_MixerAudioSource.o: ../../src/audio/audio_sources/juce_MixerAudioSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MixerAudioSource.o: ../../src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.cpp +$(OBJDIR)/juce_ResamplingAudioSource.o: ../../src/audio/audio_sources/juce_ResamplingAudioSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ResamplingAudioSource.o: ../../src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.cpp +$(OBJDIR)/juce_ToneGeneratorAudioSource.o: ../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ToneGeneratorAudioSource.o: ../../src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp +$(OBJDIR)/juce_AudioDeviceManager.o: ../../src/audio/devices/juce_AudioDeviceManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioTransportSource.o: ../../src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.cpp +$(OBJDIR)/juce_AudioIODevice.o: ../../src/audio/devices/juce_AudioIODevice.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioIODevice.o: ../../src/juce_appframework/audio/devices/juce_AudioIODevice.cpp +$(OBJDIR)/juce_AudioIODeviceType.o: ../../src/audio/devices/juce_AudioIODeviceType.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioIODeviceType.o: ../../src/juce_appframework/audio/devices/juce_AudioIODeviceType.cpp +$(OBJDIR)/juce_MidiOutput.o: ../../src/audio/devices/juce_MidiOutput.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiOutput.o: ../../src/juce_appframework/audio/devices/juce_MidiOutput.cpp +$(OBJDIR)/juce_Sampler.o: ../../src/audio/synthesisers/juce_Sampler.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioDeviceManager.o: ../../src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp +$(OBJDIR)/juce_Synthesiser.o: ../../src/audio/synthesisers/juce_Synthesiser.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Synthesiser.o: ../../src/juce_appframework/audio/synthesisers/juce_Synthesiser.cpp +$(OBJDIR)/juce_ActionBroadcaster.o: ../../src/events/juce_ActionBroadcaster.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Sampler.o: ../../src/juce_appframework/audio/synthesisers/juce_Sampler.cpp +$(OBJDIR)/juce_ActionListenerList.o: ../../src/events/juce_ActionListenerList.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileBasedDocument.o: ../../src/juce_appframework/documents/juce_FileBasedDocument.cpp +$(OBJDIR)/juce_AsyncUpdater.o: ../../src/events/juce_AsyncUpdater.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_RecentlyOpenedFilesList.o: ../../src/juce_appframework/documents/juce_RecentlyOpenedFilesList.cpp +$(OBJDIR)/juce_ChangeBroadcaster.o: ../../src/events/juce_ChangeBroadcaster.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_UndoManager.o: ../../src/juce_appframework/documents/juce_UndoManager.cpp +$(OBJDIR)/juce_ChangeListenerList.o: ../../src/events/juce_ChangeListenerList.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ActionBroadcaster.o: ../../src/juce_appframework/events/juce_ActionBroadcaster.cpp +$(OBJDIR)/juce_InterprocessConnection.o: ../../src/events/juce_InterprocessConnection.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ActionListenerList.o: ../../src/juce_appframework/events/juce_ActionListenerList.cpp +$(OBJDIR)/juce_InterprocessConnectionServer.o: ../../src/events/juce_InterprocessConnectionServer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AsyncUpdater.o: ../../src/juce_appframework/events/juce_AsyncUpdater.cpp +$(OBJDIR)/juce_Message.o: ../../src/events/juce_Message.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ChangeBroadcaster.o: ../../src/juce_appframework/events/juce_ChangeBroadcaster.cpp +$(OBJDIR)/juce_MessageListener.o: ../../src/events/juce_MessageListener.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ChangeListenerList.o: ../../src/juce_appframework/events/juce_ChangeListenerList.cpp +$(OBJDIR)/juce_MessageManager.o: ../../src/events/juce_MessageManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_InterprocessConnectionServer.o: ../../src/juce_appframework/events/juce_InterprocessConnectionServer.cpp +$(OBJDIR)/juce_MultiTimer.o: ../../src/events/juce_MultiTimer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Message.o: ../../src/juce_appframework/events/juce_Message.cpp +$(OBJDIR)/juce_Timer.o: ../../src/events/juce_Timer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MessageListener.o: ../../src/juce_appframework/events/juce_MessageListener.cpp +$(OBJDIR)/juce_UndoManager.o: ../../src/utilities/juce_UndoManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MultiTimer.o: ../../src/juce_appframework/events/juce_MultiTimer.cpp +$(OBJDIR)/juce_PropertiesFile.o: ../../src/utilities/juce_PropertiesFile.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_InterprocessConnection.o: ../../src/juce_appframework/events/juce_InterprocessConnection.cpp +$(OBJDIR)/juce_RecentlyOpenedFilesList.o: ../../src/utilities/juce_RecentlyOpenedFilesList.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Timer.o: ../../src/juce_appframework/events/juce_Timer.cpp +$(OBJDIR)/juce_FileBasedDocument.o: ../../src/utilities/juce_FileBasedDocument.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MessageManager.o: ../../src/juce_appframework/events/juce_MessageManager.cpp +$(OBJDIR)/juce_DeletedAtShutdown.o: ../../src/utilities/juce_DeletedAtShutdown.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Brush.o: ../../src/juce_appframework/gui/graphics/brushes/juce_Brush.cpp +$(OBJDIR)/juce_Brush.o: ../../src/gui/graphics/brushes/juce_Brush.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GradientBrush.o: ../../src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.cpp +$(OBJDIR)/juce_GradientBrush.o: ../../src/gui/graphics/brushes/juce_GradientBrush.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ImageBrush.o: ../../src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.cpp +$(OBJDIR)/juce_ImageBrush.o: ../../src/gui/graphics/brushes/juce_ImageBrush.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SolidColourBrush.o: ../../src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.cpp +$(OBJDIR)/juce_SolidColourBrush.o: ../../src/gui/graphics/brushes/juce_SolidColourBrush.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Colour.o: ../../src/juce_appframework/gui/graphics/colour/juce_Colour.cpp +$(OBJDIR)/juce_Colour.o: ../../src/gui/graphics/colour/juce_Colour.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ColourGradient.o: ../../src/juce_appframework/gui/graphics/colour/juce_ColourGradient.cpp +$(OBJDIR)/juce_ColourGradient.o: ../../src/gui/graphics/colour/juce_ColourGradient.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Colours.o: ../../src/juce_appframework/gui/graphics/colour/juce_Colours.cpp +$(OBJDIR)/juce_Colours.o: ../../src/gui/graphics/colour/juce_Colours.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Graphics.o: ../../src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp +$(OBJDIR)/juce_EdgeTable.o: ../../src/gui/graphics/contexts/juce_EdgeTable.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Justification.o: ../../src/juce_appframework/gui/graphics/contexts/juce_Justification.cpp +$(OBJDIR)/juce_Graphics.o: ../../src/gui/graphics/contexts/juce_Graphics.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_LowLevelGraphicsPostScriptRenderer.o: ../../src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp +$(OBJDIR)/juce_Justification.o: ../../src/gui/graphics/contexts/juce_Justification.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_LowLevelGraphicsSoftwareRenderer.o: ../../src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp +$(OBJDIR)/juce_LowLevelGraphicsPostScriptRenderer.o: ../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_RectanglePlacement.o: ../../src/juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.cpp +$(OBJDIR)/juce_LowLevelGraphicsSoftwareRenderer.o: ../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_EdgeTable.o: ../../src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.cpp +$(OBJDIR)/juce_RectanglePlacement.o: ../../src/gui/graphics/contexts/juce_RectanglePlacement.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Drawable.o: ../../src/juce_appframework/gui/graphics/drawables/juce_Drawable.cpp +$(OBJDIR)/juce_Drawable.o: ../../src/gui/graphics/drawables/juce_Drawable.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DrawableComposite.o: ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.cpp +$(OBJDIR)/juce_DrawableComposite.o: ../../src/gui/graphics/drawables/juce_DrawableComposite.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DrawableImage.o: ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.cpp +$(OBJDIR)/juce_DrawableImage.o: ../../src/gui/graphics/drawables/juce_DrawableImage.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DrawablePath.o: ../../src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.cpp +$(OBJDIR)/juce_DrawablePath.o: ../../src/gui/graphics/drawables/juce_DrawablePath.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DrawableText.o: ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableText.cpp +$(OBJDIR)/juce_DrawableText.o: ../../src/gui/graphics/drawables/juce_DrawableText.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SVGParser.o: ../../src/juce_appframework/gui/graphics/drawables/juce_SVGParser.cpp +$(OBJDIR)/juce_SVGParser.o: ../../src/gui/graphics/drawables/juce_SVGParser.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DropShadowEffect.o: ../../src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.cpp +$(OBJDIR)/juce_DropShadowEffect.o: ../../src/gui/graphics/effects/juce_DropShadowEffect.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GlowEffect.o: ../../src/juce_appframework/gui/graphics/effects/juce_GlowEffect.cpp +$(OBJDIR)/juce_GlowEffect.o: ../../src/gui/graphics/effects/juce_GlowEffect.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ReduceOpacityEffect.o: ../../src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.cpp +$(OBJDIR)/juce_ReduceOpacityEffect.o: ../../src/gui/graphics/effects/juce_ReduceOpacityEffect.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Font.o: ../../src/juce_appframework/gui/graphics/fonts/juce_Font.cpp +$(OBJDIR)/juce_Font.o: ../../src/gui/graphics/fonts/juce_Font.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GlyphArrangement.o: ../../src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp +$(OBJDIR)/juce_GlyphArrangement.o: ../../src/gui/graphics/fonts/juce_GlyphArrangement.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TextLayout.o: ../../src/juce_appframework/gui/graphics/fonts/juce_TextLayout.cpp +$(OBJDIR)/juce_TextLayout.o: ../../src/gui/graphics/fonts/juce_TextLayout.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Typeface.o: ../../src/juce_appframework/gui/graphics/fonts/juce_Typeface.cpp +$(OBJDIR)/juce_Typeface.o: ../../src/gui/graphics/fonts/juce_Typeface.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AffineTransform.o: ../../src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.cpp +$(OBJDIR)/juce_AffineTransform.o: ../../src/gui/graphics/geometry/juce_AffineTransform.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BorderSize.o: ../../src/juce_appframework/gui/graphics/geometry/juce_BorderSize.cpp +$(OBJDIR)/juce_BorderSize.o: ../../src/gui/graphics/geometry/juce_BorderSize.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Line.o: ../../src/juce_appframework/gui/graphics/geometry/juce_Line.cpp +$(OBJDIR)/juce_Line.o: ../../src/gui/graphics/geometry/juce_Line.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Path.o: ../../src/juce_appframework/gui/graphics/geometry/juce_Path.cpp +$(OBJDIR)/juce_Path.o: ../../src/gui/graphics/geometry/juce_Path.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PathIterator.o: ../../src/juce_appframework/gui/graphics/geometry/juce_PathIterator.cpp +$(OBJDIR)/juce_PathIterator.o: ../../src/gui/graphics/geometry/juce_PathIterator.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Point.o: ../../src/juce_appframework/gui/graphics/geometry/juce_Point.cpp +$(OBJDIR)/juce_PathStrokeType.o: ../../src/gui/graphics/geometry/juce_PathStrokeType.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Rectangle.o: ../../src/juce_appframework/gui/graphics/geometry/juce_Rectangle.cpp +$(OBJDIR)/juce_Point.o: ../../src/gui/graphics/geometry/juce_Point.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_RectangleList.o: ../../src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp +$(OBJDIR)/juce_PositionedRectangle.o: ../../src/gui/graphics/geometry/juce_PositionedRectangle.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PositionedRectangle.o: ../../src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp +$(OBJDIR)/juce_Rectangle.o: ../../src/gui/graphics/geometry/juce_Rectangle.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PathStrokeType.o: ../../src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.cpp +$(OBJDIR)/juce_RectangleList.o: ../../src/gui/graphics/geometry/juce_RectangleList.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Image.o: ../../src/juce_appframework/gui/graphics/imaging/juce_Image.cpp +$(OBJDIR)/juce_Image.o: ../../src/gui/graphics/imaging/juce_Image.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ImageCache.o: ../../src/juce_appframework/gui/graphics/imaging/juce_ImageCache.cpp +$(OBJDIR)/juce_ImageCache.o: ../../src/gui/graphics/imaging/juce_ImageCache.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ImageConvolutionKernel.o: ../../src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp +$(OBJDIR)/juce_ImageConvolutionKernel.o: ../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ImageFileFormat.o: ../../src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.cpp +$(OBJDIR)/juce_ImageFileFormat.o: ../../src/gui/graphics/imaging/juce_ImageFileFormat.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GIFLoader.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp +$(OBJDIR)/juce_GIFLoader.o: ../../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PNGLoader.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp +$(OBJDIR)/juce_JPEGLoader.o: ../../src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_JPEGLoader.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp +$(OBJDIR)/juce_PNGLoader.o: ../../src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Component.o: ../../src/juce_appframework/gui/components/juce_Component.cpp +$(OBJDIR)/juce_Component.o: ../../src/gui/components/juce_Component.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComponentListener.o: ../../src/juce_appframework/gui/components/juce_ComponentListener.cpp +$(OBJDIR)/juce_ComponentListener.o: ../../src/gui/components/juce_ComponentListener.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Desktop.o: ../../src/juce_appframework/gui/components/juce_Desktop.cpp +$(OBJDIR)/juce_Desktop.o: ../../src/gui/components/juce_Desktop.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ArrowButton.o: ../../src/juce_appframework/gui/components/buttons/juce_ArrowButton.cpp +$(OBJDIR)/juce_ArrowButton.o: ../../src/gui/components/buttons/juce_ArrowButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_HyperlinkButton.o: ../../src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.cpp +$(OBJDIR)/juce_Button.o: ../../src/gui/components/buttons/juce_Button.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ShapeButton.o: ../../src/juce_appframework/gui/components/buttons/juce_ShapeButton.cpp +$(OBJDIR)/juce_DrawableButton.o: ../../src/gui/components/buttons/juce_DrawableButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TextButton.o: ../../src/juce_appframework/gui/components/buttons/juce_TextButton.cpp +$(OBJDIR)/juce_HyperlinkButton.o: ../../src/gui/components/buttons/juce_HyperlinkButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ToggleButton.o: ../../src/juce_appframework/gui/components/buttons/juce_ToggleButton.cpp +$(OBJDIR)/juce_ImageButton.o: ../../src/gui/components/buttons/juce_ImageButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DrawableButton.o: ../../src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp +$(OBJDIR)/juce_ShapeButton.o: ../../src/gui/components/buttons/juce_ShapeButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ImageButton.o: ../../src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp +$(OBJDIR)/juce_TextButton.o: ../../src/gui/components/buttons/juce_TextButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ToolbarButton.o: ../../src/juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp +$(OBJDIR)/juce_ToggleButton.o: ../../src/gui/components/buttons/juce_ToggleButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Button.o: ../../src/juce_appframework/gui/components/buttons/juce_Button.cpp +$(OBJDIR)/juce_ToolbarButton.o: ../../src/gui/components/buttons/juce_ToolbarButton.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ProgressBar.o: ../../src/juce_appframework/gui/components/controls/juce_ProgressBar.cpp +$(OBJDIR)/juce_ComboBox.o: ../../src/gui/components/controls/juce_ComboBox.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TextEditor.o: ../../src/juce_appframework/gui/components/controls/juce_TextEditor.cpp +$(OBJDIR)/juce_Label.o: ../../src/gui/components/controls/juce_Label.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TableHeaderComponent.o: ../../src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp +$(OBJDIR)/juce_ListBox.o: ../../src/gui/components/controls/juce_ListBox.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Toolbar.o: ../../src/juce_appframework/gui/components/controls/juce_Toolbar.cpp +$(OBJDIR)/juce_ProgressBar.o: ../../src/gui/components/controls/juce_ProgressBar.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ToolbarItemComponent.o: ../../src/juce_appframework/gui/components/controls/juce_ToolbarItemComponent.cpp +$(OBJDIR)/juce_Slider.o: ../../src/gui/components/controls/juce_Slider.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ToolbarItemPalette.o: ../../src/juce_appframework/gui/components/controls/juce_ToolbarItemPalette.cpp +$(OBJDIR)/juce_TableHeaderComponent.o: ../../src/gui/components/controls/juce_TableHeaderComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TableListBox.o: ../../src/juce_appframework/gui/components/controls/juce_TableListBox.cpp +$(OBJDIR)/juce_TableListBox.o: ../../src/gui/components/controls/juce_TableListBox.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Label.o: ../../src/juce_appframework/gui/components/controls/juce_Label.cpp +$(OBJDIR)/juce_TextEditor.o: ../../src/gui/components/controls/juce_TextEditor.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Slider.o: ../../src/juce_appframework/gui/components/controls/juce_Slider.cpp +$(OBJDIR)/juce_Toolbar.o: ../../src/gui/components/controls/juce_Toolbar.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ListBox.o: ../../src/juce_appframework/gui/components/controls/juce_ListBox.cpp +$(OBJDIR)/juce_ToolbarItemComponent.o: ../../src/gui/components/controls/juce_ToolbarItemComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComboBox.o: ../../src/juce_appframework/gui/components/controls/juce_ComboBox.cpp +$(OBJDIR)/juce_ToolbarItemPalette.o: ../../src/gui/components/controls/juce_ToolbarItemPalette.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TreeView.o: ../../src/juce_appframework/gui/components/controls/juce_TreeView.cpp +$(OBJDIR)/juce_TreeView.o: ../../src/gui/components/controls/juce_TreeView.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DirectoryContentsDisplayComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp +$(OBJDIR)/juce_DirectoryContentsDisplayComponent.o: ../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DirectoryContentsList.o: ../../src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp +$(OBJDIR)/juce_DirectoryContentsList.o: ../../src/gui/components/filebrowser/juce_DirectoryContentsList.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileBrowserComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.cpp +$(OBJDIR)/juce_FileBrowserComponent.o: ../../src/gui/components/filebrowser/juce_FileBrowserComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileChooser.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.cpp +$(OBJDIR)/juce_FileChooser.o: ../../src/gui/components/filebrowser/juce_FileChooser.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileChooserDialogBox.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.cpp +$(OBJDIR)/juce_FileChooserDialogBox.o: ../../src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileFilter.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileFilter.cpp +$(OBJDIR)/juce_FileFilter.o: ../../src/gui/components/filebrowser/juce_FileFilter.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileListComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileListComponent.cpp +$(OBJDIR)/juce_FileListComponent.o: ../../src/gui/components/filebrowser/juce_FileListComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FilenameComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.cpp +$(OBJDIR)/juce_FilenameComponent.o: ../../src/gui/components/filebrowser/juce_FilenameComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileSearchPathListComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp +$(OBJDIR)/juce_FileSearchPathListComponent.o: ../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_FileTreeComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.cpp +$(OBJDIR)/juce_FileTreeComponent.o: ../../src/gui/components/filebrowser/juce_FileTreeComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ImagePreviewComponent.o: ../../src/juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.cpp +$(OBJDIR)/juce_ImagePreviewComponent.o: ../../src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_WildcardFileFilter.o: ../../src/juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.cpp +$(OBJDIR)/juce_WildcardFileFilter.o: ../../src/gui/components/filebrowser/juce_WildcardFileFilter.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_KeyboardFocusTraverser.o: ../../src/juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp +$(OBJDIR)/juce_KeyboardFocusTraverser.o: ../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_KeyListener.o: ../../src/juce_appframework/gui/components/keyboard/juce_KeyListener.cpp +$(OBJDIR)/juce_KeyListener.o: ../../src/gui/components/keyboard/juce_KeyListener.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_KeyPress.o: ../../src/juce_appframework/gui/components/keyboard/juce_KeyPress.cpp +$(OBJDIR)/juce_KeyMappingEditorComponent.o: ../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ModifierKeys.o: ../../src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.cpp +$(OBJDIR)/juce_KeyPress.o: ../../src/gui/components/keyboard/juce_KeyPress.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_KeyPressMappingSet.o: ../../src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp +$(OBJDIR)/juce_KeyPressMappingSet.o: ../../src/gui/components/keyboard/juce_KeyPressMappingSet.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_KeyMappingEditorComponent.o: ../../src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp +$(OBJDIR)/juce_ModifierKeys.o: ../../src/gui/components/keyboard/juce_ModifierKeys.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComponentAnimator.o: ../../src/juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp +$(OBJDIR)/juce_ComponentAnimator.o: ../../src/gui/components/layout/juce_ComponentAnimator.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComponentBoundsConstrainer.o: ../../src/juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.cpp +$(OBJDIR)/juce_ComponentBoundsConstrainer.o: ../../src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComponentMovementWatcher.o: ../../src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.cpp +$(OBJDIR)/juce_ComponentMovementWatcher.o: ../../src/gui/components/layout/juce_ComponentMovementWatcher.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_GroupComponent.o: ../../src/juce_appframework/gui/components/layout/juce_GroupComponent.cpp +$(OBJDIR)/juce_GroupComponent.o: ../../src/gui/components/layout/juce_GroupComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ResizableCornerComponent.o: ../../src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.cpp +$(OBJDIR)/juce_MultiDocumentPanel.o: ../../src/gui/components/layout/juce_MultiDocumentPanel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ScrollBar.o: ../../src/juce_appframework/gui/components/layout/juce_ScrollBar.cpp +$(OBJDIR)/juce_ResizableBorderComponent.o: ../../src/gui/components/layout/juce_ResizableBorderComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_StretchableLayoutManager.o: ../../src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.cpp +$(OBJDIR)/juce_ResizableCornerComponent.o: ../../src/gui/components/layout/juce_ResizableCornerComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_StretchableLayoutResizerBar.o: ../../src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.cpp +$(OBJDIR)/juce_ScrollBar.o: ../../src/gui/components/layout/juce_ScrollBar.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_StretchableObjectResizer.o: ../../src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.cpp +$(OBJDIR)/juce_StretchableLayoutManager.o: ../../src/gui/components/layout/juce_StretchableLayoutManager.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TabbedButtonBar.o: ../../src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp +$(OBJDIR)/juce_StretchableLayoutResizerBar.o: ../../src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TabbedComponent.o: ../../src/juce_appframework/gui/components/layout/juce_TabbedComponent.cpp +$(OBJDIR)/juce_StretchableObjectResizer.o: ../../src/gui/components/layout/juce_StretchableObjectResizer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MultiDocumentPanel.o: ../../src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp +$(OBJDIR)/juce_TabbedButtonBar.o: ../../src/gui/components/layout/juce_TabbedButtonBar.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_Viewport.o: ../../src/juce_appframework/gui/components/layout/juce_Viewport.cpp +$(OBJDIR)/juce_TabbedComponent.o: ../../src/gui/components/layout/juce_TabbedComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ResizableBorderComponent.o: ../../src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.cpp +$(OBJDIR)/juce_Viewport.o: ../../src/gui/components/layout/juce_Viewport.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_OldSchoolLookAndFeel.o: ../../src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp +$(OBJDIR)/juce_LookAndFeel.o: ../../src/gui/components/lookandfeel/juce_LookAndFeel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_LookAndFeel.o: ../../src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.cpp +$(OBJDIR)/juce_OldSchoolLookAndFeel.o: ../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MenuBarComponent.o: ../../src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp +$(OBJDIR)/juce_MenuBarComponent.o: ../../src/gui/components/menus/juce_MenuBarComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MenuBarModel.o: ../../src/juce_appframework/gui/components/menus/juce_MenuBarModel.cpp +$(OBJDIR)/juce_MenuBarModel.o: ../../src/gui/components/menus/juce_MenuBarModel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PopupMenu.o: ../../src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp +$(OBJDIR)/juce_PopupMenu.o: ../../src/gui/components/menus/juce_PopupMenu.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComponentDragger.o: ../../src/juce_appframework/gui/components/mouse/juce_ComponentDragger.cpp +$(OBJDIR)/juce_ComponentDragger.o: ../../src/gui/components/mouse/juce_ComponentDragger.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MouseCursor.o: ../../src/juce_appframework/gui/components/mouse/juce_MouseCursor.cpp +$(OBJDIR)/juce_DragAndDropContainer.o: ../../src/gui/components/mouse/juce_DragAndDropContainer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MouseEvent.o: ../../src/juce_appframework/gui/components/mouse/juce_MouseEvent.cpp +$(OBJDIR)/juce_MouseCursor.o: ../../src/gui/components/mouse/juce_MouseCursor.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MouseHoverDetector.o: ../../src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.cpp +$(OBJDIR)/juce_MouseEvent.o: ../../src/gui/components/mouse/juce_MouseEvent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MouseListener.o: ../../src/juce_appframework/gui/components/mouse/juce_MouseListener.cpp +$(OBJDIR)/juce_MouseHoverDetector.o: ../../src/gui/components/mouse/juce_MouseHoverDetector.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DragAndDropContainer.o: ../../src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.cpp +$(OBJDIR)/juce_MouseListener.o: ../../src/gui/components/mouse/juce_MouseListener.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BooleanPropertyComponent.o: ../../src/juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.cpp +$(OBJDIR)/juce_BooleanPropertyComponent.o: ../../src/gui/components/properties/juce_BooleanPropertyComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ButtonPropertyComponent.o: ../../src/juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.cpp +$(OBJDIR)/juce_ButtonPropertyComponent.o: ../../src/gui/components/properties/juce_ButtonPropertyComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ChoicePropertyComponent.o: ../../src/juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.cpp +$(OBJDIR)/juce_ChoicePropertyComponent.o: ../../src/gui/components/properties/juce_ChoicePropertyComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PropertyComponent.o: ../../src/juce_appframework/gui/components/properties/juce_PropertyComponent.cpp +$(OBJDIR)/juce_PropertyComponent.o: ../../src/gui/components/properties/juce_PropertyComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PropertyPanel.o: ../../src/juce_appframework/gui/components/properties/juce_PropertyPanel.cpp +$(OBJDIR)/juce_PropertyPanel.o: ../../src/gui/components/properties/juce_PropertyPanel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SliderPropertyComponent.o: ../../src/juce_appframework/gui/components/properties/juce_SliderPropertyComponent.cpp +$(OBJDIR)/juce_SliderPropertyComponent.o: ../../src/gui/components/properties/juce_SliderPropertyComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TextPropertyComponent.o: ../../src/juce_appframework/gui/components/properties/juce_TextPropertyComponent.cpp +$(OBJDIR)/juce_TextPropertyComponent.o: ../../src/gui/components/properties/juce_TextPropertyComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AudioDeviceSelectorComponent.o: ../../src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp +$(OBJDIR)/juce_AudioDeviceSelectorComponent.o: ../../src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BubbleComponent.o: ../../src/juce_appframework/gui/components/special/juce_BubbleComponent.cpp +$(OBJDIR)/juce_BubbleComponent.o: ../../src/gui/components/special/juce_BubbleComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_BubbleMessageComponent.o: ../../src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.cpp +$(OBJDIR)/juce_BubbleMessageComponent.o: ../../src/gui/components/special/juce_BubbleMessageComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ColourSelector.o: ../../src/juce_appframework/gui/components/special/juce_ColourSelector.cpp +$(OBJDIR)/juce_ColourSelector.o: ../../src/gui/components/special/juce_ColourSelector.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DropShadower.o: ../../src/juce_appframework/gui/components/special/juce_DropShadower.cpp +$(OBJDIR)/juce_DropShadower.o: ../../src/gui/components/special/juce_DropShadower.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MagnifierComponent.o: ../../src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp +$(OBJDIR)/juce_MagnifierComponent.o: ../../src/gui/components/special/juce_MagnifierComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_OpenGLComponent.o: ../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.cpp +$(OBJDIR)/juce_MidiKeyboardComponent.o: ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_PreferencesPanel.o: ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp +$(OBJDIR)/juce_OpenGLComponent.o: ../../src/gui/components/special/juce_OpenGLComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SystemTrayIconComponent.o: ../../src/juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp +$(OBJDIR)/juce_PreferencesPanel.o: ../../src/gui/components/special/juce_PreferencesPanel.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_MidiKeyboardComponent.o: ../../src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp +$(OBJDIR)/juce_SystemTrayIconComponent.o: ../../src/gui/components/special/juce_SystemTrayIconComponent.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TooltipWindow.o: ../../src/juce_appframework/gui/components/windows/juce_TooltipWindow.cpp +$(OBJDIR)/juce_AlertWindow.o: ../../src/gui/components/windows/juce_AlertWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DialogWindow.o: ../../src/juce_appframework/gui/components/windows/juce_DialogWindow.cpp +$(OBJDIR)/juce_ComponentPeer.o: ../../src/gui/components/windows/juce_ComponentPeer.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_DocumentWindow.o: ../../src/juce_appframework/gui/components/windows/juce_DocumentWindow.cpp +$(OBJDIR)/juce_DialogWindow.o: ../../src/gui/components/windows/juce_DialogWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ResizableWindow.o: ../../src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp +$(OBJDIR)/juce_DocumentWindow.o: ../../src/gui/components/windows/juce_DocumentWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_SplashScreen.o: ../../src/juce_appframework/gui/components/windows/juce_SplashScreen.cpp +$(OBJDIR)/juce_ResizableWindow.o: ../../src/gui/components/windows/juce_ResizableWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ThreadWithProgressWindow.o: ../../src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.cpp +$(OBJDIR)/juce_SplashScreen.o: ../../src/gui/components/windows/juce_SplashScreen.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_TopLevelWindow.o: ../../src/juce_appframework/gui/components/windows/juce_TopLevelWindow.cpp +$(OBJDIR)/juce_ThreadWithProgressWindow.o: ../../src/gui/components/windows/juce_ThreadWithProgressWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_ComponentPeer.o: ../../src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp +$(OBJDIR)/juce_TooltipWindow.o: ../../src/gui/components/windows/juce_TooltipWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_AlertWindow.o: ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp +$(OBJDIR)/juce_TopLevelWindow.o: ../../src/gui/components/windows/juce_TopLevelWindow.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_linux_Windowing.o: ../../src/native/linux/juce_linux_Windowing.cpp +$(OBJDIR)/juce_linux_Audio.o: ../../src/native/linux/juce_linux_Audio.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_linux_WebBrowserComponent.o: ../../src/native/linux/juce_linux_WebBrowserComponent.cpp +$(OBJDIR)/juce_linux_AudioCDReader.o: ../../src/native/linux/juce_linux_AudioCDReader.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_linux_Threads.o: ../../src/native/linux/juce_linux_Threads.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_SystemStats.o: ../../src/native/linux/juce_linux_SystemStats.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Network.o: ../../src/native/linux/juce_linux_Network.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Messaging.o: ../../src/native/linux/juce_linux_Messaging.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/juce_linux_Midi.o: ../../src/native/linux/juce_linux_Midi.cpp +$(OBJDIR)/juce_linux_FileChooser.o: ../../src/native/linux/juce_linux_FileChooser.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" @@ -1650,17 +1630,37 @@ $(OBJDIR)/juce_linux_Fonts.o: ../../src/native/linux/juce_linux_Fonts.cpp @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_linux_FileChooser.o: ../../src/native/linux/juce_linux_FileChooser.cpp +$(OBJDIR)/juce_linux_Messaging.o: ../../src/native/linux/juce_linux_Messaging.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_linux_AudioCDReader.o: ../../src/native/linux/juce_linux_AudioCDReader.cpp +$(OBJDIR)/juce_linux_Midi.o: ../../src/native/linux/juce_linux_Midi.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_linux_Audio.o: ../../src/native/linux/juce_linux_Audio.cpp +$(OBJDIR)/juce_linux_Network.o: ../../src/native/linux/juce_linux_Network.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_linux_SystemStats.o: ../../src/native/linux/juce_linux_SystemStats.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_linux_Threads.o: ../../src/native/linux/juce_linux_Threads.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_linux_WebBrowserComponent.o: ../../src/native/linux/juce_linux_WebBrowserComponent.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/juce_linux_Windowing.o: ../../src/native/linux/juce_linux_Windowing.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" diff --git a/build/linux/juce_premake.lua b/build/linux/juce_premake.lua index edd1be392d..28ba1a8465 100644 --- a/build/linux/juce_premake.lua +++ b/build/linux/juce_premake.lua @@ -35,94 +35,92 @@ package.linkflags = { "static-runtime" } package.files = { matchfiles ( "../../src/*.h", - "../../src/juce_core/basics/*.cpp", - "../../src/juce_core/basics/*.h", - "../../src/juce_core/cryptography/*.cpp", - "../../src/juce_core/cryptography/*.h", - "../../src/juce_core/containers/*.cpp", - "../../src/juce_core/containers/*.h", - "../../src/juce_core/io/*.cpp", - "../../src/juce_core/io/*.h", - "../../src/juce_core/io/files/*.cpp", - "../../src/juce_core/io/files/*.h", - "../../src/juce_core/io/network/*.cpp", - "../../src/juce_core/io/network/*.h", - "../../src/juce_core/io/streams/*.cpp", - "../../src/juce_core/io/streams/*.h", - "../../src/juce_core/misc/*.cpp", - "../../src/juce_core/misc/*.h", - "../../src/juce_core/text/*.cpp", - "../../src/juce_core/text/*.h", - "../../src/juce_core/threads/*.cpp", - "../../src/juce_core/threads/*.h", - "../../src/juce_appframework/application/*.cpp", - "../../src/juce_appframework/application/*.h", - "../../src/juce_appframework/audio/*.cpp", - "../../src/juce_appframework/audio/*.h", - "../../src/juce_appframework/audio/dsp/*.cpp", - "../../src/juce_appframework/audio/dsp/*.h", - "../../src/juce_appframework/audio/midi/*.cpp", - "../../src/juce_appframework/audio/midi/*.h", - "../../src/juce_appframework/audio/processors/*.cpp", - "../../src/juce_appframework/audio/processors/*.h", - "../../src/juce_appframework/audio/plugins/*.cpp", - "../../src/juce_appframework/audio/plugins/*.h", - "../../src/juce_appframework/audio/plugins/formats/*.cpp", - "../../src/juce_appframework/audio/plugins/formats/*.h", - "../../src/juce_appframework/audio/audio_file_formats/*.cpp", - "../../src/juce_appframework/audio/audio_file_formats/*.h", - "../../src/juce_appframework/audio/audio_sources/*.cpp", - "../../src/juce_appframework/audio/audio_sources/*.h", - "../../src/juce_appframework/audio/devices/*.cpp", - "../../src/juce_appframework/audio/devices/*.h", - "../../src/juce_appframework/audio/synthesisers/*.cpp", - "../../src/juce_appframework/audio/synthesisers/*.h", - "../../src/juce_appframework/documents/*.cpp", - "../../src/juce_appframework/documents/*.h", - "../../src/juce_appframework/events/*.cpp", - "../../src/juce_appframework/events/*.h", - "../../src/juce_appframework/gui/graphics/brushes/*.cpp", - "../../src/juce_appframework/gui/graphics/brushes/*.h", - "../../src/juce_appframework/gui/graphics/colour/*.cpp", - "../../src/juce_appframework/gui/graphics/colour/*.h", - "../../src/juce_appframework/gui/graphics/contexts/*.cpp", - "../../src/juce_appframework/gui/graphics/contexts/*.h", - "../../src/juce_appframework/gui/graphics/drawables/*.cpp", - "../../src/juce_appframework/gui/graphics/drawables/*.h", - "../../src/juce_appframework/gui/graphics/effects/*.cpp", - "../../src/juce_appframework/gui/graphics/effects/*.h", - "../../src/juce_appframework/gui/graphics/fonts/*.cpp", - "../../src/juce_appframework/gui/graphics/fonts/*.h", - "../../src/juce_appframework/gui/graphics/geometry/*.cpp", - "../../src/juce_appframework/gui/graphics/geometry/*.h", - "../../src/juce_appframework/gui/graphics/imaging/*.cpp", - "../../src/juce_appframework/gui/graphics/imaging/*.h", - "../../src/juce_appframework/gui/graphics/imaging/image_file_formats/*.cpp", - "../../src/juce_appframework/gui/graphics/imaging/image_file_formats/*.h", - "../../src/juce_appframework/gui/components/*.cpp", - "../../src/juce_appframework/gui/components/*.h", - "../../src/juce_appframework/gui/components/buttons/*.cpp", - "../../src/juce_appframework/gui/components/buttons/*.h", - "../../src/juce_appframework/gui/components/controls/*.cpp", - "../../src/juce_appframework/gui/components/controls/*.h", - "../../src/juce_appframework/gui/components/filebrowser/*.cpp", - "../../src/juce_appframework/gui/components/filebrowser/*.h", - "../../src/juce_appframework/gui/components/keyboard/*.cpp", - "../../src/juce_appframework/gui/components/keyboard/*.h", - "../../src/juce_appframework/gui/components/layout/*.cpp", - "../../src/juce_appframework/gui/components/layout/*.h", - "../../src/juce_appframework/gui/components/lookandfeel/*.cpp", - "../../src/juce_appframework/gui/components/lookandfeel/*.h", - "../../src/juce_appframework/gui/components/menus/*.cpp", - "../../src/juce_appframework/gui/components/menus/*.h", - "../../src/juce_appframework/gui/components/mouse/*.cpp", - "../../src/juce_appframework/gui/components/mouse/*.h", - "../../src/juce_appframework/gui/components/properties/*.cpp", - "../../src/juce_appframework/gui/components/properties/*.h", - "../../src/juce_appframework/gui/components/special/*.cpp", - "../../src/juce_appframework/gui/components/special/*.h", - "../../src/juce_appframework/gui/components/windows/*.cpp", - "../../src/juce_appframework/gui/components/windows/*.h", + "../../src/core/*.cpp", + "../../src/core/*.h", + "../../src/cryptography/*.cpp", + "../../src/cryptography/*.h", + "../../src/containers/*.cpp", + "../../src/containers/*.h", + "../../src/io/*.cpp", + "../../src/io/*.h", + "../../src/io/files/*.cpp", + "../../src/io/files/*.h", + "../../src/io/network/*.cpp", + "../../src/io/network/*.h", + "../../src/io/streams/*.cpp", + "../../src/io/streams/*.h", + "../../src/text/*.cpp", + "../../src/text/*.h", + "../../src/threads/*.cpp", + "../../src/threads/*.h", + "../../src/application/*.cpp", + "../../src/application/*.h", + "../../src/audio/*.cpp", + "../../src/audio/*.h", + "../../src/audio/dsp/*.cpp", + "../../src/audio/dsp/*.h", + "../../src/audio/midi/*.cpp", + "../../src/audio/midi/*.h", + "../../src/audio/processors/*.cpp", + "../../src/audio/processors/*.h", + "../../src/audio/plugins/*.cpp", + "../../src/audio/plugins/*.h", + "../../src/audio/plugins/formats/*.cpp", + "../../src/audio/plugins/formats/*.h", + "../../src/audio/audio_file_formats/*.cpp", + "../../src/audio/audio_file_formats/*.h", + "../../src/audio/audio_sources/*.cpp", + "../../src/audio/audio_sources/*.h", + "../../src/audio/devices/*.cpp", + "../../src/audio/devices/*.h", + "../../src/audio/synthesisers/*.cpp", + "../../src/audio/synthesisers/*.h", + "../../src/events/*.cpp", + "../../src/events/*.h", + "../../src/utilities/*.cpp", + "../../src/utilities/*.h", + "../../src/gui/graphics/brushes/*.cpp", + "../../src/gui/graphics/brushes/*.h", + "../../src/gui/graphics/colour/*.cpp", + "../../src/gui/graphics/colour/*.h", + "../../src/gui/graphics/contexts/*.cpp", + "../../src/gui/graphics/contexts/*.h", + "../../src/gui/graphics/drawables/*.cpp", + "../../src/gui/graphics/drawables/*.h", + "../../src/gui/graphics/effects/*.cpp", + "../../src/gui/graphics/effects/*.h", + "../../src/gui/graphics/fonts/*.cpp", + "../../src/gui/graphics/fonts/*.h", + "../../src/gui/graphics/geometry/*.cpp", + "../../src/gui/graphics/geometry/*.h", + "../../src/gui/graphics/imaging/*.cpp", + "../../src/gui/graphics/imaging/*.h", + "../../src/gui/graphics/imaging/image_file_formats/*.cpp", + "../../src/gui/graphics/imaging/image_file_formats/*.h", + "../../src/gui/components/*.cpp", + "../../src/gui/components/*.h", + "../../src/gui/components/buttons/*.cpp", + "../../src/gui/components/buttons/*.h", + "../../src/gui/components/controls/*.cpp", + "../../src/gui/components/controls/*.h", + "../../src/gui/components/filebrowser/*.cpp", + "../../src/gui/components/filebrowser/*.h", + "../../src/gui/components/keyboard/*.cpp", + "../../src/gui/components/keyboard/*.h", + "../../src/gui/components/layout/*.cpp", + "../../src/gui/components/layout/*.h", + "../../src/gui/components/lookandfeel/*.cpp", + "../../src/gui/components/lookandfeel/*.h", + "../../src/gui/components/menus/*.cpp", + "../../src/gui/components/menus/*.h", + "../../src/gui/components/mouse/*.cpp", + "../../src/gui/components/mouse/*.h", + "../../src/gui/components/properties/*.cpp", + "../../src/gui/components/properties/*.h", + "../../src/gui/components/special/*.cpp", + "../../src/gui/components/special/*.h", + "../../src/gui/components/windows/*.cpp", + "../../src/gui/components/windows/*.h", "../../src/native/linux/*.h", "../../src/native/linux/*.cpp", "../../src/native/juce_linux_NativeCode.cpp" diff --git a/build/macosx/Juce.xcodeproj/project.pbxproj b/build/macosx/Juce.xcodeproj/project.pbxproj index e04dc92fc9..c762291eb8 100644 --- a/build/macosx/Juce.xcodeproj/project.pbxproj +++ b/build/macosx/Juce.xcodeproj/project.pbxproj @@ -7,114 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 84052DE408D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */; }; - 84052DE508D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */; }; - 8406AA5A0C4BDF90003A0D6A /* juce_MidiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */; }; - 8406C44609642CE100C99145 /* juce_LowLevelGraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 8406C44309642CE100C99145 /* juce_LowLevelGraphicsContext.h */; }; - 8406C44709642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8406C44409642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */; settings = {COMPILER_FLAGS = "-O3"; }; }; - 8406C44809642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8406C44509642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.h */; }; - 8407908F09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8407908D09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.cpp */; }; - 8407909009E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8407908E09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.h */; }; - 84099C9F0AE52BD000B2A05D /* juce_Sampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84099C9B0AE52BD000B2A05D /* juce_Sampler.cpp */; }; - 84099CA00AE52BD000B2A05D /* juce_Sampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 84099C9C0AE52BD000B2A05D /* juce_Sampler.h */; }; - 84099CA10AE52BD000B2A05D /* juce_Synthesiser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84099C9D0AE52BD000B2A05D /* juce_Synthesiser.cpp */; }; - 84099CA20AE52BD000B2A05D /* juce_Synthesiser.h in Headers */ = {isa = PBXBuildFile; fileRef = 84099C9E0AE52BD000B2A05D /* juce_Synthesiser.h */; }; 840F80BC092B399D005E7B4E /* juce.h in Headers */ = {isa = PBXBuildFile; fileRef = 840F80BB092B399D005E7B4E /* juce.h */; }; - 8417EE530A6E7A280058E04E /* juce_TableHeaderComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8417EE4F0A6E7A270058E04E /* juce_TableHeaderComponent.cpp */; }; - 8417EE540A6E7A280058E04E /* juce_TableHeaderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8417EE500A6E7A270058E04E /* juce_TableHeaderComponent.h */; }; - 8417EE550A6E7A280058E04E /* juce_TableListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8417EE510A6E7A280058E04E /* juce_TableListBox.cpp */; }; - 8417EE560A6E7A280058E04E /* juce_TableListBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 8417EE520A6E7A280058E04E /* juce_TableListBox.h */; }; - 8417EE590A6E7A370058E04E /* juce_StretchableObjectResizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8417EE570A6E7A370058E04E /* juce_StretchableObjectResizer.cpp */; }; - 8417EE5A0A6E7A370058E04E /* juce_StretchableObjectResizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8417EE580A6E7A370058E04E /* juce_StretchableObjectResizer.h */; }; - 84198B10096D8E2B0022A439 /* juce_AudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84198B0A096D8E2B0022A439 /* juce_AudioDeviceManager.cpp */; }; - 84198B11096D8E2B0022A439 /* juce_AudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0B096D8E2B0022A439 /* juce_AudioDeviceManager.h */; }; - 84198B12096D8E2B0022A439 /* juce_AudioIODevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0C096D8E2B0022A439 /* juce_AudioIODevice.h */; }; - 84198B13096D8E2B0022A439 /* juce_MidiInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0D096D8E2B0022A439 /* juce_MidiInput.h */; }; - 84198B14096D8E2B0022A439 /* juce_MidiOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */; }; - 84198BB5096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */; }; - 84198BB6096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */; }; - 841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */; }; - 841B22E30D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */; }; - 841B22E40D2E7FE3009D01AA /* juce_DirectXPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */; }; - 841B22E50D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */; }; - 841B22E70D2E7FE3009D01AA /* juce_VSTPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */; }; - 841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */; }; - 841B22E90D2E7FE3009D01AA /* juce_AudioPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */; }; - 841B22EA0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D60D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp */; }; - 841B22EB0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D70D2E7FE3009D01AA /* juce_AudioPluginFormatManager.h */; }; - 841B22EC0D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D80D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp */; }; - 841B22ED0D2E7FE3009D01AA /* juce_AudioPluginInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D90D2E7FE3009D01AA /* juce_AudioPluginInstance.h */; }; - 841B22EE0D2E7FE3009D01AA /* juce_KnownPluginList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22DA0D2E7FE3009D01AA /* juce_KnownPluginList.cpp */; }; - 841B22EF0D2E7FE3009D01AA /* juce_KnownPluginList.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22DB0D2E7FE3009D01AA /* juce_KnownPluginList.h */; }; - 841B22F00D2E7FE3009D01AA /* juce_PluginDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22DC0D2E7FE3009D01AA /* juce_PluginDescription.cpp */; }; - 841B22F10D2E7FE3009D01AA /* juce_PluginDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22DD0D2E7FE3009D01AA /* juce_PluginDescription.h */; }; - 841B22F20D2E7FE3009D01AA /* juce_PluginDirectoryScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22DE0D2E7FE3009D01AA /* juce_PluginDirectoryScanner.cpp */; }; - 841B22F30D2E7FE3009D01AA /* juce_PluginDirectoryScanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22DF0D2E7FE3009D01AA /* juce_PluginDirectoryScanner.h */; }; - 841B22F40D2E7FE3009D01AA /* juce_PluginListComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22E00D2E7FE3009D01AA /* juce_PluginListComponent.cpp */; }; - 841B22F50D2E7FE3009D01AA /* juce_PluginListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22E10D2E7FE3009D01AA /* juce_PluginListComponent.h */; }; - 841E06350AF8CE74005E6FCC /* juce_AudioDataConverters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E062F0AF8CE74005E6FCC /* juce_AudioDataConverters.cpp */; }; - 841E06360AF8CE75005E6FCC /* juce_AudioDataConverters.h in Headers */ = {isa = PBXBuildFile; fileRef = 841E06300AF8CE74005E6FCC /* juce_AudioDataConverters.h */; }; - 841E06370AF8CE75005E6FCC /* juce_AudioSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E06310AF8CE74005E6FCC /* juce_AudioSampleBuffer.cpp */; }; - 841E06380AF8CE75005E6FCC /* juce_AudioSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 841E06320AF8CE74005E6FCC /* juce_AudioSampleBuffer.h */; }; - 841E06390AF8CE75005E6FCC /* juce_IIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E06330AF8CE74005E6FCC /* juce_IIRFilter.cpp */; }; - 841E063A0AF8CE75005E6FCC /* juce_IIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 841E06340AF8CE74005E6FCC /* juce_IIRFilter.h */; }; - 842B63BA09D8508F00255DC7 /* juce_FlacAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842B63B609D8508F00255DC7 /* juce_FlacAudioFormat.cpp */; }; - 842B63BB09D8508F00255DC7 /* juce_FlacAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 842B63B709D8508F00255DC7 /* juce_FlacAudioFormat.h */; }; - 842B63BC09D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842B63B809D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp */; }; - 842B63BD09D8508F00255DC7 /* juce_OggVorbisAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 842B63B909D8508F00255DC7 /* juce_OggVorbisAudioFormat.h */; }; - 842D3D0E0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842D3D0D0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp */; }; - 842F9D630A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9D570A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp */; }; - 842F9D640A19C9AF00B1358D /* juce_ButtonPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D580A19C9AF00B1358D /* juce_ButtonPropertyComponent.h */; }; - 842F9D650A19C9AF00B1358D /* juce_ChoicePropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9D590A19C9AF00B1358D /* juce_ChoicePropertyComponent.cpp */; }; - 842F9D660A19C9AF00B1358D /* juce_ChoicePropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D5A0A19C9AF00B1358D /* juce_ChoicePropertyComponent.h */; }; - 842F9D670A19C9AF00B1358D /* juce_PropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9D5B0A19C9AF00B1358D /* juce_PropertyComponent.cpp */; }; - 842F9D680A19C9AF00B1358D /* juce_PropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D5C0A19C9AF00B1358D /* juce_PropertyComponent.h */; }; - 842F9D690A19C9AF00B1358D /* juce_PropertyPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9D5D0A19C9AF00B1358D /* juce_PropertyPanel.cpp */; }; - 842F9D6A0A19C9AF00B1358D /* juce_PropertyPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D5E0A19C9AF00B1358D /* juce_PropertyPanel.h */; }; - 842F9D6B0A19C9AF00B1358D /* juce_SliderPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9D5F0A19C9AF00B1358D /* juce_SliderPropertyComponent.cpp */; }; - 842F9D6C0A19C9AF00B1358D /* juce_SliderPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D600A19C9AF00B1358D /* juce_SliderPropertyComponent.h */; }; - 842F9D6D0A19C9AF00B1358D /* juce_TextPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9D610A19C9AF00B1358D /* juce_TextPropertyComponent.cpp */; }; - 842F9D6E0A19C9AF00B1358D /* juce_TextPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */; }; - 842F9DE20A19D2AF00B1358D /* juce_PositionedRectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */; }; - 842F9DE30A19D2AF00B1358D /* juce_PositionedRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */; }; - 8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */; }; - 8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */; }; - 8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */; }; - 8457783E0E8947C8006D9E4E /* juce_NSViewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */; }; - 84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */; }; - 84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */; }; - 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */; }; - 846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */; }; - 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */; }; - 846034E109CB374E00E255CF /* juce_InterprocessConnectionServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */; }; - 8463D5C1098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */; }; - 8463D5C2098BD2DD00F9AEC2 /* juce_MidiBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */; }; - 8463D5C3098BD2DD00F9AEC2 /* juce_MidiFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */; }; - 8463D5C4098BD2DD00F9AEC2 /* juce_MidiFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5B8098BD2DD00F9AEC2 /* juce_MidiFile.h */; }; - 8463D5C5098BD2DD00F9AEC2 /* juce_MidiKeyboardState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B9098BD2DD00F9AEC2 /* juce_MidiKeyboardState.cpp */; }; - 8463D5C6098BD2DD00F9AEC2 /* juce_MidiKeyboardState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5BA098BD2DD00F9AEC2 /* juce_MidiKeyboardState.h */; }; - 8463D5C7098BD2DD00F9AEC2 /* juce_MidiMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5BB098BD2DD00F9AEC2 /* juce_MidiMessage.cpp */; }; - 8463D5C8098BD2DD00F9AEC2 /* juce_MidiMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5BC098BD2DD00F9AEC2 /* juce_MidiMessage.h */; }; - 8463D5C9098BD2DD00F9AEC2 /* juce_MidiMessageCollector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5BD098BD2DD00F9AEC2 /* juce_MidiMessageCollector.cpp */; }; - 8463D5CA098BD2DD00F9AEC2 /* juce_MidiMessageCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5BE098BD2DD00F9AEC2 /* juce_MidiMessageCollector.h */; }; - 8463D5CB098BD2DD00F9AEC2 /* juce_MidiMessageSequence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5BF098BD2DD00F9AEC2 /* juce_MidiMessageSequence.cpp */; }; - 8463D5CC098BD2DD00F9AEC2 /* juce_MidiMessageSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5C0098BD2DD00F9AEC2 /* juce_MidiMessageSequence.h */; }; - 8463D5D0098BD30600F9AEC2 /* juce_TopLevelWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5CE098BD30600F9AEC2 /* juce_TopLevelWindow.cpp */; }; - 8463D5D1098BD30600F9AEC2 /* juce_TopLevelWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5CF098BD30600F9AEC2 /* juce_TopLevelWindow.h */; }; - 84688AFB0DED58820077FDEA /* juce_AudioProcessorGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84688AF70DED58820077FDEA /* juce_AudioProcessorGraph.cpp */; }; - 84688AFC0DED58820077FDEA /* juce_AudioProcessorGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 84688AF80DED58820077FDEA /* juce_AudioProcessorGraph.h */; }; - 84688AFD0DED58820077FDEA /* juce_AudioProcessorPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84688AF90DED58820077FDEA /* juce_AudioProcessorPlayer.cpp */; }; - 84688AFE0DED58820077FDEA /* juce_AudioProcessorPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84688AFA0DED58820077FDEA /* juce_AudioProcessorPlayer.h */; }; - 846927DA0A49ABD300314975 /* juce_CharacterFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846927D80A49ABD300314975 /* juce_CharacterFunctions.cpp */; }; - 846927DB0A49ABD300314975 /* juce_CharacterFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 846927D90A49ABD300314975 /* juce_CharacterFunctions.h */; }; - 846927DE0A49ABE600314975 /* juce_RectanglePlacement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846927DC0A49ABE600314975 /* juce_RectanglePlacement.cpp */; }; - 846927DF0A49ABE600314975 /* juce_RectanglePlacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */; }; - 846927E10A49ABFD00314975 /* juce_SVGParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */; }; - 847824810D7816A00082A5C5 /* juce_AudioCDBurner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */; }; - 847F72DB0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */; }; - 847F72DC0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */; }; - 847F72DD0C2702A000CBECEC /* juce_FileTreeComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */; }; - 847F72DE0C2702A000CBECEC /* juce_FileTreeComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */; }; 8484E9A5103C958A008B7C6C /* juce_mac_NativeCode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8484E9A4103C958A008B7C6C /* juce_mac_NativeCode.mm */; }; 8484E9BE103C9595008B7C6C /* juce_mac_AppleRemote.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8484E9A6103C9595008B7C6C /* juce_mac_AppleRemote.mm */; }; 8484E9BF103C9595008B7C6C /* juce_mac_AudioCDBurner.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8484E9A7103C9595008B7C6C /* juce_mac_AudioCDBurner.mm */; }; @@ -142,572 +35,575 @@ 8484E9D5103C9595008B7C6C /* juce_mac_WebBrowserComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8484E9BD103C9595008B7C6C /* juce_mac_WebBrowserComponent.mm */; }; 8484E9D8103C95A6008B7C6C /* juce_posix_SharedCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8484E9D6103C95A6008B7C6C /* juce_posix_SharedCode.h */; }; 8484E9D9103C95A6008B7C6C /* juce_posix_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8484E9D7103C95A6008B7C6C /* juce_posix_NamedPipe.cpp */; }; - 848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */; }; - 8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */; }; - 8495BB8D0D8067B2001D9C0B /* juce_AudioThumbnail.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */; }; - 8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8495BB8A0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp */; }; - 8495BB8F0D8067B2001D9C0B /* juce_AudioThumbnailCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB8B0D8067B2001D9C0B /* juce_AudioThumbnailCache.h */; }; - 8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8495BB910D806BDA001D9C0B /* juce_FileInputSource.cpp */; }; - 8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB920D806BDA001D9C0B /* juce_FileInputSource.h */; }; - 8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB930D806BDA001D9C0B /* juce_InputSource.h */; }; - 849C0A9E0F98AF62001C1494 /* juce_Variant.h in Headers */ = {isa = PBXBuildFile; fileRef = 849C0A9C0F98AF62001C1494 /* juce_Variant.h */; }; - 849C0A9F0F98AF62001C1494 /* juce_Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849C0A9D0F98AF62001C1494 /* juce_Variant.cpp */; }; - 84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */; }; - 84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */; }; - 84A06BAF09CAD6A3006A43BD /* juce_AudioIODeviceType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */; }; - 84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883508A22E4900752A2B /* juce_Application.cpp */; }; - 84A48A2908A22E4B00752A2B /* juce_Application.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883608A22E4900752A2B /* juce_Application.h */; }; - 84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */; }; - 84A48A2B08A22E4B00752A2B /* juce_DeletedAtShutdown.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883808A22E4900752A2B /* juce_DeletedAtShutdown.h */; }; - 84A48A2D08A22E4B00752A2B /* juce_SystemClipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883A08A22E4900752A2B /* juce_SystemClipboard.h */; }; - 84A48A2E08A22E4B00752A2B /* juce_AiffAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883D08A22E4900752A2B /* juce_AiffAudioFormat.cpp */; }; - 84A48A2F08A22E4B00752A2B /* juce_AiffAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883E08A22E4900752A2B /* juce_AiffAudioFormat.h */; }; - 84A48A3008A22E4B00752A2B /* juce_AudioCDReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883F08A22E4900752A2B /* juce_AudioCDReader.cpp */; }; - 84A48A3108A22E4B00752A2B /* juce_AudioCDReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884008A22E4900752A2B /* juce_AudioCDReader.h */; }; - 84A48A3208A22E4B00752A2B /* juce_AudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4884108A22E4900752A2B /* juce_AudioFormat.cpp */; }; - 84A48A3308A22E4B00752A2B /* juce_AudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884208A22E4900752A2B /* juce_AudioFormat.h */; }; - 84A48A3408A22E4B00752A2B /* juce_AudioFormatReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884308A22E4900752A2B /* juce_AudioFormatReader.h */; }; - 84A48A3508A22E4B00752A2B /* juce_AudioFormatWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884408A22E4900752A2B /* juce_AudioFormatWriter.h */; }; - 84A48A3608A22E4B00752A2B /* juce_AudioSubsectionReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4884508A22E4900752A2B /* juce_AudioSubsectionReader.cpp */; }; - 84A48A3708A22E4B00752A2B /* juce_AudioSubsectionReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884608A22E4900752A2B /* juce_AudioSubsectionReader.h */; }; - 84A48A3808A22E4B00752A2B /* juce_WavAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4884708A22E4900752A2B /* juce_WavAudioFormat.cpp */; }; - 84A48A3908A22E4B00752A2B /* juce_WavAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884808A22E4900752A2B /* juce_WavAudioFormat.h */; }; - 84A48A3A08A22E4B00752A2B /* juce_AudioFormatReaderSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4884A08A22E4900752A2B /* juce_AudioFormatReaderSource.cpp */; }; - 84A48A3B08A22E4B00752A2B /* juce_AudioFormatReaderSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884B08A22E4900752A2B /* juce_AudioFormatReaderSource.h */; }; - 84A48A3C08A22E4B00752A2B /* juce_AudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884C08A22E4900752A2B /* juce_AudioSource.h */; }; - 84A48A3D08A22E4B00752A2B /* juce_AudioSourcePlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4884D08A22E4900752A2B /* juce_AudioSourcePlayer.cpp */; }; - 84A48A3E08A22E4B00752A2B /* juce_AudioSourcePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4884E08A22E4900752A2B /* juce_AudioSourcePlayer.h */; }; - 84A48A3F08A22E4B00752A2B /* juce_AudioTransportSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4884F08A22E4900752A2B /* juce_AudioTransportSource.cpp */; }; - 84A48A4008A22E4B00752A2B /* juce_AudioTransportSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4885008A22E4900752A2B /* juce_AudioTransportSource.h */; }; - 84A48A4108A22E4B00752A2B /* juce_BufferingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4885108A22E4900752A2B /* juce_BufferingAudioSource.cpp */; }; - 84A48A4208A22E4B00752A2B /* juce_BufferingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4885208A22E4900752A2B /* juce_BufferingAudioSource.h */; }; - 84A48A4308A22E4B00752A2B /* juce_MixerAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4885308A22E4900752A2B /* juce_MixerAudioSource.cpp */; }; - 84A48A4408A22E4B00752A2B /* juce_MixerAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4885408A22E4900752A2B /* juce_MixerAudioSource.h */; }; - 84A48A4508A22E4B00752A2B /* juce_PositionableAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4885508A22E4900752A2B /* juce_PositionableAudioSource.h */; }; - 84A48A4608A22E4B00752A2B /* juce_ResamplingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4885608A22E4900752A2B /* juce_ResamplingAudioSource.cpp */; }; - 84A48A4708A22E4B00752A2B /* juce_ResamplingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4885708A22E4900752A2B /* juce_ResamplingAudioSource.h */; }; - 84A48A5408A22E4B00752A2B /* juce_ActionBroadcaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4886508A22E4900752A2B /* juce_ActionBroadcaster.cpp */; }; - 84A48A5508A22E4B00752A2B /* juce_ActionBroadcaster.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4886608A22E4900752A2B /* juce_ActionBroadcaster.h */; }; - 84A48A5608A22E4B00752A2B /* juce_ActionListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4886708A22E4900752A2B /* juce_ActionListener.h */; }; - 84A48A5708A22E4B00752A2B /* juce_ActionListenerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4886808A22E4900752A2B /* juce_ActionListenerList.cpp */; }; - 84A48A5808A22E4B00752A2B /* juce_ActionListenerList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4886908A22E4900752A2B /* juce_ActionListenerList.h */; }; - 84A48A5908A22E4B00752A2B /* juce_AsyncUpdater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4886A08A22E4900752A2B /* juce_AsyncUpdater.cpp */; }; - 84A48A5A08A22E4B00752A2B /* juce_AsyncUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4886B08A22E4900752A2B /* juce_AsyncUpdater.h */; }; - 84A48A5B08A22E4B00752A2B /* juce_ChangeBroadcaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4886C08A22E4900752A2B /* juce_ChangeBroadcaster.cpp */; }; - 84A48A5C08A22E4B00752A2B /* juce_ChangeBroadcaster.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4886D08A22E4900752A2B /* juce_ChangeBroadcaster.h */; }; - 84A48A5D08A22E4B00752A2B /* juce_ChangeListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4886E08A22E4900752A2B /* juce_ChangeListener.h */; }; - 84A48A5E08A22E4B00752A2B /* juce_ChangeListenerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4886F08A22E4900752A2B /* juce_ChangeListenerList.cpp */; }; - 84A48A5F08A22E4B00752A2B /* juce_ChangeListenerList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887008A22E4900752A2B /* juce_ChangeListenerList.h */; }; - 84A48A6008A22E4B00752A2B /* juce_Message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4887108A22E4900752A2B /* juce_Message.cpp */; }; - 84A48A6108A22E4B00752A2B /* juce_Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887208A22E4900752A2B /* juce_Message.h */; }; - 84A48A6208A22E4B00752A2B /* juce_MessageListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4887308A22E4900752A2B /* juce_MessageListener.cpp */; }; - 84A48A6308A22E4B00752A2B /* juce_MessageListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887408A22E4900752A2B /* juce_MessageListener.h */; }; - 84A48A6408A22E4B00752A2B /* juce_MessageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4887508A22E4900752A2B /* juce_MessageManager.cpp */; }; - 84A48A6508A22E4B00752A2B /* juce_MessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887608A22E4900752A2B /* juce_MessageManager.h */; }; - 84A48A6608A22E4B00752A2B /* juce_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4887708A22E4900752A2B /* juce_Timer.cpp */; }; - 84A48A6708A22E4B00752A2B /* juce_Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887808A22E4900752A2B /* juce_Timer.h */; }; - 84A48A6808A22E4B00752A2B /* juce_ArrowButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4887C08A22E4900752A2B /* juce_ArrowButton.cpp */; }; - 84A48A6908A22E4B00752A2B /* juce_ArrowButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887D08A22E4900752A2B /* juce_ArrowButton.h */; }; - 84A48A6A08A22E4B00752A2B /* juce_Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4887E08A22E4900752A2B /* juce_Button.cpp */; }; - 84A48A6B08A22E4B00752A2B /* juce_Button.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4887F08A22E4900752A2B /* juce_Button.h */; }; - 84A48A6C08A22E4B00752A2B /* juce_DrawableButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888008A22E4900752A2B /* juce_DrawableButton.cpp */; }; - 84A48A6D08A22E4B00752A2B /* juce_DrawableButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888108A22E4900752A2B /* juce_DrawableButton.h */; }; - 84A48A6E08A22E4B00752A2B /* juce_HyperlinkButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888208A22E4900752A2B /* juce_HyperlinkButton.cpp */; }; - 84A48A6F08A22E4B00752A2B /* juce_HyperlinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888308A22E4900752A2B /* juce_HyperlinkButton.h */; }; - 84A48A7008A22E4B00752A2B /* juce_ImageButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888408A22E4900752A2B /* juce_ImageButton.cpp */; }; - 84A48A7108A22E4B00752A2B /* juce_ImageButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888508A22E4900752A2B /* juce_ImageButton.h */; }; - 84A48A7208A22E4B00752A2B /* juce_ShapeButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888608A22E4900752A2B /* juce_ShapeButton.cpp */; }; - 84A48A7308A22E4B00752A2B /* juce_ShapeButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888708A22E4900752A2B /* juce_ShapeButton.h */; }; - 84A48A7408A22E4B00752A2B /* juce_TextButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888808A22E4900752A2B /* juce_TextButton.cpp */; }; - 84A48A7508A22E4B00752A2B /* juce_TextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888908A22E4900752A2B /* juce_TextButton.h */; }; - 84A48A7608A22E4B00752A2B /* juce_ToggleButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888A08A22E4900752A2B /* juce_ToggleButton.cpp */; }; - 84A48A7708A22E4B00752A2B /* juce_ToggleButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888B08A22E4900752A2B /* juce_ToggleButton.h */; }; - 84A48A7808A22E4B00752A2B /* juce_ComboBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4888D08A22E4900752A2B /* juce_ComboBox.cpp */; }; - 84A48A7908A22E4B00752A2B /* juce_ComboBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4888E08A22E4900752A2B /* juce_ComboBox.h */; }; - 84A48A7C08A22E4B00752A2B /* juce_Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889108A22E4900752A2B /* juce_Label.cpp */; }; - 84A48A7D08A22E4B00752A2B /* juce_Label.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4889208A22E4900752A2B /* juce_Label.h */; }; - 84A48A7E08A22E4B00752A2B /* juce_ListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889308A22E4900752A2B /* juce_ListBox.cpp */; }; - 84A48A7F08A22E4B00752A2B /* juce_ListBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4889408A22E4900752A2B /* juce_ListBox.h */; }; - 84A48A8008A22E4B00752A2B /* juce_ProgressBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889508A22E4900752A2B /* juce_ProgressBar.cpp */; }; - 84A48A8108A22E4B00752A2B /* juce_ProgressBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4889608A22E4900752A2B /* juce_ProgressBar.h */; }; - 84A48A8408A22E4B00752A2B /* juce_Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889908A22E4900752A2B /* juce_Slider.cpp */; }; - 84A48A8508A22E4B00752A2B /* juce_Slider.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4889A08A22E4900752A2B /* juce_Slider.h */; }; - 84A48A8608A22E4B00752A2B /* juce_TextEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889B08A22E4900752A2B /* juce_TextEditor.cpp */; }; - 84A48A8708A22E4B00752A2B /* juce_TextEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4889C08A22E4900752A2B /* juce_TextEditor.h */; }; - 84A48A8808A22E4B00752A2B /* juce_TreeView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889D08A22E4900752A2B /* juce_TreeView.cpp */; }; - 84A48A8908A22E4B00752A2B /* juce_TreeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4889E08A22E4900752A2B /* juce_TreeView.h */; }; - 84A48A8A08A22E4B00752A2B /* juce_Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4889F08A22E4900752A2B /* juce_Component.cpp */; }; - 84A48A8B08A22E4B00752A2B /* juce_Component.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488A008A22E4900752A2B /* juce_Component.h */; }; - 84A48A8C08A22E4B00752A2B /* juce_ComponentDeletionWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488A108A22E4900752A2B /* juce_ComponentDeletionWatcher.h */; }; - 84A48A8D08A22E4B00752A2B /* juce_ComponentListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488A208A22E4900752A2B /* juce_ComponentListener.cpp */; }; - 84A48A8E08A22E4B00752A2B /* juce_ComponentListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488A308A22E4900752A2B /* juce_ComponentListener.h */; }; - 84A48A8F08A22E4B00752A2B /* juce_Desktop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488A408A22E4900752A2B /* juce_Desktop.cpp */; }; - 84A48A9008A22E4B00752A2B /* juce_Desktop.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488A508A22E4900752A2B /* juce_Desktop.h */; }; - 84A48A9108A22E4B00752A2B /* juce_KeyListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488A708A22E4900752A2B /* juce_KeyListener.cpp */; }; - 84A48A9208A22E4B00752A2B /* juce_KeyListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488A808A22E4900752A2B /* juce_KeyListener.h */; }; - 84A48A9308A22E4B00752A2B /* juce_KeyMappingEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488A908A22E4900752A2B /* juce_KeyMappingEditorComponent.cpp */; }; - 84A48A9408A22E4B00752A2B /* juce_KeyMappingEditorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488AA08A22E4900752A2B /* juce_KeyMappingEditorComponent.h */; }; - 84A48A9508A22E4B00752A2B /* juce_KeyPress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488AB08A22E4900752A2B /* juce_KeyPress.cpp */; }; - 84A48A9608A22E4B00752A2B /* juce_KeyPress.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488AC08A22E4900752A2B /* juce_KeyPress.h */; }; - 84A48A9708A22E4B00752A2B /* juce_KeyPressMappingSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488AD08A22E4900752A2B /* juce_KeyPressMappingSet.cpp */; }; - 84A48A9808A22E4B00752A2B /* juce_KeyPressMappingSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488AE08A22E4900752A2B /* juce_KeyPressMappingSet.h */; }; - 84A48A9908A22E4B00752A2B /* juce_ModifierKeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488AF08A22E4900752A2B /* juce_ModifierKeys.cpp */; }; - 84A48A9A08A22E4B00752A2B /* juce_ModifierKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488B008A22E4900752A2B /* juce_ModifierKeys.h */; }; - 84A48A9B08A22E4B00752A2B /* juce_GroupComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488B208A22E4900752A2B /* juce_GroupComponent.cpp */; }; - 84A48A9C08A22E4B00752A2B /* juce_GroupComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488B308A22E4900752A2B /* juce_GroupComponent.h */; }; - 84A48A9E08A22E4B00752A2B /* juce_ResizableBorderComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488B508A22E4900752A2B /* juce_ResizableBorderComponent.cpp */; }; - 84A48A9F08A22E4B00752A2B /* juce_ResizableBorderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488B608A22E4900752A2B /* juce_ResizableBorderComponent.h */; }; - 84A48AA008A22E4B00752A2B /* juce_ResizableCornerComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488B708A22E4900752A2B /* juce_ResizableCornerComponent.cpp */; }; - 84A48AA108A22E4B00752A2B /* juce_ResizableCornerComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488B808A22E4900752A2B /* juce_ResizableCornerComponent.h */; }; - 84A48AA208A22E4B00752A2B /* juce_ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488B908A22E4900752A2B /* juce_ScrollBar.cpp */; }; - 84A48AA308A22E4B00752A2B /* juce_ScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488BA08A22E4900752A2B /* juce_ScrollBar.h */; }; - 84A48AA408A22E4B00752A2B /* juce_StretchableLayoutManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488BB08A22E4900752A2B /* juce_StretchableLayoutManager.cpp */; }; - 84A48AA508A22E4B00752A2B /* juce_StretchableLayoutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488BC08A22E4900752A2B /* juce_StretchableLayoutManager.h */; }; - 84A48AA608A22E4B00752A2B /* juce_StretchableLayoutResizerBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488BD08A22E4900752A2B /* juce_StretchableLayoutResizerBar.cpp */; }; - 84A48AA708A22E4B00752A2B /* juce_StretchableLayoutResizerBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488BE08A22E4900752A2B /* juce_StretchableLayoutResizerBar.h */; }; - 84A48AA808A22E4B00752A2B /* juce_TabbedButtonBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488BF08A22E4900752A2B /* juce_TabbedButtonBar.cpp */; }; - 84A48AA908A22E4B00752A2B /* juce_TabbedButtonBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488C008A22E4900752A2B /* juce_TabbedButtonBar.h */; }; - 84A48AAA08A22E4B00752A2B /* juce_TabbedComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488C108A22E4900752A2B /* juce_TabbedComponent.cpp */; }; - 84A48AAB08A22E4B00752A2B /* juce_TabbedComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488C208A22E4900752A2B /* juce_TabbedComponent.h */; }; - 84A48AAC08A22E4B00752A2B /* juce_Viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488C308A22E4900752A2B /* juce_Viewport.cpp */; }; - 84A48AAD08A22E4B00752A2B /* juce_Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488C408A22E4900752A2B /* juce_Viewport.h */; }; - 84A48AAE08A22E4B00752A2B /* juce_LookAndFeel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488C608A22E4900752A2B /* juce_LookAndFeel.cpp */; }; - 84A48AAF08A22E4B00752A2B /* juce_LookAndFeel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488C708A22E4900752A2B /* juce_LookAndFeel.h */; }; - 84A48AB008A22E4B00752A2B /* juce_OldSchoolLookAndFeel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488C808A22E4900752A2B /* juce_OldSchoolLookAndFeel.cpp */; }; - 84A48AB108A22E4B00752A2B /* juce_OldSchoolLookAndFeel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488C908A22E4900752A2B /* juce_OldSchoolLookAndFeel.h */; }; - 84A48AB208A22E4B00752A2B /* juce_MenuBarComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488CB08A22E4900752A2B /* juce_MenuBarComponent.cpp */; }; - 84A48AB308A22E4B00752A2B /* juce_MenuBarComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488CC08A22E4900752A2B /* juce_MenuBarComponent.h */; }; - 84A48AB408A22E4B00752A2B /* juce_MenuBarModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488CD08A22E4900752A2B /* juce_MenuBarModel.h */; }; - 84A48AB508A22E4B00752A2B /* juce_PopupMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488CE08A22E4900752A2B /* juce_PopupMenu.cpp */; }; - 84A48AB608A22E4B00752A2B /* juce_PopupMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488CF08A22E4900752A2B /* juce_PopupMenu.h */; }; - 84A48AB708A22E4B00752A2B /* juce_PopupMenuCustomComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488D008A22E4900752A2B /* juce_PopupMenuCustomComponent.h */; }; - 84A48AB808A22E4B00752A2B /* juce_ComponentDragger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488D208A22E4900752A2B /* juce_ComponentDragger.cpp */; }; - 84A48AB908A22E4B00752A2B /* juce_ComponentDragger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488D308A22E4900752A2B /* juce_ComponentDragger.h */; }; - 84A48ABA08A22E4B00752A2B /* juce_DragAndDropContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488D408A22E4900752A2B /* juce_DragAndDropContainer.cpp */; }; - 84A48ABB08A22E4B00752A2B /* juce_DragAndDropContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488D508A22E4900752A2B /* juce_DragAndDropContainer.h */; }; - 84A48ABC08A22E4B00752A2B /* juce_DragAndDropTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488D608A22E4900752A2B /* juce_DragAndDropTarget.h */; }; - 84A48ABD08A22E4B00752A2B /* juce_MouseCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488D708A22E4900752A2B /* juce_MouseCursor.cpp */; }; - 84A48ABE08A22E4B00752A2B /* juce_MouseCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488D808A22E4900752A2B /* juce_MouseCursor.h */; }; - 84A48ABF08A22E4B00752A2B /* juce_MouseEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488D908A22E4900752A2B /* juce_MouseEvent.cpp */; }; - 84A48AC008A22E4B00752A2B /* juce_MouseEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488DA08A22E4900752A2B /* juce_MouseEvent.h */; }; - 84A48AC108A22E4B00752A2B /* juce_MouseHoverDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488DB08A22E4900752A2B /* juce_MouseHoverDetector.cpp */; }; - 84A48AC208A22E4B00752A2B /* juce_MouseHoverDetector.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488DC08A22E4900752A2B /* juce_MouseHoverDetector.h */; }; - 84A48AC308A22E4B00752A2B /* juce_MouseListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488DD08A22E4900752A2B /* juce_MouseListener.cpp */; }; - 84A48AC408A22E4B00752A2B /* juce_MouseListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488DE08A22E4900752A2B /* juce_MouseListener.h */; }; - 84A48AC508A22E4B00752A2B /* juce_BubbleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488E008A22E4900752A2B /* juce_BubbleComponent.cpp */; }; - 84A48AC608A22E4B00752A2B /* juce_BubbleComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E108A22E4900752A2B /* juce_BubbleComponent.h */; }; - 84A48AC708A22E4B00752A2B /* juce_BubbleMessageComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488E208A22E4900752A2B /* juce_BubbleMessageComponent.cpp */; }; - 84A48AC808A22E4B00752A2B /* juce_BubbleMessageComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E308A22E4900752A2B /* juce_BubbleMessageComponent.h */; }; - 84A48AC908A22E4B00752A2B /* juce_ColourSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488E408A22E4900752A2B /* juce_ColourSelector.cpp */; }; - 84A48ACA08A22E4B00752A2B /* juce_ColourSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E508A22E4900752A2B /* juce_ColourSelector.h */; }; - 84A48ACB08A22E4B00752A2B /* juce_DropShadower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488E608A22E4900752A2B /* juce_DropShadower.cpp */; }; - 84A48ACC08A22E4B00752A2B /* juce_DropShadower.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E708A22E4900752A2B /* juce_DropShadower.h */; }; - 84A48ACD08A22E4B00752A2B /* juce_OpenGLComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488E808A22E4900752A2B /* juce_OpenGLComponent.cpp */; }; - 84A48ACE08A22E4B00752A2B /* juce_OpenGLComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */; }; - 84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */; }; - 84A48AD008A22E4B00752A2B /* juce_PreferencesPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */; }; - 84A48AD208A22E4B00752A2B /* juce_QuickTimeMovieComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */; }; - 84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */; }; - 84A48AD408A22E4B00752A2B /* juce_AlertWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488F008A22E4900752A2B /* juce_AlertWindow.h */; }; - 84A48AD508A22E4B00752A2B /* juce_DialogWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488F108A22E4900752A2B /* juce_DialogWindow.cpp */; }; - 84A48AD608A22E4B00752A2B /* juce_DialogWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488F208A22E4900752A2B /* juce_DialogWindow.h */; }; - 84A48ADB08A22E4B00752A2B /* juce_ResizableWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488F708A22E4900752A2B /* juce_ResizableWindow.cpp */; }; - 84A48ADC08A22E4B00752A2B /* juce_ResizableWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488F808A22E4900752A2B /* juce_ResizableWindow.h */; }; - 84A48ADD08A22E4B00752A2B /* juce_SplashScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488F908A22E4900752A2B /* juce_SplashScreen.cpp */; }; - 84A48ADE08A22E4B00752A2B /* juce_SplashScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488FA08A22E4900752A2B /* juce_SplashScreen.h */; }; - 84A48ADF08A22E4B00752A2B /* juce_ThreadWithProgressWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488FB08A22E4900752A2B /* juce_ThreadWithProgressWindow.cpp */; }; - 84A48AE008A22E4B00752A2B /* juce_ThreadWithProgressWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488FC08A22E4900752A2B /* juce_ThreadWithProgressWindow.h */; }; - 84A48AE108A22E4B00752A2B /* juce_TooltipWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488FD08A22E4900752A2B /* juce_TooltipWindow.cpp */; }; - 84A48AE208A22E4B00752A2B /* juce_TooltipWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488FE08A22E4900752A2B /* juce_TooltipWindow.h */; }; - 84A48AE308A22E4B00752A2B /* juce_Brush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890108A22E4900752A2B /* juce_Brush.cpp */; }; - 84A48AE408A22E4B00752A2B /* juce_Brush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890208A22E4900752A2B /* juce_Brush.h */; }; - 84A48AE508A22E4B00752A2B /* juce_GradientBrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890308A22E4900752A2B /* juce_GradientBrush.cpp */; }; - 84A48AE608A22E4B00752A2B /* juce_GradientBrush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890408A22E4900752A2B /* juce_GradientBrush.h */; }; - 84A48AE708A22E4B00752A2B /* juce_ImageBrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890508A22E4900752A2B /* juce_ImageBrush.cpp */; }; - 84A48AE808A22E4B00752A2B /* juce_ImageBrush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890608A22E4900752A2B /* juce_ImageBrush.h */; }; - 84A48AE908A22E4B00752A2B /* juce_SolidColourBrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890708A22E4900752A2B /* juce_SolidColourBrush.cpp */; }; - 84A48AEA08A22E4B00752A2B /* juce_SolidColourBrush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890808A22E4900752A2B /* juce_SolidColourBrush.h */; }; - 84A48AEB08A22E4B00752A2B /* juce_Colour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890A08A22E4900752A2B /* juce_Colour.cpp */; }; - 84A48AEC08A22E4B00752A2B /* juce_Colour.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890B08A22E4900752A2B /* juce_Colour.h */; }; - 84A48AED08A22E4B00752A2B /* juce_ColourGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890C08A22E4900752A2B /* juce_ColourGradient.cpp */; }; - 84A48AEE08A22E4B00752A2B /* juce_ColourGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890D08A22E4900752A2B /* juce_ColourGradient.h */; }; - 84A48AEF08A22E4B00752A2B /* juce_Colours.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4890E08A22E4900752A2B /* juce_Colours.cpp */; }; - 84A48AF008A22E4B00752A2B /* juce_Colours.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4890F08A22E4900752A2B /* juce_Colours.h */; }; - 84A48AF108A22E4B00752A2B /* juce_PixelFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891008A22E4900752A2B /* juce_PixelFormats.h */; }; - 84A48AF208A22E4B00752A2B /* juce_EdgeTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891208A22E4900752A2B /* juce_EdgeTable.cpp */; }; - 84A48AF308A22E4B00752A2B /* juce_EdgeTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891308A22E4900752A2B /* juce_EdgeTable.h */; }; - 84A48AF408A22E4B00752A2B /* juce_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891408A22E4900752A2B /* juce_Graphics.cpp */; }; - 84A48AF508A22E4B00752A2B /* juce_Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891508A22E4900752A2B /* juce_Graphics.h */; }; - 84A48AF608A22E4B00752A2B /* juce_Justification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891608A22E4900752A2B /* juce_Justification.cpp */; }; - 84A48AF708A22E4B00752A2B /* juce_Justification.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891708A22E4900752A2B /* juce_Justification.h */; }; - 84A48AF808A22E4B00752A2B /* juce_Drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891908A22E4900752A2B /* juce_Drawable.cpp */; }; - 84A48AF908A22E4B00752A2B /* juce_Drawable.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891A08A22E4900752A2B /* juce_Drawable.h */; }; - 84A48AFA08A22E4B00752A2B /* juce_DrawableComposite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891B08A22E4A00752A2B /* juce_DrawableComposite.cpp */; }; - 84A48AFB08A22E4B00752A2B /* juce_DrawableComposite.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891C08A22E4A00752A2B /* juce_DrawableComposite.h */; }; - 84A48AFC08A22E4B00752A2B /* juce_DrawableImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891D08A22E4A00752A2B /* juce_DrawableImage.cpp */; }; - 84A48AFD08A22E4B00752A2B /* juce_DrawableImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4891E08A22E4A00752A2B /* juce_DrawableImage.h */; }; - 84A48AFE08A22E4B00752A2B /* juce_DrawablePath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4891F08A22E4A00752A2B /* juce_DrawablePath.cpp */; }; - 84A48AFF08A22E4B00752A2B /* juce_DrawablePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892008A22E4A00752A2B /* juce_DrawablePath.h */; }; - 84A48B0008A22E4B00752A2B /* juce_DrawableText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4892108A22E4A00752A2B /* juce_DrawableText.cpp */; }; - 84A48B0108A22E4B00752A2B /* juce_DrawableText.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892208A22E4A00752A2B /* juce_DrawableText.h */; }; - 84A48B0208A22E4B00752A2B /* juce_DropShadowEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4892408A22E4A00752A2B /* juce_DropShadowEffect.cpp */; }; - 84A48B0308A22E4B00752A2B /* juce_DropShadowEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892508A22E4A00752A2B /* juce_DropShadowEffect.h */; }; - 84A48B0408A22E4B00752A2B /* juce_GlowEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4892608A22E4A00752A2B /* juce_GlowEffect.cpp */; }; - 84A48B0508A22E4B00752A2B /* juce_GlowEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892708A22E4A00752A2B /* juce_GlowEffect.h */; }; - 84A48B0608A22E4B00752A2B /* juce_ImageEffectFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892808A22E4A00752A2B /* juce_ImageEffectFilter.h */; }; - 84A48B0708A22E4B00752A2B /* juce_ReduceOpacityEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4892908A22E4A00752A2B /* juce_ReduceOpacityEffect.cpp */; }; - 84A48B0808A22E4B00752A2B /* juce_ReduceOpacityEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892A08A22E4A00752A2B /* juce_ReduceOpacityEffect.h */; }; - 84A48B0908A22E4B00752A2B /* juce_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4892C08A22E4A00752A2B /* juce_Font.cpp */; }; - 84A48B0A08A22E4B00752A2B /* juce_Font.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892D08A22E4A00752A2B /* juce_Font.h */; }; - 84A48B0B08A22E4B00752A2B /* juce_GlyphArrangement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4892E08A22E4A00752A2B /* juce_GlyphArrangement.cpp */; }; - 84A48B0C08A22E4B00752A2B /* juce_GlyphArrangement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4892F08A22E4A00752A2B /* juce_GlyphArrangement.h */; }; - 84A48B0D08A22E4B00752A2B /* juce_TextLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893008A22E4A00752A2B /* juce_TextLayout.cpp */; }; - 84A48B0E08A22E4B00752A2B /* juce_TextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893108A22E4A00752A2B /* juce_TextLayout.h */; }; - 84A48B0F08A22E4B00752A2B /* juce_Typeface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893208A22E4A00752A2B /* juce_Typeface.cpp */; }; - 84A48B1008A22E4B00752A2B /* juce_Typeface.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893308A22E4A00752A2B /* juce_Typeface.h */; }; - 84A48B1108A22E4B00752A2B /* juce_AffineTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893508A22E4A00752A2B /* juce_AffineTransform.cpp */; }; - 84A48B1208A22E4B00752A2B /* juce_AffineTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893608A22E4A00752A2B /* juce_AffineTransform.h */; }; - 84A48B1308A22E4B00752A2B /* juce_Line.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893708A22E4A00752A2B /* juce_Line.cpp */; }; - 84A48B1408A22E4B00752A2B /* juce_Line.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893808A22E4A00752A2B /* juce_Line.h */; }; - 84A48B1508A22E4B00752A2B /* juce_Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893908A22E4A00752A2B /* juce_Path.cpp */; }; - 84A48B1608A22E4B00752A2B /* juce_Path.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893A08A22E4A00752A2B /* juce_Path.h */; }; - 84A48B1708A22E4B00752A2B /* juce_PathIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893B08A22E4A00752A2B /* juce_PathIterator.cpp */; }; - 84A48B1808A22E4B00752A2B /* juce_PathIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893C08A22E4A00752A2B /* juce_PathIterator.h */; }; - 84A48B1908A22E4B00752A2B /* juce_PathStrokeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893D08A22E4A00752A2B /* juce_PathStrokeType.cpp */; }; - 84A48B1A08A22E4B00752A2B /* juce_PathStrokeType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4893E08A22E4A00752A2B /* juce_PathStrokeType.h */; }; - 84A48B1B08A22E4B00752A2B /* juce_Point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4893F08A22E4A00752A2B /* juce_Point.cpp */; }; - 84A48B1C08A22E4B00752A2B /* juce_Point.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4894008A22E4A00752A2B /* juce_Point.h */; }; - 84A48B1D08A22E4B00752A2B /* juce_Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4894108A22E4A00752A2B /* juce_Rectangle.cpp */; }; - 84A48B1E08A22E4B00752A2B /* juce_Rectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4894208A22E4A00752A2B /* juce_Rectangle.h */; }; - 84A48B1F08A22E4B00752A2B /* juce_RectangleList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4894308A22E4A00752A2B /* juce_RectangleList.cpp */; }; - 84A48B2008A22E4B00752A2B /* juce_RectangleList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4894408A22E4A00752A2B /* juce_RectangleList.h */; }; - 84A48B4908A22E4B00752A2B /* juce_GIFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4897208A22E4A00752A2B /* juce_GIFLoader.cpp */; }; - 84A48B4A08A22E4B00752A2B /* juce_GIFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4897308A22E4A00752A2B /* juce_GIFLoader.h */; }; - 84A48B4B08A22E4B00752A2B /* juce_JPEGLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4897408A22E4A00752A2B /* juce_JPEGLoader.cpp */; }; - 84A48B4C08A22E4B00752A2B /* juce_PNGLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4897508A22E4A00752A2B /* juce_PNGLoader.cpp */; }; - 84A48B5A08A22E4B00752A2B /* juce_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4898608A22E4A00752A2B /* juce_Image.cpp */; }; - 84A48B5B08A22E4B00752A2B /* juce_Image.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4898708A22E4A00752A2B /* juce_Image.h */; }; - 84A48B5C08A22E4B00752A2B /* juce_ImageCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4898808A22E4A00752A2B /* juce_ImageCache.cpp */; }; - 84A48B5D08A22E4B00752A2B /* juce_ImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4898908A22E4A00752A2B /* juce_ImageCache.h */; }; - 84A48B5E08A22E4B00752A2B /* juce_ImageConvolutionKernel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4898A08A22E4A00752A2B /* juce_ImageConvolutionKernel.cpp */; }; - 84A48B5F08A22E4B00752A2B /* juce_ImageConvolutionKernel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4898B08A22E4A00752A2B /* juce_ImageConvolutionKernel.h */; }; - 84A48B6008A22E4B00752A2B /* juce_ImageFileFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4898C08A22E4A00752A2B /* juce_ImageFileFormat.cpp */; }; - 84A48B6108A22E4B00752A2B /* juce_ImageFileFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4898D08A22E4A00752A2B /* juce_ImageFileFormat.h */; }; - 84A48B6A08A22E4B00752A2B /* juce_Atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4899908A22E4A00752A2B /* juce_Atomic.h */; }; - 84A48B6B08A22E4B00752A2B /* juce_DataConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4899A08A22E4A00752A2B /* juce_DataConversions.h */; }; - 84A48B6C08A22E4B00752A2B /* juce_FileLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4899B08A22E4A00752A2B /* juce_FileLogger.cpp */; }; - 84A48B6D08A22E4B00752A2B /* juce_FileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4899C08A22E4A00752A2B /* juce_FileLogger.h */; }; - 84A48B6E08A22E4B00752A2B /* juce_Initialisation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4899D08A22E4A00752A2B /* juce_Initialisation.h */; }; - 84A48B6F08A22E4B00752A2B /* juce_Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4899E08A22E4A00752A2B /* juce_Logger.cpp */; }; - 84A48B7008A22E4B00752A2B /* juce_Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4899F08A22E4A00752A2B /* juce_Logger.h */; }; - 84A48B7108A22E4B00752A2B /* juce_MathsFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A008A22E4A00752A2B /* juce_MathsFunctions.h */; }; - 84A48B7208A22E4B00752A2B /* juce_Memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A108A22E4A00752A2B /* juce_Memory.h */; }; - 84A48B7308A22E4B00752A2B /* juce_PlatformDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A208A22E4A00752A2B /* juce_PlatformDefs.h */; }; - 84A48B7408A22E4B00752A2B /* juce_Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489A308A22E4A00752A2B /* juce_Random.cpp */; }; - 84A48B7508A22E4B00752A2B /* juce_Random.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A408A22E4A00752A2B /* juce_Random.h */; }; - 84A48B7608A22E4B00752A2B /* juce_RelativeTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489A508A22E4A00752A2B /* juce_RelativeTime.cpp */; }; - 84A48B7708A22E4B00752A2B /* juce_RelativeTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A608A22E4A00752A2B /* juce_RelativeTime.h */; }; - 84A48B7808A22E4B00752A2B /* juce_Singleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A708A22E4A00752A2B /* juce_Singleton.h */; }; - 84A48B7908A22E4B00752A2B /* juce_StandardHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489A808A22E4A00752A2B /* juce_StandardHeader.h */; }; - 84A48B7A08A22E4B00752A2B /* juce_SystemStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489A908A22E4A00752A2B /* juce_SystemStats.cpp */; }; - 84A48B7B08A22E4B00752A2B /* juce_SystemStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489AA08A22E4A00752A2B /* juce_SystemStats.h */; }; - 84A48B7C08A22E4B00752A2B /* juce_Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489AB08A22E4A00752A2B /* juce_Time.cpp */; }; - 84A48B7D08A22E4B00752A2B /* juce_Time.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489AC08A22E4A00752A2B /* juce_Time.h */; }; - 84A48B7E08A22E4B00752A2B /* juce_Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489AE08A22E4A00752A2B /* juce_Array.h */; }; - 84A48B7F08A22E4B00752A2B /* juce_ArrayAllocationBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489AF08A22E4A00752A2B /* juce_ArrayAllocationBase.h */; }; - 84A48B8008A22E4B00752A2B /* juce_BitArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489B008A22E4A00752A2B /* juce_BitArray.cpp */; }; - 84A48B8108A22E4B00752A2B /* juce_BitArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B108A22E4A00752A2B /* juce_BitArray.h */; }; - 84A48B8208A22E4B00752A2B /* juce_ElementComparator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B208A22E4A00752A2B /* juce_ElementComparator.h */; }; - 84A48B8308A22E4B00752A2B /* juce_MemoryBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489B308A22E4A00752A2B /* juce_MemoryBlock.cpp */; }; - 84A48B8408A22E4B00752A2B /* juce_MemoryBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B408A22E4A00752A2B /* juce_MemoryBlock.h */; }; - 84A48B8508A22E4B00752A2B /* juce_OwnedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B508A22E4A00752A2B /* juce_OwnedArray.h */; }; - 84A48B8608A22E4B00752A2B /* juce_PropertySet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489B608A22E4A00752A2B /* juce_PropertySet.cpp */; }; - 84A48B8708A22E4B00752A2B /* juce_PropertySet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B708A22E4A00752A2B /* juce_PropertySet.h */; }; - 84A48B8808A22E4B00752A2B /* juce_ReferenceCountedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B808A22E4A00752A2B /* juce_ReferenceCountedArray.h */; }; - 84A48B8908A22E4B00752A2B /* juce_ReferenceCountedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489B908A22E4A00752A2B /* juce_ReferenceCountedObject.h */; }; - 84A48B8A08A22E4B00752A2B /* juce_SortedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489BA08A22E4A00752A2B /* juce_SortedSet.h */; }; - 84A48B8B08A22E4B00752A2B /* juce_SparseSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489BB08A22E4A00752A2B /* juce_SparseSet.h */; }; - 84A48B8C08A22E4B00752A2B /* juce_VoidArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489BC08A22E4A00752A2B /* juce_VoidArray.h */; }; - 84A48B8D08A22E4B00752A2B /* juce_BlowFish.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489BE08A22E4A00752A2B /* juce_BlowFish.cpp */; }; - 84A48B8E08A22E4B00752A2B /* juce_BlowFish.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489BF08A22E4A00752A2B /* juce_BlowFish.h */; }; - 84A48B8F08A22E4B00752A2B /* juce_MD5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489C008A22E4A00752A2B /* juce_MD5.cpp */; }; - 84A48B9008A22E4B00752A2B /* juce_MD5.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489C108A22E4A00752A2B /* juce_MD5.h */; }; - 84A48B9108A22E4B00752A2B /* juce_Primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489C208A22E4A00752A2B /* juce_Primes.cpp */; }; - 84A48B9208A22E4B00752A2B /* juce_Primes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489C308A22E4A00752A2B /* juce_Primes.h */; }; - 84A48B9308A22E4B00752A2B /* juce_RSAKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489C408A22E4A00752A2B /* juce_RSAKey.cpp */; }; - 84A48B9408A22E4B00752A2B /* juce_RSAKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489C508A22E4A00752A2B /* juce_RSAKey.h */; }; - 84A48B9508A22E4B00752A2B /* juce_DirectoryIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489C808A22E4A00752A2B /* juce_DirectoryIterator.cpp */; }; - 84A48B9608A22E4B00752A2B /* juce_DirectoryIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489C908A22E4A00752A2B /* juce_DirectoryIterator.h */; }; - 84A48B9708A22E4B00752A2B /* juce_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489CA08A22E4A00752A2B /* juce_File.cpp */; }; - 84A48B9808A22E4B00752A2B /* juce_File.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489CB08A22E4A00752A2B /* juce_File.h */; }; - 84A48B9908A22E4B00752A2B /* juce_FileInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489CC08A22E4A00752A2B /* juce_FileInputStream.cpp */; }; - 84A48B9A08A22E4B00752A2B /* juce_FileInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489CD08A22E4A00752A2B /* juce_FileInputStream.h */; }; - 84A48B9B08A22E4B00752A2B /* juce_FileOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489CE08A22E4A00752A2B /* juce_FileOutputStream.cpp */; }; - 84A48B9C08A22E4B00752A2B /* juce_FileOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489CF08A22E4A00752A2B /* juce_FileOutputStream.h */; }; - 84A48B9D08A22E4B00752A2B /* juce_FileSearchPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489D008A22E4A00752A2B /* juce_FileSearchPath.cpp */; }; - 84A48B9E08A22E4B00752A2B /* juce_FileSearchPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489D108A22E4A00752A2B /* juce_FileSearchPath.h */; }; - 84A48B9F08A22E4B00752A2B /* juce_InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489D208A22E4A00752A2B /* juce_InputStream.cpp */; }; - 84A48BA008A22E4B00752A2B /* juce_InputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489D308A22E4A00752A2B /* juce_InputStream.h */; }; - 84A48BA108A22E4B00752A2B /* juce_OutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489D408A22E4A00752A2B /* juce_OutputStream.cpp */; }; - 84A48BA208A22E4B00752A2B /* juce_OutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489D508A22E4A00752A2B /* juce_OutputStream.h */; }; - 84A48BA308A22E4B00752A2B /* juce_URL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489D708A22E4A00752A2B /* juce_URL.cpp */; }; - 84A48BA408A22E4B00752A2B /* juce_URL.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489D808A22E4A00752A2B /* juce_URL.h */; }; - 84A48BA508A22E4B00752A2B /* juce_BufferedInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489DA08A22E4A00752A2B /* juce_BufferedInputStream.cpp */; }; - 84A48BA608A22E4B00752A2B /* juce_BufferedInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489DB08A22E4A00752A2B /* juce_BufferedInputStream.h */; }; - 84A48BA708A22E4B00752A2B /* juce_GZIPCompressorOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489DC08A22E4A00752A2B /* juce_GZIPCompressorOutputStream.cpp */; }; - 84A48BA808A22E4B00752A2B /* juce_GZIPCompressorOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489DD08A22E4A00752A2B /* juce_GZIPCompressorOutputStream.h */; }; - 84A48BA908A22E4B00752A2B /* juce_GZIPDecompressorInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489DE08A22E4A00752A2B /* juce_GZIPDecompressorInputStream.cpp */; }; - 84A48BAA08A22E4B00752A2B /* juce_GZIPDecompressorInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489DF08A22E4A00752A2B /* juce_GZIPDecompressorInputStream.h */; }; - 84A48BAB08A22E4B00752A2B /* juce_MemoryInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489E008A22E4A00752A2B /* juce_MemoryInputStream.cpp */; }; - 84A48BAC08A22E4B00752A2B /* juce_MemoryInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489E108A22E4A00752A2B /* juce_MemoryInputStream.h */; }; - 84A48BAD08A22E4B00752A2B /* juce_MemoryOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489E208A22E4A00752A2B /* juce_MemoryOutputStream.cpp */; }; - 84A48BAE08A22E4B00752A2B /* juce_MemoryOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489E308A22E4A00752A2B /* juce_MemoryOutputStream.h */; }; - 84A48BAF08A22E4B00752A2B /* juce_SubregionStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A489E408A22E4A00752A2B /* juce_SubregionStream.cpp */; }; - 84A48BB008A22E4B00752A2B /* juce_SubregionStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A489E508A22E4A00752A2B /* juce_SubregionStream.h */; }; - 84A48BC808A22E4B00752A2B /* juce_PerformanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0008A22E4A00752A2B /* juce_PerformanceCounter.cpp */; }; - 84A48BC908A22E4B00752A2B /* juce_PerformanceCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0108A22E4A00752A2B /* juce_PerformanceCounter.h */; }; - 84A48BCA08A22E4B00752A2B /* juce_PlatformUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0208A22E4A00752A2B /* juce_PlatformUtilities.h */; }; - 84A48BCB08A22E4B00752A2B /* juce_Uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0308A22E4A00752A2B /* juce_Uuid.cpp */; }; - 84A48BCC08A22E4B00752A2B /* juce_Uuid.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0408A22E4A00752A2B /* juce_Uuid.h */; }; - 84A48BCD08A22E4B00752A2B /* juce_ZipFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0508A22E4A00752A2B /* juce_ZipFile.cpp */; }; - 84A48BCE08A22E4B00752A2B /* juce_ZipFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0608A22E4A00752A2B /* juce_ZipFile.h */; }; - 84A48BCF08A22E4B00752A2B /* juce_LocalisedStrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0808A22E4A00752A2B /* juce_LocalisedStrings.cpp */; }; - 84A48BD008A22E4B00752A2B /* juce_LocalisedStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0908A22E4A00752A2B /* juce_LocalisedStrings.h */; }; - 84A48BD108A22E4B00752A2B /* juce_String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0A08A22E4A00752A2B /* juce_String.cpp */; }; - 84A48BD208A22E4B00752A2B /* juce_String.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0B08A22E4A00752A2B /* juce_String.h */; }; - 84A48BD308A22E4B00752A2B /* juce_StringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0C08A22E4A00752A2B /* juce_StringArray.cpp */; }; - 84A48BD408A22E4B00752A2B /* juce_StringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0D08A22E4A00752A2B /* juce_StringArray.h */; }; - 84A48BD508A22E4B00752A2B /* juce_StringPairArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A0E08A22E4A00752A2B /* juce_StringPairArray.cpp */; }; - 84A48BD608A22E4B00752A2B /* juce_StringPairArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A0F08A22E4A00752A2B /* juce_StringPairArray.h */; }; - 84A48BD808A22E4B00752A2B /* juce_XmlDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A1108A22E4A00752A2B /* juce_XmlDocument.cpp */; }; - 84A48BD908A22E4B00752A2B /* juce_XmlDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1208A22E4A00752A2B /* juce_XmlDocument.h */; }; - 84A48BDA08A22E4B00752A2B /* juce_XmlElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A1308A22E4A00752A2B /* juce_XmlElement.cpp */; }; - 84A48BDB08A22E4B00752A2B /* juce_XmlElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1408A22E4A00752A2B /* juce_XmlElement.h */; }; - 84A48BDD08A22E4B00752A2B /* juce_CriticalSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1708A22E4A00752A2B /* juce_CriticalSection.h */; }; - 84A48BDE08A22E4B00752A2B /* juce_InterProcessLock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A1808A22E4A00752A2B /* juce_InterProcessLock.cpp */; }; - 84A48BDF08A22E4B00752A2B /* juce_InterProcessLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1908A22E4A00752A2B /* juce_InterProcessLock.h */; }; - 84A48BE108A22E4B00752A2B /* juce_Process.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1B08A22E4A00752A2B /* juce_Process.h */; }; - 84A48BE208A22E4B00752A2B /* juce_ReadWriteLock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A1C08A22E4A00752A2B /* juce_ReadWriteLock.cpp */; }; - 84A48BE308A22E4B00752A2B /* juce_ReadWriteLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1D08A22E4A00752A2B /* juce_ReadWriteLock.h */; }; - 84A48BE408A22E4B00752A2B /* juce_ScopedLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1E08A22E4A00752A2B /* juce_ScopedLock.h */; }; - 84A48BE508A22E4B00752A2B /* juce_ScopedReadLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A1F08A22E4A00752A2B /* juce_ScopedReadLock.h */; }; - 84A48BE608A22E4B00752A2B /* juce_ScopedWriteLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A2008A22E4A00752A2B /* juce_ScopedWriteLock.h */; }; - 84A48BE708A22E4B00752A2B /* juce_Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A2108A22E4A00752A2B /* juce_Thread.cpp */; }; - 84A48BE808A22E4B00752A2B /* juce_Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A2208A22E4A00752A2B /* juce_Thread.h */; }; - 84A48BE908A22E4B00752A2B /* juce_ThreadPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A2308A22E4A00752A2B /* juce_ThreadPool.cpp */; }; - 84A48BEA08A22E4B00752A2B /* juce_ThreadPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A2408A22E4A00752A2B /* juce_ThreadPool.h */; }; - 84A48BEB08A22E4B00752A2B /* juce_TimeSliceThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A48A2508A22E4A00752A2B /* juce_TimeSliceThread.cpp */; }; - 84A48BEC08A22E4B00752A2B /* juce_TimeSliceThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A2608A22E4A00752A2B /* juce_TimeSliceThread.h */; }; - 84A48BED08A22E4B00752A2B /* juce_WaitableEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A48A2708A22E4A00752A2B /* juce_WaitableEvent.h */; }; - 84B1C1330F6287E70068E14F /* juce_CallbackMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B1C1320F6287E70068E14F /* juce_CallbackMessage.h */; }; - 84BC4E290C8DD38C00FA249B /* juce_AudioPlayHead.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E210C8DD38C00FA249B /* juce_AudioPlayHead.h */; }; - 84BC4E2A0C8DD38C00FA249B /* juce_AudioProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */; }; - 84BC4E2B0C8DD38C00FA249B /* juce_AudioProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E230C8DD38C00FA249B /* juce_AudioProcessor.h */; }; - 84BC4E2C0C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BC4E240C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp */; }; - 84BC4E2D0C8DD38C00FA249B /* juce_AudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E250C8DD38C00FA249B /* juce_AudioProcessorEditor.h */; }; - 84BC4E2E0C8DD38C00FA249B /* juce_AudioProcessorListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */; }; - 84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */; }; - 84BC4E300C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */; }; - 84C0EA5E0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */; }; - 84C0EA5F0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */; }; - 84CA4AF40E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */; }; - 84D296BD09B763190026C535 /* juce_PropertiesFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */; }; - 84D296BE09B763190026C535 /* juce_PropertiesFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D296BC09B763190026C535 /* juce_PropertiesFile.h */; }; - 84E8209409729D2A0097675B /* juce_AudioFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */; }; - 84E8209509729D2A0097675B /* juce_AudioFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */; }; - 84EE01050FF235750093FACA /* juce_CameraDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EE01040FF235750093FACA /* juce_CameraDevice.h */; }; - 84F1B8DA09499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */; }; - 84F1B8DB09499F1400AD8EDE /* juce_MidiKeyboardComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1B8D909499F1400AD8EDE /* juce_MidiKeyboardComponent.h */; }; - 84F1F05D0A36CE96008CCC5E /* juce_FilenameComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1F05B0A36CE96008CCC5E /* juce_FilenameComponent.cpp */; }; - 84F1F05E0A36CE96008CCC5E /* juce_FilenameComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1F05C0A36CE96008CCC5E /* juce_FilenameComponent.h */; }; - 84F1F0610A36CF06008CCC5E /* juce_BooleanPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1F05F0A36CF06008CCC5E /* juce_BooleanPropertyComponent.cpp */; }; - 84F1F0620A36CF06008CCC5E /* juce_BooleanPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1F0600A36CF06008CCC5E /* juce_BooleanPropertyComponent.h */; }; - 84F1F0650A36CF32008CCC5E /* juce_MagnifierComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */; }; - 84F1F0660A36CF32008CCC5E /* juce_MagnifierComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */; }; - 84F1F0690A36CF45008CCC5E /* juce_KeyboardFocusTraverser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1F0670A36CF45008CCC5E /* juce_KeyboardFocusTraverser.cpp */; }; - 84F1F06A0A36CF45008CCC5E /* juce_KeyboardFocusTraverser.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1F0680A36CF45008CCC5E /* juce_KeyboardFocusTraverser.h */; }; - 84F46B7E098685BD0079F3FA /* juce_ComponentBoundsConstrainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F46B7C098685BD0079F3FA /* juce_ComponentBoundsConstrainer.cpp */; }; - 84F46B7F098685BD0079F3FA /* juce_ComponentBoundsConstrainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F46B7D098685BD0079F3FA /* juce_ComponentBoundsConstrainer.h */; }; - 84F525000B32A8D500597B73 /* juce_ApplicationProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F524FE0B32A8D500597B73 /* juce_ApplicationProperties.cpp */; }; - 84F525010B32A8D500597B73 /* juce_ApplicationProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F524FF0B32A8D500597B73 /* juce_ApplicationProperties.h */; }; - 84F5552A0A2235E100A8311C /* juce_MultiDocumentPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555280A2235E100A8311C /* juce_MultiDocumentPanel.cpp */; }; - 84F5552B0A2235E100A8311C /* juce_MultiDocumentPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F555290A2235E100A8311C /* juce_MultiDocumentPanel.h */; }; - 84F5598409CACFDD00AC5000 /* juce_Socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F5598209CACFDD00AC5000 /* juce_Socket.cpp */; }; - 84F5598509CACFDD00AC5000 /* juce_Socket.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F5598309CACFDD00AC5000 /* juce_Socket.h */; }; - 84F5598809CACFF700AC5000 /* juce_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F5598609CACFF700AC5000 /* juce_NamedPipe.cpp */; }; - 84F5598909CACFF700AC5000 /* juce_NamedPipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F5598709CACFF700AC5000 /* juce_NamedPipe.h */; }; - 84F589950A01491F00B80939 /* juce_TooltipClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F589940A01491F00B80939 /* juce_TooltipClient.h */; }; - 84F5899F0A01493600B80939 /* juce_ApplicationCommandID.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F589980A01493600B80939 /* juce_ApplicationCommandID.h */; }; - 84F589A00A01493600B80939 /* juce_ApplicationCommandInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F589990A01493600B80939 /* juce_ApplicationCommandInfo.cpp */; }; - 84F589A10A01493600B80939 /* juce_ApplicationCommandInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F5899A0A01493600B80939 /* juce_ApplicationCommandInfo.h */; }; - 84F589A20A01493600B80939 /* juce_ApplicationCommandManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F5899B0A01493600B80939 /* juce_ApplicationCommandManager.cpp */; }; - 84F589A30A01493600B80939 /* juce_ApplicationCommandManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F5899C0A01493600B80939 /* juce_ApplicationCommandManager.h */; }; - 84F589A40A01493600B80939 /* juce_ApplicationCommandTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F5899D0A01493600B80939 /* juce_ApplicationCommandTarget.cpp */; }; - 84F589A50A01493600B80939 /* juce_ApplicationCommandTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F5899E0A01493600B80939 /* juce_ApplicationCommandTarget.h */; }; - 84F593AE09855679008153BA /* juce_DocumentWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */; }; - 84F593AF09855679008153BA /* juce_DocumentWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593AD09855679008153BA /* juce_DocumentWindow.h */; }; - 84F593B109855693008153BA /* juce_LassoComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593B009855693008153BA /* juce_LassoComponent.h */; }; - 84F6B7540C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */; }; - 84F6B7550C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */; }; - 84F7A7AF0A8383A100D36246 /* juce_ToolbarButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */; }; - 84F7A7B00A8383A100D36246 /* juce_ToolbarButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */; }; - 84F7A7B80A8383C200D36246 /* juce_Toolbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */; }; - 84F7A7B90A8383C200D36246 /* juce_Toolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7B20A8383C200D36246 /* juce_Toolbar.h */; }; - 84F7A7BA0A8383C200D36246 /* juce_ToolbarItemComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7B30A8383C200D36246 /* juce_ToolbarItemComponent.cpp */; }; - 84F7A7BB0A8383C200D36246 /* juce_ToolbarItemComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7B40A8383C200D36246 /* juce_ToolbarItemComponent.h */; }; - 84F7A7BC0A8383C200D36246 /* juce_ToolbarItemFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7B50A8383C200D36246 /* juce_ToolbarItemFactory.h */; }; - 84F7A7BD0A8383C200D36246 /* juce_ToolbarItemPalette.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7B60A8383C200D36246 /* juce_ToolbarItemPalette.cpp */; }; - 84F7A7BE0A8383C200D36246 /* juce_ToolbarItemPalette.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7B70A8383C200D36246 /* juce_ToolbarItemPalette.h */; }; - 84F7A7C10A8383E000D36246 /* juce_MultiTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7BF0A8383E000D36246 /* juce_MultiTimer.cpp */; }; - 84F7A7C20A8383E000D36246 /* juce_MultiTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */; }; - 84F7A7EF0A838CC900D36246 /* juce_ComponentAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */; }; - 84F7A7F00A838CC900D36246 /* juce_ComponentAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */; }; - 84F8DAD0099C963A00E911ED /* juce_ComponentPeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */; }; - 84F8DAD1099C963A00E911ED /* juce_ComponentPeer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */; }; - 84FC318F09B749FD00B75141 /* juce_FileBasedDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */; }; - 84FC319009B749FD00B75141 /* juce_FileBasedDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC318809B749FD00B75141 /* juce_FileBasedDocument.h */; }; - 84FC319109B749FD00B75141 /* juce_RecentlyOpenedFilesList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC318909B749FD00B75141 /* juce_RecentlyOpenedFilesList.cpp */; }; - 84FC319209B749FD00B75141 /* juce_RecentlyOpenedFilesList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC318A09B749FD00B75141 /* juce_RecentlyOpenedFilesList.h */; }; - 84FC319309B749FD00B75141 /* juce_SelectedItemSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC318B09B749FD00B75141 /* juce_SelectedItemSet.h */; }; - 84FC319409B749FD00B75141 /* juce_UndoableAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC318C09B749FD00B75141 /* juce_UndoableAction.h */; }; - 84FC319509B749FD00B75141 /* juce_UndoManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC318D09B749FD00B75141 /* juce_UndoManager.cpp */; }; - 84FC319609B749FD00B75141 /* juce_UndoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC318E09B749FD00B75141 /* juce_UndoManager.h */; }; - 84FC31AA09B74A5C00B75141 /* juce_DirectoryContentsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC319809B74A5C00B75141 /* juce_DirectoryContentsList.cpp */; }; - 84FC31AB09B74A5C00B75141 /* juce_DirectoryContentsList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC319909B74A5C00B75141 /* juce_DirectoryContentsList.h */; }; - 84FC31AC09B74A5C00B75141 /* juce_FileBrowserComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC319A09B74A5C00B75141 /* juce_FileBrowserComponent.cpp */; }; - 84FC31AD09B74A5C00B75141 /* juce_FileBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC319B09B74A5C00B75141 /* juce_FileBrowserComponent.h */; }; - 84FC31AE09B74A5C00B75141 /* juce_FileBrowserListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC319C09B74A5C00B75141 /* juce_FileBrowserListener.h */; }; - 84FC31AF09B74A5C00B75141 /* juce_FileChooser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC319D09B74A5C00B75141 /* juce_FileChooser.cpp */; }; - 84FC31B009B74A5C00B75141 /* juce_FileChooser.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC319E09B74A5C00B75141 /* juce_FileChooser.h */; }; - 84FC31B109B74A5C00B75141 /* juce_FileChooserDialogBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC319F09B74A5C00B75141 /* juce_FileChooserDialogBox.cpp */; }; - 84FC31B209B74A5C00B75141 /* juce_FileChooserDialogBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31A009B74A5C00B75141 /* juce_FileChooserDialogBox.h */; }; - 84FC31B309B74A5C00B75141 /* juce_FileFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC31A109B74A5C00B75141 /* juce_FileFilter.cpp */; }; - 84FC31B409B74A5C00B75141 /* juce_FileFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31A209B74A5C00B75141 /* juce_FileFilter.h */; }; - 84FC31B509B74A5C00B75141 /* juce_FileListComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC31A309B74A5C00B75141 /* juce_FileListComponent.cpp */; }; - 84FC31B609B74A5C00B75141 /* juce_FileListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31A409B74A5C00B75141 /* juce_FileListComponent.h */; }; - 84FC31B709B74A5C00B75141 /* juce_FilePreviewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31A509B74A5C00B75141 /* juce_FilePreviewComponent.h */; }; - 84FC31B809B74A5C00B75141 /* juce_ImagePreviewComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC31A609B74A5C00B75141 /* juce_ImagePreviewComponent.cpp */; }; - 84FC31B909B74A5C00B75141 /* juce_ImagePreviewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31A709B74A5C00B75141 /* juce_ImagePreviewComponent.h */; }; - 84FC31BA09B74A5C00B75141 /* juce_WildcardFileFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC31A809B74A5C00B75141 /* juce_WildcardFileFilter.cpp */; }; - 84FC31BB09B74A5C00B75141 /* juce_WildcardFileFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31A909B74A5C00B75141 /* juce_WildcardFileFilter.h */; }; - 84FC31BE09B74A7700B75141 /* juce_BorderSize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC31BC09B74A7700B75141 /* juce_BorderSize.cpp */; }; - 84FC31BF09B74A7700B75141 /* juce_BorderSize.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC31BD09B74A7700B75141 /* juce_BorderSize.h */; }; - 84FED3C90CAA96DA00003997 /* juce_FileDragAndDropTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FED3C80CAA96DA00003997 /* juce_FileDragAndDropTarget.h */; }; - 84FFAF2B0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAF290C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp */; }; - 84FFAF2C0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FFAF2A0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h */; }; + 84F1E6E710403605006A1807 /* juce_Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6DC10403605006A1807 /* juce_Application.cpp */; }; + 84F1E6E810403605006A1807 /* juce_Application.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6DD10403605006A1807 /* juce_Application.h */; }; + 84F1E6E910403605006A1807 /* juce_ApplicationCommandID.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6DE10403605006A1807 /* juce_ApplicationCommandID.h */; }; + 84F1E6EA10403605006A1807 /* juce_ApplicationCommandInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6DF10403605006A1807 /* juce_ApplicationCommandInfo.cpp */; }; + 84F1E6EB10403605006A1807 /* juce_ApplicationCommandInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6E010403605006A1807 /* juce_ApplicationCommandInfo.h */; }; + 84F1E6EC10403605006A1807 /* juce_ApplicationCommandManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6E110403605006A1807 /* juce_ApplicationCommandManager.cpp */; }; + 84F1E6ED10403605006A1807 /* juce_ApplicationCommandManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6E210403605006A1807 /* juce_ApplicationCommandManager.h */; }; + 84F1E6EE10403605006A1807 /* juce_ApplicationCommandTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6E310403605006A1807 /* juce_ApplicationCommandTarget.cpp */; }; + 84F1E6EF10403605006A1807 /* juce_ApplicationCommandTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6E410403605006A1807 /* juce_ApplicationCommandTarget.h */; }; + 84F1E6F010403605006A1807 /* juce_ApplicationProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6E510403605006A1807 /* juce_ApplicationProperties.cpp */; }; + 84F1E6F110403605006A1807 /* juce_ApplicationProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6E610403605006A1807 /* juce_ApplicationProperties.h */; }; + 84F1E7EF10403615006A1807 /* juce_AiffAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6F410403614006A1807 /* juce_AiffAudioFormat.cpp */; }; + 84F1E7F010403615006A1807 /* juce_AiffAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6F510403614006A1807 /* juce_AiffAudioFormat.h */; }; + 84F1E7F110403615006A1807 /* juce_AudioCDBurner.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6F610403614006A1807 /* juce_AudioCDBurner.h */; }; + 84F1E7F210403615006A1807 /* juce_AudioCDReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6F710403614006A1807 /* juce_AudioCDReader.cpp */; }; + 84F1E7F310403615006A1807 /* juce_AudioCDReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6F810403614006A1807 /* juce_AudioCDReader.h */; }; + 84F1E7F410403615006A1807 /* juce_AudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6F910403614006A1807 /* juce_AudioFormat.cpp */; }; + 84F1E7F510403615006A1807 /* juce_AudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6FA10403614006A1807 /* juce_AudioFormat.h */; }; + 84F1E7F610403615006A1807 /* juce_AudioFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6FB10403614006A1807 /* juce_AudioFormatManager.cpp */; }; + 84F1E7F710403615006A1807 /* juce_AudioFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6FC10403614006A1807 /* juce_AudioFormatManager.h */; }; + 84F1E7F810403615006A1807 /* juce_AudioFormatReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6FD10403614006A1807 /* juce_AudioFormatReader.h */; }; + 84F1E7F910403615006A1807 /* juce_AudioFormatWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E6FE10403614006A1807 /* juce_AudioFormatWriter.h */; }; + 84F1E7FA10403615006A1807 /* juce_AudioSubsectionReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E6FF10403614006A1807 /* juce_AudioSubsectionReader.cpp */; }; + 84F1E7FB10403615006A1807 /* juce_AudioSubsectionReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70010403614006A1807 /* juce_AudioSubsectionReader.h */; }; + 84F1E7FC10403615006A1807 /* juce_AudioThumbnail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E70110403614006A1807 /* juce_AudioThumbnail.cpp */; }; + 84F1E7FD10403615006A1807 /* juce_AudioThumbnail.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70210403614006A1807 /* juce_AudioThumbnail.h */; }; + 84F1E7FE10403615006A1807 /* juce_AudioThumbnailCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E70310403614006A1807 /* juce_AudioThumbnailCache.cpp */; }; + 84F1E7FF10403615006A1807 /* juce_AudioThumbnailCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70410403614006A1807 /* juce_AudioThumbnailCache.h */; }; + 84F1E80010403615006A1807 /* juce_FlacAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70510403614006A1807 /* juce_FlacAudioFormat.h */; }; + 84F1E80110403615006A1807 /* juce_OggVorbisAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70610403614006A1807 /* juce_OggVorbisAudioFormat.h */; }; + 84F1E80210403615006A1807 /* juce_QuickTimeAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70710403614006A1807 /* juce_QuickTimeAudioFormat.h */; }; + 84F1E80310403615006A1807 /* juce_WavAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E70810403614006A1807 /* juce_WavAudioFormat.h */; }; + 84F1E80410403615006A1807 /* juce_WavAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E70910403614006A1807 /* juce_WavAudioFormat.cpp */; }; + 84F1E80510403615006A1807 /* juce_QuickTimeAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E70A10403614006A1807 /* juce_QuickTimeAudioFormat.cpp */; }; + 84F1E80610403615006A1807 /* juce_FlacAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E70B10403614006A1807 /* juce_FlacAudioFormat.cpp */; }; + 84F1E80710403615006A1807 /* juce_OggVorbisAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E70C10403614006A1807 /* juce_OggVorbisAudioFormat.cpp */; }; + 84F1E87A10403615006A1807 /* juce_AudioFormatReaderSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E79310403614006A1807 /* juce_AudioFormatReaderSource.cpp */; }; + 84F1E87B10403615006A1807 /* juce_AudioFormatReaderSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79410403614006A1807 /* juce_AudioFormatReaderSource.h */; }; + 84F1E87C10403615006A1807 /* juce_AudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79510403614006A1807 /* juce_AudioSource.h */; }; + 84F1E87D10403615006A1807 /* juce_AudioSourcePlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E79610403614006A1807 /* juce_AudioSourcePlayer.cpp */; }; + 84F1E87E10403615006A1807 /* juce_AudioSourcePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79710403614006A1807 /* juce_AudioSourcePlayer.h */; }; + 84F1E87F10403615006A1807 /* juce_AudioTransportSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E79810403614006A1807 /* juce_AudioTransportSource.cpp */; }; + 84F1E88010403615006A1807 /* juce_AudioTransportSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79910403614006A1807 /* juce_AudioTransportSource.h */; }; + 84F1E88110403615006A1807 /* juce_BufferingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E79A10403614006A1807 /* juce_BufferingAudioSource.cpp */; }; + 84F1E88210403615006A1807 /* juce_BufferingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79B10403614006A1807 /* juce_BufferingAudioSource.h */; }; + 84F1E88310403615006A1807 /* juce_ChannelRemappingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E79C10403614006A1807 /* juce_ChannelRemappingAudioSource.cpp */; }; + 84F1E88410403615006A1807 /* juce_ChannelRemappingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79D10403614006A1807 /* juce_ChannelRemappingAudioSource.h */; }; + 84F1E88510403615006A1807 /* juce_IIRFilterAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E79E10403614006A1807 /* juce_IIRFilterAudioSource.cpp */; }; + 84F1E88610403615006A1807 /* juce_IIRFilterAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E79F10403614006A1807 /* juce_IIRFilterAudioSource.h */; }; + 84F1E88710403615006A1807 /* juce_MixerAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7A010403614006A1807 /* juce_MixerAudioSource.cpp */; }; + 84F1E88810403615006A1807 /* juce_MixerAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7A110403614006A1807 /* juce_MixerAudioSource.h */; }; + 84F1E88910403615006A1807 /* juce_PositionableAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7A210403614006A1807 /* juce_PositionableAudioSource.h */; }; + 84F1E88A10403615006A1807 /* juce_ResamplingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7A310403614006A1807 /* juce_ResamplingAudioSource.cpp */; }; + 84F1E88B10403615006A1807 /* juce_ResamplingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7A410403614006A1807 /* juce_ResamplingAudioSource.h */; }; + 84F1E88C10403615006A1807 /* juce_ToneGeneratorAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7A510403614006A1807 /* juce_ToneGeneratorAudioSource.cpp */; }; + 84F1E88D10403615006A1807 /* juce_ToneGeneratorAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7A610403614006A1807 /* juce_ToneGeneratorAudioSource.h */; }; + 84F1E88E10403615006A1807 /* juce_AudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7A810403614006A1807 /* juce_AudioDeviceManager.cpp */; }; + 84F1E88F10403615006A1807 /* juce_AudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7A910403614006A1807 /* juce_AudioDeviceManager.h */; }; + 84F1E89010403615006A1807 /* juce_AudioIODevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7AA10403614006A1807 /* juce_AudioIODevice.cpp */; }; + 84F1E89110403615006A1807 /* juce_AudioIODevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7AB10403614006A1807 /* juce_AudioIODevice.h */; }; + 84F1E89210403615006A1807 /* juce_AudioIODeviceType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7AC10403614006A1807 /* juce_AudioIODeviceType.cpp */; }; + 84F1E89310403615006A1807 /* juce_AudioIODeviceType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7AD10403614006A1807 /* juce_AudioIODeviceType.h */; }; + 84F1E89410403615006A1807 /* juce_MidiInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7AE10403614006A1807 /* juce_MidiInput.h */; }; + 84F1E89510403615006A1807 /* juce_MidiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7AF10403614006A1807 /* juce_MidiOutput.cpp */; }; + 84F1E89610403615006A1807 /* juce_MidiOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7B010403614006A1807 /* juce_MidiOutput.h */; }; + 84F1E89710403615006A1807 /* juce_AudioDataConverters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7B210403614006A1807 /* juce_AudioDataConverters.cpp */; }; + 84F1E89810403615006A1807 /* juce_AudioDataConverters.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7B310403614006A1807 /* juce_AudioDataConverters.h */; }; + 84F1E89910403615006A1807 /* juce_AudioSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7B410403614006A1807 /* juce_AudioSampleBuffer.cpp */; }; + 84F1E89A10403615006A1807 /* juce_AudioSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7B510403614006A1807 /* juce_AudioSampleBuffer.h */; }; + 84F1E89B10403615006A1807 /* juce_IIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7B610403614006A1807 /* juce_IIRFilter.cpp */; }; + 84F1E89C10403615006A1807 /* juce_IIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7B710403614006A1807 /* juce_IIRFilter.h */; }; + 84F1E89D10403615006A1807 /* juce_MidiBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7B910403614006A1807 /* juce_MidiBuffer.cpp */; }; + 84F1E89E10403615006A1807 /* juce_MidiBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7BA10403614006A1807 /* juce_MidiBuffer.h */; }; + 84F1E89F10403615006A1807 /* juce_MidiFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7BB10403614006A1807 /* juce_MidiFile.cpp */; }; + 84F1E8A010403615006A1807 /* juce_MidiFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7BC10403614006A1807 /* juce_MidiFile.h */; }; + 84F1E8A110403615006A1807 /* juce_MidiKeyboardState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7BD10403614006A1807 /* juce_MidiKeyboardState.cpp */; }; + 84F1E8A210403615006A1807 /* juce_MidiKeyboardState.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7BE10403614006A1807 /* juce_MidiKeyboardState.h */; }; + 84F1E8A310403615006A1807 /* juce_MidiMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7BF10403614006A1807 /* juce_MidiMessage.cpp */; }; + 84F1E8A410403615006A1807 /* juce_MidiMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7C010403614006A1807 /* juce_MidiMessage.h */; }; + 84F1E8A510403615006A1807 /* juce_MidiMessageCollector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7C110403614006A1807 /* juce_MidiMessageCollector.cpp */; }; + 84F1E8A610403615006A1807 /* juce_MidiMessageCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7C210403614006A1807 /* juce_MidiMessageCollector.h */; }; + 84F1E8A710403615006A1807 /* juce_MidiMessageSequence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7C310403614006A1807 /* juce_MidiMessageSequence.cpp */; }; + 84F1E8A810403615006A1807 /* juce_MidiMessageSequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7C410403614006A1807 /* juce_MidiMessageSequence.h */; }; + 84F1E8A910403615006A1807 /* juce_AudioPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7C610403614006A1807 /* juce_AudioPluginFormat.cpp */; }; + 84F1E8AA10403615006A1807 /* juce_AudioPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7C710403614006A1807 /* juce_AudioPluginFormat.h */; }; + 84F1E8AB10403615006A1807 /* juce_AudioPluginFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7C810403614006A1807 /* juce_AudioPluginFormatManager.cpp */; }; + 84F1E8AC10403615006A1807 /* juce_AudioPluginFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7C910403614006A1807 /* juce_AudioPluginFormatManager.h */; }; + 84F1E8AD10403615006A1807 /* juce_AudioPluginInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7CA10403614006A1807 /* juce_AudioPluginInstance.cpp */; }; + 84F1E8AE10403615006A1807 /* juce_AudioPluginInstance.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7CB10403614006A1807 /* juce_AudioPluginInstance.h */; }; + 84F1E8AF10403615006A1807 /* juce_KnownPluginList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7CC10403614006A1807 /* juce_KnownPluginList.cpp */; }; + 84F1E8B010403615006A1807 /* juce_KnownPluginList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7CD10403614006A1807 /* juce_KnownPluginList.h */; }; + 84F1E8B110403615006A1807 /* juce_PluginDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7CE10403614006A1807 /* juce_PluginDescription.cpp */; }; + 84F1E8B210403615006A1807 /* juce_PluginDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7CF10403614006A1807 /* juce_PluginDescription.h */; }; + 84F1E8B310403615006A1807 /* juce_PluginDirectoryScanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7D010403614006A1807 /* juce_PluginDirectoryScanner.cpp */; }; + 84F1E8B410403615006A1807 /* juce_PluginDirectoryScanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7D110403614006A1807 /* juce_PluginDirectoryScanner.h */; }; + 84F1E8B510403615006A1807 /* juce_PluginListComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7D210403614006A1807 /* juce_PluginListComponent.cpp */; }; + 84F1E8B610403615006A1807 /* juce_PluginListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7D310403614006A1807 /* juce_PluginListComponent.h */; }; + 84F1E8B710403615006A1807 /* juce_AudioUnitPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7D510403614006A1807 /* juce_AudioUnitPluginFormat.h */; }; + 84F1E8BA10403615006A1807 /* juce_VSTMidiEventList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7D810403614006A1807 /* juce_VSTMidiEventList.h */; }; + 84F1E8BB10403615006A1807 /* juce_VSTPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7D910403614006A1807 /* juce_VSTPluginFormat.h */; }; + 84F1E8BC10403615006A1807 /* juce_VSTPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7DA10403614006A1807 /* juce_VSTPluginFormat.cpp */; }; + 84F1E8BD10403615006A1807 /* juce_VSTPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7DB10403614006A1807 /* juce_VSTPluginFormat.mm */; }; + 84F1E8BE10403615006A1807 /* juce_AudioUnitPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7DC10403614006A1807 /* juce_AudioUnitPluginFormat.mm */; }; + 84F1E8BF10403615006A1807 /* juce_AudioPlayHead.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7DE10403615006A1807 /* juce_AudioPlayHead.h */; }; + 84F1E8C010403615006A1807 /* juce_AudioProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7DF10403615006A1807 /* juce_AudioProcessor.cpp */; }; + 84F1E8C110403615006A1807 /* juce_AudioProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7E010403615006A1807 /* juce_AudioProcessor.h */; }; + 84F1E8C210403615006A1807 /* juce_AudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7E110403615006A1807 /* juce_AudioProcessorEditor.cpp */; }; + 84F1E8C310403615006A1807 /* juce_AudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7E210403615006A1807 /* juce_AudioProcessorEditor.h */; }; + 84F1E8C410403615006A1807 /* juce_AudioProcessorGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7E310403615006A1807 /* juce_AudioProcessorGraph.cpp */; }; + 84F1E8C510403615006A1807 /* juce_AudioProcessorGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7E410403615006A1807 /* juce_AudioProcessorGraph.h */; }; + 84F1E8C610403615006A1807 /* juce_AudioProcessorListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7E510403615006A1807 /* juce_AudioProcessorListener.h */; }; + 84F1E8C710403615006A1807 /* juce_AudioProcessorPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7E610403615006A1807 /* juce_AudioProcessorPlayer.cpp */; }; + 84F1E8C810403615006A1807 /* juce_AudioProcessorPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7E710403615006A1807 /* juce_AudioProcessorPlayer.h */; }; + 84F1E8C910403615006A1807 /* juce_GenericAudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7E810403615006A1807 /* juce_GenericAudioProcessorEditor.cpp */; }; + 84F1E8CA10403615006A1807 /* juce_GenericAudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7E910403615006A1807 /* juce_GenericAudioProcessorEditor.h */; }; + 84F1E8CB10403615006A1807 /* juce_Sampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7EB10403615006A1807 /* juce_Sampler.cpp */; }; + 84F1E8CC10403615006A1807 /* juce_Sampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7EC10403615006A1807 /* juce_Sampler.h */; }; + 84F1E8CD10403615006A1807 /* juce_Synthesiser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E7ED10403615006A1807 /* juce_Synthesiser.cpp */; }; + 84F1E8CE10403615006A1807 /* juce_Synthesiser.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E7EE10403615006A1807 /* juce_Synthesiser.h */; }; + 84F1E8E110403671006A1807 /* juce_Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D010403671006A1807 /* juce_Array.h */; }; + 84F1E8E210403671006A1807 /* juce_ArrayAllocationBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D110403671006A1807 /* juce_ArrayAllocationBase.h */; }; + 84F1E8E310403671006A1807 /* juce_BitArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8D210403671006A1807 /* juce_BitArray.cpp */; }; + 84F1E8E410403671006A1807 /* juce_BitArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D310403671006A1807 /* juce_BitArray.h */; }; + 84F1E8E510403671006A1807 /* juce_ElementComparator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D410403671006A1807 /* juce_ElementComparator.h */; }; + 84F1E8E610403671006A1807 /* juce_MemoryBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8D510403671006A1807 /* juce_MemoryBlock.cpp */; }; + 84F1E8E710403671006A1807 /* juce_MemoryBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D610403671006A1807 /* juce_MemoryBlock.h */; }; + 84F1E8E810403671006A1807 /* juce_OwnedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D710403671006A1807 /* juce_OwnedArray.h */; }; + 84F1E8E910403671006A1807 /* juce_PropertySet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8D810403671006A1807 /* juce_PropertySet.cpp */; }; + 84F1E8EA10403671006A1807 /* juce_PropertySet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8D910403671006A1807 /* juce_PropertySet.h */; }; + 84F1E8EB10403671006A1807 /* juce_ReferenceCountedArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8DA10403671006A1807 /* juce_ReferenceCountedArray.h */; }; + 84F1E8EC10403671006A1807 /* juce_ReferenceCountedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8DB10403671006A1807 /* juce_ReferenceCountedObject.h */; }; + 84F1E8ED10403671006A1807 /* juce_SortedSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8DC10403671006A1807 /* juce_SortedSet.h */; }; + 84F1E8EE10403671006A1807 /* juce_SparseSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8DD10403671006A1807 /* juce_SparseSet.h */; }; + 84F1E8EF10403671006A1807 /* juce_Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8DE10403671006A1807 /* juce_Variant.cpp */; }; + 84F1E8F010403671006A1807 /* juce_Variant.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8DF10403671006A1807 /* juce_Variant.h */; }; + 84F1E8F110403671006A1807 /* juce_VoidArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8E010403671006A1807 /* juce_VoidArray.h */; }; + 84F1E90C10403681006A1807 /* juce_Time.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8F310403681006A1807 /* juce_Time.h */; }; + 84F1E90D10403681006A1807 /* juce_Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8F410403681006A1807 /* juce_Time.cpp */; }; + 84F1E90E10403681006A1807 /* juce_SystemStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8F510403681006A1807 /* juce_SystemStats.cpp */; }; + 84F1E90F10403681006A1807 /* juce_SystemStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8F610403681006A1807 /* juce_SystemStats.h */; }; + 84F1E91010403681006A1807 /* juce_Singleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8F710403681006A1807 /* juce_Singleton.h */; }; + 84F1E91110403681006A1807 /* juce_RelativeTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8F810403681006A1807 /* juce_RelativeTime.cpp */; }; + 84F1E91210403681006A1807 /* juce_RelativeTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8F910403681006A1807 /* juce_RelativeTime.h */; }; + 84F1E91310403681006A1807 /* juce_PlatformDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8FA10403681006A1807 /* juce_PlatformDefs.h */; }; + 84F1E91410403681006A1807 /* juce_Random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E8FB10403681006A1807 /* juce_Random.cpp */; }; + 84F1E91510403681006A1807 /* juce_Random.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8FC10403681006A1807 /* juce_Random.h */; }; + 84F1E91610403681006A1807 /* juce_MathsFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8FD10403681006A1807 /* juce_MathsFunctions.h */; }; + 84F1E91710403681006A1807 /* juce_Memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8FE10403681006A1807 /* juce_Memory.h */; }; + 84F1E91810403681006A1807 /* juce_Logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E8FF10403681006A1807 /* juce_Logger.h */; }; + 84F1E91910403681006A1807 /* juce_Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E90010403681006A1807 /* juce_Logger.cpp */; }; + 84F1E91A10403681006A1807 /* juce_Initialisation.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90110403681006A1807 /* juce_Initialisation.h */; }; + 84F1E91B10403681006A1807 /* juce_FileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90210403681006A1807 /* juce_FileLogger.h */; }; + 84F1E91C10403681006A1807 /* juce_FileLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E90310403681006A1807 /* juce_FileLogger.cpp */; }; + 84F1E91D10403681006A1807 /* juce_DataConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90410403681006A1807 /* juce_DataConversions.h */; }; + 84F1E91E10403681006A1807 /* juce_Atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90510403681006A1807 /* juce_Atomic.h */; }; + 84F1E91F10403681006A1807 /* juce_Uuid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E90610403681006A1807 /* juce_Uuid.cpp */; }; + 84F1E92010403681006A1807 /* juce_Uuid.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90710403681006A1807 /* juce_Uuid.h */; }; + 84F1E92110403681006A1807 /* juce_PerformanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E90810403681006A1807 /* juce_PerformanceCounter.cpp */; }; + 84F1E92210403681006A1807 /* juce_PerformanceCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90910403681006A1807 /* juce_PerformanceCounter.h */; }; + 84F1E92310403681006A1807 /* juce_PlatformUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90A10403681006A1807 /* juce_PlatformUtilities.h */; }; + 84F1E92410403681006A1807 /* juce_StandardHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E90B10403681006A1807 /* juce_StandardHeader.h */; }; + 84F1E9331040369C006A1807 /* juce_UndoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9261040369C006A1807 /* juce_UndoManager.h */; }; + 84F1E9341040369C006A1807 /* juce_SystemClipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9271040369C006A1807 /* juce_SystemClipboard.h */; }; + 84F1E9351040369C006A1807 /* juce_UndoManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9281040369C006A1807 /* juce_UndoManager.cpp */; }; + 84F1E9361040369C006A1807 /* juce_PropertiesFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9291040369C006A1807 /* juce_PropertiesFile.h */; }; + 84F1E9371040369C006A1807 /* juce_UndoableAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E92A1040369C006A1807 /* juce_UndoableAction.h */; }; + 84F1E9381040369C006A1807 /* juce_SelectedItemSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E92B1040369C006A1807 /* juce_SelectedItemSet.h */; }; + 84F1E9391040369C006A1807 /* juce_DeletedAtShutdown.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E92C1040369C006A1807 /* juce_DeletedAtShutdown.h */; }; + 84F1E93A1040369C006A1807 /* juce_PropertiesFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E92D1040369C006A1807 /* juce_PropertiesFile.cpp */; }; + 84F1E93B1040369C006A1807 /* juce_RecentlyOpenedFilesList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E92E1040369C006A1807 /* juce_RecentlyOpenedFilesList.h */; }; + 84F1E93C1040369C006A1807 /* juce_FileBasedDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E92F1040369C006A1807 /* juce_FileBasedDocument.h */; }; + 84F1E93D1040369C006A1807 /* juce_RecentlyOpenedFilesList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9301040369C006A1807 /* juce_RecentlyOpenedFilesList.cpp */; }; + 84F1E93E1040369C006A1807 /* juce_FileBasedDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9311040369C006A1807 /* juce_FileBasedDocument.cpp */; }; + 84F1E93F1040369C006A1807 /* juce_DeletedAtShutdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9321040369C006A1807 /* juce_DeletedAtShutdown.cpp */; }; + 84F1E965104036B3006A1807 /* juce_BlowFish.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E941104036B3006A1807 /* juce_BlowFish.cpp */; }; + 84F1E966104036B3006A1807 /* juce_BlowFish.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E942104036B3006A1807 /* juce_BlowFish.h */; }; + 84F1E967104036B3006A1807 /* juce_MD5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E943104036B3006A1807 /* juce_MD5.cpp */; }; + 84F1E968104036B3006A1807 /* juce_MD5.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E944104036B3006A1807 /* juce_MD5.h */; }; + 84F1E969104036B3006A1807 /* juce_Primes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E945104036B3006A1807 /* juce_Primes.cpp */; }; + 84F1E96A104036B3006A1807 /* juce_Primes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E946104036B3006A1807 /* juce_Primes.h */; }; + 84F1E96B104036B3006A1807 /* juce_RSAKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E947104036B3006A1807 /* juce_RSAKey.cpp */; }; + 84F1E96C104036B3006A1807 /* juce_RSAKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E948104036B3006A1807 /* juce_RSAKey.h */; }; + 84F1E96D104036B3006A1807 /* juce_ActionBroadcaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E94A104036B3006A1807 /* juce_ActionBroadcaster.cpp */; }; + 84F1E96E104036B3006A1807 /* juce_ActionBroadcaster.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E94B104036B3006A1807 /* juce_ActionBroadcaster.h */; }; + 84F1E96F104036B3006A1807 /* juce_ActionListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E94C104036B3006A1807 /* juce_ActionListener.h */; }; + 84F1E970104036B3006A1807 /* juce_ActionListenerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E94D104036B3006A1807 /* juce_ActionListenerList.cpp */; }; + 84F1E971104036B3006A1807 /* juce_ActionListenerList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E94E104036B3006A1807 /* juce_ActionListenerList.h */; }; + 84F1E972104036B3006A1807 /* juce_AsyncUpdater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E94F104036B3006A1807 /* juce_AsyncUpdater.cpp */; }; + 84F1E973104036B3006A1807 /* juce_AsyncUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E950104036B3006A1807 /* juce_AsyncUpdater.h */; }; + 84F1E974104036B3006A1807 /* juce_CallbackMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E951104036B3006A1807 /* juce_CallbackMessage.h */; }; + 84F1E975104036B3006A1807 /* juce_ChangeBroadcaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E952104036B3006A1807 /* juce_ChangeBroadcaster.cpp */; }; + 84F1E976104036B3006A1807 /* juce_ChangeBroadcaster.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E953104036B3006A1807 /* juce_ChangeBroadcaster.h */; }; + 84F1E977104036B3006A1807 /* juce_ChangeListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E954104036B3006A1807 /* juce_ChangeListener.h */; }; + 84F1E978104036B3006A1807 /* juce_ChangeListenerList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E955104036B3006A1807 /* juce_ChangeListenerList.cpp */; }; + 84F1E979104036B3006A1807 /* juce_ChangeListenerList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E956104036B3006A1807 /* juce_ChangeListenerList.h */; }; + 84F1E97A104036B3006A1807 /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E957104036B3006A1807 /* juce_InterprocessConnection.cpp */; }; + 84F1E97B104036B3006A1807 /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E958104036B3006A1807 /* juce_InterprocessConnection.h */; }; + 84F1E97C104036B3006A1807 /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E959104036B3006A1807 /* juce_InterprocessConnectionServer.cpp */; }; + 84F1E97D104036B3006A1807 /* juce_InterprocessConnectionServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E95A104036B3006A1807 /* juce_InterprocessConnectionServer.h */; }; + 84F1E97E104036B3006A1807 /* juce_Message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E95B104036B3006A1807 /* juce_Message.cpp */; }; + 84F1E97F104036B3006A1807 /* juce_Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E95C104036B3006A1807 /* juce_Message.h */; }; + 84F1E980104036B3006A1807 /* juce_MessageListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E95D104036B3006A1807 /* juce_MessageListener.cpp */; }; + 84F1E981104036B3006A1807 /* juce_MessageListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E95E104036B3006A1807 /* juce_MessageListener.h */; }; + 84F1E982104036B3006A1807 /* juce_MessageManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E95F104036B3006A1807 /* juce_MessageManager.cpp */; }; + 84F1E983104036B3006A1807 /* juce_MessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E960104036B3006A1807 /* juce_MessageManager.h */; }; + 84F1E984104036B3006A1807 /* juce_MultiTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E961104036B3006A1807 /* juce_MultiTimer.cpp */; }; + 84F1E985104036B3006A1807 /* juce_MultiTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E962104036B3006A1807 /* juce_MultiTimer.h */; }; + 84F1E986104036B3006A1807 /* juce_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E963104036B3006A1807 /* juce_Timer.cpp */; }; + 84F1E987104036B3006A1807 /* juce_Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E964104036B3006A1807 /* juce_Timer.h */; }; + 84F1E9EA104036D6006A1807 /* juce_DirectoryIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E98A104036D6006A1807 /* juce_DirectoryIterator.cpp */; }; + 84F1E9EB104036D6006A1807 /* juce_DirectoryIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E98B104036D6006A1807 /* juce_DirectoryIterator.h */; }; + 84F1E9EC104036D6006A1807 /* juce_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E98C104036D6006A1807 /* juce_File.cpp */; }; + 84F1E9ED104036D6006A1807 /* juce_File.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E98D104036D6006A1807 /* juce_File.h */; }; + 84F1E9EE104036D6006A1807 /* juce_FileInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E98E104036D6006A1807 /* juce_FileInputStream.cpp */; }; + 84F1E9EF104036D6006A1807 /* juce_FileInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E98F104036D6006A1807 /* juce_FileInputStream.h */; }; + 84F1E9F0104036D6006A1807 /* juce_FileOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E990104036D6006A1807 /* juce_FileOutputStream.cpp */; }; + 84F1E9F1104036D6006A1807 /* juce_FileOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E991104036D6006A1807 /* juce_FileOutputStream.h */; }; + 84F1E9F2104036D6006A1807 /* juce_FileSearchPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E992104036D6006A1807 /* juce_FileSearchPath.cpp */; }; + 84F1E9F3104036D6006A1807 /* juce_FileSearchPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E993104036D6006A1807 /* juce_FileSearchPath.h */; }; + 84F1E9F4104036D6006A1807 /* juce_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E994104036D6006A1807 /* juce_NamedPipe.cpp */; }; + 84F1E9F5104036D6006A1807 /* juce_NamedPipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E995104036D6006A1807 /* juce_NamedPipe.h */; }; + 84F1E9F6104036D6006A1807 /* juce_ZipFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E996104036D6006A1807 /* juce_ZipFile.cpp */; }; + 84F1E9F7104036D6006A1807 /* juce_ZipFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E997104036D6006A1807 /* juce_ZipFile.h */; }; + 84F1E9F8104036D6006A1807 /* juce_Socket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E999104036D6006A1807 /* juce_Socket.cpp */; }; + 84F1E9F9104036D6006A1807 /* juce_Socket.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E99A104036D6006A1807 /* juce_Socket.h */; }; + 84F1E9FA104036D6006A1807 /* juce_URL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E99B104036D6006A1807 /* juce_URL.cpp */; }; + 84F1E9FB104036D6006A1807 /* juce_URL.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E99C104036D6006A1807 /* juce_URL.h */; }; + 84F1E9FC104036D6006A1807 /* juce_BufferedInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E99E104036D6006A1807 /* juce_BufferedInputStream.cpp */; }; + 84F1E9FD104036D6006A1807 /* juce_BufferedInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E99F104036D6006A1807 /* juce_BufferedInputStream.h */; }; + 84F1E9FE104036D6006A1807 /* juce_FileInputSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9A0104036D6006A1807 /* juce_FileInputSource.cpp */; }; + 84F1E9FF104036D6006A1807 /* juce_FileInputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9A1104036D6006A1807 /* juce_FileInputSource.h */; }; + 84F1EA00104036D6006A1807 /* juce_GZIPCompressorOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9A2104036D6006A1807 /* juce_GZIPCompressorOutputStream.cpp */; }; + 84F1EA01104036D6006A1807 /* juce_GZIPCompressorOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9A3104036D6006A1807 /* juce_GZIPCompressorOutputStream.h */; }; + 84F1EA02104036D6006A1807 /* juce_GZIPDecompressorInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9A4104036D6006A1807 /* juce_GZIPDecompressorInputStream.cpp */; }; + 84F1EA03104036D6006A1807 /* juce_GZIPDecompressorInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9A5104036D6006A1807 /* juce_GZIPDecompressorInputStream.h */; }; + 84F1EA04104036D6006A1807 /* juce_InputSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9A6104036D6006A1807 /* juce_InputSource.h */; }; + 84F1EA05104036D6006A1807 /* juce_MemoryInputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9A7104036D6006A1807 /* juce_MemoryInputStream.cpp */; }; + 84F1EA06104036D6006A1807 /* juce_MemoryInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9A8104036D6006A1807 /* juce_MemoryInputStream.h */; }; + 84F1EA07104036D6006A1807 /* juce_MemoryOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9A9104036D6006A1807 /* juce_MemoryOutputStream.cpp */; }; + 84F1EA08104036D6006A1807 /* juce_MemoryOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9AA104036D6006A1807 /* juce_MemoryOutputStream.h */; }; + 84F1EA09104036D6006A1807 /* juce_SubregionStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9AB104036D6006A1807 /* juce_SubregionStream.cpp */; }; + 84F1EA0A104036D6006A1807 /* juce_SubregionStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9AC104036D6006A1807 /* juce_SubregionStream.h */; }; + 84F1EA21104036D6006A1807 /* juce_InputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9C5104036D6006A1807 /* juce_InputStream.cpp */; }; + 84F1EA22104036D6006A1807 /* juce_InputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9C6104036D6006A1807 /* juce_InputStream.h */; }; + 84F1EA23104036D6006A1807 /* juce_OutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9C7104036D6006A1807 /* juce_OutputStream.cpp */; }; + 84F1EA24104036D6006A1807 /* juce_OutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9C8104036D6006A1807 /* juce_OutputStream.h */; }; + 84F1EA25104036D6006A1807 /* juce_CharacterFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9CA104036D6006A1807 /* juce_CharacterFunctions.cpp */; }; + 84F1EA26104036D6006A1807 /* juce_CharacterFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9CB104036D6006A1807 /* juce_CharacterFunctions.h */; }; + 84F1EA27104036D6006A1807 /* juce_LocalisedStrings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9CC104036D6006A1807 /* juce_LocalisedStrings.cpp */; }; + 84F1EA28104036D6006A1807 /* juce_LocalisedStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9CD104036D6006A1807 /* juce_LocalisedStrings.h */; }; + 84F1EA29104036D6006A1807 /* juce_String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9CE104036D6006A1807 /* juce_String.cpp */; }; + 84F1EA2A104036D6006A1807 /* juce_String.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9CF104036D6006A1807 /* juce_String.h */; }; + 84F1EA2B104036D6006A1807 /* juce_StringArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9D0104036D6006A1807 /* juce_StringArray.cpp */; }; + 84F1EA2C104036D6006A1807 /* juce_StringArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9D1104036D6006A1807 /* juce_StringArray.h */; }; + 84F1EA2D104036D6006A1807 /* juce_StringPairArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9D2104036D6006A1807 /* juce_StringPairArray.cpp */; }; + 84F1EA2E104036D6006A1807 /* juce_StringPairArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9D3104036D6006A1807 /* juce_StringPairArray.h */; }; + 84F1EA2F104036D6006A1807 /* juce_XmlDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9D4104036D6006A1807 /* juce_XmlDocument.cpp */; }; + 84F1EA30104036D6006A1807 /* juce_XmlDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9D5104036D6006A1807 /* juce_XmlDocument.h */; }; + 84F1EA31104036D6006A1807 /* juce_XmlElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9D6104036D6006A1807 /* juce_XmlElement.cpp */; }; + 84F1EA32104036D6006A1807 /* juce_XmlElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9D7104036D6006A1807 /* juce_XmlElement.h */; }; + 84F1EA33104036D6006A1807 /* juce_CriticalSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9D9104036D6006A1807 /* juce_CriticalSection.h */; }; + 84F1EA34104036D6006A1807 /* juce_InterProcessLock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9DA104036D6006A1807 /* juce_InterProcessLock.cpp */; }; + 84F1EA35104036D6006A1807 /* juce_InterProcessLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9DB104036D6006A1807 /* juce_InterProcessLock.h */; }; + 84F1EA36104036D6006A1807 /* juce_Process.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9DC104036D6006A1807 /* juce_Process.h */; }; + 84F1EA37104036D6006A1807 /* juce_ReadWriteLock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9DD104036D6006A1807 /* juce_ReadWriteLock.cpp */; }; + 84F1EA38104036D6006A1807 /* juce_ReadWriteLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9DE104036D6006A1807 /* juce_ReadWriteLock.h */; }; + 84F1EA39104036D6006A1807 /* juce_ScopedLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9DF104036D6006A1807 /* juce_ScopedLock.h */; }; + 84F1EA3A104036D6006A1807 /* juce_ScopedReadLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E0104036D6006A1807 /* juce_ScopedReadLock.h */; }; + 84F1EA3B104036D6006A1807 /* juce_ScopedTryLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E1104036D6006A1807 /* juce_ScopedTryLock.h */; }; + 84F1EA3C104036D6006A1807 /* juce_ScopedWriteLock.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E2104036D6006A1807 /* juce_ScopedWriteLock.h */; }; + 84F1EA3D104036D6006A1807 /* juce_Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9E3104036D6006A1807 /* juce_Thread.cpp */; }; + 84F1EA3E104036D6006A1807 /* juce_Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E4104036D6006A1807 /* juce_Thread.h */; }; + 84F1EA3F104036D6006A1807 /* juce_ThreadPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9E5104036D6006A1807 /* juce_ThreadPool.cpp */; }; + 84F1EA40104036D6006A1807 /* juce_ThreadPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E6104036D6006A1807 /* juce_ThreadPool.h */; }; + 84F1EA41104036D6006A1807 /* juce_TimeSliceThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1E9E7104036D6006A1807 /* juce_TimeSliceThread.cpp */; }; + 84F1EA42104036D6006A1807 /* juce_TimeSliceThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E8104036D6006A1807 /* juce_TimeSliceThread.h */; }; + 84F1EA43104036D6006A1807 /* juce_WaitableEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1E9E9104036D6006A1807 /* juce_WaitableEvent.h */; }; + 84F1EBCC1040370A006A1807 /* juce_Component.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA4610403708006A1807 /* juce_Component.cpp */; }; + 84F1EBCD1040370A006A1807 /* juce_Component.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA4710403708006A1807 /* juce_Component.h */; }; + 84F1EBCE1040370A006A1807 /* juce_ComponentDeletionWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA4810403708006A1807 /* juce_ComponentDeletionWatcher.h */; }; + 84F1EBCF1040370A006A1807 /* juce_ComponentListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA4910403708006A1807 /* juce_ComponentListener.cpp */; }; + 84F1EBD01040370A006A1807 /* juce_ComponentListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA4A10403708006A1807 /* juce_ComponentListener.h */; }; + 84F1EBD11040370A006A1807 /* juce_Desktop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA4B10403708006A1807 /* juce_Desktop.cpp */; }; + 84F1EBD21040370A006A1807 /* juce_Desktop.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA4C10403708006A1807 /* juce_Desktop.h */; }; + 84F1EBD31040370A006A1807 /* juce_ArrowButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA4E10403708006A1807 /* juce_ArrowButton.cpp */; }; + 84F1EBD41040370A006A1807 /* juce_ArrowButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA4F10403708006A1807 /* juce_ArrowButton.h */; }; + 84F1EBD51040370A006A1807 /* juce_Button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5010403708006A1807 /* juce_Button.cpp */; }; + 84F1EBD61040370A006A1807 /* juce_Button.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5110403708006A1807 /* juce_Button.h */; }; + 84F1EBD71040370A006A1807 /* juce_DrawableButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5210403708006A1807 /* juce_DrawableButton.cpp */; }; + 84F1EBD81040370A006A1807 /* juce_DrawableButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5310403708006A1807 /* juce_DrawableButton.h */; }; + 84F1EBD91040370A006A1807 /* juce_HyperlinkButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5410403708006A1807 /* juce_HyperlinkButton.cpp */; }; + 84F1EBDA1040370A006A1807 /* juce_HyperlinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5510403709006A1807 /* juce_HyperlinkButton.h */; }; + 84F1EBDB1040370A006A1807 /* juce_ImageButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5610403709006A1807 /* juce_ImageButton.cpp */; }; + 84F1EBDC1040370A006A1807 /* juce_ImageButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5710403709006A1807 /* juce_ImageButton.h */; }; + 84F1EBDD1040370A006A1807 /* juce_ShapeButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5810403709006A1807 /* juce_ShapeButton.cpp */; }; + 84F1EBDE1040370A006A1807 /* juce_ShapeButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5910403709006A1807 /* juce_ShapeButton.h */; }; + 84F1EBDF1040370A006A1807 /* juce_TextButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5A10403709006A1807 /* juce_TextButton.cpp */; }; + 84F1EBE01040370A006A1807 /* juce_TextButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5B10403709006A1807 /* juce_TextButton.h */; }; + 84F1EBE11040370A006A1807 /* juce_ToggleButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5C10403709006A1807 /* juce_ToggleButton.cpp */; }; + 84F1EBE21040370A006A1807 /* juce_ToggleButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5D10403709006A1807 /* juce_ToggleButton.h */; }; + 84F1EBE31040370A006A1807 /* juce_ToolbarButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA5E10403709006A1807 /* juce_ToolbarButton.cpp */; }; + 84F1EBE41040370A006A1807 /* juce_ToolbarButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA5F10403709006A1807 /* juce_ToolbarButton.h */; }; + 84F1EBE51040370A006A1807 /* juce_ComboBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6110403709006A1807 /* juce_ComboBox.cpp */; }; + 84F1EBE61040370A006A1807 /* juce_ComboBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6210403709006A1807 /* juce_ComboBox.h */; }; + 84F1EBE71040370A006A1807 /* juce_Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6310403709006A1807 /* juce_Label.cpp */; }; + 84F1EBE81040370A006A1807 /* juce_Label.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6410403709006A1807 /* juce_Label.h */; }; + 84F1EBE91040370A006A1807 /* juce_ListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6510403709006A1807 /* juce_ListBox.cpp */; }; + 84F1EBEA1040370A006A1807 /* juce_ListBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6610403709006A1807 /* juce_ListBox.h */; }; + 84F1EBEB1040370A006A1807 /* juce_ProgressBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6710403709006A1807 /* juce_ProgressBar.cpp */; }; + 84F1EBEC1040370A006A1807 /* juce_ProgressBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6810403709006A1807 /* juce_ProgressBar.h */; }; + 84F1EBED1040370A006A1807 /* juce_Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6910403709006A1807 /* juce_Slider.cpp */; }; + 84F1EBEE1040370A006A1807 /* juce_Slider.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6A10403709006A1807 /* juce_Slider.h */; }; + 84F1EBEF1040370A006A1807 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6B10403709006A1807 /* juce_SliderListener.h */; }; + 84F1EBF01040370A006A1807 /* juce_TableHeaderComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6C10403709006A1807 /* juce_TableHeaderComponent.cpp */; }; + 84F1EBF11040370A006A1807 /* juce_TableHeaderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6D10403709006A1807 /* juce_TableHeaderComponent.h */; }; + 84F1EBF21040370A006A1807 /* juce_TableListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA6E10403709006A1807 /* juce_TableListBox.cpp */; }; + 84F1EBF31040370A006A1807 /* juce_TableListBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA6F10403709006A1807 /* juce_TableListBox.h */; }; + 84F1EBF41040370A006A1807 /* juce_TextEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7010403709006A1807 /* juce_TextEditor.cpp */; }; + 84F1EBF51040370A006A1807 /* juce_TextEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7110403709006A1807 /* juce_TextEditor.h */; }; + 84F1EBF61040370A006A1807 /* juce_Toolbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7210403709006A1807 /* juce_Toolbar.cpp */; }; + 84F1EBF71040370A006A1807 /* juce_Toolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7310403709006A1807 /* juce_Toolbar.h */; }; + 84F1EBF81040370A006A1807 /* juce_ToolbarItemComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7410403709006A1807 /* juce_ToolbarItemComponent.cpp */; }; + 84F1EBF91040370A006A1807 /* juce_ToolbarItemComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7510403709006A1807 /* juce_ToolbarItemComponent.h */; }; + 84F1EBFA1040370A006A1807 /* juce_ToolbarItemFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7610403709006A1807 /* juce_ToolbarItemFactory.h */; }; + 84F1EBFB1040370A006A1807 /* juce_ToolbarItemPalette.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7710403709006A1807 /* juce_ToolbarItemPalette.cpp */; }; + 84F1EBFC1040370A006A1807 /* juce_ToolbarItemPalette.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7810403709006A1807 /* juce_ToolbarItemPalette.h */; }; + 84F1EBFD1040370A006A1807 /* juce_TreeView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7910403709006A1807 /* juce_TreeView.cpp */; }; + 84F1EBFE1040370A006A1807 /* juce_TreeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7A10403709006A1807 /* juce_TreeView.h */; }; + 84F1EBFF1040370A006A1807 /* juce_DirectoryContentsDisplayComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7C10403709006A1807 /* juce_DirectoryContentsDisplayComponent.cpp */; }; + 84F1EC001040370A006A1807 /* juce_DirectoryContentsDisplayComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7D10403709006A1807 /* juce_DirectoryContentsDisplayComponent.h */; }; + 84F1EC011040370A006A1807 /* juce_DirectoryContentsList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA7E10403709006A1807 /* juce_DirectoryContentsList.cpp */; }; + 84F1EC021040370A006A1807 /* juce_DirectoryContentsList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA7F10403709006A1807 /* juce_DirectoryContentsList.h */; }; + 84F1EC031040370A006A1807 /* juce_FileBrowserComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8010403709006A1807 /* juce_FileBrowserComponent.cpp */; }; + 84F1EC041040370A006A1807 /* juce_FileBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8110403709006A1807 /* juce_FileBrowserComponent.h */; }; + 84F1EC051040370A006A1807 /* juce_FileBrowserListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8210403709006A1807 /* juce_FileBrowserListener.h */; }; + 84F1EC061040370A006A1807 /* juce_FileChooser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8310403709006A1807 /* juce_FileChooser.cpp */; }; + 84F1EC071040370A006A1807 /* juce_FileChooser.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8410403709006A1807 /* juce_FileChooser.h */; }; + 84F1EC081040370A006A1807 /* juce_FileChooserDialogBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8510403709006A1807 /* juce_FileChooserDialogBox.cpp */; }; + 84F1EC091040370A006A1807 /* juce_FileChooserDialogBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8610403709006A1807 /* juce_FileChooserDialogBox.h */; }; + 84F1EC0A1040370A006A1807 /* juce_FileFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8710403709006A1807 /* juce_FileFilter.cpp */; }; + 84F1EC0B1040370A006A1807 /* juce_FileFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8810403709006A1807 /* juce_FileFilter.h */; }; + 84F1EC0C1040370A006A1807 /* juce_FileListComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8910403709006A1807 /* juce_FileListComponent.cpp */; }; + 84F1EC0D1040370A006A1807 /* juce_FileListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8A10403709006A1807 /* juce_FileListComponent.h */; }; + 84F1EC0E1040370A006A1807 /* juce_FilenameComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8B10403709006A1807 /* juce_FilenameComponent.cpp */; }; + 84F1EC0F1040370A006A1807 /* juce_FilenameComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8C10403709006A1807 /* juce_FilenameComponent.h */; }; + 84F1EC101040370A006A1807 /* juce_FilePreviewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8D10403709006A1807 /* juce_FilePreviewComponent.h */; }; + 84F1EC111040370A006A1807 /* juce_FileSearchPathListComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA8E10403709006A1807 /* juce_FileSearchPathListComponent.cpp */; }; + 84F1EC121040370A006A1807 /* juce_FileSearchPathListComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA8F10403709006A1807 /* juce_FileSearchPathListComponent.h */; }; + 84F1EC131040370A006A1807 /* juce_FileTreeComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9010403709006A1807 /* juce_FileTreeComponent.cpp */; }; + 84F1EC141040370A006A1807 /* juce_FileTreeComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9110403709006A1807 /* juce_FileTreeComponent.h */; }; + 84F1EC151040370A006A1807 /* juce_ImagePreviewComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9210403709006A1807 /* juce_ImagePreviewComponent.cpp */; }; + 84F1EC161040370A006A1807 /* juce_ImagePreviewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9310403709006A1807 /* juce_ImagePreviewComponent.h */; }; + 84F1EC171040370A006A1807 /* juce_WildcardFileFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9410403709006A1807 /* juce_WildcardFileFilter.cpp */; }; + 84F1EC181040370A006A1807 /* juce_WildcardFileFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9510403709006A1807 /* juce_WildcardFileFilter.h */; }; + 84F1EC191040370A006A1807 /* juce_KeyboardFocusTraverser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9710403709006A1807 /* juce_KeyboardFocusTraverser.cpp */; }; + 84F1EC1A1040370A006A1807 /* juce_KeyboardFocusTraverser.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9810403709006A1807 /* juce_KeyboardFocusTraverser.h */; }; + 84F1EC1B1040370A006A1807 /* juce_KeyListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9910403709006A1807 /* juce_KeyListener.cpp */; }; + 84F1EC1C1040370A006A1807 /* juce_KeyListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9A10403709006A1807 /* juce_KeyListener.h */; }; + 84F1EC1D1040370A006A1807 /* juce_KeyMappingEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9B10403709006A1807 /* juce_KeyMappingEditorComponent.cpp */; }; + 84F1EC1E1040370A006A1807 /* juce_KeyMappingEditorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9C10403709006A1807 /* juce_KeyMappingEditorComponent.h */; }; + 84F1EC1F1040370A006A1807 /* juce_KeyPress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9D10403709006A1807 /* juce_KeyPress.cpp */; }; + 84F1EC201040370A006A1807 /* juce_KeyPress.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EA9E10403709006A1807 /* juce_KeyPress.h */; }; + 84F1EC211040370A006A1807 /* juce_KeyPressMappingSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EA9F10403709006A1807 /* juce_KeyPressMappingSet.cpp */; }; + 84F1EC221040370A006A1807 /* juce_KeyPressMappingSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAA010403709006A1807 /* juce_KeyPressMappingSet.h */; }; + 84F1EC231040370A006A1807 /* juce_ModifierKeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAA110403709006A1807 /* juce_ModifierKeys.cpp */; }; + 84F1EC241040370A006A1807 /* juce_ModifierKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAA210403709006A1807 /* juce_ModifierKeys.h */; }; + 84F1EC251040370A006A1807 /* juce_ComponentAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAA410403709006A1807 /* juce_ComponentAnimator.cpp */; }; + 84F1EC261040370A006A1807 /* juce_ComponentAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAA510403709006A1807 /* juce_ComponentAnimator.h */; }; + 84F1EC271040370A006A1807 /* juce_ComponentBoundsConstrainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAA610403709006A1807 /* juce_ComponentBoundsConstrainer.cpp */; }; + 84F1EC281040370A006A1807 /* juce_ComponentBoundsConstrainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAA710403709006A1807 /* juce_ComponentBoundsConstrainer.h */; }; + 84F1EC291040370A006A1807 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAA810403709006A1807 /* juce_ComponentMovementWatcher.cpp */; }; + 84F1EC2A1040370A006A1807 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAA910403709006A1807 /* juce_ComponentMovementWatcher.h */; }; + 84F1EC2B1040370A006A1807 /* juce_GroupComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAAA10403709006A1807 /* juce_GroupComponent.cpp */; }; + 84F1EC2C1040370A006A1807 /* juce_GroupComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAAB10403709006A1807 /* juce_GroupComponent.h */; }; + 84F1EC2D1040370A006A1807 /* juce_MultiDocumentPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAAC10403709006A1807 /* juce_MultiDocumentPanel.cpp */; }; + 84F1EC2E1040370A006A1807 /* juce_MultiDocumentPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAAD10403709006A1807 /* juce_MultiDocumentPanel.h */; }; + 84F1EC2F1040370A006A1807 /* juce_ResizableBorderComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAAE10403709006A1807 /* juce_ResizableBorderComponent.cpp */; }; + 84F1EC301040370A006A1807 /* juce_ResizableBorderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAAF10403709006A1807 /* juce_ResizableBorderComponent.h */; }; + 84F1EC311040370A006A1807 /* juce_ResizableCornerComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAB010403709006A1807 /* juce_ResizableCornerComponent.cpp */; }; + 84F1EC321040370A006A1807 /* juce_ResizableCornerComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAB110403709006A1807 /* juce_ResizableCornerComponent.h */; }; + 84F1EC331040370A006A1807 /* juce_ScrollBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAB210403709006A1807 /* juce_ScrollBar.cpp */; }; + 84F1EC341040370A006A1807 /* juce_ScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAB310403709006A1807 /* juce_ScrollBar.h */; }; + 84F1EC351040370A006A1807 /* juce_StretchableLayoutManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAB410403709006A1807 /* juce_StretchableLayoutManager.cpp */; }; + 84F1EC361040370A006A1807 /* juce_StretchableLayoutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAB510403709006A1807 /* juce_StretchableLayoutManager.h */; }; + 84F1EC371040370A006A1807 /* juce_StretchableLayoutResizerBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAB610403709006A1807 /* juce_StretchableLayoutResizerBar.cpp */; }; + 84F1EC381040370A006A1807 /* juce_StretchableLayoutResizerBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAB710403709006A1807 /* juce_StretchableLayoutResizerBar.h */; }; + 84F1EC391040370A006A1807 /* juce_StretchableObjectResizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAB810403709006A1807 /* juce_StretchableObjectResizer.cpp */; }; + 84F1EC3A1040370A006A1807 /* juce_StretchableObjectResizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAB910403709006A1807 /* juce_StretchableObjectResizer.h */; }; + 84F1EC3B1040370A006A1807 /* juce_TabbedButtonBar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EABA10403709006A1807 /* juce_TabbedButtonBar.cpp */; }; + 84F1EC3C1040370A006A1807 /* juce_TabbedButtonBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EABB10403709006A1807 /* juce_TabbedButtonBar.h */; }; + 84F1EC3D1040370A006A1807 /* juce_TabbedComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EABC10403709006A1807 /* juce_TabbedComponent.cpp */; }; + 84F1EC3E1040370A006A1807 /* juce_TabbedComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EABD10403709006A1807 /* juce_TabbedComponent.h */; }; + 84F1EC3F1040370A006A1807 /* juce_Viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EABE10403709006A1807 /* juce_Viewport.cpp */; }; + 84F1EC401040370A006A1807 /* juce_Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EABF10403709006A1807 /* juce_Viewport.h */; }; + 84F1EC411040370A006A1807 /* juce_LookAndFeel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAC110403709006A1807 /* juce_LookAndFeel.cpp */; }; + 84F1EC421040370A006A1807 /* juce_LookAndFeel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAC210403709006A1807 /* juce_LookAndFeel.h */; }; + 84F1EC431040370A006A1807 /* juce_OldSchoolLookAndFeel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAC310403709006A1807 /* juce_OldSchoolLookAndFeel.cpp */; }; + 84F1EC441040370A006A1807 /* juce_OldSchoolLookAndFeel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAC410403709006A1807 /* juce_OldSchoolLookAndFeel.h */; }; + 84F1EC451040370A006A1807 /* juce_MenuBarComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAC610403709006A1807 /* juce_MenuBarComponent.cpp */; }; + 84F1EC461040370A006A1807 /* juce_MenuBarComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAC710403709006A1807 /* juce_MenuBarComponent.h */; }; + 84F1EC471040370A006A1807 /* juce_MenuBarModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAC810403709006A1807 /* juce_MenuBarModel.cpp */; }; + 84F1EC481040370A006A1807 /* juce_MenuBarModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAC910403709006A1807 /* juce_MenuBarModel.h */; }; + 84F1EC491040370A006A1807 /* juce_PopupMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EACA10403709006A1807 /* juce_PopupMenu.cpp */; }; + 84F1EC4A1040370A006A1807 /* juce_PopupMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EACB10403709006A1807 /* juce_PopupMenu.h */; }; + 84F1EC4B1040370A006A1807 /* juce_PopupMenuCustomComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EACC10403709006A1807 /* juce_PopupMenuCustomComponent.h */; }; + 84F1EC4C1040370A006A1807 /* juce_ComponentDragger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EACE10403709006A1807 /* juce_ComponentDragger.cpp */; }; + 84F1EC4D1040370A006A1807 /* juce_ComponentDragger.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EACF10403709006A1807 /* juce_ComponentDragger.h */; }; + 84F1EC4E1040370A006A1807 /* juce_DragAndDropContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAD010403709006A1807 /* juce_DragAndDropContainer.cpp */; }; + 84F1EC4F1040370A006A1807 /* juce_DragAndDropContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD110403709006A1807 /* juce_DragAndDropContainer.h */; }; + 84F1EC501040370A006A1807 /* juce_DragAndDropTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD210403709006A1807 /* juce_DragAndDropTarget.h */; }; + 84F1EC511040370A006A1807 /* juce_FileDragAndDropTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD310403709006A1807 /* juce_FileDragAndDropTarget.h */; }; + 84F1EC521040370A006A1807 /* juce_LassoComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD410403709006A1807 /* juce_LassoComponent.h */; }; + 84F1EC531040370A006A1807 /* juce_MouseCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD510403709006A1807 /* juce_MouseCursor.h */; }; + 84F1EC541040370A006A1807 /* juce_MouseCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAD610403709006A1807 /* juce_MouseCursor.cpp */; }; + 84F1EC551040370A006A1807 /* juce_MouseEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD710403709006A1807 /* juce_MouseEvent.h */; }; + 84F1EC561040370A006A1807 /* juce_MouseEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAD810403709006A1807 /* juce_MouseEvent.cpp */; }; + 84F1EC571040370A006A1807 /* juce_MouseHoverDetector.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAD910403709006A1807 /* juce_MouseHoverDetector.h */; }; + 84F1EC581040370A006A1807 /* juce_MouseHoverDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EADA10403709006A1807 /* juce_MouseHoverDetector.cpp */; }; + 84F1EC591040370A006A1807 /* juce_MouseListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EADB10403709006A1807 /* juce_MouseListener.h */; }; + 84F1EC5A1040370A006A1807 /* juce_MouseListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EADC10403709006A1807 /* juce_MouseListener.cpp */; }; + 84F1EC5B1040370A006A1807 /* juce_TooltipClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EADD10403709006A1807 /* juce_TooltipClient.h */; }; + 84F1EC5C1040370A006A1807 /* juce_BooleanPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EADF10403709006A1807 /* juce_BooleanPropertyComponent.cpp */; }; + 84F1EC5D1040370A006A1807 /* juce_BooleanPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAE010403709006A1807 /* juce_BooleanPropertyComponent.h */; }; + 84F1EC5E1040370A006A1807 /* juce_ButtonPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAE110403709006A1807 /* juce_ButtonPropertyComponent.cpp */; }; + 84F1EC5F1040370A006A1807 /* juce_ButtonPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAE210403709006A1807 /* juce_ButtonPropertyComponent.h */; }; + 84F1EC601040370A006A1807 /* juce_ChoicePropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAE310403709006A1807 /* juce_ChoicePropertyComponent.cpp */; }; + 84F1EC611040370A006A1807 /* juce_ChoicePropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAE410403709006A1807 /* juce_ChoicePropertyComponent.h */; }; + 84F1EC621040370A006A1807 /* juce_PropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAE510403709006A1807 /* juce_PropertyComponent.cpp */; }; + 84F1EC631040370A006A1807 /* juce_PropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAE610403709006A1807 /* juce_PropertyComponent.h */; }; + 84F1EC641040370A006A1807 /* juce_PropertyPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAE710403709006A1807 /* juce_PropertyPanel.cpp */; }; + 84F1EC651040370A006A1807 /* juce_PropertyPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAE810403709006A1807 /* juce_PropertyPanel.h */; }; + 84F1EC661040370A006A1807 /* juce_SliderPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAE910403709006A1807 /* juce_SliderPropertyComponent.cpp */; }; + 84F1EC671040370A006A1807 /* juce_SliderPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAEA10403709006A1807 /* juce_SliderPropertyComponent.h */; }; + 84F1EC681040370A006A1807 /* juce_TextPropertyComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAEB10403709006A1807 /* juce_TextPropertyComponent.cpp */; }; + 84F1EC691040370A006A1807 /* juce_TextPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAEC10403709006A1807 /* juce_TextPropertyComponent.h */; }; + 84F1EC6B1040370A006A1807 /* juce_AudioDeviceSelectorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAEF10403709006A1807 /* juce_AudioDeviceSelectorComponent.cpp */; }; + 84F1EC6C1040370A006A1807 /* juce_AudioDeviceSelectorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAF010403709006A1807 /* juce_AudioDeviceSelectorComponent.h */; }; + 84F1EC6D1040370A006A1807 /* juce_BubbleComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAF110403709006A1807 /* juce_BubbleComponent.cpp */; }; + 84F1EC6E1040370A006A1807 /* juce_BubbleComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAF210403709006A1807 /* juce_BubbleComponent.h */; }; + 84F1EC6F1040370A006A1807 /* juce_BubbleMessageComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAF310403709006A1807 /* juce_BubbleMessageComponent.cpp */; }; + 84F1EC701040370A006A1807 /* juce_BubbleMessageComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAF410403709006A1807 /* juce_BubbleMessageComponent.h */; }; + 84F1EC711040370A006A1807 /* juce_ColourSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAF510403709006A1807 /* juce_ColourSelector.cpp */; }; + 84F1EC721040370A006A1807 /* juce_ColourSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAF610403709006A1807 /* juce_ColourSelector.h */; }; + 84F1EC731040370A006A1807 /* juce_DropShadower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAF710403709006A1807 /* juce_DropShadower.cpp */; }; + 84F1EC741040370A006A1807 /* juce_DropShadower.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAF810403709006A1807 /* juce_DropShadower.h */; }; + 84F1EC751040370A006A1807 /* juce_MagnifierComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAF910403709006A1807 /* juce_MagnifierComponent.cpp */; }; + 84F1EC761040370A006A1807 /* juce_MagnifierComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAFA10403709006A1807 /* juce_MagnifierComponent.h */; }; + 84F1EC771040370A006A1807 /* juce_MidiKeyboardComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAFB10403709006A1807 /* juce_MidiKeyboardComponent.cpp */; }; + 84F1EC781040370A006A1807 /* juce_MidiKeyboardComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAFC10403709006A1807 /* juce_MidiKeyboardComponent.h */; }; + 84F1EC791040370A006A1807 /* juce_NSViewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAFD10403709006A1807 /* juce_NSViewComponent.h */; }; + 84F1EC7A1040370A006A1807 /* juce_OpenGLComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EAFE10403709006A1807 /* juce_OpenGLComponent.cpp */; }; + 84F1EC7B1040370A006A1807 /* juce_OpenGLComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EAFF10403709006A1807 /* juce_OpenGLComponent.h */; }; + 84F1EC7C1040370A006A1807 /* juce_PreferencesPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0010403709006A1807 /* juce_PreferencesPanel.cpp */; }; + 84F1EC7D1040370A006A1807 /* juce_PreferencesPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0110403709006A1807 /* juce_PreferencesPanel.h */; }; + 84F1EC7E1040370A006A1807 /* juce_QuickTimeMovieComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0210403709006A1807 /* juce_QuickTimeMovieComponent.h */; }; + 84F1EC7F1040370A006A1807 /* juce_SystemTrayIconComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0310403709006A1807 /* juce_SystemTrayIconComponent.cpp */; }; + 84F1EC801040370A006A1807 /* juce_SystemTrayIconComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0410403709006A1807 /* juce_SystemTrayIconComponent.h */; }; + 84F1EC811040370A006A1807 /* juce_WebBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0510403709006A1807 /* juce_WebBrowserComponent.h */; }; + 84F1EC821040370A006A1807 /* juce_AlertWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0710403709006A1807 /* juce_AlertWindow.cpp */; }; + 84F1EC831040370A006A1807 /* juce_AlertWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0810403709006A1807 /* juce_AlertWindow.h */; }; + 84F1EC841040370A006A1807 /* juce_ComponentPeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0910403709006A1807 /* juce_ComponentPeer.cpp */; }; + 84F1EC851040370A006A1807 /* juce_ComponentPeer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0A10403709006A1807 /* juce_ComponentPeer.h */; }; + 84F1EC861040370A006A1807 /* juce_DialogWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0B10403709006A1807 /* juce_DialogWindow.cpp */; }; + 84F1EC871040370A006A1807 /* juce_DialogWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0C10403709006A1807 /* juce_DialogWindow.h */; }; + 84F1EC881040370A006A1807 /* juce_DocumentWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0D10403709006A1807 /* juce_DocumentWindow.cpp */; }; + 84F1EC891040370A006A1807 /* juce_DocumentWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB0E10403709006A1807 /* juce_DocumentWindow.h */; }; + 84F1EC8A1040370A006A1807 /* juce_ResizableWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB0F10403709006A1807 /* juce_ResizableWindow.cpp */; }; + 84F1EC8B1040370A006A1807 /* juce_ResizableWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1010403709006A1807 /* juce_ResizableWindow.h */; }; + 84F1EC8C1040370A006A1807 /* juce_SplashScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1110403709006A1807 /* juce_SplashScreen.cpp */; }; + 84F1EC8D1040370A006A1807 /* juce_SplashScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1210403709006A1807 /* juce_SplashScreen.h */; }; + 84F1EC8E1040370A006A1807 /* juce_ThreadWithProgressWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1310403709006A1807 /* juce_ThreadWithProgressWindow.cpp */; }; + 84F1EC8F1040370A006A1807 /* juce_ThreadWithProgressWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1410403709006A1807 /* juce_ThreadWithProgressWindow.h */; }; + 84F1EC901040370A006A1807 /* juce_TooltipWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1510403709006A1807 /* juce_TooltipWindow.cpp */; }; + 84F1EC911040370A006A1807 /* juce_TooltipWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1610403709006A1807 /* juce_TooltipWindow.h */; }; + 84F1EC921040370A006A1807 /* juce_TopLevelWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1710403709006A1807 /* juce_TopLevelWindow.cpp */; }; + 84F1EC931040370A006A1807 /* juce_TopLevelWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1810403709006A1807 /* juce_TopLevelWindow.h */; }; + 84F1EC941040370A006A1807 /* juce_Brush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1B10403709006A1807 /* juce_Brush.cpp */; }; + 84F1EC951040370A006A1807 /* juce_Brush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1C10403709006A1807 /* juce_Brush.h */; }; + 84F1EC961040370A006A1807 /* juce_GradientBrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1D10403709006A1807 /* juce_GradientBrush.cpp */; }; + 84F1EC971040370A006A1807 /* juce_GradientBrush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB1E10403709006A1807 /* juce_GradientBrush.h */; }; + 84F1EC981040370A006A1807 /* juce_ImageBrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB1F10403709006A1807 /* juce_ImageBrush.cpp */; }; + 84F1EC991040370A006A1807 /* juce_ImageBrush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2010403709006A1807 /* juce_ImageBrush.h */; }; + 84F1EC9A1040370A006A1807 /* juce_SolidColourBrush.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB2110403709006A1807 /* juce_SolidColourBrush.cpp */; }; + 84F1EC9B1040370A006A1807 /* juce_SolidColourBrush.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2210403709006A1807 /* juce_SolidColourBrush.h */; }; + 84F1EC9C1040370A006A1807 /* juce_Colour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB2410403709006A1807 /* juce_Colour.cpp */; }; + 84F1EC9D1040370A006A1807 /* juce_ColourGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB2510403709006A1807 /* juce_ColourGradient.cpp */; }; + 84F1EC9E1040370A006A1807 /* juce_ColourGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2610403709006A1807 /* juce_ColourGradient.h */; }; + 84F1EC9F1040370A006A1807 /* juce_Colours.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB2710403709006A1807 /* juce_Colours.cpp */; }; + 84F1ECA01040370A006A1807 /* juce_Colours.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2810403709006A1807 /* juce_Colours.h */; }; + 84F1ECA11040370A006A1807 /* juce_PixelFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2910403709006A1807 /* juce_PixelFormats.h */; }; + 84F1ECA21040370A006A1807 /* juce_Colour.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2A10403709006A1807 /* juce_Colour.h */; }; + 84F1ECA31040370A006A1807 /* juce_EdgeTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB2C10403709006A1807 /* juce_EdgeTable.cpp */; }; + 84F1ECA41040370A006A1807 /* juce_EdgeTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2D10403709006A1807 /* juce_EdgeTable.h */; }; + 84F1ECA51040370A006A1807 /* juce_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB2E10403709006A1807 /* juce_Graphics.cpp */; }; + 84F1ECA61040370A006A1807 /* juce_Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB2F10403709006A1807 /* juce_Graphics.h */; }; + 84F1ECA71040370A006A1807 /* juce_Justification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3010403709006A1807 /* juce_Justification.cpp */; }; + 84F1ECA81040370A006A1807 /* juce_Justification.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3110403709006A1807 /* juce_Justification.h */; }; + 84F1ECA91040370A006A1807 /* juce_LowLevelGraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3210403709006A1807 /* juce_LowLevelGraphicsContext.h */; }; + 84F1ECAA1040370A006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3310403709006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.cpp */; }; + 84F1ECAB1040370A006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3410403709006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.h */; }; + 84F1ECAC1040370A006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3510403709006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */; }; + 84F1ECAD1040370A006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3610403709006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.h */; }; + 84F1ECAE1040370A006A1807 /* juce_RectanglePlacement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3710403709006A1807 /* juce_RectanglePlacement.cpp */; }; + 84F1ECAF1040370A006A1807 /* juce_RectanglePlacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3810403709006A1807 /* juce_RectanglePlacement.h */; }; + 84F1ECB01040370A006A1807 /* juce_Drawable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3A10403709006A1807 /* juce_Drawable.cpp */; }; + 84F1ECB11040370A006A1807 /* juce_Drawable.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3B10403709006A1807 /* juce_Drawable.h */; }; + 84F1ECB21040370A006A1807 /* juce_DrawableComposite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3C10403709006A1807 /* juce_DrawableComposite.cpp */; }; + 84F1ECB31040370A006A1807 /* juce_DrawableComposite.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3D10403709006A1807 /* juce_DrawableComposite.h */; }; + 84F1ECB41040370A006A1807 /* juce_DrawableImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB3E10403709006A1807 /* juce_DrawableImage.cpp */; }; + 84F1ECB51040370A006A1807 /* juce_DrawableImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB3F10403709006A1807 /* juce_DrawableImage.h */; }; + 84F1ECB61040370A006A1807 /* juce_DrawablePath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4010403709006A1807 /* juce_DrawablePath.cpp */; }; + 84F1ECB71040370A006A1807 /* juce_DrawablePath.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4110403709006A1807 /* juce_DrawablePath.h */; }; + 84F1ECB81040370A006A1807 /* juce_DrawableText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4210403709006A1807 /* juce_DrawableText.cpp */; }; + 84F1ECB91040370A006A1807 /* juce_DrawableText.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4310403709006A1807 /* juce_DrawableText.h */; }; + 84F1ECBA1040370A006A1807 /* juce_SVGParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4410403709006A1807 /* juce_SVGParser.cpp */; }; + 84F1ECBB1040370A006A1807 /* juce_DropShadowEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4610403709006A1807 /* juce_DropShadowEffect.cpp */; }; + 84F1ECBC1040370A006A1807 /* juce_DropShadowEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4710403709006A1807 /* juce_DropShadowEffect.h */; }; + 84F1ECBD1040370A006A1807 /* juce_GlowEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4810403709006A1807 /* juce_GlowEffect.cpp */; }; + 84F1ECBE1040370A006A1807 /* juce_GlowEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4910403709006A1807 /* juce_GlowEffect.h */; }; + 84F1ECBF1040370A006A1807 /* juce_ImageEffectFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4A10403709006A1807 /* juce_ImageEffectFilter.h */; }; + 84F1ECC01040370A006A1807 /* juce_ReduceOpacityEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4B10403709006A1807 /* juce_ReduceOpacityEffect.cpp */; }; + 84F1ECC11040370A006A1807 /* juce_ReduceOpacityEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4C10403709006A1807 /* juce_ReduceOpacityEffect.h */; }; + 84F1ECC21040370A006A1807 /* juce_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB4E10403709006A1807 /* juce_Font.cpp */; }; + 84F1ECC31040370A006A1807 /* juce_Font.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB4F10403709006A1807 /* juce_Font.h */; }; + 84F1ECC41040370A006A1807 /* juce_GlyphArrangement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5010403709006A1807 /* juce_GlyphArrangement.cpp */; }; + 84F1ECC51040370A006A1807 /* juce_GlyphArrangement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5110403709006A1807 /* juce_GlyphArrangement.h */; }; + 84F1ECC61040370A006A1807 /* juce_TextLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5210403709006A1807 /* juce_TextLayout.cpp */; }; + 84F1ECC71040370A006A1807 /* juce_TextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5310403709006A1807 /* juce_TextLayout.h */; }; + 84F1ECC81040370A006A1807 /* juce_Typeface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5410403709006A1807 /* juce_Typeface.cpp */; }; + 84F1ECC91040370A006A1807 /* juce_Typeface.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5510403709006A1807 /* juce_Typeface.h */; }; + 84F1ECCA1040370A006A1807 /* juce_AffineTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5710403709006A1807 /* juce_AffineTransform.cpp */; }; + 84F1ECCB1040370A006A1807 /* juce_AffineTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5810403709006A1807 /* juce_AffineTransform.h */; }; + 84F1ECCC1040370A006A1807 /* juce_BorderSize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5910403709006A1807 /* juce_BorderSize.cpp */; }; + 84F1ECCD1040370A006A1807 /* juce_BorderSize.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5A10403709006A1807 /* juce_BorderSize.h */; }; + 84F1ECCE1040370A006A1807 /* juce_Line.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5B10403709006A1807 /* juce_Line.cpp */; }; + 84F1ECCF1040370A006A1807 /* juce_Line.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5C10403709006A1807 /* juce_Line.h */; }; + 84F1ECD01040370A006A1807 /* juce_Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5D10403709006A1807 /* juce_Path.cpp */; }; + 84F1ECD11040370A006A1807 /* juce_Path.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB5E10403709006A1807 /* juce_Path.h */; }; + 84F1ECD21040370A006A1807 /* juce_PathIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB5F10403709006A1807 /* juce_PathIterator.cpp */; }; + 84F1ECD31040370A006A1807 /* juce_PathIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6010403709006A1807 /* juce_PathIterator.h */; }; + 84F1ECD41040370A006A1807 /* juce_PathStrokeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6110403709006A1807 /* juce_PathStrokeType.cpp */; }; + 84F1ECD51040370A006A1807 /* juce_PathStrokeType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6210403709006A1807 /* juce_PathStrokeType.h */; }; + 84F1ECD61040370A006A1807 /* juce_Point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6310403709006A1807 /* juce_Point.cpp */; }; + 84F1ECD71040370A006A1807 /* juce_Point.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6410403709006A1807 /* juce_Point.h */; }; + 84F1ECD81040370A006A1807 /* juce_PositionedRectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6510403709006A1807 /* juce_PositionedRectangle.cpp */; }; + 84F1ECD91040370A006A1807 /* juce_PositionedRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6610403709006A1807 /* juce_PositionedRectangle.h */; }; + 84F1ECDA1040370A006A1807 /* juce_Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6710403709006A1807 /* juce_Rectangle.cpp */; }; + 84F1ECDB1040370A006A1807 /* juce_Rectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6810403709006A1807 /* juce_Rectangle.h */; }; + 84F1ECDC1040370A006A1807 /* juce_RectangleList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6910403709006A1807 /* juce_RectangleList.cpp */; }; + 84F1ECDD1040370A006A1807 /* juce_RectangleList.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6A10403709006A1807 /* juce_RectangleList.h */; }; + 84F1ECDE1040370A006A1807 /* juce_CameraDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6C10403709006A1807 /* juce_CameraDevice.h */; }; + 84F1ECDF1040370A006A1807 /* juce_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6D10403709006A1807 /* juce_Image.cpp */; }; + 84F1ECE01040370A006A1807 /* juce_Image.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB6E10403709006A1807 /* juce_Image.h */; }; + 84F1ECE11040370A006A1807 /* juce_ImageCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB6F10403709006A1807 /* juce_ImageCache.cpp */; }; + 84F1ECE21040370A006A1807 /* juce_ImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB7010403709006A1807 /* juce_ImageCache.h */; }; + 84F1ECE31040370A006A1807 /* juce_ImageConvolutionKernel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB7110403709006A1807 /* juce_ImageConvolutionKernel.cpp */; }; + 84F1ECE41040370A006A1807 /* juce_ImageConvolutionKernel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB7210403709006A1807 /* juce_ImageConvolutionKernel.h */; }; + 84F1ECE51040370A006A1807 /* juce_ImageFileFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB7310403709006A1807 /* juce_ImageFileFormat.cpp */; }; + 84F1ECE61040370A006A1807 /* juce_ImageFileFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB7410403709006A1807 /* juce_ImageFileFormat.h */; }; + 84F1ECE71040370A006A1807 /* juce_GIFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB7610403709006A1807 /* juce_GIFLoader.cpp */; }; + 84F1ECE81040370A006A1807 /* juce_GIFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F1EB7710403709006A1807 /* juce_GIFLoader.h */; }; + 84F1ECE91040370A006A1807 /* juce_JPEGLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB7810403709006A1807 /* juce_JPEGLoader.cpp */; }; + 84F1ECEA1040370A006A1807 /* juce_PNGLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1EB7910403709006A1807 /* juce_PNGLoader.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToneGeneratorAudioSource.cpp; sourceTree = ""; }; - 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToneGeneratorAudioSource.h; sourceTree = ""; }; - 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiOutput.cpp; sourceTree = ""; }; - 8406C44309642CE100C99145 /* juce_LowLevelGraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LowLevelGraphicsContext.h; sourceTree = ""; }; - 8406C44409642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_LowLevelGraphicsSoftwareRenderer.cpp; sourceTree = ""; }; - 8406C44509642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LowLevelGraphicsSoftwareRenderer.h; sourceTree = ""; }; - 8407908D09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_LowLevelGraphicsPostScriptRenderer.cpp; sourceTree = ""; }; - 8407908E09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LowLevelGraphicsPostScriptRenderer.h; sourceTree = ""; }; - 84099C9B0AE52BD000B2A05D /* juce_Sampler.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Sampler.cpp; sourceTree = ""; }; - 84099C9C0AE52BD000B2A05D /* juce_Sampler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_Sampler.h; sourceTree = ""; }; - 84099C9D0AE52BD000B2A05D /* juce_Synthesiser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Synthesiser.cpp; sourceTree = ""; }; - 84099C9E0AE52BD000B2A05D /* juce_Synthesiser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_Synthesiser.h; sourceTree = ""; }; 840F80BB092B399D005E7B4E /* juce.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; lineEnding = 2; name = juce.h; path = ../../juce.h; sourceTree = SOURCE_ROOT; }; - 8417EE4F0A6E7A270058E04E /* juce_TableHeaderComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_TableHeaderComponent.cpp; sourceTree = ""; }; - 8417EE500A6E7A270058E04E /* juce_TableHeaderComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TableHeaderComponent.h; sourceTree = ""; }; - 8417EE510A6E7A280058E04E /* juce_TableListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_TableListBox.cpp; sourceTree = ""; }; - 8417EE520A6E7A280058E04E /* juce_TableListBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TableListBox.h; sourceTree = ""; }; - 8417EE570A6E7A370058E04E /* juce_StretchableObjectResizer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_StretchableObjectResizer.cpp; sourceTree = ""; }; - 8417EE580A6E7A370058E04E /* juce_StretchableObjectResizer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_StretchableObjectResizer.h; sourceTree = ""; }; - 84198B0A096D8E2B0022A439 /* juce_AudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioDeviceManager.cpp; sourceTree = ""; }; - 84198B0B096D8E2B0022A439 /* juce_AudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioDeviceManager.h; sourceTree = ""; }; - 84198B0C096D8E2B0022A439 /* juce_AudioIODevice.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioIODevice.h; sourceTree = ""; }; - 84198B0D096D8E2B0022A439 /* juce_MidiInput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MidiInput.h; sourceTree = ""; }; - 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MidiOutput.h; sourceTree = ""; }; - 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioDeviceSelectorComponent.cpp; sourceTree = ""; }; - 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioDeviceSelectorComponent.h; sourceTree = ""; }; - 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; path = juce_AudioUnitPluginFormat.mm; sourceTree = ""; }; - 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioUnitPluginFormat.h; sourceTree = ""; }; - 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DirectXPluginFormat.h; sourceTree = ""; }; - 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LADSPAPluginFormat.h; sourceTree = ""; }; - 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_VSTPluginFormat.h; sourceTree = ""; }; - 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioPluginFormat.cpp; sourceTree = ""; }; - 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPluginFormat.h; sourceTree = ""; }; - 841B22D60D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioPluginFormatManager.cpp; sourceTree = ""; }; - 841B22D70D2E7FE3009D01AA /* juce_AudioPluginFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPluginFormatManager.h; sourceTree = ""; }; - 841B22D80D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioPluginInstance.cpp; sourceTree = ""; }; - 841B22D90D2E7FE3009D01AA /* juce_AudioPluginInstance.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPluginInstance.h; sourceTree = ""; }; - 841B22DA0D2E7FE3009D01AA /* juce_KnownPluginList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_KnownPluginList.cpp; sourceTree = ""; }; - 841B22DB0D2E7FE3009D01AA /* juce_KnownPluginList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_KnownPluginList.h; sourceTree = ""; }; - 841B22DC0D2E7FE3009D01AA /* juce_PluginDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PluginDescription.cpp; sourceTree = ""; }; - 841B22DD0D2E7FE3009D01AA /* juce_PluginDescription.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PluginDescription.h; sourceTree = ""; }; - 841B22DE0D2E7FE3009D01AA /* juce_PluginDirectoryScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PluginDirectoryScanner.cpp; sourceTree = ""; }; - 841B22DF0D2E7FE3009D01AA /* juce_PluginDirectoryScanner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PluginDirectoryScanner.h; sourceTree = ""; }; - 841B22E00D2E7FE3009D01AA /* juce_PluginListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PluginListComponent.cpp; sourceTree = ""; }; - 841B22E10D2E7FE3009D01AA /* juce_PluginListComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PluginListComponent.h; sourceTree = ""; }; - 841E062F0AF8CE74005E6FCC /* juce_AudioDataConverters.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioDataConverters.cpp; sourceTree = ""; }; - 841E06300AF8CE74005E6FCC /* juce_AudioDataConverters.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioDataConverters.h; sourceTree = ""; }; - 841E06310AF8CE74005E6FCC /* juce_AudioSampleBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioSampleBuffer.cpp; sourceTree = ""; }; - 841E06320AF8CE74005E6FCC /* juce_AudioSampleBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioSampleBuffer.h; sourceTree = ""; }; - 841E06330AF8CE74005E6FCC /* juce_IIRFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_IIRFilter.cpp; sourceTree = ""; }; - 841E06340AF8CE74005E6FCC /* juce_IIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_IIRFilter.h; sourceTree = ""; }; - 842B63B609D8508F00255DC7 /* juce_FlacAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_FlacAudioFormat.cpp; sourceTree = ""; }; - 842B63B709D8508F00255DC7 /* juce_FlacAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FlacAudioFormat.h; sourceTree = ""; }; - 842B63B809D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_OggVorbisAudioFormat.cpp; sourceTree = ""; }; - 842B63B909D8508F00255DC7 /* juce_OggVorbisAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_OggVorbisAudioFormat.h; sourceTree = ""; }; - 842D3D0D0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MenuBarModel.cpp; sourceTree = ""; }; - 842F9D570A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ButtonPropertyComponent.cpp; sourceTree = ""; }; - 842F9D580A19C9AF00B1358D /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ButtonPropertyComponent.h; sourceTree = ""; }; - 842F9D590A19C9AF00B1358D /* juce_ChoicePropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ChoicePropertyComponent.cpp; sourceTree = ""; }; - 842F9D5A0A19C9AF00B1358D /* juce_ChoicePropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ChoicePropertyComponent.h; sourceTree = ""; }; - 842F9D5B0A19C9AF00B1358D /* juce_PropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PropertyComponent.cpp; sourceTree = ""; }; - 842F9D5C0A19C9AF00B1358D /* juce_PropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PropertyComponent.h; sourceTree = ""; }; - 842F9D5D0A19C9AF00B1358D /* juce_PropertyPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PropertyPanel.cpp; sourceTree = ""; }; - 842F9D5E0A19C9AF00B1358D /* juce_PropertyPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PropertyPanel.h; sourceTree = ""; }; - 842F9D5F0A19C9AF00B1358D /* juce_SliderPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_SliderPropertyComponent.cpp; sourceTree = ""; }; - 842F9D600A19C9AF00B1358D /* juce_SliderPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderPropertyComponent.h; sourceTree = ""; }; - 842F9D610A19C9AF00B1358D /* juce_TextPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_TextPropertyComponent.cpp; sourceTree = ""; }; - 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TextPropertyComponent.h; sourceTree = ""; }; - 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PositionedRectangle.cpp; sourceTree = ""; }; - 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PositionedRectangle.h; sourceTree = ""; }; - 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentMovementWatcher.cpp; sourceTree = ""; }; - 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentMovementWatcher.h; sourceTree = ""; }; - 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderListener.h; sourceTree = ""; }; 8456EC6508A2A6C80087C412 /* juce_Config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; lineEnding = 2; name = juce_Config.h; path = ../../juce_Config.h; sourceTree = SOURCE_ROOT; }; 8456EC6908A2A6F00087C412 /* JUCE changelist.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "JUCE changelist.txt"; path = "../../docs/JUCE changelist.txt"; sourceTree = SOURCE_ROOT; }; - 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_NSViewComponent.h; sourceTree = ""; }; - 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_QuickTimeAudioFormat.cpp; sourceTree = ""; }; - 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_QuickTimeAudioFormat.h; sourceTree = ""; }; - 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnection.cpp; sourceTree = ""; }; - 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnection.h; sourceTree = ""; }; - 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnectionServer.cpp; sourceTree = ""; }; - 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnectionServer.h; sourceTree = ""; }; - 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiBuffer.cpp; path = midi/juce_MidiBuffer.cpp; sourceTree = ""; }; - 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiBuffer.h; path = midi/juce_MidiBuffer.h; sourceTree = ""; }; - 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiFile.cpp; path = midi/juce_MidiFile.cpp; sourceTree = ""; }; - 8463D5B8098BD2DD00F9AEC2 /* juce_MidiFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiFile.h; path = midi/juce_MidiFile.h; sourceTree = ""; }; - 8463D5B9098BD2DD00F9AEC2 /* juce_MidiKeyboardState.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardState.cpp; path = midi/juce_MidiKeyboardState.cpp; sourceTree = ""; }; - 8463D5BA098BD2DD00F9AEC2 /* juce_MidiKeyboardState.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardState.h; path = midi/juce_MidiKeyboardState.h; sourceTree = ""; }; - 8463D5BB098BD2DD00F9AEC2 /* juce_MidiMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessage.cpp; path = midi/juce_MidiMessage.cpp; sourceTree = ""; }; - 8463D5BC098BD2DD00F9AEC2 /* juce_MidiMessage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessage.h; path = midi/juce_MidiMessage.h; sourceTree = ""; }; - 8463D5BD098BD2DD00F9AEC2 /* juce_MidiMessageCollector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessageCollector.cpp; path = midi/juce_MidiMessageCollector.cpp; sourceTree = ""; }; - 8463D5BE098BD2DD00F9AEC2 /* juce_MidiMessageCollector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessageCollector.h; path = midi/juce_MidiMessageCollector.h; sourceTree = ""; }; - 8463D5BF098BD2DD00F9AEC2 /* juce_MidiMessageSequence.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessageSequence.cpp; path = midi/juce_MidiMessageSequence.cpp; sourceTree = ""; }; - 8463D5C0098BD2DD00F9AEC2 /* juce_MidiMessageSequence.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessageSequence.h; path = midi/juce_MidiMessageSequence.h; sourceTree = ""; }; - 8463D5CE098BD30600F9AEC2 /* juce_TopLevelWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_TopLevelWindow.cpp; sourceTree = ""; }; - 8463D5CF098BD30600F9AEC2 /* juce_TopLevelWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TopLevelWindow.h; sourceTree = ""; }; - 84688AF70DED58820077FDEA /* juce_AudioProcessorGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessorGraph.cpp; sourceTree = ""; }; - 84688AF80DED58820077FDEA /* juce_AudioProcessorGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorGraph.h; sourceTree = ""; }; - 84688AF90DED58820077FDEA /* juce_AudioProcessorPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessorPlayer.cpp; sourceTree = ""; }; - 84688AFA0DED58820077FDEA /* juce_AudioProcessorPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorPlayer.h; sourceTree = ""; }; - 846927D80A49ABD300314975 /* juce_CharacterFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_CharacterFunctions.cpp; sourceTree = ""; }; - 846927D90A49ABD300314975 /* juce_CharacterFunctions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_CharacterFunctions.h; sourceTree = ""; }; - 846927DC0A49ABE600314975 /* juce_RectanglePlacement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_RectanglePlacement.cpp; sourceTree = ""; }; - 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_RectanglePlacement.h; sourceTree = ""; }; - 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_SVGParser.cpp; sourceTree = ""; }; - 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioCDBurner.h; sourceTree = ""; }; - 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = ""; }; - 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = ""; }; - 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = filebrowser/juce_FileTreeComponent.cpp; sourceTree = ""; }; - 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = filebrowser/juce_FileTreeComponent.h; sourceTree = ""; }; 8484E9A4103C958A008B7C6C /* juce_mac_NativeCode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_NativeCode.mm; path = ../../src/native/juce_mac_NativeCode.mm; sourceTree = SOURCE_ROOT; }; 8484E9A6103C9595008B7C6C /* juce_mac_AppleRemote.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_AppleRemote.mm; path = ../../src/native/mac/juce_mac_AppleRemote.mm; sourceTree = SOURCE_ROOT; }; 8484E9A7103C9595008B7C6C /* juce_mac_AudioCDBurner.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_AudioCDBurner.mm; path = ../../src/native/mac/juce_mac_AudioCDBurner.mm; sourceTree = SOURCE_ROOT; }; @@ -735,460 +631,569 @@ 8484E9BD103C9595008B7C6C /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_mac_WebBrowserComponent.mm; path = ../../src/native/mac/juce_mac_WebBrowserComponent.mm; sourceTree = SOURCE_ROOT; }; 8484E9D6103C95A6008B7C6C /* juce_posix_SharedCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_posix_SharedCode.h; path = ../../src/native/common/juce_posix_SharedCode.h; sourceTree = SOURCE_ROOT; }; 8484E9D7103C95A6008B7C6C /* juce_posix_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_posix_NamedPipe.cpp; path = ../../src/native/common/juce_posix_NamedPipe.cpp; sourceTree = SOURCE_ROOT; }; - 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_WebBrowserComponent.h; sourceTree = ""; }; - 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioThumbnail.cpp; sourceTree = ""; }; - 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioThumbnail.h; sourceTree = ""; }; - 8495BB8A0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioThumbnailCache.cpp; sourceTree = ""; }; - 8495BB8B0D8067B2001D9C0B /* juce_AudioThumbnailCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioThumbnailCache.h; sourceTree = ""; }; - 8495BB910D806BDA001D9C0B /* juce_FileInputSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_FileInputSource.cpp; sourceTree = ""; }; - 8495BB920D806BDA001D9C0B /* juce_FileInputSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_FileInputSource.h; sourceTree = ""; }; - 8495BB930D806BDA001D9C0B /* juce_InputSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_InputSource.h; sourceTree = ""; }; - 849C0A9C0F98AF62001C1494 /* juce_Variant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_Variant.h; sourceTree = ""; }; - 849C0A9D0F98AF62001C1494 /* juce_Variant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Variant.cpp; sourceTree = ""; }; - 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODevice.cpp; sourceTree = ""; }; - 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODeviceType.cpp; sourceTree = ""; }; - 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioIODeviceType.h; sourceTree = ""; }; - 84A4883508A22E4900752A2B /* juce_Application.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 2; name = juce_Application.cpp; path = ../../src/juce_appframework/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; }; - 84A4883608A22E4900752A2B /* juce_Application.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../src/juce_appframework/application/juce_Application.h; sourceTree = SOURCE_ROOT; }; - 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../src/juce_appframework/application/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; }; - 84A4883808A22E4900752A2B /* juce_DeletedAtShutdown.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DeletedAtShutdown.h; path = ../../src/juce_appframework/application/juce_DeletedAtShutdown.h; sourceTree = SOURCE_ROOT; }; - 84A4883A08A22E4900752A2B /* juce_SystemClipboard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SystemClipboard.h; path = ../../src/juce_appframework/application/juce_SystemClipboard.h; sourceTree = SOURCE_ROOT; }; - 84A4883D08A22E4900752A2B /* juce_AiffAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AiffAudioFormat.cpp; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; - 84A4883E08A22E4900752A2B /* juce_AiffAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AiffAudioFormat.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.h; sourceTree = SOURCE_ROOT; }; - 84A4883F08A22E4900752A2B /* juce_AudioCDReader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioCDReader.cpp; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.cpp; sourceTree = SOURCE_ROOT; }; - 84A4884008A22E4900752A2B /* juce_AudioCDReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioCDReader.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h; sourceTree = SOURCE_ROOT; }; - 84A4884108A22E4900752A2B /* juce_AudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormat.cpp; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.cpp; sourceTree = SOURCE_ROOT; }; - 84A4884208A22E4900752A2B /* juce_AudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormat.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.h; sourceTree = SOURCE_ROOT; }; - 84A4884308A22E4900752A2B /* juce_AudioFormatReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatReader.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioFormatReader.h; sourceTree = SOURCE_ROOT; }; - 84A4884408A22E4900752A2B /* juce_AudioFormatWriter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatWriter.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioFormatWriter.h; sourceTree = SOURCE_ROOT; }; - 84A4884508A22E4900752A2B /* juce_AudioSubsectionReader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSubsectionReader.cpp; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.cpp; sourceTree = SOURCE_ROOT; }; - 84A4884608A22E4900752A2B /* juce_AudioSubsectionReader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioSubsectionReader.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.h; sourceTree = SOURCE_ROOT; }; - 84A4884708A22E4900752A2B /* juce_WavAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WavAudioFormat.cpp; path = ../../src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; - 84A4884808A22E4900752A2B /* juce_WavAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_WavAudioFormat.h; path = ../../src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h; sourceTree = SOURCE_ROOT; }; - 84A4884A08A22E4900752A2B /* juce_AudioFormatReaderSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormatReaderSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.cpp; sourceTree = SOURCE_ROOT; }; - 84A4884B08A22E4900752A2B /* juce_AudioFormatReaderSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatReaderSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.h; sourceTree = SOURCE_ROOT; }; - 84A4884C08A22E4900752A2B /* juce_AudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioSource.h; sourceTree = SOURCE_ROOT; }; - 84A4884D08A22E4900752A2B /* juce_AudioSourcePlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSourcePlayer.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp; sourceTree = SOURCE_ROOT; }; - 84A4884E08A22E4900752A2B /* juce_AudioSourcePlayer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioSourcePlayer.h; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.h; sourceTree = SOURCE_ROOT; }; - 84A4884F08A22E4900752A2B /* juce_AudioTransportSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioTransportSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.cpp; sourceTree = SOURCE_ROOT; }; - 84A4885008A22E4900752A2B /* juce_AudioTransportSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AudioTransportSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.h; sourceTree = SOURCE_ROOT; }; - 84A4885108A22E4900752A2B /* juce_BufferingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferingAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.cpp; sourceTree = SOURCE_ROOT; }; - 84A4885208A22E4900752A2B /* juce_BufferingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_BufferingAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.h; sourceTree = SOURCE_ROOT; }; - 84A4885308A22E4900752A2B /* juce_MixerAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MixerAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.cpp; sourceTree = SOURCE_ROOT; }; - 84A4885408A22E4900752A2B /* juce_MixerAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MixerAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.h; sourceTree = SOURCE_ROOT; }; - 84A4885508A22E4900752A2B /* juce_PositionableAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PositionableAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_PositionableAudioSource.h; sourceTree = SOURCE_ROOT; }; - 84A4885608A22E4900752A2B /* juce_ResamplingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResamplingAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.cpp; sourceTree = SOURCE_ROOT; }; - 84A4885708A22E4900752A2B /* juce_ResamplingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ResamplingAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.h; sourceTree = SOURCE_ROOT; }; - 84A4886508A22E4900752A2B /* juce_ActionBroadcaster.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActionBroadcaster.cpp; path = ../../src/juce_appframework/events/juce_ActionBroadcaster.cpp; sourceTree = SOURCE_ROOT; }; - 84A4886608A22E4900752A2B /* juce_ActionBroadcaster.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ActionBroadcaster.h; path = ../../src/juce_appframework/events/juce_ActionBroadcaster.h; sourceTree = SOURCE_ROOT; }; - 84A4886708A22E4900752A2B /* juce_ActionListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ActionListener.h; path = ../../src/juce_appframework/events/juce_ActionListener.h; sourceTree = SOURCE_ROOT; }; - 84A4886808A22E4900752A2B /* juce_ActionListenerList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActionListenerList.cpp; path = ../../src/juce_appframework/events/juce_ActionListenerList.cpp; sourceTree = SOURCE_ROOT; }; - 84A4886908A22E4900752A2B /* juce_ActionListenerList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ActionListenerList.h; path = ../../src/juce_appframework/events/juce_ActionListenerList.h; sourceTree = SOURCE_ROOT; }; - 84A4886A08A22E4900752A2B /* juce_AsyncUpdater.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AsyncUpdater.cpp; path = ../../src/juce_appframework/events/juce_AsyncUpdater.cpp; sourceTree = SOURCE_ROOT; }; - 84A4886B08A22E4900752A2B /* juce_AsyncUpdater.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AsyncUpdater.h; path = ../../src/juce_appframework/events/juce_AsyncUpdater.h; sourceTree = SOURCE_ROOT; }; - 84A4886C08A22E4900752A2B /* juce_ChangeBroadcaster.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChangeBroadcaster.cpp; path = ../../src/juce_appframework/events/juce_ChangeBroadcaster.cpp; sourceTree = SOURCE_ROOT; }; - 84A4886D08A22E4900752A2B /* juce_ChangeBroadcaster.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ChangeBroadcaster.h; path = ../../src/juce_appframework/events/juce_ChangeBroadcaster.h; sourceTree = SOURCE_ROOT; }; - 84A4886E08A22E4900752A2B /* juce_ChangeListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ChangeListener.h; path = ../../src/juce_appframework/events/juce_ChangeListener.h; sourceTree = SOURCE_ROOT; }; - 84A4886F08A22E4900752A2B /* juce_ChangeListenerList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChangeListenerList.cpp; path = ../../src/juce_appframework/events/juce_ChangeListenerList.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887008A22E4900752A2B /* juce_ChangeListenerList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ChangeListenerList.h; path = ../../src/juce_appframework/events/juce_ChangeListenerList.h; sourceTree = SOURCE_ROOT; }; - 84A4887108A22E4900752A2B /* juce_Message.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Message.cpp; path = ../../src/juce_appframework/events/juce_Message.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887208A22E4900752A2B /* juce_Message.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Message.h; path = ../../src/juce_appframework/events/juce_Message.h; sourceTree = SOURCE_ROOT; }; - 84A4887308A22E4900752A2B /* juce_MessageListener.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageListener.cpp; path = ../../src/juce_appframework/events/juce_MessageListener.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887408A22E4900752A2B /* juce_MessageListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MessageListener.h; path = ../../src/juce_appframework/events/juce_MessageListener.h; sourceTree = SOURCE_ROOT; }; - 84A4887508A22E4900752A2B /* juce_MessageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageManager.cpp; path = ../../src/juce_appframework/events/juce_MessageManager.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887608A22E4900752A2B /* juce_MessageManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MessageManager.h; path = ../../src/juce_appframework/events/juce_MessageManager.h; sourceTree = SOURCE_ROOT; }; - 84A4887708A22E4900752A2B /* juce_Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Timer.cpp; path = ../../src/juce_appframework/events/juce_Timer.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887808A22E4900752A2B /* juce_Timer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Timer.h; path = ../../src/juce_appframework/events/juce_Timer.h; sourceTree = SOURCE_ROOT; }; - 84A4887C08A22E4900752A2B /* juce_ArrowButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ArrowButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_ArrowButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887D08A22E4900752A2B /* juce_ArrowButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ArrowButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_ArrowButton.h; sourceTree = SOURCE_ROOT; }; - 84A4887E08A22E4900752A2B /* juce_Button.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Button.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_Button.cpp; sourceTree = SOURCE_ROOT; }; - 84A4887F08A22E4900752A2B /* juce_Button.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Button.h; path = ../../src/juce_appframework/gui/components/buttons/juce_Button.h; sourceTree = SOURCE_ROOT; }; - 84A4888008A22E4900752A2B /* juce_DrawableButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888108A22E4900752A2B /* juce_DrawableButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DrawableButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_DrawableButton.h; sourceTree = SOURCE_ROOT; }; - 84A4888208A22E4900752A2B /* juce_HyperlinkButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_HyperlinkButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888308A22E4900752A2B /* juce_HyperlinkButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_HyperlinkButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.h; sourceTree = SOURCE_ROOT; }; - 84A4888408A22E4900752A2B /* juce_ImageButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888508A22E4900752A2B /* juce_ImageButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImageButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_ImageButton.h; sourceTree = SOURCE_ROOT; }; - 84A4888608A22E4900752A2B /* juce_ShapeButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ShapeButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_ShapeButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888708A22E4900752A2B /* juce_ShapeButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ShapeButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_ShapeButton.h; sourceTree = SOURCE_ROOT; }; - 84A4888808A22E4900752A2B /* juce_TextButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_TextButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888908A22E4900752A2B /* juce_TextButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TextButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_TextButton.h; sourceTree = SOURCE_ROOT; }; - 84A4888A08A22E4900752A2B /* juce_ToggleButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToggleButton.cpp; path = ../../src/juce_appframework/gui/components/buttons/juce_ToggleButton.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888B08A22E4900752A2B /* juce_ToggleButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ToggleButton.h; path = ../../src/juce_appframework/gui/components/buttons/juce_ToggleButton.h; sourceTree = SOURCE_ROOT; }; - 84A4888D08A22E4900752A2B /* juce_ComboBox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComboBox.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_ComboBox.cpp; sourceTree = SOURCE_ROOT; }; - 84A4888E08A22E4900752A2B /* juce_ComboBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ComboBox.h; path = ../../src/juce_appframework/gui/components/controls/juce_ComboBox.h; sourceTree = SOURCE_ROOT; }; - 84A4889108A22E4900752A2B /* juce_Label.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Label.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_Label.cpp; sourceTree = SOURCE_ROOT; }; - 84A4889208A22E4900752A2B /* juce_Label.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Label.h; path = ../../src/juce_appframework/gui/components/controls/juce_Label.h; sourceTree = SOURCE_ROOT; }; - 84A4889308A22E4900752A2B /* juce_ListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ListBox.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_ListBox.cpp; sourceTree = SOURCE_ROOT; }; - 84A4889408A22E4900752A2B /* juce_ListBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ListBox.h; path = ../../src/juce_appframework/gui/components/controls/juce_ListBox.h; sourceTree = SOURCE_ROOT; }; - 84A4889508A22E4900752A2B /* juce_ProgressBar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ProgressBar.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_ProgressBar.cpp; sourceTree = SOURCE_ROOT; }; - 84A4889608A22E4900752A2B /* juce_ProgressBar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ProgressBar.h; path = ../../src/juce_appframework/gui/components/controls/juce_ProgressBar.h; sourceTree = SOURCE_ROOT; }; - 84A4889908A22E4900752A2B /* juce_Slider.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Slider.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_Slider.cpp; sourceTree = SOURCE_ROOT; }; - 84A4889A08A22E4900752A2B /* juce_Slider.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Slider.h; path = ../../src/juce_appframework/gui/components/controls/juce_Slider.h; sourceTree = SOURCE_ROOT; }; - 84A4889B08A22E4900752A2B /* juce_TextEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextEditor.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_TextEditor.cpp; sourceTree = SOURCE_ROOT; }; - 84A4889C08A22E4900752A2B /* juce_TextEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TextEditor.h; path = ../../src/juce_appframework/gui/components/controls/juce_TextEditor.h; sourceTree = SOURCE_ROOT; }; - 84A4889D08A22E4900752A2B /* juce_TreeView.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TreeView.cpp; path = ../../src/juce_appframework/gui/components/controls/juce_TreeView.cpp; sourceTree = SOURCE_ROOT; }; - 84A4889E08A22E4900752A2B /* juce_TreeView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TreeView.h; path = ../../src/juce_appframework/gui/components/controls/juce_TreeView.h; sourceTree = SOURCE_ROOT; }; - 84A4889F08A22E4900752A2B /* juce_Component.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Component.cpp; path = ../../src/juce_appframework/gui/components/juce_Component.cpp; sourceTree = SOURCE_ROOT; }; - 84A488A008A22E4900752A2B /* juce_Component.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Component.h; path = ../../src/juce_appframework/gui/components/juce_Component.h; sourceTree = SOURCE_ROOT; }; - 84A488A108A22E4900752A2B /* juce_ComponentDeletionWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDeletionWatcher.h; path = ../../src/juce_appframework/gui/components/juce_ComponentDeletionWatcher.h; sourceTree = SOURCE_ROOT; }; - 84A488A208A22E4900752A2B /* juce_ComponentListener.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentListener.cpp; path = ../../src/juce_appframework/gui/components/juce_ComponentListener.cpp; sourceTree = SOURCE_ROOT; }; - 84A488A308A22E4900752A2B /* juce_ComponentListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ComponentListener.h; path = ../../src/juce_appframework/gui/components/juce_ComponentListener.h; sourceTree = SOURCE_ROOT; }; - 84A488A408A22E4900752A2B /* juce_Desktop.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Desktop.cpp; path = ../../src/juce_appframework/gui/components/juce_Desktop.cpp; sourceTree = SOURCE_ROOT; }; - 84A488A508A22E4900752A2B /* juce_Desktop.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Desktop.h; path = ../../src/juce_appframework/gui/components/juce_Desktop.h; sourceTree = SOURCE_ROOT; }; - 84A488A708A22E4900752A2B /* juce_KeyListener.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyListener.cpp; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyListener.cpp; sourceTree = SOURCE_ROOT; }; - 84A488A808A22E4900752A2B /* juce_KeyListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_KeyListener.h; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyListener.h; sourceTree = SOURCE_ROOT; }; - 84A488A908A22E4900752A2B /* juce_KeyMappingEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyMappingEditorComponent.cpp; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488AA08A22E4900752A2B /* juce_KeyMappingEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_KeyMappingEditorComponent.h; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488AB08A22E4900752A2B /* juce_KeyPress.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPress.cpp; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyPress.cpp; sourceTree = SOURCE_ROOT; }; - 84A488AC08A22E4900752A2B /* juce_KeyPress.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_KeyPress.h; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyPress.h; sourceTree = SOURCE_ROOT; }; - 84A488AD08A22E4900752A2B /* juce_KeyPressMappingSet.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPressMappingSet.cpp; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp; sourceTree = SOURCE_ROOT; }; - 84A488AE08A22E4900752A2B /* juce_KeyPressMappingSet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_KeyPressMappingSet.h; path = ../../src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h; sourceTree = SOURCE_ROOT; }; - 84A488AF08A22E4900752A2B /* juce_ModifierKeys.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ModifierKeys.cpp; path = ../../src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.cpp; sourceTree = SOURCE_ROOT; }; - 84A488B008A22E4900752A2B /* juce_ModifierKeys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ModifierKeys.h; path = ../../src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.h; sourceTree = SOURCE_ROOT; }; - 84A488B208A22E4900752A2B /* juce_GroupComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GroupComponent.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_GroupComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488B308A22E4900752A2B /* juce_GroupComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GroupComponent.h; path = ../../src/juce_appframework/gui/components/layout/juce_GroupComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488B508A22E4900752A2B /* juce_ResizableBorderComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableBorderComponent.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488B608A22E4900752A2B /* juce_ResizableBorderComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ResizableBorderComponent.h; path = ../../src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488B708A22E4900752A2B /* juce_ResizableCornerComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableCornerComponent.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488B808A22E4900752A2B /* juce_ResizableCornerComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ResizableCornerComponent.h; path = ../../src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488B908A22E4900752A2B /* juce_ScrollBar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ScrollBar.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_ScrollBar.cpp; sourceTree = SOURCE_ROOT; }; - 84A488BA08A22E4900752A2B /* juce_ScrollBar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ScrollBar.h; path = ../../src/juce_appframework/gui/components/layout/juce_ScrollBar.h; sourceTree = SOURCE_ROOT; }; - 84A488BB08A22E4900752A2B /* juce_StretchableLayoutManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutManager.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.cpp; sourceTree = SOURCE_ROOT; }; - 84A488BC08A22E4900752A2B /* juce_StretchableLayoutManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutManager.h; path = ../../src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.h; sourceTree = SOURCE_ROOT; }; - 84A488BD08A22E4900752A2B /* juce_StretchableLayoutResizerBar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutResizerBar.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.cpp; sourceTree = SOURCE_ROOT; }; - 84A488BE08A22E4900752A2B /* juce_StretchableLayoutResizerBar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutResizerBar.h; path = ../../src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.h; sourceTree = SOURCE_ROOT; }; - 84A488BF08A22E4900752A2B /* juce_TabbedButtonBar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedButtonBar.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp; sourceTree = SOURCE_ROOT; }; - 84A488C008A22E4900752A2B /* juce_TabbedButtonBar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TabbedButtonBar.h; path = ../../src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.h; sourceTree = SOURCE_ROOT; }; - 84A488C108A22E4900752A2B /* juce_TabbedComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedComponent.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_TabbedComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488C208A22E4900752A2B /* juce_TabbedComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TabbedComponent.h; path = ../../src/juce_appframework/gui/components/layout/juce_TabbedComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488C308A22E4900752A2B /* juce_Viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Viewport.cpp; path = ../../src/juce_appframework/gui/components/layout/juce_Viewport.cpp; sourceTree = SOURCE_ROOT; }; - 84A488C408A22E4900752A2B /* juce_Viewport.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Viewport.h; path = ../../src/juce_appframework/gui/components/layout/juce_Viewport.h; sourceTree = SOURCE_ROOT; }; - 84A488C608A22E4900752A2B /* juce_LookAndFeel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel.cpp; path = ../../src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.cpp; sourceTree = SOURCE_ROOT; }; - 84A488C708A22E4900752A2B /* juce_LookAndFeel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel.h; path = ../../src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.h; sourceTree = SOURCE_ROOT; }; - 84A488C808A22E4900752A2B /* juce_OldSchoolLookAndFeel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OldSchoolLookAndFeel.cpp; path = ../../src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp; sourceTree = SOURCE_ROOT; }; - 84A488C908A22E4900752A2B /* juce_OldSchoolLookAndFeel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OldSchoolLookAndFeel.h; path = ../../src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h; sourceTree = SOURCE_ROOT; }; - 84A488CB08A22E4900752A2B /* juce_MenuBarComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MenuBarComponent.cpp; path = ../../src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488CC08A22E4900752A2B /* juce_MenuBarComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarComponent.h; path = ../../src/juce_appframework/gui/components/menus/juce_MenuBarComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488CD08A22E4900752A2B /* juce_MenuBarModel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarModel.h; path = ../../src/juce_appframework/gui/components/menus/juce_MenuBarModel.h; sourceTree = SOURCE_ROOT; }; - 84A488CE08A22E4900752A2B /* juce_PopupMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PopupMenu.cpp; path = ../../src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp; sourceTree = SOURCE_ROOT; }; - 84A488CF08A22E4900752A2B /* juce_PopupMenu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenu.h; path = ../../src/juce_appframework/gui/components/menus/juce_PopupMenu.h; sourceTree = SOURCE_ROOT; }; - 84A488D008A22E4900752A2B /* juce_PopupMenuCustomComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenuCustomComponent.h; path = ../../src/juce_appframework/gui/components/menus/juce_PopupMenuCustomComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488D208A22E4900752A2B /* juce_ComponentDragger.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentDragger.cpp; path = ../../src/juce_appframework/gui/components/mouse/juce_ComponentDragger.cpp; sourceTree = SOURCE_ROOT; }; - 84A488D308A22E4900752A2B /* juce_ComponentDragger.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDragger.h; path = ../../src/juce_appframework/gui/components/mouse/juce_ComponentDragger.h; sourceTree = SOURCE_ROOT; }; - 84A488D408A22E4900752A2B /* juce_DragAndDropContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DragAndDropContainer.cpp; path = ../../src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.cpp; sourceTree = SOURCE_ROOT; }; - 84A488D508A22E4900752A2B /* juce_DragAndDropContainer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropContainer.h; path = ../../src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.h; sourceTree = SOURCE_ROOT; }; - 84A488D608A22E4900752A2B /* juce_DragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropTarget.h; path = ../../src/juce_appframework/gui/components/mouse/juce_DragAndDropTarget.h; sourceTree = SOURCE_ROOT; }; - 84A488D708A22E4900752A2B /* juce_MouseCursor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseCursor.cpp; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseCursor.cpp; sourceTree = SOURCE_ROOT; }; - 84A488D808A22E4900752A2B /* juce_MouseCursor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MouseCursor.h; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseCursor.h; sourceTree = SOURCE_ROOT; }; - 84A488D908A22E4900752A2B /* juce_MouseEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseEvent.cpp; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseEvent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488DA08A22E4900752A2B /* juce_MouseEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MouseEvent.h; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseEvent.h; sourceTree = SOURCE_ROOT; }; - 84A488DB08A22E4900752A2B /* juce_MouseHoverDetector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseHoverDetector.cpp; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.cpp; sourceTree = SOURCE_ROOT; }; - 84A488DC08A22E4900752A2B /* juce_MouseHoverDetector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MouseHoverDetector.h; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.h; sourceTree = SOURCE_ROOT; }; - 84A488DD08A22E4900752A2B /* juce_MouseListener.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseListener.cpp; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseListener.cpp; sourceTree = SOURCE_ROOT; }; - 84A488DE08A22E4900752A2B /* juce_MouseListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MouseListener.h; path = ../../src/juce_appframework/gui/components/mouse/juce_MouseListener.h; sourceTree = SOURCE_ROOT; }; - 84A488E008A22E4900752A2B /* juce_BubbleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleComponent.cpp; path = ../../src/juce_appframework/gui/components/special/juce_BubbleComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488E108A22E4900752A2B /* juce_BubbleComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_BubbleComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_BubbleComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488E208A22E4900752A2B /* juce_BubbleMessageComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleMessageComponent.cpp; path = ../../src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488E308A22E4900752A2B /* juce_BubbleMessageComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488E408A22E4900752A2B /* juce_ColourSelector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../src/juce_appframework/gui/components/special/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; }; - 84A488E508A22E4900752A2B /* juce_ColourSelector.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/juce_appframework/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; }; - 84A488E608A22E4900752A2B /* juce_DropShadower.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/juce_appframework/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; }; - 84A488E708A22E4900752A2B /* juce_DropShadower.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/juce_appframework/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; }; - 84A488E808A22E4900752A2B /* juce_OpenGLComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLComponent.cpp; path = ../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.cpp; sourceTree = SOURCE_ROOT; }; - 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; }; - 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; }; - 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeMovieComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h; sourceTree = SOURCE_ROOT; }; - 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; }; - 84A488F008A22E4900752A2B /* juce_AlertWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; }; - 84A488F108A22E4900752A2B /* juce_DialogWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DialogWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_DialogWindow.cpp; sourceTree = SOURCE_ROOT; }; - 84A488F208A22E4900752A2B /* juce_DialogWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DialogWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_DialogWindow.h; sourceTree = SOURCE_ROOT; }; - 84A488F708A22E4900752A2B /* juce_ResizableWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp; sourceTree = SOURCE_ROOT; }; - 84A488F808A22E4900752A2B /* juce_ResizableWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ResizableWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_ResizableWindow.h; sourceTree = SOURCE_ROOT; }; - 84A488F908A22E4900752A2B /* juce_SplashScreen.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SplashScreen.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_SplashScreen.cpp; sourceTree = SOURCE_ROOT; }; - 84A488FA08A22E4900752A2B /* juce_SplashScreen.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SplashScreen.h; path = ../../src/juce_appframework/gui/components/windows/juce_SplashScreen.h; sourceTree = SOURCE_ROOT; }; - 84A488FB08A22E4900752A2B /* juce_ThreadWithProgressWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadWithProgressWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.cpp; sourceTree = SOURCE_ROOT; }; - 84A488FC08A22E4900752A2B /* juce_ThreadWithProgressWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ThreadWithProgressWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.h; sourceTree = SOURCE_ROOT; }; - 84A488FD08A22E4900752A2B /* juce_TooltipWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TooltipWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_TooltipWindow.cpp; sourceTree = SOURCE_ROOT; }; - 84A488FE08A22E4900752A2B /* juce_TooltipWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TooltipWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_TooltipWindow.h; sourceTree = SOURCE_ROOT; }; - 84A4890108A22E4900752A2B /* juce_Brush.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Brush.cpp; path = ../../src/juce_appframework/gui/graphics/brushes/juce_Brush.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890208A22E4900752A2B /* juce_Brush.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Brush.h; path = ../../src/juce_appframework/gui/graphics/brushes/juce_Brush.h; sourceTree = SOURCE_ROOT; }; - 84A4890308A22E4900752A2B /* juce_GradientBrush.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GradientBrush.cpp; path = ../../src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890408A22E4900752A2B /* juce_GradientBrush.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GradientBrush.h; path = ../../src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.h; sourceTree = SOURCE_ROOT; }; - 84A4890508A22E4900752A2B /* juce_ImageBrush.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageBrush.cpp; path = ../../src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890608A22E4900752A2B /* juce_ImageBrush.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImageBrush.h; path = ../../src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.h; sourceTree = SOURCE_ROOT; }; - 84A4890708A22E4900752A2B /* juce_SolidColourBrush.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SolidColourBrush.cpp; path = ../../src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890808A22E4900752A2B /* juce_SolidColourBrush.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SolidColourBrush.h; path = ../../src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.h; sourceTree = SOURCE_ROOT; }; - 84A4890A08A22E4900752A2B /* juce_Colour.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colour.cpp; path = ../../src/juce_appframework/gui/graphics/colour/juce_Colour.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890B08A22E4900752A2B /* juce_Colour.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Colour.h; path = ../../src/juce_appframework/gui/graphics/colour/juce_Colour.h; sourceTree = SOURCE_ROOT; }; - 84A4890C08A22E4900752A2B /* juce_ColourGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourGradient.cpp; path = ../../src/juce_appframework/gui/graphics/colour/juce_ColourGradient.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890D08A22E4900752A2B /* juce_ColourGradient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ColourGradient.h; path = ../../src/juce_appframework/gui/graphics/colour/juce_ColourGradient.h; sourceTree = SOURCE_ROOT; }; - 84A4890E08A22E4900752A2B /* juce_Colours.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colours.cpp; path = ../../src/juce_appframework/gui/graphics/colour/juce_Colours.cpp; sourceTree = SOURCE_ROOT; }; - 84A4890F08A22E4900752A2B /* juce_Colours.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Colours.h; path = ../../src/juce_appframework/gui/graphics/colour/juce_Colours.h; sourceTree = SOURCE_ROOT; }; - 84A4891008A22E4900752A2B /* juce_PixelFormats.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PixelFormats.h; path = ../../src/juce_appframework/gui/graphics/colour/juce_PixelFormats.h; sourceTree = SOURCE_ROOT; }; - 84A4891208A22E4900752A2B /* juce_EdgeTable.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_EdgeTable.cpp; path = ../../src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.cpp; sourceTree = SOURCE_ROOT; }; - 84A4891308A22E4900752A2B /* juce_EdgeTable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_EdgeTable.h; path = ../../src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.h; sourceTree = SOURCE_ROOT; }; - 84A4891408A22E4900752A2B /* juce_Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Graphics.cpp; path = ../../src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp; sourceTree = SOURCE_ROOT; }; - 84A4891508A22E4900752A2B /* juce_Graphics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Graphics.h; path = ../../src/juce_appframework/gui/graphics/contexts/juce_Graphics.h; sourceTree = SOURCE_ROOT; }; - 84A4891608A22E4900752A2B /* juce_Justification.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Justification.cpp; path = ../../src/juce_appframework/gui/graphics/contexts/juce_Justification.cpp; sourceTree = SOURCE_ROOT; }; - 84A4891708A22E4900752A2B /* juce_Justification.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Justification.h; path = ../../src/juce_appframework/gui/graphics/contexts/juce_Justification.h; sourceTree = SOURCE_ROOT; }; - 84A4891908A22E4900752A2B /* juce_Drawable.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Drawable.cpp; path = ../../src/juce_appframework/gui/graphics/drawables/juce_Drawable.cpp; sourceTree = SOURCE_ROOT; }; - 84A4891A08A22E4900752A2B /* juce_Drawable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Drawable.h; path = ../../src/juce_appframework/gui/graphics/drawables/juce_Drawable.h; sourceTree = SOURCE_ROOT; }; - 84A4891B08A22E4A00752A2B /* juce_DrawableComposite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableComposite.cpp; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.cpp; sourceTree = SOURCE_ROOT; }; - 84A4891C08A22E4A00752A2B /* juce_DrawableComposite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DrawableComposite.h; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.h; sourceTree = SOURCE_ROOT; }; - 84A4891D08A22E4A00752A2B /* juce_DrawableImage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableImage.cpp; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.cpp; sourceTree = SOURCE_ROOT; }; - 84A4891E08A22E4A00752A2B /* juce_DrawableImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DrawableImage.h; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.h; sourceTree = SOURCE_ROOT; }; - 84A4891F08A22E4A00752A2B /* juce_DrawablePath.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawablePath.cpp; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892008A22E4A00752A2B /* juce_DrawablePath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DrawablePath.h; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.h; sourceTree = SOURCE_ROOT; }; - 84A4892108A22E4A00752A2B /* juce_DrawableText.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableText.cpp; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableText.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892208A22E4A00752A2B /* juce_DrawableText.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DrawableText.h; path = ../../src/juce_appframework/gui/graphics/drawables/juce_DrawableText.h; sourceTree = SOURCE_ROOT; }; - 84A4892408A22E4A00752A2B /* juce_DropShadowEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadowEffect.cpp; path = ../../src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892508A22E4A00752A2B /* juce_DropShadowEffect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DropShadowEffect.h; path = ../../src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.h; sourceTree = SOURCE_ROOT; }; - 84A4892608A22E4A00752A2B /* juce_GlowEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlowEffect.cpp; path = ../../src/juce_appframework/gui/graphics/effects/juce_GlowEffect.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892708A22E4A00752A2B /* juce_GlowEffect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GlowEffect.h; path = ../../src/juce_appframework/gui/graphics/effects/juce_GlowEffect.h; sourceTree = SOURCE_ROOT; }; - 84A4892808A22E4A00752A2B /* juce_ImageEffectFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImageEffectFilter.h; path = ../../src/juce_appframework/gui/graphics/effects/juce_ImageEffectFilter.h; sourceTree = SOURCE_ROOT; }; - 84A4892908A22E4A00752A2B /* juce_ReduceOpacityEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReduceOpacityEffect.cpp; path = ../../src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892A08A22E4A00752A2B /* juce_ReduceOpacityEffect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ReduceOpacityEffect.h; path = ../../src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.h; sourceTree = SOURCE_ROOT; }; - 84A4892C08A22E4A00752A2B /* juce_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Font.cpp; path = ../../src/juce_appframework/gui/graphics/fonts/juce_Font.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892D08A22E4A00752A2B /* juce_Font.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Font.h; path = ../../src/juce_appframework/gui/graphics/fonts/juce_Font.h; sourceTree = SOURCE_ROOT; }; - 84A4892E08A22E4A00752A2B /* juce_GlyphArrangement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlyphArrangement.cpp; path = ../../src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp; sourceTree = SOURCE_ROOT; }; - 84A4892F08A22E4A00752A2B /* juce_GlyphArrangement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GlyphArrangement.h; path = ../../src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.h; sourceTree = SOURCE_ROOT; }; - 84A4893008A22E4A00752A2B /* juce_TextLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextLayout.cpp; path = ../../src/juce_appframework/gui/graphics/fonts/juce_TextLayout.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893108A22E4A00752A2B /* juce_TextLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TextLayout.h; path = ../../src/juce_appframework/gui/graphics/fonts/juce_TextLayout.h; sourceTree = SOURCE_ROOT; }; - 84A4893208A22E4A00752A2B /* juce_Typeface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Typeface.cpp; path = ../../src/juce_appframework/gui/graphics/fonts/juce_Typeface.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893308A22E4A00752A2B /* juce_Typeface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Typeface.h; path = ../../src/juce_appframework/gui/graphics/fonts/juce_Typeface.h; sourceTree = SOURCE_ROOT; }; - 84A4893508A22E4A00752A2B /* juce_AffineTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AffineTransform.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893608A22E4A00752A2B /* juce_AffineTransform.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AffineTransform.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.h; sourceTree = SOURCE_ROOT; }; - 84A4893708A22E4A00752A2B /* juce_Line.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Line.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Line.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893808A22E4A00752A2B /* juce_Line.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Line.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Line.h; sourceTree = SOURCE_ROOT; }; - 84A4893908A22E4A00752A2B /* juce_Path.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Path.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Path.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893A08A22E4A00752A2B /* juce_Path.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Path.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Path.h; sourceTree = SOURCE_ROOT; }; - 84A4893B08A22E4A00752A2B /* juce_PathIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathIterator.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_PathIterator.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893C08A22E4A00752A2B /* juce_PathIterator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PathIterator.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_PathIterator.h; sourceTree = SOURCE_ROOT; }; - 84A4893D08A22E4A00752A2B /* juce_PathStrokeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathStrokeType.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.cpp; sourceTree = SOURCE_ROOT; }; - 84A4893E08A22E4A00752A2B /* juce_PathStrokeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PathStrokeType.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.h; sourceTree = SOURCE_ROOT; }; - 84A4893F08A22E4A00752A2B /* juce_Point.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Point.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Point.cpp; sourceTree = SOURCE_ROOT; }; - 84A4894008A22E4A00752A2B /* juce_Point.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Point.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Point.h; sourceTree = SOURCE_ROOT; }; - 84A4894108A22E4A00752A2B /* juce_Rectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Rectangle.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Rectangle.cpp; sourceTree = SOURCE_ROOT; }; - 84A4894208A22E4A00752A2B /* juce_Rectangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Rectangle.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_Rectangle.h; sourceTree = SOURCE_ROOT; }; - 84A4894308A22E4A00752A2B /* juce_RectangleList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RectangleList.cpp; path = ../../src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp; sourceTree = SOURCE_ROOT; }; - 84A4894408A22E4A00752A2B /* juce_RectangleList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RectangleList.h; path = ../../src/juce_appframework/gui/graphics/geometry/juce_RectangleList.h; sourceTree = SOURCE_ROOT; }; - 84A4897208A22E4A00752A2B /* juce_GIFLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GIFLoader.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp; sourceTree = SOURCE_ROOT; }; - 84A4897308A22E4A00752A2B /* juce_GIFLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GIFLoader.h; path = ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h; sourceTree = SOURCE_ROOT; }; - 84A4897408A22E4A00752A2B /* juce_JPEGLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_JPEGLoader.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp; sourceTree = SOURCE_ROOT; }; - 84A4897508A22E4A00752A2B /* juce_PNGLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PNGLoader.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp; sourceTree = SOURCE_ROOT; }; - 84A4898608A22E4A00752A2B /* juce_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Image.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/juce_Image.cpp; sourceTree = SOURCE_ROOT; }; - 84A4898708A22E4A00752A2B /* juce_Image.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Image.h; path = ../../src/juce_appframework/gui/graphics/imaging/juce_Image.h; sourceTree = SOURCE_ROOT; }; - 84A4898808A22E4A00752A2B /* juce_ImageCache.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageCache.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/juce_ImageCache.cpp; sourceTree = SOURCE_ROOT; }; - 84A4898908A22E4A00752A2B /* juce_ImageCache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImageCache.h; path = ../../src/juce_appframework/gui/graphics/imaging/juce_ImageCache.h; sourceTree = SOURCE_ROOT; }; - 84A4898A08A22E4A00752A2B /* juce_ImageConvolutionKernel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageConvolutionKernel.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp; sourceTree = SOURCE_ROOT; }; - 84A4898B08A22E4A00752A2B /* juce_ImageConvolutionKernel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImageConvolutionKernel.h; path = ../../src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.h; sourceTree = SOURCE_ROOT; }; - 84A4898C08A22E4A00752A2B /* juce_ImageFileFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageFileFormat.cpp; path = ../../src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.cpp; sourceTree = SOURCE_ROOT; }; - 84A4898D08A22E4A00752A2B /* juce_ImageFileFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImageFileFormat.h; path = ../../src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h; sourceTree = SOURCE_ROOT; }; - 84A4899908A22E4A00752A2B /* juce_Atomic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Atomic.h; path = ../../src/juce_core/basics/juce_Atomic.h; sourceTree = SOURCE_ROOT; }; - 84A4899A08A22E4A00752A2B /* juce_DataConversions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DataConversions.h; path = ../../src/juce_core/basics/juce_DataConversions.h; sourceTree = SOURCE_ROOT; }; - 84A4899B08A22E4A00752A2B /* juce_FileLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileLogger.cpp; path = ../../src/juce_core/basics/juce_FileLogger.cpp; sourceTree = SOURCE_ROOT; }; - 84A4899C08A22E4A00752A2B /* juce_FileLogger.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileLogger.h; path = ../../src/juce_core/basics/juce_FileLogger.h; sourceTree = SOURCE_ROOT; }; - 84A4899D08A22E4A00752A2B /* juce_Initialisation.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Initialisation.h; path = ../../src/juce_core/basics/juce_Initialisation.h; sourceTree = SOURCE_ROOT; }; - 84A4899E08A22E4A00752A2B /* juce_Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Logger.cpp; path = ../../src/juce_core/basics/juce_Logger.cpp; sourceTree = SOURCE_ROOT; }; - 84A4899F08A22E4A00752A2B /* juce_Logger.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Logger.h; path = ../../src/juce_core/basics/juce_Logger.h; sourceTree = SOURCE_ROOT; }; - 84A489A008A22E4A00752A2B /* juce_MathsFunctions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MathsFunctions.h; path = ../../src/juce_core/basics/juce_MathsFunctions.h; sourceTree = SOURCE_ROOT; }; - 84A489A108A22E4A00752A2B /* juce_Memory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Memory.h; path = ../../src/juce_core/basics/juce_Memory.h; sourceTree = SOURCE_ROOT; }; - 84A489A208A22E4A00752A2B /* juce_PlatformDefs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PlatformDefs.h; path = ../../src/juce_core/basics/juce_PlatformDefs.h; sourceTree = SOURCE_ROOT; }; - 84A489A308A22E4A00752A2B /* juce_Random.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Random.cpp; path = ../../src/juce_core/basics/juce_Random.cpp; sourceTree = SOURCE_ROOT; }; - 84A489A408A22E4A00752A2B /* juce_Random.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Random.h; path = ../../src/juce_core/basics/juce_Random.h; sourceTree = SOURCE_ROOT; }; - 84A489A508A22E4A00752A2B /* juce_RelativeTime.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeTime.cpp; path = ../../src/juce_core/basics/juce_RelativeTime.cpp; sourceTree = SOURCE_ROOT; }; - 84A489A608A22E4A00752A2B /* juce_RelativeTime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_RelativeTime.h; sourceTree = ""; }; - 84A489A708A22E4A00752A2B /* juce_Singleton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Singleton.h; path = ../../src/juce_core/basics/juce_Singleton.h; sourceTree = SOURCE_ROOT; }; - 84A489A808A22E4A00752A2B /* juce_StandardHeader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_StandardHeader.h; path = ../../src/juce_core/basics/juce_StandardHeader.h; sourceTree = SOURCE_ROOT; }; - 84A489A908A22E4A00752A2B /* juce_SystemStats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemStats.cpp; path = ../../src/juce_core/basics/juce_SystemStats.cpp; sourceTree = SOURCE_ROOT; }; - 84A489AA08A22E4A00752A2B /* juce_SystemStats.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SystemStats.h; path = ../../src/juce_core/basics/juce_SystemStats.h; sourceTree = SOURCE_ROOT; }; - 84A489AB08A22E4A00752A2B /* juce_Time.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Time.cpp; path = ../../src/juce_core/basics/juce_Time.cpp; sourceTree = SOURCE_ROOT; }; - 84A489AC08A22E4A00752A2B /* juce_Time.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Time.h; path = ../../src/juce_core/basics/juce_Time.h; sourceTree = SOURCE_ROOT; }; - 84A489AE08A22E4A00752A2B /* juce_Array.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Array.h; path = ../../src/juce_core/containers/juce_Array.h; sourceTree = SOURCE_ROOT; }; - 84A489AF08A22E4A00752A2B /* juce_ArrayAllocationBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ArrayAllocationBase.h; path = ../../src/juce_core/containers/juce_ArrayAllocationBase.h; sourceTree = SOURCE_ROOT; }; - 84A489B008A22E4A00752A2B /* juce_BitArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BitArray.cpp; path = ../../src/juce_core/containers/juce_BitArray.cpp; sourceTree = SOURCE_ROOT; }; - 84A489B108A22E4A00752A2B /* juce_BitArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_BitArray.h; path = ../../src/juce_core/containers/juce_BitArray.h; sourceTree = SOURCE_ROOT; }; - 84A489B208A22E4A00752A2B /* juce_ElementComparator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ElementComparator.h; path = ../../src/juce_core/containers/juce_ElementComparator.h; sourceTree = SOURCE_ROOT; }; - 84A489B308A22E4A00752A2B /* juce_MemoryBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryBlock.cpp; path = ../../src/juce_core/containers/juce_MemoryBlock.cpp; sourceTree = SOURCE_ROOT; }; - 84A489B408A22E4A00752A2B /* juce_MemoryBlock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MemoryBlock.h; path = ../../src/juce_core/containers/juce_MemoryBlock.h; sourceTree = SOURCE_ROOT; }; - 84A489B508A22E4A00752A2B /* juce_OwnedArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OwnedArray.h; path = ../../src/juce_core/containers/juce_OwnedArray.h; sourceTree = SOURCE_ROOT; }; - 84A489B608A22E4A00752A2B /* juce_PropertySet.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertySet.cpp; path = ../../src/juce_core/containers/juce_PropertySet.cpp; sourceTree = SOURCE_ROOT; }; - 84A489B708A22E4A00752A2B /* juce_PropertySet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PropertySet.h; path = ../../src/juce_core/containers/juce_PropertySet.h; sourceTree = SOURCE_ROOT; }; - 84A489B808A22E4A00752A2B /* juce_ReferenceCountedArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedArray.h; path = ../../src/juce_core/containers/juce_ReferenceCountedArray.h; sourceTree = SOURCE_ROOT; }; - 84A489B908A22E4A00752A2B /* juce_ReferenceCountedObject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedObject.h; path = ../../src/juce_core/containers/juce_ReferenceCountedObject.h; sourceTree = SOURCE_ROOT; }; - 84A489BA08A22E4A00752A2B /* juce_SortedSet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SortedSet.h; path = ../../src/juce_core/containers/juce_SortedSet.h; sourceTree = SOURCE_ROOT; }; - 84A489BB08A22E4A00752A2B /* juce_SparseSet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SparseSet.h; path = ../../src/juce_core/containers/juce_SparseSet.h; sourceTree = SOURCE_ROOT; }; - 84A489BC08A22E4A00752A2B /* juce_VoidArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_VoidArray.h; path = ../../src/juce_core/containers/juce_VoidArray.h; sourceTree = SOURCE_ROOT; }; - 84A489BE08A22E4A00752A2B /* juce_BlowFish.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BlowFish.cpp; path = ../../src/juce_core/cryptography/juce_BlowFish.cpp; sourceTree = SOURCE_ROOT; }; - 84A489BF08A22E4A00752A2B /* juce_BlowFish.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_BlowFish.h; path = ../../src/juce_core/cryptography/juce_BlowFish.h; sourceTree = SOURCE_ROOT; }; - 84A489C008A22E4A00752A2B /* juce_MD5.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MD5.cpp; path = ../../src/juce_core/cryptography/juce_MD5.cpp; sourceTree = SOURCE_ROOT; }; - 84A489C108A22E4A00752A2B /* juce_MD5.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MD5.h; path = ../../src/juce_core/cryptography/juce_MD5.h; sourceTree = SOURCE_ROOT; }; - 84A489C208A22E4A00752A2B /* juce_Primes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Primes.cpp; path = ../../src/juce_core/cryptography/juce_Primes.cpp; sourceTree = SOURCE_ROOT; }; - 84A489C308A22E4A00752A2B /* juce_Primes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Primes.h; path = ../../src/juce_core/cryptography/juce_Primes.h; sourceTree = SOURCE_ROOT; }; - 84A489C408A22E4A00752A2B /* juce_RSAKey.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RSAKey.cpp; path = ../../src/juce_core/cryptography/juce_RSAKey.cpp; sourceTree = SOURCE_ROOT; }; - 84A489C508A22E4A00752A2B /* juce_RSAKey.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RSAKey.h; path = ../../src/juce_core/cryptography/juce_RSAKey.h; sourceTree = SOURCE_ROOT; }; - 84A489C808A22E4A00752A2B /* juce_DirectoryIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryIterator.cpp; path = ../../src/juce_core/io/files/juce_DirectoryIterator.cpp; sourceTree = SOURCE_ROOT; }; - 84A489C908A22E4A00752A2B /* juce_DirectoryIterator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryIterator.h; path = ../../src/juce_core/io/files/juce_DirectoryIterator.h; sourceTree = SOURCE_ROOT; }; - 84A489CA08A22E4A00752A2B /* juce_File.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_File.cpp; path = ../../src/juce_core/io/files/juce_File.cpp; sourceTree = SOURCE_ROOT; }; - 84A489CB08A22E4A00752A2B /* juce_File.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_File.h; path = ../../src/juce_core/io/files/juce_File.h; sourceTree = SOURCE_ROOT; }; - 84A489CC08A22E4A00752A2B /* juce_FileInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputStream.cpp; path = ../../src/juce_core/io/files/juce_FileInputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489CD08A22E4A00752A2B /* juce_FileInputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileInputStream.h; path = ../../src/juce_core/io/files/juce_FileInputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489CE08A22E4A00752A2B /* juce_FileOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileOutputStream.cpp; path = ../../src/juce_core/io/files/juce_FileOutputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489CF08A22E4A00752A2B /* juce_FileOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileOutputStream.h; path = ../../src/juce_core/io/files/juce_FileOutputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489D008A22E4A00752A2B /* juce_FileSearchPath.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPath.cpp; path = ../../src/juce_core/io/files/juce_FileSearchPath.cpp; sourceTree = SOURCE_ROOT; }; - 84A489D108A22E4A00752A2B /* juce_FileSearchPath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPath.h; path = ../../src/juce_core/io/files/juce_FileSearchPath.h; sourceTree = SOURCE_ROOT; }; - 84A489D208A22E4A00752A2B /* juce_InputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InputStream.cpp; path = ../../src/juce_core/io/juce_InputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489D308A22E4A00752A2B /* juce_InputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_InputStream.h; path = ../../src/juce_core/io/juce_InputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489D408A22E4A00752A2B /* juce_OutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OutputStream.cpp; path = ../../src/juce_core/io/juce_OutputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489D508A22E4A00752A2B /* juce_OutputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OutputStream.h; path = ../../src/juce_core/io/juce_OutputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489D708A22E4A00752A2B /* juce_URL.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_URL.cpp; path = ../../src/juce_core/io/network/juce_URL.cpp; sourceTree = SOURCE_ROOT; }; - 84A489D808A22E4A00752A2B /* juce_URL.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_URL.h; path = ../../src/juce_core/io/network/juce_URL.h; sourceTree = SOURCE_ROOT; }; - 84A489DA08A22E4A00752A2B /* juce_BufferedInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferedInputStream.cpp; path = ../../src/juce_core/io/streams/juce_BufferedInputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489DB08A22E4A00752A2B /* juce_BufferedInputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_BufferedInputStream.h; path = ../../src/juce_core/io/streams/juce_BufferedInputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489DC08A22E4A00752A2B /* juce_GZIPCompressorOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPCompressorOutputStream.cpp; path = ../../src/juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489DD08A22E4A00752A2B /* juce_GZIPCompressorOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GZIPCompressorOutputStream.h; path = ../../src/juce_core/io/streams/juce_GZIPCompressorOutputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489DE08A22E4A00752A2B /* juce_GZIPDecompressorInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPDecompressorInputStream.cpp; path = ../../src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489DF08A22E4A00752A2B /* juce_GZIPDecompressorInputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_GZIPDecompressorInputStream.h; path = ../../src/juce_core/io/streams/juce_GZIPDecompressorInputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489E008A22E4A00752A2B /* juce_MemoryInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryInputStream.cpp; path = ../../src/juce_core/io/streams/juce_MemoryInputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489E108A22E4A00752A2B /* juce_MemoryInputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MemoryInputStream.h; path = ../../src/juce_core/io/streams/juce_MemoryInputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489E208A22E4A00752A2B /* juce_MemoryOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryOutputStream.cpp; path = ../../src/juce_core/io/streams/juce_MemoryOutputStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489E308A22E4A00752A2B /* juce_MemoryOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MemoryOutputStream.h; path = ../../src/juce_core/io/streams/juce_MemoryOutputStream.h; sourceTree = SOURCE_ROOT; }; - 84A489E408A22E4A00752A2B /* juce_SubregionStream.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SubregionStream.cpp; path = ../../src/juce_core/io/streams/juce_SubregionStream.cpp; sourceTree = SOURCE_ROOT; }; - 84A489E508A22E4A00752A2B /* juce_SubregionStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SubregionStream.h; path = ../../src/juce_core/io/streams/juce_SubregionStream.h; sourceTree = SOURCE_ROOT; }; - 84A48A0008A22E4A00752A2B /* juce_PerformanceCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PerformanceCounter.cpp; path = ../../src/juce_core/misc/juce_PerformanceCounter.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0108A22E4A00752A2B /* juce_PerformanceCounter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PerformanceCounter.h; path = ../../src/juce_core/misc/juce_PerformanceCounter.h; sourceTree = SOURCE_ROOT; }; - 84A48A0208A22E4A00752A2B /* juce_PlatformUtilities.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PlatformUtilities.h; path = ../../src/juce_core/misc/juce_PlatformUtilities.h; sourceTree = SOURCE_ROOT; }; - 84A48A0308A22E4A00752A2B /* juce_Uuid.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Uuid.cpp; path = ../../src/juce_core/misc/juce_Uuid.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0408A22E4A00752A2B /* juce_Uuid.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Uuid.h; path = ../../src/juce_core/misc/juce_Uuid.h; sourceTree = SOURCE_ROOT; }; - 84A48A0508A22E4A00752A2B /* juce_ZipFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ZipFile.cpp; path = ../../src/juce_core/misc/juce_ZipFile.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0608A22E4A00752A2B /* juce_ZipFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ZipFile.h; path = ../../src/juce_core/misc/juce_ZipFile.h; sourceTree = SOURCE_ROOT; }; - 84A48A0808A22E4A00752A2B /* juce_LocalisedStrings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LocalisedStrings.cpp; path = ../../src/juce_core/text/juce_LocalisedStrings.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0908A22E4A00752A2B /* juce_LocalisedStrings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_LocalisedStrings.h; path = ../../src/juce_core/text/juce_LocalisedStrings.h; sourceTree = SOURCE_ROOT; }; - 84A48A0A08A22E4A00752A2B /* juce_String.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_String.cpp; path = ../../src/juce_core/text/juce_String.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0B08A22E4A00752A2B /* juce_String.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_String.h; path = ../../src/juce_core/text/juce_String.h; sourceTree = SOURCE_ROOT; }; - 84A48A0C08A22E4A00752A2B /* juce_StringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringArray.cpp; path = ../../src/juce_core/text/juce_StringArray.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0D08A22E4A00752A2B /* juce_StringArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_StringArray.h; path = ../../src/juce_core/text/juce_StringArray.h; sourceTree = SOURCE_ROOT; }; - 84A48A0E08A22E4A00752A2B /* juce_StringPairArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringPairArray.cpp; path = ../../src/juce_core/text/juce_StringPairArray.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A0F08A22E4A00752A2B /* juce_StringPairArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_StringPairArray.h; path = ../../src/juce_core/text/juce_StringPairArray.h; sourceTree = SOURCE_ROOT; }; - 84A48A1108A22E4A00752A2B /* juce_XmlDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlDocument.cpp; path = ../../src/juce_core/text/juce_XmlDocument.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A1208A22E4A00752A2B /* juce_XmlDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_XmlDocument.h; path = ../../src/juce_core/text/juce_XmlDocument.h; sourceTree = SOURCE_ROOT; }; - 84A48A1308A22E4A00752A2B /* juce_XmlElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlElement.cpp; path = ../../src/juce_core/text/juce_XmlElement.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A1408A22E4A00752A2B /* juce_XmlElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_XmlElement.h; path = ../../src/juce_core/text/juce_XmlElement.h; sourceTree = SOURCE_ROOT; }; - 84A48A1708A22E4A00752A2B /* juce_CriticalSection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_CriticalSection.h; path = ../../src/juce_core/threads/juce_CriticalSection.h; sourceTree = SOURCE_ROOT; }; - 84A48A1808A22E4A00752A2B /* juce_InterProcessLock.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterProcessLock.cpp; path = ../../src/juce_core/threads/juce_InterProcessLock.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A1908A22E4A00752A2B /* juce_InterProcessLock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_InterProcessLock.h; path = ../../src/juce_core/threads/juce_InterProcessLock.h; sourceTree = SOURCE_ROOT; }; - 84A48A1B08A22E4A00752A2B /* juce_Process.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Process.h; path = ../../src/juce_core/threads/juce_Process.h; sourceTree = SOURCE_ROOT; }; - 84A48A1C08A22E4A00752A2B /* juce_ReadWriteLock.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReadWriteLock.cpp; path = ../../src/juce_core/threads/juce_ReadWriteLock.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A1D08A22E4A00752A2B /* juce_ReadWriteLock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ReadWriteLock.h; path = ../../src/juce_core/threads/juce_ReadWriteLock.h; sourceTree = SOURCE_ROOT; }; - 84A48A1E08A22E4A00752A2B /* juce_ScopedLock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ScopedLock.h; path = ../../src/juce_core/threads/juce_ScopedLock.h; sourceTree = SOURCE_ROOT; }; - 84A48A1F08A22E4A00752A2B /* juce_ScopedReadLock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ScopedReadLock.h; path = ../../src/juce_core/threads/juce_ScopedReadLock.h; sourceTree = SOURCE_ROOT; }; - 84A48A2008A22E4A00752A2B /* juce_ScopedWriteLock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ScopedWriteLock.h; path = ../../src/juce_core/threads/juce_ScopedWriteLock.h; sourceTree = SOURCE_ROOT; }; - 84A48A2108A22E4A00752A2B /* juce_Thread.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Thread.cpp; path = ../../src/juce_core/threads/juce_Thread.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A2208A22E4A00752A2B /* juce_Thread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Thread.h; path = ../../src/juce_core/threads/juce_Thread.h; sourceTree = SOURCE_ROOT; }; - 84A48A2308A22E4A00752A2B /* juce_ThreadPool.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadPool.cpp; path = ../../src/juce_core/threads/juce_ThreadPool.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A2408A22E4A00752A2B /* juce_ThreadPool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ThreadPool.h; path = ../../src/juce_core/threads/juce_ThreadPool.h; sourceTree = SOURCE_ROOT; }; - 84A48A2508A22E4A00752A2B /* juce_TimeSliceThread.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TimeSliceThread.cpp; path = ../../src/juce_core/threads/juce_TimeSliceThread.cpp; sourceTree = SOURCE_ROOT; }; - 84A48A2608A22E4A00752A2B /* juce_TimeSliceThread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TimeSliceThread.h; path = ../../src/juce_core/threads/juce_TimeSliceThread.h; sourceTree = SOURCE_ROOT; }; - 84A48A2708A22E4A00752A2B /* juce_WaitableEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../src/juce_core/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; }; - 84B1C1320F6287E70068E14F /* juce_CallbackMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_CallbackMessage.h; sourceTree = ""; }; - 84BC4E210C8DD38C00FA249B /* juce_AudioPlayHead.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPlayHead.h; sourceTree = ""; }; - 84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 2; path = juce_AudioProcessor.cpp; sourceTree = ""; }; - 84BC4E230C8DD38C00FA249B /* juce_AudioProcessor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessor.h; sourceTree = ""; }; - 84BC4E240C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessorEditor.cpp; sourceTree = ""; }; - 84BC4E250C8DD38C00FA249B /* juce_AudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorEditor.h; sourceTree = ""; }; - 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorListener.h; sourceTree = ""; }; - 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_GenericAudioProcessorEditor.cpp; sourceTree = ""; }; - 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_GenericAudioProcessorEditor.h; sourceTree = ""; }; - 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilterAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp; sourceTree = SOURCE_ROOT; }; - 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilterAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h; sourceTree = SOURCE_ROOT; }; - 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_VSTPluginFormat.mm; sourceTree = ""; }; - 84CA4AFA0E9BF9EC004CCC0E /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_VSTPluginFormat.cpp; sourceTree = ""; }; - 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PropertiesFile.cpp; sourceTree = ""; }; - 84D296BC09B763190026C535 /* juce_PropertiesFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PropertiesFile.h; sourceTree = ""; }; - 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioFormatManager.cpp; sourceTree = ""; }; - 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioFormatManager.h; sourceTree = ""; }; - 84EE01040FF235750093FACA /* juce_CameraDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_CameraDevice.h; sourceTree = ""; }; - 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiKeyboardComponent.cpp; sourceTree = ""; }; - 84F1B8D909499F1400AD8EDE /* juce_MidiKeyboardComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MidiKeyboardComponent.h; sourceTree = ""; }; - 84F1F05B0A36CE96008CCC5E /* juce_FilenameComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FilenameComponent.cpp; path = filebrowser/juce_FilenameComponent.cpp; sourceTree = ""; }; - 84F1F05C0A36CE96008CCC5E /* juce_FilenameComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FilenameComponent.h; path = filebrowser/juce_FilenameComponent.h; sourceTree = ""; }; - 84F1F05F0A36CF06008CCC5E /* juce_BooleanPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_BooleanPropertyComponent.cpp; sourceTree = ""; }; - 84F1F0600A36CF06008CCC5E /* juce_BooleanPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_BooleanPropertyComponent.h; sourceTree = ""; }; - 84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MagnifierComponent.cpp; sourceTree = ""; }; - 84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MagnifierComponent.h; sourceTree = ""; }; - 84F1F0670A36CF45008CCC5E /* juce_KeyboardFocusTraverser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_KeyboardFocusTraverser.cpp; sourceTree = ""; }; - 84F1F0680A36CF45008CCC5E /* juce_KeyboardFocusTraverser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_KeyboardFocusTraverser.h; sourceTree = ""; }; - 84F46B7C098685BD0079F3FA /* juce_ComponentBoundsConstrainer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentBoundsConstrainer.cpp; sourceTree = ""; }; - 84F46B7D098685BD0079F3FA /* juce_ComponentBoundsConstrainer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentBoundsConstrainer.h; sourceTree = ""; }; - 84F524FE0B32A8D500597B73 /* juce_ApplicationProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ApplicationProperties.cpp; sourceTree = ""; }; - 84F524FF0B32A8D500597B73 /* juce_ApplicationProperties.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ApplicationProperties.h; sourceTree = ""; }; - 84F555280A2235E100A8311C /* juce_MultiDocumentPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MultiDocumentPanel.cpp; sourceTree = ""; }; - 84F555290A2235E100A8311C /* juce_MultiDocumentPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MultiDocumentPanel.h; sourceTree = ""; }; - 84F5598209CACFDD00AC5000 /* juce_Socket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Socket.cpp; sourceTree = ""; }; - 84F5598309CACFDD00AC5000 /* juce_Socket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_Socket.h; sourceTree = ""; }; - 84F5598609CACFF700AC5000 /* juce_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_NamedPipe.cpp; sourceTree = ""; }; - 84F5598709CACFF700AC5000 /* juce_NamedPipe.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_NamedPipe.h; sourceTree = ""; }; - 84F589940A01491F00B80939 /* juce_TooltipClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TooltipClient.h; sourceTree = ""; }; - 84F589980A01493600B80939 /* juce_ApplicationCommandID.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ApplicationCommandID.h; sourceTree = ""; }; - 84F589990A01493600B80939 /* juce_ApplicationCommandInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ApplicationCommandInfo.cpp; sourceTree = ""; }; - 84F5899A0A01493600B80939 /* juce_ApplicationCommandInfo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ApplicationCommandInfo.h; sourceTree = ""; }; - 84F5899B0A01493600B80939 /* juce_ApplicationCommandManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ApplicationCommandManager.cpp; sourceTree = ""; }; - 84F5899C0A01493600B80939 /* juce_ApplicationCommandManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ApplicationCommandManager.h; sourceTree = ""; }; - 84F5899D0A01493600B80939 /* juce_ApplicationCommandTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ApplicationCommandTarget.cpp; sourceTree = ""; }; - 84F5899E0A01493600B80939 /* juce_ApplicationCommandTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ApplicationCommandTarget.h; sourceTree = ""; }; - 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_DocumentWindow.cpp; sourceTree = ""; }; - 84F593AD09855679008153BA /* juce_DocumentWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DocumentWindow.h; sourceTree = ""; }; - 84F593B009855693008153BA /* juce_LassoComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LassoComponent.h; sourceTree = ""; }; - 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ChannelRemappingAudioSource.cpp; sourceTree = ""; }; - 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ChannelRemappingAudioSource.h; sourceTree = ""; }; - 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToolbarButton.cpp; sourceTree = ""; }; - 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarButton.h; sourceTree = ""; }; - 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Toolbar.cpp; sourceTree = ""; }; - 84F7A7B20A8383C200D36246 /* juce_Toolbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_Toolbar.h; sourceTree = ""; }; - 84F7A7B30A8383C200D36246 /* juce_ToolbarItemComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToolbarItemComponent.cpp; sourceTree = ""; }; - 84F7A7B40A8383C200D36246 /* juce_ToolbarItemComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarItemComponent.h; sourceTree = ""; }; - 84F7A7B50A8383C200D36246 /* juce_ToolbarItemFactory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarItemFactory.h; sourceTree = ""; }; - 84F7A7B60A8383C200D36246 /* juce_ToolbarItemPalette.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToolbarItemPalette.cpp; sourceTree = ""; }; - 84F7A7B70A8383C200D36246 /* juce_ToolbarItemPalette.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarItemPalette.h; sourceTree = ""; }; - 84F7A7BF0A8383E000D36246 /* juce_MultiTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MultiTimer.cpp; sourceTree = ""; }; - 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MultiTimer.h; sourceTree = ""; }; - 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentAnimator.cpp; sourceTree = ""; }; - 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentAnimator.h; sourceTree = ""; }; - 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentPeer.cpp; sourceTree = ""; }; - 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentPeer.h; sourceTree = ""; }; - 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = documents/juce_FileBasedDocument.cpp; sourceTree = ""; }; - 84FC318809B749FD00B75141 /* juce_FileBasedDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileBasedDocument.h; path = documents/juce_FileBasedDocument.h; sourceTree = ""; }; - 84FC318909B749FD00B75141 /* juce_RecentlyOpenedFilesList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RecentlyOpenedFilesList.cpp; path = documents/juce_RecentlyOpenedFilesList.cpp; sourceTree = ""; }; - 84FC318A09B749FD00B75141 /* juce_RecentlyOpenedFilesList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RecentlyOpenedFilesList.h; path = documents/juce_RecentlyOpenedFilesList.h; sourceTree = ""; }; - 84FC318B09B749FD00B75141 /* juce_SelectedItemSet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_SelectedItemSet.h; path = documents/juce_SelectedItemSet.h; sourceTree = ""; }; - 84FC318C09B749FD00B75141 /* juce_UndoableAction.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_UndoableAction.h; path = documents/juce_UndoableAction.h; sourceTree = ""; }; - 84FC318D09B749FD00B75141 /* juce_UndoManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_UndoManager.cpp; path = documents/juce_UndoManager.cpp; sourceTree = ""; }; - 84FC318E09B749FD00B75141 /* juce_UndoManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_UndoManager.h; path = documents/juce_UndoManager.h; sourceTree = ""; }; - 84FC319809B74A5C00B75141 /* juce_DirectoryContentsList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsList.cpp; path = filebrowser/juce_DirectoryContentsList.cpp; sourceTree = ""; }; - 84FC319909B74A5C00B75141 /* juce_DirectoryContentsList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsList.h; path = filebrowser/juce_DirectoryContentsList.h; sourceTree = ""; }; - 84FC319A09B74A5C00B75141 /* juce_FileBrowserComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBrowserComponent.cpp; path = filebrowser/juce_FileBrowserComponent.cpp; sourceTree = ""; }; - 84FC319B09B74A5C00B75141 /* juce_FileBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserComponent.h; path = filebrowser/juce_FileBrowserComponent.h; sourceTree = ""; }; - 84FC319C09B74A5C00B75141 /* juce_FileBrowserListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserListener.h; path = filebrowser/juce_FileBrowserListener.h; sourceTree = ""; }; - 84FC319D09B74A5C00B75141 /* juce_FileChooser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooser.cpp; path = filebrowser/juce_FileChooser.cpp; sourceTree = ""; }; - 84FC319E09B74A5C00B75141 /* juce_FileChooser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileChooser.h; path = filebrowser/juce_FileChooser.h; sourceTree = ""; }; - 84FC319F09B74A5C00B75141 /* juce_FileChooserDialogBox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooserDialogBox.cpp; path = filebrowser/juce_FileChooserDialogBox.cpp; sourceTree = ""; }; - 84FC31A009B74A5C00B75141 /* juce_FileChooserDialogBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileChooserDialogBox.h; path = filebrowser/juce_FileChooserDialogBox.h; sourceTree = ""; }; - 84FC31A109B74A5C00B75141 /* juce_FileFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileFilter.cpp; path = filebrowser/juce_FileFilter.cpp; sourceTree = ""; }; - 84FC31A209B74A5C00B75141 /* juce_FileFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileFilter.h; path = filebrowser/juce_FileFilter.h; sourceTree = ""; }; - 84FC31A309B74A5C00B75141 /* juce_FileListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileListComponent.cpp; path = filebrowser/juce_FileListComponent.cpp; sourceTree = ""; }; - 84FC31A409B74A5C00B75141 /* juce_FileListComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileListComponent.h; path = filebrowser/juce_FileListComponent.h; sourceTree = ""; }; - 84FC31A509B74A5C00B75141 /* juce_FilePreviewComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FilePreviewComponent.h; path = filebrowser/juce_FilePreviewComponent.h; sourceTree = ""; }; - 84FC31A609B74A5C00B75141 /* juce_ImagePreviewComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImagePreviewComponent.cpp; path = filebrowser/juce_ImagePreviewComponent.cpp; sourceTree = ""; }; - 84FC31A709B74A5C00B75141 /* juce_ImagePreviewComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_ImagePreviewComponent.h; path = filebrowser/juce_ImagePreviewComponent.h; sourceTree = ""; }; - 84FC31A809B74A5C00B75141 /* juce_WildcardFileFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WildcardFileFilter.cpp; path = filebrowser/juce_WildcardFileFilter.cpp; sourceTree = ""; }; - 84FC31A909B74A5C00B75141 /* juce_WildcardFileFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_WildcardFileFilter.h; path = filebrowser/juce_WildcardFileFilter.h; sourceTree = ""; }; - 84FC31BC09B74A7700B75141 /* juce_BorderSize.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_BorderSize.cpp; sourceTree = ""; }; - 84FC31BD09B74A7700B75141 /* juce_BorderSize.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_BorderSize.h; sourceTree = ""; }; - 84FED3C80CAA96DA00003997 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FileDragAndDropTarget.h; sourceTree = ""; }; - 84FFAF290C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPathListComponent.cpp; path = filebrowser/juce_FileSearchPathListComponent.cpp; sourceTree = ""; }; - 84FFAF2A0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = filebrowser/juce_FileSearchPathListComponent.h; sourceTree = ""; }; + 84F1E6DC10403605006A1807 /* juce_Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Application.cpp; path = ../../src/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6DD10403605006A1807 /* juce_Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../src/application/juce_Application.h; sourceTree = SOURCE_ROOT; }; + 84F1E6DE10403605006A1807 /* juce_ApplicationCommandID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandID.h; path = ../../src/application/juce_ApplicationCommandID.h; sourceTree = SOURCE_ROOT; }; + 84F1E6DF10403605006A1807 /* juce_ApplicationCommandInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandInfo.cpp; path = ../../src/application/juce_ApplicationCommandInfo.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6E010403605006A1807 /* juce_ApplicationCommandInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandInfo.h; path = ../../src/application/juce_ApplicationCommandInfo.h; sourceTree = SOURCE_ROOT; }; + 84F1E6E110403605006A1807 /* juce_ApplicationCommandManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandManager.cpp; path = ../../src/application/juce_ApplicationCommandManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6E210403605006A1807 /* juce_ApplicationCommandManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandManager.h; path = ../../src/application/juce_ApplicationCommandManager.h; sourceTree = SOURCE_ROOT; }; + 84F1E6E310403605006A1807 /* juce_ApplicationCommandTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationCommandTarget.cpp; path = ../../src/application/juce_ApplicationCommandTarget.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6E410403605006A1807 /* juce_ApplicationCommandTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationCommandTarget.h; path = ../../src/application/juce_ApplicationCommandTarget.h; sourceTree = SOURCE_ROOT; }; + 84F1E6E510403605006A1807 /* juce_ApplicationProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ApplicationProperties.cpp; path = ../../src/application/juce_ApplicationProperties.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6E610403605006A1807 /* juce_ApplicationProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ApplicationProperties.h; path = ../../src/application/juce_ApplicationProperties.h; sourceTree = SOURCE_ROOT; }; + 84F1E6F410403614006A1807 /* juce_AiffAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AiffAudioFormat.cpp; path = ../../src/audio/audio_file_formats/juce_AiffAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6F510403614006A1807 /* juce_AiffAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AiffAudioFormat.h; path = ../../src/audio/audio_file_formats/juce_AiffAudioFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E6F610403614006A1807 /* juce_AudioCDBurner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioCDBurner.h; path = ../../src/audio/audio_file_formats/juce_AudioCDBurner.h; sourceTree = SOURCE_ROOT; }; + 84F1E6F710403614006A1807 /* juce_AudioCDReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioCDReader.cpp; path = ../../src/audio/audio_file_formats/juce_AudioCDReader.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6F810403614006A1807 /* juce_AudioCDReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioCDReader.h; path = ../../src/audio/audio_file_formats/juce_AudioCDReader.h; sourceTree = SOURCE_ROOT; }; + 84F1E6F910403614006A1807 /* juce_AudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormat.cpp; path = ../../src/audio/audio_file_formats/juce_AudioFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6FA10403614006A1807 /* juce_AudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormat.h; path = ../../src/audio/audio_file_formats/juce_AudioFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E6FB10403614006A1807 /* juce_AudioFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormatManager.cpp; path = ../../src/audio/audio_file_formats/juce_AudioFormatManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E6FC10403614006A1807 /* juce_AudioFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatManager.h; path = ../../src/audio/audio_file_formats/juce_AudioFormatManager.h; sourceTree = SOURCE_ROOT; }; + 84F1E6FD10403614006A1807 /* juce_AudioFormatReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatReader.h; path = ../../src/audio/audio_file_formats/juce_AudioFormatReader.h; sourceTree = SOURCE_ROOT; }; + 84F1E6FE10403614006A1807 /* juce_AudioFormatWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatWriter.h; path = ../../src/audio/audio_file_formats/juce_AudioFormatWriter.h; sourceTree = SOURCE_ROOT; }; + 84F1E6FF10403614006A1807 /* juce_AudioSubsectionReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSubsectionReader.cpp; path = ../../src/audio/audio_file_formats/juce_AudioSubsectionReader.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E70010403614006A1807 /* juce_AudioSubsectionReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioSubsectionReader.h; path = ../../src/audio/audio_file_formats/juce_AudioSubsectionReader.h; sourceTree = SOURCE_ROOT; }; + 84F1E70110403614006A1807 /* juce_AudioThumbnail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioThumbnail.cpp; path = ../../src/audio/audio_file_formats/juce_AudioThumbnail.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E70210403614006A1807 /* juce_AudioThumbnail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioThumbnail.h; path = ../../src/audio/audio_file_formats/juce_AudioThumbnail.h; sourceTree = SOURCE_ROOT; }; + 84F1E70310403614006A1807 /* juce_AudioThumbnailCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioThumbnailCache.cpp; path = ../../src/audio/audio_file_formats/juce_AudioThumbnailCache.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E70410403614006A1807 /* juce_AudioThumbnailCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioThumbnailCache.h; path = ../../src/audio/audio_file_formats/juce_AudioThumbnailCache.h; sourceTree = SOURCE_ROOT; }; + 84F1E70510403614006A1807 /* juce_FlacAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FlacAudioFormat.h; path = ../../src/audio/audio_file_formats/juce_FlacAudioFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E70610403614006A1807 /* juce_OggVorbisAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_OggVorbisAudioFormat.h; path = ../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E70710403614006A1807 /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeAudioFormat.h; path = ../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E70810403614006A1807 /* juce_WavAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_WavAudioFormat.h; path = ../../src/audio/audio_file_formats/juce_WavAudioFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E70910403614006A1807 /* juce_WavAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WavAudioFormat.cpp; path = ../../src/audio/audio_file_formats/juce_WavAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E70A10403614006A1807 /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_QuickTimeAudioFormat.cpp; path = ../../src/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E70B10403614006A1807 /* juce_FlacAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FlacAudioFormat.cpp; path = ../../src/audio/audio_file_formats/juce_FlacAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E70C10403614006A1807 /* juce_OggVorbisAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OggVorbisAudioFormat.cpp; path = ../../src/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79310403614006A1807 /* juce_AudioFormatReaderSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioFormatReaderSource.cpp; path = ../../src/audio/audio_sources/juce_AudioFormatReaderSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79410403614006A1807 /* juce_AudioFormatReaderSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioFormatReaderSource.h; path = ../../src/audio/audio_sources/juce_AudioFormatReaderSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E79510403614006A1807 /* juce_AudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioSource.h; path = ../../src/audio/audio_sources/juce_AudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E79610403614006A1807 /* juce_AudioSourcePlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSourcePlayer.cpp; path = ../../src/audio/audio_sources/juce_AudioSourcePlayer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79710403614006A1807 /* juce_AudioSourcePlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioSourcePlayer.h; path = ../../src/audio/audio_sources/juce_AudioSourcePlayer.h; sourceTree = SOURCE_ROOT; }; + 84F1E79810403614006A1807 /* juce_AudioTransportSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioTransportSource.cpp; path = ../../src/audio/audio_sources/juce_AudioTransportSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79910403614006A1807 /* juce_AudioTransportSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioTransportSource.h; path = ../../src/audio/audio_sources/juce_AudioTransportSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E79A10403614006A1807 /* juce_BufferingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferingAudioSource.cpp; path = ../../src/audio/audio_sources/juce_BufferingAudioSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79B10403614006A1807 /* juce_BufferingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BufferingAudioSource.h; path = ../../src/audio/audio_sources/juce_BufferingAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E79C10403614006A1807 /* juce_ChannelRemappingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChannelRemappingAudioSource.cpp; path = ../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79D10403614006A1807 /* juce_ChannelRemappingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ChannelRemappingAudioSource.h; path = ../../src/audio/audio_sources/juce_ChannelRemappingAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E79E10403614006A1807 /* juce_IIRFilterAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilterAudioSource.cpp; path = ../../src/audio/audio_sources/juce_IIRFilterAudioSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E79F10403614006A1807 /* juce_IIRFilterAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilterAudioSource.h; path = ../../src/audio/audio_sources/juce_IIRFilterAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E7A010403614006A1807 /* juce_MixerAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MixerAudioSource.cpp; path = ../../src/audio/audio_sources/juce_MixerAudioSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7A110403614006A1807 /* juce_MixerAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MixerAudioSource.h; path = ../../src/audio/audio_sources/juce_MixerAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E7A210403614006A1807 /* juce_PositionableAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PositionableAudioSource.h; path = ../../src/audio/audio_sources/juce_PositionableAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E7A310403614006A1807 /* juce_ResamplingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResamplingAudioSource.cpp; path = ../../src/audio/audio_sources/juce_ResamplingAudioSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7A410403614006A1807 /* juce_ResamplingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ResamplingAudioSource.h; path = ../../src/audio/audio_sources/juce_ResamplingAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E7A510403614006A1807 /* juce_ToneGeneratorAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToneGeneratorAudioSource.cpp; path = ../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7A610403614006A1807 /* juce_ToneGeneratorAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ToneGeneratorAudioSource.h; path = ../../src/audio/audio_sources/juce_ToneGeneratorAudioSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E7A810403614006A1807 /* juce_AudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioDeviceManager.cpp; path = ../../src/audio/devices/juce_AudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7A910403614006A1807 /* juce_AudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioDeviceManager.h; path = ../../src/audio/devices/juce_AudioDeviceManager.h; sourceTree = SOURCE_ROOT; }; + 84F1E7AA10403614006A1807 /* juce_AudioIODevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioIODevice.cpp; path = ../../src/audio/devices/juce_AudioIODevice.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7AB10403614006A1807 /* juce_AudioIODevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioIODevice.h; path = ../../src/audio/devices/juce_AudioIODevice.h; sourceTree = SOURCE_ROOT; }; + 84F1E7AC10403614006A1807 /* juce_AudioIODeviceType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioIODeviceType.cpp; path = ../../src/audio/devices/juce_AudioIODeviceType.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7AD10403614006A1807 /* juce_AudioIODeviceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioIODeviceType.h; path = ../../src/audio/devices/juce_AudioIODeviceType.h; sourceTree = SOURCE_ROOT; }; + 84F1E7AE10403614006A1807 /* juce_MidiInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiInput.h; path = ../../src/audio/devices/juce_MidiInput.h; sourceTree = SOURCE_ROOT; }; + 84F1E7AF10403614006A1807 /* juce_MidiOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiOutput.cpp; path = ../../src/audio/devices/juce_MidiOutput.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7B010403614006A1807 /* juce_MidiOutput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiOutput.h; path = ../../src/audio/devices/juce_MidiOutput.h; sourceTree = SOURCE_ROOT; }; + 84F1E7B210403614006A1807 /* juce_AudioDataConverters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioDataConverters.cpp; path = ../../src/audio/dsp/juce_AudioDataConverters.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7B310403614006A1807 /* juce_AudioDataConverters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioDataConverters.h; path = ../../src/audio/dsp/juce_AudioDataConverters.h; sourceTree = SOURCE_ROOT; }; + 84F1E7B410403614006A1807 /* juce_AudioSampleBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioSampleBuffer.cpp; path = ../../src/audio/dsp/juce_AudioSampleBuffer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7B510403614006A1807 /* juce_AudioSampleBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioSampleBuffer.h; path = ../../src/audio/dsp/juce_AudioSampleBuffer.h; sourceTree = SOURCE_ROOT; }; + 84F1E7B610403614006A1807 /* juce_IIRFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilter.cpp; path = ../../src/audio/dsp/juce_IIRFilter.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7B710403614006A1807 /* juce_IIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilter.h; path = ../../src/audio/dsp/juce_IIRFilter.h; sourceTree = SOURCE_ROOT; }; + 84F1E7B910403614006A1807 /* juce_MidiBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiBuffer.cpp; path = ../../src/audio/midi/juce_MidiBuffer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7BA10403614006A1807 /* juce_MidiBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiBuffer.h; path = ../../src/audio/midi/juce_MidiBuffer.h; sourceTree = SOURCE_ROOT; }; + 84F1E7BB10403614006A1807 /* juce_MidiFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiFile.cpp; path = ../../src/audio/midi/juce_MidiFile.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7BC10403614006A1807 /* juce_MidiFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiFile.h; path = ../../src/audio/midi/juce_MidiFile.h; sourceTree = SOURCE_ROOT; }; + 84F1E7BD10403614006A1807 /* juce_MidiKeyboardState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardState.cpp; path = ../../src/audio/midi/juce_MidiKeyboardState.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7BE10403614006A1807 /* juce_MidiKeyboardState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardState.h; path = ../../src/audio/midi/juce_MidiKeyboardState.h; sourceTree = SOURCE_ROOT; }; + 84F1E7BF10403614006A1807 /* juce_MidiMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessage.cpp; path = ../../src/audio/midi/juce_MidiMessage.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7C010403614006A1807 /* juce_MidiMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessage.h; path = ../../src/audio/midi/juce_MidiMessage.h; sourceTree = SOURCE_ROOT; }; + 84F1E7C110403614006A1807 /* juce_MidiMessageCollector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessageCollector.cpp; path = ../../src/audio/midi/juce_MidiMessageCollector.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7C210403614006A1807 /* juce_MidiMessageCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessageCollector.h; path = ../../src/audio/midi/juce_MidiMessageCollector.h; sourceTree = SOURCE_ROOT; }; + 84F1E7C310403614006A1807 /* juce_MidiMessageSequence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiMessageSequence.cpp; path = ../../src/audio/midi/juce_MidiMessageSequence.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7C410403614006A1807 /* juce_MidiMessageSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiMessageSequence.h; path = ../../src/audio/midi/juce_MidiMessageSequence.h; sourceTree = SOURCE_ROOT; }; + 84F1E7C610403614006A1807 /* juce_AudioPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioPluginFormat.cpp; path = ../../src/audio/plugins/juce_AudioPluginFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7C710403614006A1807 /* juce_AudioPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioPluginFormat.h; path = ../../src/audio/plugins/juce_AudioPluginFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E7C810403614006A1807 /* juce_AudioPluginFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioPluginFormatManager.cpp; path = ../../src/audio/plugins/juce_AudioPluginFormatManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7C910403614006A1807 /* juce_AudioPluginFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioPluginFormatManager.h; path = ../../src/audio/plugins/juce_AudioPluginFormatManager.h; sourceTree = SOURCE_ROOT; }; + 84F1E7CA10403614006A1807 /* juce_AudioPluginInstance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioPluginInstance.cpp; path = ../../src/audio/plugins/juce_AudioPluginInstance.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7CB10403614006A1807 /* juce_AudioPluginInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioPluginInstance.h; path = ../../src/audio/plugins/juce_AudioPluginInstance.h; sourceTree = SOURCE_ROOT; }; + 84F1E7CC10403614006A1807 /* juce_KnownPluginList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KnownPluginList.cpp; path = ../../src/audio/plugins/juce_KnownPluginList.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7CD10403614006A1807 /* juce_KnownPluginList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_KnownPluginList.h; path = ../../src/audio/plugins/juce_KnownPluginList.h; sourceTree = SOURCE_ROOT; }; + 84F1E7CE10403614006A1807 /* juce_PluginDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PluginDescription.cpp; path = ../../src/audio/plugins/juce_PluginDescription.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7CF10403614006A1807 /* juce_PluginDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PluginDescription.h; path = ../../src/audio/plugins/juce_PluginDescription.h; sourceTree = SOURCE_ROOT; }; + 84F1E7D010403614006A1807 /* juce_PluginDirectoryScanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PluginDirectoryScanner.cpp; path = ../../src/audio/plugins/juce_PluginDirectoryScanner.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7D110403614006A1807 /* juce_PluginDirectoryScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PluginDirectoryScanner.h; path = ../../src/audio/plugins/juce_PluginDirectoryScanner.h; sourceTree = SOURCE_ROOT; }; + 84F1E7D210403614006A1807 /* juce_PluginListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PluginListComponent.cpp; path = ../../src/audio/plugins/juce_PluginListComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7D310403614006A1807 /* juce_PluginListComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PluginListComponent.h; path = ../../src/audio/plugins/juce_PluginListComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1E7D510403614006A1807 /* juce_AudioUnitPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioUnitPluginFormat.h; path = ../../src/audio/plugins/formats/juce_AudioUnitPluginFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E7D810403614006A1807 /* juce_VSTMidiEventList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_VSTMidiEventList.h; path = ../../src/audio/plugins/formats/juce_VSTMidiEventList.h; sourceTree = SOURCE_ROOT; }; + 84F1E7D910403614006A1807 /* juce_VSTPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_VSTPluginFormat.h; path = ../../src/audio/plugins/formats/juce_VSTPluginFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1E7DA10403614006A1807 /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VSTPluginFormat.cpp; path = ../../src/audio/plugins/formats/juce_VSTPluginFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7DB10403614006A1807 /* juce_VSTPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_VSTPluginFormat.mm; path = ../../src/audio/plugins/formats/juce_VSTPluginFormat.mm; sourceTree = SOURCE_ROOT; }; + 84F1E7DC10403614006A1807 /* juce_AudioUnitPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_AudioUnitPluginFormat.mm; path = ../../src/audio/plugins/formats/juce_AudioUnitPluginFormat.mm; sourceTree = SOURCE_ROOT; }; + 84F1E7DE10403615006A1807 /* juce_AudioPlayHead.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioPlayHead.h; path = ../../src/audio/processors/juce_AudioPlayHead.h; sourceTree = SOURCE_ROOT; }; + 84F1E7DF10403615006A1807 /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioProcessor.cpp; path = ../../src/audio/processors/juce_AudioProcessor.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7E010403615006A1807 /* juce_AudioProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessor.h; path = ../../src/audio/processors/juce_AudioProcessor.h; sourceTree = SOURCE_ROOT; }; + 84F1E7E110403615006A1807 /* juce_AudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioProcessorEditor.cpp; path = ../../src/audio/processors/juce_AudioProcessorEditor.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7E210403615006A1807 /* juce_AudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorEditor.h; path = ../../src/audio/processors/juce_AudioProcessorEditor.h; sourceTree = SOURCE_ROOT; }; + 84F1E7E310403615006A1807 /* juce_AudioProcessorGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioProcessorGraph.cpp; path = ../../src/audio/processors/juce_AudioProcessorGraph.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7E410403615006A1807 /* juce_AudioProcessorGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorGraph.h; path = ../../src/audio/processors/juce_AudioProcessorGraph.h; sourceTree = SOURCE_ROOT; }; + 84F1E7E510403615006A1807 /* juce_AudioProcessorListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorListener.h; path = ../../src/audio/processors/juce_AudioProcessorListener.h; sourceTree = SOURCE_ROOT; }; + 84F1E7E610403615006A1807 /* juce_AudioProcessorPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioProcessorPlayer.cpp; path = ../../src/audio/processors/juce_AudioProcessorPlayer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7E710403615006A1807 /* juce_AudioProcessorPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioProcessorPlayer.h; path = ../../src/audio/processors/juce_AudioProcessorPlayer.h; sourceTree = SOURCE_ROOT; }; + 84F1E7E810403615006A1807 /* juce_GenericAudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GenericAudioProcessorEditor.cpp; path = ../../src/audio/processors/juce_GenericAudioProcessorEditor.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7E910403615006A1807 /* juce_GenericAudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GenericAudioProcessorEditor.h; path = ../../src/audio/processors/juce_GenericAudioProcessorEditor.h; sourceTree = SOURCE_ROOT; }; + 84F1E7EB10403615006A1807 /* juce_Sampler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Sampler.cpp; path = ../../src/audio/synthesisers/juce_Sampler.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7EC10403615006A1807 /* juce_Sampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Sampler.h; path = ../../src/audio/synthesisers/juce_Sampler.h; sourceTree = SOURCE_ROOT; }; + 84F1E7ED10403615006A1807 /* juce_Synthesiser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Synthesiser.cpp; path = ../../src/audio/synthesisers/juce_Synthesiser.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E7EE10403615006A1807 /* juce_Synthesiser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Synthesiser.h; path = ../../src/audio/synthesisers/juce_Synthesiser.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D010403671006A1807 /* juce_Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Array.h; path = ../../src/containers/juce_Array.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D110403671006A1807 /* juce_ArrayAllocationBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ArrayAllocationBase.h; path = ../../src/containers/juce_ArrayAllocationBase.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D210403671006A1807 /* juce_BitArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BitArray.cpp; path = ../../src/containers/juce_BitArray.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8D310403671006A1807 /* juce_BitArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BitArray.h; path = ../../src/containers/juce_BitArray.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D410403671006A1807 /* juce_ElementComparator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ElementComparator.h; path = ../../src/containers/juce_ElementComparator.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D510403671006A1807 /* juce_MemoryBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryBlock.cpp; path = ../../src/containers/juce_MemoryBlock.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8D610403671006A1807 /* juce_MemoryBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MemoryBlock.h; path = ../../src/containers/juce_MemoryBlock.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D710403671006A1807 /* juce_OwnedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_OwnedArray.h; path = ../../src/containers/juce_OwnedArray.h; sourceTree = SOURCE_ROOT; }; + 84F1E8D810403671006A1807 /* juce_PropertySet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertySet.cpp; path = ../../src/containers/juce_PropertySet.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8D910403671006A1807 /* juce_PropertySet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PropertySet.h; path = ../../src/containers/juce_PropertySet.h; sourceTree = SOURCE_ROOT; }; + 84F1E8DA10403671006A1807 /* juce_ReferenceCountedArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedArray.h; path = ../../src/containers/juce_ReferenceCountedArray.h; sourceTree = SOURCE_ROOT; }; + 84F1E8DB10403671006A1807 /* juce_ReferenceCountedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ReferenceCountedObject.h; path = ../../src/containers/juce_ReferenceCountedObject.h; sourceTree = SOURCE_ROOT; }; + 84F1E8DC10403671006A1807 /* juce_SortedSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SortedSet.h; path = ../../src/containers/juce_SortedSet.h; sourceTree = SOURCE_ROOT; }; + 84F1E8DD10403671006A1807 /* juce_SparseSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SparseSet.h; path = ../../src/containers/juce_SparseSet.h; sourceTree = SOURCE_ROOT; }; + 84F1E8DE10403671006A1807 /* juce_Variant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Variant.cpp; path = ../../src/containers/juce_Variant.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8DF10403671006A1807 /* juce_Variant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Variant.h; path = ../../src/containers/juce_Variant.h; sourceTree = SOURCE_ROOT; }; + 84F1E8E010403671006A1807 /* juce_VoidArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_VoidArray.h; path = ../../src/containers/juce_VoidArray.h; sourceTree = SOURCE_ROOT; }; + 84F1E8F310403681006A1807 /* juce_Time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Time.h; path = ../../src/core/juce_Time.h; sourceTree = SOURCE_ROOT; }; + 84F1E8F410403681006A1807 /* juce_Time.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Time.cpp; path = ../../src/core/juce_Time.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8F510403681006A1807 /* juce_SystemStats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemStats.cpp; path = ../../src/core/juce_SystemStats.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8F610403681006A1807 /* juce_SystemStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SystemStats.h; path = ../../src/core/juce_SystemStats.h; sourceTree = SOURCE_ROOT; }; + 84F1E8F710403681006A1807 /* juce_Singleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Singleton.h; path = ../../src/core/juce_Singleton.h; sourceTree = SOURCE_ROOT; }; + 84F1E8F810403681006A1807 /* juce_RelativeTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RelativeTime.cpp; path = ../../src/core/juce_RelativeTime.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8F910403681006A1807 /* juce_RelativeTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_RelativeTime.h; path = ../../src/core/juce_RelativeTime.h; sourceTree = SOURCE_ROOT; }; + 84F1E8FA10403681006A1807 /* juce_PlatformDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PlatformDefs.h; path = ../../src/core/juce_PlatformDefs.h; sourceTree = SOURCE_ROOT; }; + 84F1E8FB10403681006A1807 /* juce_Random.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Random.cpp; path = ../../src/core/juce_Random.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E8FC10403681006A1807 /* juce_Random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Random.h; path = ../../src/core/juce_Random.h; sourceTree = SOURCE_ROOT; }; + 84F1E8FD10403681006A1807 /* juce_MathsFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MathsFunctions.h; path = ../../src/core/juce_MathsFunctions.h; sourceTree = SOURCE_ROOT; }; + 84F1E8FE10403681006A1807 /* juce_Memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Memory.h; path = ../../src/core/juce_Memory.h; sourceTree = SOURCE_ROOT; }; + 84F1E8FF10403681006A1807 /* juce_Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Logger.h; path = ../../src/core/juce_Logger.h; sourceTree = SOURCE_ROOT; }; + 84F1E90010403681006A1807 /* juce_Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Logger.cpp; path = ../../src/core/juce_Logger.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E90110403681006A1807 /* juce_Initialisation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Initialisation.h; path = ../../src/core/juce_Initialisation.h; sourceTree = SOURCE_ROOT; }; + 84F1E90210403681006A1807 /* juce_FileLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileLogger.h; path = ../../src/core/juce_FileLogger.h; sourceTree = SOURCE_ROOT; }; + 84F1E90310403681006A1807 /* juce_FileLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileLogger.cpp; path = ../../src/core/juce_FileLogger.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E90410403681006A1807 /* juce_DataConversions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DataConversions.h; path = ../../src/core/juce_DataConversions.h; sourceTree = SOURCE_ROOT; }; + 84F1E90510403681006A1807 /* juce_Atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Atomic.h; path = ../../src/core/juce_Atomic.h; sourceTree = SOURCE_ROOT; }; + 84F1E90610403681006A1807 /* juce_Uuid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Uuid.cpp; path = ../../src/core/juce_Uuid.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E90710403681006A1807 /* juce_Uuid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Uuid.h; path = ../../src/core/juce_Uuid.h; sourceTree = SOURCE_ROOT; }; + 84F1E90810403681006A1807 /* juce_PerformanceCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PerformanceCounter.cpp; path = ../../src/core/juce_PerformanceCounter.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E90910403681006A1807 /* juce_PerformanceCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PerformanceCounter.h; path = ../../src/core/juce_PerformanceCounter.h; sourceTree = SOURCE_ROOT; }; + 84F1E90A10403681006A1807 /* juce_PlatformUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PlatformUtilities.h; path = ../../src/core/juce_PlatformUtilities.h; sourceTree = SOURCE_ROOT; }; + 84F1E90B10403681006A1807 /* juce_StandardHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_StandardHeader.h; path = ../../src/core/juce_StandardHeader.h; sourceTree = SOURCE_ROOT; }; + 84F1E9261040369C006A1807 /* juce_UndoManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_UndoManager.h; path = ../../src/utilities/juce_UndoManager.h; sourceTree = SOURCE_ROOT; }; + 84F1E9271040369C006A1807 /* juce_SystemClipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SystemClipboard.h; path = ../../src/utilities/juce_SystemClipboard.h; sourceTree = SOURCE_ROOT; }; + 84F1E9281040369C006A1807 /* juce_UndoManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_UndoManager.cpp; path = ../../src/utilities/juce_UndoManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9291040369C006A1807 /* juce_PropertiesFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PropertiesFile.h; path = ../../src/utilities/juce_PropertiesFile.h; sourceTree = SOURCE_ROOT; }; + 84F1E92A1040369C006A1807 /* juce_UndoableAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_UndoableAction.h; path = ../../src/utilities/juce_UndoableAction.h; sourceTree = SOURCE_ROOT; }; + 84F1E92B1040369C006A1807 /* juce_SelectedItemSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SelectedItemSet.h; path = ../../src/utilities/juce_SelectedItemSet.h; sourceTree = SOURCE_ROOT; }; + 84F1E92C1040369C006A1807 /* juce_DeletedAtShutdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DeletedAtShutdown.h; path = ../../src/utilities/juce_DeletedAtShutdown.h; sourceTree = SOURCE_ROOT; }; + 84F1E92D1040369C006A1807 /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertiesFile.cpp; path = ../../src/utilities/juce_PropertiesFile.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E92E1040369C006A1807 /* juce_RecentlyOpenedFilesList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_RecentlyOpenedFilesList.h; path = ../../src/utilities/juce_RecentlyOpenedFilesList.h; sourceTree = SOURCE_ROOT; }; + 84F1E92F1040369C006A1807 /* juce_FileBasedDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileBasedDocument.h; path = ../../src/utilities/juce_FileBasedDocument.h; sourceTree = SOURCE_ROOT; }; + 84F1E9301040369C006A1807 /* juce_RecentlyOpenedFilesList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RecentlyOpenedFilesList.cpp; path = ../../src/utilities/juce_RecentlyOpenedFilesList.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9311040369C006A1807 /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = ../../src/utilities/juce_FileBasedDocument.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9321040369C006A1807 /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../src/utilities/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E941104036B3006A1807 /* juce_BlowFish.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BlowFish.cpp; path = ../../src/cryptography/juce_BlowFish.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E942104036B3006A1807 /* juce_BlowFish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BlowFish.h; path = ../../src/cryptography/juce_BlowFish.h; sourceTree = SOURCE_ROOT; }; + 84F1E943104036B3006A1807 /* juce_MD5.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MD5.cpp; path = ../../src/cryptography/juce_MD5.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E944104036B3006A1807 /* juce_MD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MD5.h; path = ../../src/cryptography/juce_MD5.h; sourceTree = SOURCE_ROOT; }; + 84F1E945104036B3006A1807 /* juce_Primes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Primes.cpp; path = ../../src/cryptography/juce_Primes.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E946104036B3006A1807 /* juce_Primes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Primes.h; path = ../../src/cryptography/juce_Primes.h; sourceTree = SOURCE_ROOT; }; + 84F1E947104036B3006A1807 /* juce_RSAKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RSAKey.cpp; path = ../../src/cryptography/juce_RSAKey.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E948104036B3006A1807 /* juce_RSAKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_RSAKey.h; path = ../../src/cryptography/juce_RSAKey.h; sourceTree = SOURCE_ROOT; }; + 84F1E94A104036B3006A1807 /* juce_ActionBroadcaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActionBroadcaster.cpp; path = ../../src/events/juce_ActionBroadcaster.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E94B104036B3006A1807 /* juce_ActionBroadcaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ActionBroadcaster.h; path = ../../src/events/juce_ActionBroadcaster.h; sourceTree = SOURCE_ROOT; }; + 84F1E94C104036B3006A1807 /* juce_ActionListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ActionListener.h; path = ../../src/events/juce_ActionListener.h; sourceTree = SOURCE_ROOT; }; + 84F1E94D104036B3006A1807 /* juce_ActionListenerList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ActionListenerList.cpp; path = ../../src/events/juce_ActionListenerList.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E94E104036B3006A1807 /* juce_ActionListenerList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ActionListenerList.h; path = ../../src/events/juce_ActionListenerList.h; sourceTree = SOURCE_ROOT; }; + 84F1E94F104036B3006A1807 /* juce_AsyncUpdater.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AsyncUpdater.cpp; path = ../../src/events/juce_AsyncUpdater.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E950104036B3006A1807 /* juce_AsyncUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AsyncUpdater.h; path = ../../src/events/juce_AsyncUpdater.h; sourceTree = SOURCE_ROOT; }; + 84F1E951104036B3006A1807 /* juce_CallbackMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_CallbackMessage.h; path = ../../src/events/juce_CallbackMessage.h; sourceTree = SOURCE_ROOT; }; + 84F1E952104036B3006A1807 /* juce_ChangeBroadcaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChangeBroadcaster.cpp; path = ../../src/events/juce_ChangeBroadcaster.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E953104036B3006A1807 /* juce_ChangeBroadcaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ChangeBroadcaster.h; path = ../../src/events/juce_ChangeBroadcaster.h; sourceTree = SOURCE_ROOT; }; + 84F1E954104036B3006A1807 /* juce_ChangeListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ChangeListener.h; path = ../../src/events/juce_ChangeListener.h; sourceTree = SOURCE_ROOT; }; + 84F1E955104036B3006A1807 /* juce_ChangeListenerList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChangeListenerList.cpp; path = ../../src/events/juce_ChangeListenerList.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E956104036B3006A1807 /* juce_ChangeListenerList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ChangeListenerList.h; path = ../../src/events/juce_ChangeListenerList.h; sourceTree = SOURCE_ROOT; }; + 84F1E957104036B3006A1807 /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterprocessConnection.cpp; path = ../../src/events/juce_InterprocessConnection.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E958104036B3006A1807 /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_InterprocessConnection.h; path = ../../src/events/juce_InterprocessConnection.h; sourceTree = SOURCE_ROOT; }; + 84F1E959104036B3006A1807 /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterprocessConnectionServer.cpp; path = ../../src/events/juce_InterprocessConnectionServer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E95A104036B3006A1807 /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_InterprocessConnectionServer.h; path = ../../src/events/juce_InterprocessConnectionServer.h; sourceTree = SOURCE_ROOT; }; + 84F1E95B104036B3006A1807 /* juce_Message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Message.cpp; path = ../../src/events/juce_Message.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E95C104036B3006A1807 /* juce_Message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Message.h; path = ../../src/events/juce_Message.h; sourceTree = SOURCE_ROOT; }; + 84F1E95D104036B3006A1807 /* juce_MessageListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageListener.cpp; path = ../../src/events/juce_MessageListener.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E95E104036B3006A1807 /* juce_MessageListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MessageListener.h; path = ../../src/events/juce_MessageListener.h; sourceTree = SOURCE_ROOT; }; + 84F1E95F104036B3006A1807 /* juce_MessageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MessageManager.cpp; path = ../../src/events/juce_MessageManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E960104036B3006A1807 /* juce_MessageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MessageManager.h; path = ../../src/events/juce_MessageManager.h; sourceTree = SOURCE_ROOT; }; + 84F1E961104036B3006A1807 /* juce_MultiTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MultiTimer.cpp; path = ../../src/events/juce_MultiTimer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E962104036B3006A1807 /* juce_MultiTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MultiTimer.h; path = ../../src/events/juce_MultiTimer.h; sourceTree = SOURCE_ROOT; }; + 84F1E963104036B3006A1807 /* juce_Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Timer.cpp; path = ../../src/events/juce_Timer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E964104036B3006A1807 /* juce_Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Timer.h; path = ../../src/events/juce_Timer.h; sourceTree = SOURCE_ROOT; }; + 84F1E98A104036D6006A1807 /* juce_DirectoryIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryIterator.cpp; path = ../../src/io/files/juce_DirectoryIterator.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E98B104036D6006A1807 /* juce_DirectoryIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryIterator.h; path = ../../src/io/files/juce_DirectoryIterator.h; sourceTree = SOURCE_ROOT; }; + 84F1E98C104036D6006A1807 /* juce_File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_File.cpp; path = ../../src/io/files/juce_File.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E98D104036D6006A1807 /* juce_File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_File.h; path = ../../src/io/files/juce_File.h; sourceTree = SOURCE_ROOT; }; + 84F1E98E104036D6006A1807 /* juce_FileInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputStream.cpp; path = ../../src/io/files/juce_FileInputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E98F104036D6006A1807 /* juce_FileInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileInputStream.h; path = ../../src/io/files/juce_FileInputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E990104036D6006A1807 /* juce_FileOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileOutputStream.cpp; path = ../../src/io/files/juce_FileOutputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E991104036D6006A1807 /* juce_FileOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileOutputStream.h; path = ../../src/io/files/juce_FileOutputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E992104036D6006A1807 /* juce_FileSearchPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPath.cpp; path = ../../src/io/files/juce_FileSearchPath.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E993104036D6006A1807 /* juce_FileSearchPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPath.h; path = ../../src/io/files/juce_FileSearchPath.h; sourceTree = SOURCE_ROOT; }; + 84F1E994104036D6006A1807 /* juce_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_NamedPipe.cpp; path = ../../src/io/files/juce_NamedPipe.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E995104036D6006A1807 /* juce_NamedPipe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_NamedPipe.h; path = ../../src/io/files/juce_NamedPipe.h; sourceTree = SOURCE_ROOT; }; + 84F1E996104036D6006A1807 /* juce_ZipFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ZipFile.cpp; path = ../../src/io/files/juce_ZipFile.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E997104036D6006A1807 /* juce_ZipFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ZipFile.h; path = ../../src/io/files/juce_ZipFile.h; sourceTree = SOURCE_ROOT; }; + 84F1E999104036D6006A1807 /* juce_Socket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Socket.cpp; path = ../../src/io/network/juce_Socket.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E99A104036D6006A1807 /* juce_Socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Socket.h; path = ../../src/io/network/juce_Socket.h; sourceTree = SOURCE_ROOT; }; + 84F1E99B104036D6006A1807 /* juce_URL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_URL.cpp; path = ../../src/io/network/juce_URL.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E99C104036D6006A1807 /* juce_URL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_URL.h; path = ../../src/io/network/juce_URL.h; sourceTree = SOURCE_ROOT; }; + 84F1E99E104036D6006A1807 /* juce_BufferedInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BufferedInputStream.cpp; path = ../../src/io/streams/juce_BufferedInputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E99F104036D6006A1807 /* juce_BufferedInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BufferedInputStream.h; path = ../../src/io/streams/juce_BufferedInputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9A0104036D6006A1807 /* juce_FileInputSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileInputSource.cpp; path = ../../src/io/streams/juce_FileInputSource.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9A1104036D6006A1807 /* juce_FileInputSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileInputSource.h; path = ../../src/io/streams/juce_FileInputSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E9A2104036D6006A1807 /* juce_GZIPCompressorOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPCompressorOutputStream.cpp; path = ../../src/io/streams/juce_GZIPCompressorOutputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9A3104036D6006A1807 /* juce_GZIPCompressorOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GZIPCompressorOutputStream.h; path = ../../src/io/streams/juce_GZIPCompressorOutputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9A4104036D6006A1807 /* juce_GZIPDecompressorInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GZIPDecompressorInputStream.cpp; path = ../../src/io/streams/juce_GZIPDecompressorInputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9A5104036D6006A1807 /* juce_GZIPDecompressorInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GZIPDecompressorInputStream.h; path = ../../src/io/streams/juce_GZIPDecompressorInputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9A6104036D6006A1807 /* juce_InputSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_InputSource.h; path = ../../src/io/streams/juce_InputSource.h; sourceTree = SOURCE_ROOT; }; + 84F1E9A7104036D6006A1807 /* juce_MemoryInputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryInputStream.cpp; path = ../../src/io/streams/juce_MemoryInputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9A8104036D6006A1807 /* juce_MemoryInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MemoryInputStream.h; path = ../../src/io/streams/juce_MemoryInputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9A9104036D6006A1807 /* juce_MemoryOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MemoryOutputStream.cpp; path = ../../src/io/streams/juce_MemoryOutputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9AA104036D6006A1807 /* juce_MemoryOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MemoryOutputStream.h; path = ../../src/io/streams/juce_MemoryOutputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9AB104036D6006A1807 /* juce_SubregionStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SubregionStream.cpp; path = ../../src/io/streams/juce_SubregionStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9AC104036D6006A1807 /* juce_SubregionStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SubregionStream.h; path = ../../src/io/streams/juce_SubregionStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9C5104036D6006A1807 /* juce_InputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InputStream.cpp; path = ../../src/io/streams/juce_InputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9C6104036D6006A1807 /* juce_InputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_InputStream.h; path = ../../src/io/streams/juce_InputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9C7104036D6006A1807 /* juce_OutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OutputStream.cpp; path = ../../src/io/streams/juce_OutputStream.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9C8104036D6006A1807 /* juce_OutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_OutputStream.h; path = ../../src/io/streams/juce_OutputStream.h; sourceTree = SOURCE_ROOT; }; + 84F1E9CA104036D6006A1807 /* juce_CharacterFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_CharacterFunctions.cpp; path = ../../src/text/juce_CharacterFunctions.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9CB104036D6006A1807 /* juce_CharacterFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_CharacterFunctions.h; path = ../../src/text/juce_CharacterFunctions.h; sourceTree = SOURCE_ROOT; }; + 84F1E9CC104036D6006A1807 /* juce_LocalisedStrings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LocalisedStrings.cpp; path = ../../src/text/juce_LocalisedStrings.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9CD104036D6006A1807 /* juce_LocalisedStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_LocalisedStrings.h; path = ../../src/text/juce_LocalisedStrings.h; sourceTree = SOURCE_ROOT; }; + 84F1E9CE104036D6006A1807 /* juce_String.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_String.cpp; path = ../../src/text/juce_String.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9CF104036D6006A1807 /* juce_String.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_String.h; path = ../../src/text/juce_String.h; sourceTree = SOURCE_ROOT; }; + 84F1E9D0104036D6006A1807 /* juce_StringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringArray.cpp; path = ../../src/text/juce_StringArray.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9D1104036D6006A1807 /* juce_StringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_StringArray.h; path = ../../src/text/juce_StringArray.h; sourceTree = SOURCE_ROOT; }; + 84F1E9D2104036D6006A1807 /* juce_StringPairArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StringPairArray.cpp; path = ../../src/text/juce_StringPairArray.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9D3104036D6006A1807 /* juce_StringPairArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_StringPairArray.h; path = ../../src/text/juce_StringPairArray.h; sourceTree = SOURCE_ROOT; }; + 84F1E9D4104036D6006A1807 /* juce_XmlDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlDocument.cpp; path = ../../src/text/juce_XmlDocument.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9D5104036D6006A1807 /* juce_XmlDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_XmlDocument.h; path = ../../src/text/juce_XmlDocument.h; sourceTree = SOURCE_ROOT; }; + 84F1E9D6104036D6006A1807 /* juce_XmlElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_XmlElement.cpp; path = ../../src/text/juce_XmlElement.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9D7104036D6006A1807 /* juce_XmlElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_XmlElement.h; path = ../../src/text/juce_XmlElement.h; sourceTree = SOURCE_ROOT; }; + 84F1E9D9104036D6006A1807 /* juce_CriticalSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_CriticalSection.h; path = ../../src/threads/juce_CriticalSection.h; sourceTree = SOURCE_ROOT; }; + 84F1E9DA104036D6006A1807 /* juce_InterProcessLock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_InterProcessLock.cpp; path = ../../src/threads/juce_InterProcessLock.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9DB104036D6006A1807 /* juce_InterProcessLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_InterProcessLock.h; path = ../../src/threads/juce_InterProcessLock.h; sourceTree = SOURCE_ROOT; }; + 84F1E9DC104036D6006A1807 /* juce_Process.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Process.h; path = ../../src/threads/juce_Process.h; sourceTree = SOURCE_ROOT; }; + 84F1E9DD104036D6006A1807 /* juce_ReadWriteLock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReadWriteLock.cpp; path = ../../src/threads/juce_ReadWriteLock.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9DE104036D6006A1807 /* juce_ReadWriteLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ReadWriteLock.h; path = ../../src/threads/juce_ReadWriteLock.h; sourceTree = SOURCE_ROOT; }; + 84F1E9DF104036D6006A1807 /* juce_ScopedLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ScopedLock.h; path = ../../src/threads/juce_ScopedLock.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E0104036D6006A1807 /* juce_ScopedReadLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ScopedReadLock.h; path = ../../src/threads/juce_ScopedReadLock.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E1104036D6006A1807 /* juce_ScopedTryLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ScopedTryLock.h; path = ../../src/threads/juce_ScopedTryLock.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E2104036D6006A1807 /* juce_ScopedWriteLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ScopedWriteLock.h; path = ../../src/threads/juce_ScopedWriteLock.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E3104036D6006A1807 /* juce_Thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Thread.cpp; path = ../../src/threads/juce_Thread.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9E4104036D6006A1807 /* juce_Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Thread.h; path = ../../src/threads/juce_Thread.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E5104036D6006A1807 /* juce_ThreadPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadPool.cpp; path = ../../src/threads/juce_ThreadPool.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9E6104036D6006A1807 /* juce_ThreadPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ThreadPool.h; path = ../../src/threads/juce_ThreadPool.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E7104036D6006A1807 /* juce_TimeSliceThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TimeSliceThread.cpp; path = ../../src/threads/juce_TimeSliceThread.cpp; sourceTree = SOURCE_ROOT; }; + 84F1E9E8104036D6006A1807 /* juce_TimeSliceThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TimeSliceThread.h; path = ../../src/threads/juce_TimeSliceThread.h; sourceTree = SOURCE_ROOT; }; + 84F1E9E9104036D6006A1807 /* juce_WaitableEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../src/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA4610403708006A1807 /* juce_Component.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Component.cpp; path = ../../src/gui/components/juce_Component.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA4710403708006A1807 /* juce_Component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Component.h; path = ../../src/gui/components/juce_Component.h; sourceTree = SOURCE_ROOT; }; + 84F1EA4810403708006A1807 /* juce_ComponentDeletionWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDeletionWatcher.h; path = ../../src/gui/components/juce_ComponentDeletionWatcher.h; sourceTree = SOURCE_ROOT; }; + 84F1EA4910403708006A1807 /* juce_ComponentListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentListener.cpp; path = ../../src/gui/components/juce_ComponentListener.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA4A10403708006A1807 /* juce_ComponentListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentListener.h; path = ../../src/gui/components/juce_ComponentListener.h; sourceTree = SOURCE_ROOT; }; + 84F1EA4B10403708006A1807 /* juce_Desktop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Desktop.cpp; path = ../../src/gui/components/juce_Desktop.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA4C10403708006A1807 /* juce_Desktop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Desktop.h; path = ../../src/gui/components/juce_Desktop.h; sourceTree = SOURCE_ROOT; }; + 84F1EA4E10403708006A1807 /* juce_ArrowButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ArrowButton.cpp; path = ../../src/gui/components/buttons/juce_ArrowButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA4F10403708006A1807 /* juce_ArrowButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ArrowButton.h; path = ../../src/gui/components/buttons/juce_ArrowButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5010403708006A1807 /* juce_Button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Button.cpp; path = ../../src/gui/components/buttons/juce_Button.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5110403708006A1807 /* juce_Button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Button.h; path = ../../src/gui/components/buttons/juce_Button.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5210403708006A1807 /* juce_DrawableButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableButton.cpp; path = ../../src/gui/components/buttons/juce_DrawableButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5310403708006A1807 /* juce_DrawableButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DrawableButton.h; path = ../../src/gui/components/buttons/juce_DrawableButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5410403708006A1807 /* juce_HyperlinkButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_HyperlinkButton.cpp; path = ../../src/gui/components/buttons/juce_HyperlinkButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5510403709006A1807 /* juce_HyperlinkButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_HyperlinkButton.h; path = ../../src/gui/components/buttons/juce_HyperlinkButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5610403709006A1807 /* juce_ImageButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageButton.cpp; path = ../../src/gui/components/buttons/juce_ImageButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5710403709006A1807 /* juce_ImageButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImageButton.h; path = ../../src/gui/components/buttons/juce_ImageButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5810403709006A1807 /* juce_ShapeButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ShapeButton.cpp; path = ../../src/gui/components/buttons/juce_ShapeButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5910403709006A1807 /* juce_ShapeButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ShapeButton.h; path = ../../src/gui/components/buttons/juce_ShapeButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5A10403709006A1807 /* juce_TextButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextButton.cpp; path = ../../src/gui/components/buttons/juce_TextButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5B10403709006A1807 /* juce_TextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TextButton.h; path = ../../src/gui/components/buttons/juce_TextButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5C10403709006A1807 /* juce_ToggleButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToggleButton.cpp; path = ../../src/gui/components/buttons/juce_ToggleButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5D10403709006A1807 /* juce_ToggleButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ToggleButton.h; path = ../../src/gui/components/buttons/juce_ToggleButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA5E10403709006A1807 /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarButton.cpp; path = ../../src/gui/components/buttons/juce_ToolbarButton.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA5F10403709006A1807 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarButton.h; path = ../../src/gui/components/buttons/juce_ToolbarButton.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6110403709006A1807 /* juce_ComboBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComboBox.cpp; path = ../../src/gui/components/controls/juce_ComboBox.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6210403709006A1807 /* juce_ComboBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComboBox.h; path = ../../src/gui/components/controls/juce_ComboBox.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6310403709006A1807 /* juce_Label.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Label.cpp; path = ../../src/gui/components/controls/juce_Label.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6410403709006A1807 /* juce_Label.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Label.h; path = ../../src/gui/components/controls/juce_Label.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6510403709006A1807 /* juce_ListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ListBox.cpp; path = ../../src/gui/components/controls/juce_ListBox.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6610403709006A1807 /* juce_ListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ListBox.h; path = ../../src/gui/components/controls/juce_ListBox.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6710403709006A1807 /* juce_ProgressBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ProgressBar.cpp; path = ../../src/gui/components/controls/juce_ProgressBar.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6810403709006A1807 /* juce_ProgressBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ProgressBar.h; path = ../../src/gui/components/controls/juce_ProgressBar.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6910403709006A1807 /* juce_Slider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Slider.cpp; path = ../../src/gui/components/controls/juce_Slider.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6A10403709006A1807 /* juce_Slider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Slider.h; path = ../../src/gui/components/controls/juce_Slider.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6B10403709006A1807 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SliderListener.h; path = ../../src/gui/components/controls/juce_SliderListener.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6C10403709006A1807 /* juce_TableHeaderComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TableHeaderComponent.cpp; path = ../../src/gui/components/controls/juce_TableHeaderComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6D10403709006A1807 /* juce_TableHeaderComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TableHeaderComponent.h; path = ../../src/gui/components/controls/juce_TableHeaderComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA6E10403709006A1807 /* juce_TableListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TableListBox.cpp; path = ../../src/gui/components/controls/juce_TableListBox.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA6F10403709006A1807 /* juce_TableListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TableListBox.h; path = ../../src/gui/components/controls/juce_TableListBox.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7010403709006A1807 /* juce_TextEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextEditor.cpp; path = ../../src/gui/components/controls/juce_TextEditor.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7110403709006A1807 /* juce_TextEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TextEditor.h; path = ../../src/gui/components/controls/juce_TextEditor.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7210403709006A1807 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Toolbar.cpp; path = ../../src/gui/components/controls/juce_Toolbar.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7310403709006A1807 /* juce_Toolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Toolbar.h; path = ../../src/gui/components/controls/juce_Toolbar.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7410403709006A1807 /* juce_ToolbarItemComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarItemComponent.cpp; path = ../../src/gui/components/controls/juce_ToolbarItemComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7510403709006A1807 /* juce_ToolbarItemComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemComponent.h; path = ../../src/gui/components/controls/juce_ToolbarItemComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7610403709006A1807 /* juce_ToolbarItemFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemFactory.h; path = ../../src/gui/components/controls/juce_ToolbarItemFactory.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7710403709006A1807 /* juce_ToolbarItemPalette.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ToolbarItemPalette.cpp; path = ../../src/gui/components/controls/juce_ToolbarItemPalette.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7810403709006A1807 /* juce_ToolbarItemPalette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ToolbarItemPalette.h; path = ../../src/gui/components/controls/juce_ToolbarItemPalette.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7910403709006A1807 /* juce_TreeView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TreeView.cpp; path = ../../src/gui/components/controls/juce_TreeView.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7A10403709006A1807 /* juce_TreeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TreeView.h; path = ../../src/gui/components/controls/juce_TreeView.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7C10403709006A1807 /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = ../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7D10403709006A1807 /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = ../../src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA7E10403709006A1807 /* juce_DirectoryContentsList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsList.cpp; path = ../../src/gui/components/filebrowser/juce_DirectoryContentsList.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA7F10403709006A1807 /* juce_DirectoryContentsList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsList.h; path = ../../src/gui/components/filebrowser/juce_DirectoryContentsList.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8010403709006A1807 /* juce_FileBrowserComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBrowserComponent.cpp; path = ../../src/gui/components/filebrowser/juce_FileBrowserComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8110403709006A1807 /* juce_FileBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserComponent.h; path = ../../src/gui/components/filebrowser/juce_FileBrowserComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8210403709006A1807 /* juce_FileBrowserListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileBrowserListener.h; path = ../../src/gui/components/filebrowser/juce_FileBrowserListener.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8310403709006A1807 /* juce_FileChooser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooser.cpp; path = ../../src/gui/components/filebrowser/juce_FileChooser.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8410403709006A1807 /* juce_FileChooser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileChooser.h; path = ../../src/gui/components/filebrowser/juce_FileChooser.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8510403709006A1807 /* juce_FileChooserDialogBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileChooserDialogBox.cpp; path = ../../src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8610403709006A1807 /* juce_FileChooserDialogBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileChooserDialogBox.h; path = ../../src/gui/components/filebrowser/juce_FileChooserDialogBox.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8710403709006A1807 /* juce_FileFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileFilter.cpp; path = ../../src/gui/components/filebrowser/juce_FileFilter.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8810403709006A1807 /* juce_FileFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileFilter.h; path = ../../src/gui/components/filebrowser/juce_FileFilter.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8910403709006A1807 /* juce_FileListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileListComponent.cpp; path = ../../src/gui/components/filebrowser/juce_FileListComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8A10403709006A1807 /* juce_FileListComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileListComponent.h; path = ../../src/gui/components/filebrowser/juce_FileListComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8B10403709006A1807 /* juce_FilenameComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FilenameComponent.cpp; path = ../../src/gui/components/filebrowser/juce_FilenameComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8C10403709006A1807 /* juce_FilenameComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FilenameComponent.h; path = ../../src/gui/components/filebrowser/juce_FilenameComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8D10403709006A1807 /* juce_FilePreviewComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FilePreviewComponent.h; path = ../../src/gui/components/filebrowser/juce_FilePreviewComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA8E10403709006A1807 /* juce_FileSearchPathListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPathListComponent.cpp; path = ../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA8F10403709006A1807 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = ../../src/gui/components/filebrowser/juce_FileSearchPathListComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9010403709006A1807 /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = ../../src/gui/components/filebrowser/juce_FileTreeComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9110403709006A1807 /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = ../../src/gui/components/filebrowser/juce_FileTreeComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9210403709006A1807 /* juce_ImagePreviewComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImagePreviewComponent.cpp; path = ../../src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9310403709006A1807 /* juce_ImagePreviewComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImagePreviewComponent.h; path = ../../src/gui/components/filebrowser/juce_ImagePreviewComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9410403709006A1807 /* juce_WildcardFileFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_WildcardFileFilter.cpp; path = ../../src/gui/components/filebrowser/juce_WildcardFileFilter.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9510403709006A1807 /* juce_WildcardFileFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_WildcardFileFilter.h; path = ../../src/gui/components/filebrowser/juce_WildcardFileFilter.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9710403709006A1807 /* juce_KeyboardFocusTraverser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyboardFocusTraverser.cpp; path = ../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9810403709006A1807 /* juce_KeyboardFocusTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_KeyboardFocusTraverser.h; path = ../../src/gui/components/keyboard/juce_KeyboardFocusTraverser.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9910403709006A1807 /* juce_KeyListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyListener.cpp; path = ../../src/gui/components/keyboard/juce_KeyListener.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9A10403709006A1807 /* juce_KeyListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_KeyListener.h; path = ../../src/gui/components/keyboard/juce_KeyListener.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9B10403709006A1807 /* juce_KeyMappingEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyMappingEditorComponent.cpp; path = ../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9C10403709006A1807 /* juce_KeyMappingEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_KeyMappingEditorComponent.h; path = ../../src/gui/components/keyboard/juce_KeyMappingEditorComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9D10403709006A1807 /* juce_KeyPress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPress.cpp; path = ../../src/gui/components/keyboard/juce_KeyPress.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EA9E10403709006A1807 /* juce_KeyPress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_KeyPress.h; path = ../../src/gui/components/keyboard/juce_KeyPress.h; sourceTree = SOURCE_ROOT; }; + 84F1EA9F10403709006A1807 /* juce_KeyPressMappingSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_KeyPressMappingSet.cpp; path = ../../src/gui/components/keyboard/juce_KeyPressMappingSet.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAA010403709006A1807 /* juce_KeyPressMappingSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_KeyPressMappingSet.h; path = ../../src/gui/components/keyboard/juce_KeyPressMappingSet.h; sourceTree = SOURCE_ROOT; }; + 84F1EAA110403709006A1807 /* juce_ModifierKeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ModifierKeys.cpp; path = ../../src/gui/components/keyboard/juce_ModifierKeys.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAA210403709006A1807 /* juce_ModifierKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ModifierKeys.h; path = ../../src/gui/components/keyboard/juce_ModifierKeys.h; sourceTree = SOURCE_ROOT; }; + 84F1EAA410403709006A1807 /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentAnimator.cpp; path = ../../src/gui/components/layout/juce_ComponentAnimator.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAA510403709006A1807 /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentAnimator.h; path = ../../src/gui/components/layout/juce_ComponentAnimator.h; sourceTree = SOURCE_ROOT; }; + 84F1EAA610403709006A1807 /* juce_ComponentBoundsConstrainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentBoundsConstrainer.cpp; path = ../../src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAA710403709006A1807 /* juce_ComponentBoundsConstrainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentBoundsConstrainer.h; path = ../../src/gui/components/layout/juce_ComponentBoundsConstrainer.h; sourceTree = SOURCE_ROOT; }; + 84F1EAA810403709006A1807 /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentMovementWatcher.cpp; path = ../../src/gui/components/layout/juce_ComponentMovementWatcher.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAA910403709006A1807 /* juce_ComponentMovementWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentMovementWatcher.h; path = ../../src/gui/components/layout/juce_ComponentMovementWatcher.h; sourceTree = SOURCE_ROOT; }; + 84F1EAAA10403709006A1807 /* juce_GroupComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GroupComponent.cpp; path = ../../src/gui/components/layout/juce_GroupComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAAB10403709006A1807 /* juce_GroupComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GroupComponent.h; path = ../../src/gui/components/layout/juce_GroupComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAAC10403709006A1807 /* juce_MultiDocumentPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MultiDocumentPanel.cpp; path = ../../src/gui/components/layout/juce_MultiDocumentPanel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAAD10403709006A1807 /* juce_MultiDocumentPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MultiDocumentPanel.h; path = ../../src/gui/components/layout/juce_MultiDocumentPanel.h; sourceTree = SOURCE_ROOT; }; + 84F1EAAE10403709006A1807 /* juce_ResizableBorderComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableBorderComponent.cpp; path = ../../src/gui/components/layout/juce_ResizableBorderComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAAF10403709006A1807 /* juce_ResizableBorderComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ResizableBorderComponent.h; path = ../../src/gui/components/layout/juce_ResizableBorderComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAB010403709006A1807 /* juce_ResizableCornerComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableCornerComponent.cpp; path = ../../src/gui/components/layout/juce_ResizableCornerComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAB110403709006A1807 /* juce_ResizableCornerComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ResizableCornerComponent.h; path = ../../src/gui/components/layout/juce_ResizableCornerComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAB210403709006A1807 /* juce_ScrollBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ScrollBar.cpp; path = ../../src/gui/components/layout/juce_ScrollBar.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAB310403709006A1807 /* juce_ScrollBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ScrollBar.h; path = ../../src/gui/components/layout/juce_ScrollBar.h; sourceTree = SOURCE_ROOT; }; + 84F1EAB410403709006A1807 /* juce_StretchableLayoutManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutManager.cpp; path = ../../src/gui/components/layout/juce_StretchableLayoutManager.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAB510403709006A1807 /* juce_StretchableLayoutManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutManager.h; path = ../../src/gui/components/layout/juce_StretchableLayoutManager.h; sourceTree = SOURCE_ROOT; }; + 84F1EAB610403709006A1807 /* juce_StretchableLayoutResizerBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableLayoutResizerBar.cpp; path = ../../src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAB710403709006A1807 /* juce_StretchableLayoutResizerBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_StretchableLayoutResizerBar.h; path = ../../src/gui/components/layout/juce_StretchableLayoutResizerBar.h; sourceTree = SOURCE_ROOT; }; + 84F1EAB810403709006A1807 /* juce_StretchableObjectResizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_StretchableObjectResizer.cpp; path = ../../src/gui/components/layout/juce_StretchableObjectResizer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAB910403709006A1807 /* juce_StretchableObjectResizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_StretchableObjectResizer.h; path = ../../src/gui/components/layout/juce_StretchableObjectResizer.h; sourceTree = SOURCE_ROOT; }; + 84F1EABA10403709006A1807 /* juce_TabbedButtonBar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedButtonBar.cpp; path = ../../src/gui/components/layout/juce_TabbedButtonBar.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EABB10403709006A1807 /* juce_TabbedButtonBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TabbedButtonBar.h; path = ../../src/gui/components/layout/juce_TabbedButtonBar.h; sourceTree = SOURCE_ROOT; }; + 84F1EABC10403709006A1807 /* juce_TabbedComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TabbedComponent.cpp; path = ../../src/gui/components/layout/juce_TabbedComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EABD10403709006A1807 /* juce_TabbedComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TabbedComponent.h; path = ../../src/gui/components/layout/juce_TabbedComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EABE10403709006A1807 /* juce_Viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Viewport.cpp; path = ../../src/gui/components/layout/juce_Viewport.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EABF10403709006A1807 /* juce_Viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Viewport.h; path = ../../src/gui/components/layout/juce_Viewport.h; sourceTree = SOURCE_ROOT; }; + 84F1EAC110403709006A1807 /* juce_LookAndFeel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LookAndFeel.cpp; path = ../../src/gui/components/lookandfeel/juce_LookAndFeel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAC210403709006A1807 /* juce_LookAndFeel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_LookAndFeel.h; path = ../../src/gui/components/lookandfeel/juce_LookAndFeel.h; sourceTree = SOURCE_ROOT; }; + 84F1EAC310403709006A1807 /* juce_OldSchoolLookAndFeel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OldSchoolLookAndFeel.cpp; path = ../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAC410403709006A1807 /* juce_OldSchoolLookAndFeel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_OldSchoolLookAndFeel.h; path = ../../src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h; sourceTree = SOURCE_ROOT; }; + 84F1EAC610403709006A1807 /* juce_MenuBarComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MenuBarComponent.cpp; path = ../../src/gui/components/menus/juce_MenuBarComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAC710403709006A1807 /* juce_MenuBarComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarComponent.h; path = ../../src/gui/components/menus/juce_MenuBarComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAC810403709006A1807 /* juce_MenuBarModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MenuBarModel.cpp; path = ../../src/gui/components/menus/juce_MenuBarModel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAC910403709006A1807 /* juce_MenuBarModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MenuBarModel.h; path = ../../src/gui/components/menus/juce_MenuBarModel.h; sourceTree = SOURCE_ROOT; }; + 84F1EACA10403709006A1807 /* juce_PopupMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PopupMenu.cpp; path = ../../src/gui/components/menus/juce_PopupMenu.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EACB10403709006A1807 /* juce_PopupMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenu.h; path = ../../src/gui/components/menus/juce_PopupMenu.h; sourceTree = SOURCE_ROOT; }; + 84F1EACC10403709006A1807 /* juce_PopupMenuCustomComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PopupMenuCustomComponent.h; path = ../../src/gui/components/menus/juce_PopupMenuCustomComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EACE10403709006A1807 /* juce_ComponentDragger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentDragger.cpp; path = ../../src/gui/components/mouse/juce_ComponentDragger.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EACF10403709006A1807 /* juce_ComponentDragger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentDragger.h; path = ../../src/gui/components/mouse/juce_ComponentDragger.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD010403709006A1807 /* juce_DragAndDropContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DragAndDropContainer.cpp; path = ../../src/gui/components/mouse/juce_DragAndDropContainer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAD110403709006A1807 /* juce_DragAndDropContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropContainer.h; path = ../../src/gui/components/mouse/juce_DragAndDropContainer.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD210403709006A1807 /* juce_DragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DragAndDropTarget.h; path = ../../src/gui/components/mouse/juce_DragAndDropTarget.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD310403709006A1807 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_FileDragAndDropTarget.h; path = ../../src/gui/components/mouse/juce_FileDragAndDropTarget.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD410403709006A1807 /* juce_LassoComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_LassoComponent.h; path = ../../src/gui/components/mouse/juce_LassoComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD510403709006A1807 /* juce_MouseCursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MouseCursor.h; path = ../../src/gui/components/mouse/juce_MouseCursor.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD610403709006A1807 /* juce_MouseCursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseCursor.cpp; path = ../../src/gui/components/mouse/juce_MouseCursor.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAD710403709006A1807 /* juce_MouseEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MouseEvent.h; path = ../../src/gui/components/mouse/juce_MouseEvent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAD810403709006A1807 /* juce_MouseEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseEvent.cpp; path = ../../src/gui/components/mouse/juce_MouseEvent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAD910403709006A1807 /* juce_MouseHoverDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MouseHoverDetector.h; path = ../../src/gui/components/mouse/juce_MouseHoverDetector.h; sourceTree = SOURCE_ROOT; }; + 84F1EADA10403709006A1807 /* juce_MouseHoverDetector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseHoverDetector.cpp; path = ../../src/gui/components/mouse/juce_MouseHoverDetector.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EADB10403709006A1807 /* juce_MouseListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MouseListener.h; path = ../../src/gui/components/mouse/juce_MouseListener.h; sourceTree = SOURCE_ROOT; }; + 84F1EADC10403709006A1807 /* juce_MouseListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MouseListener.cpp; path = ../../src/gui/components/mouse/juce_MouseListener.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EADD10403709006A1807 /* juce_TooltipClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TooltipClient.h; path = ../../src/gui/components/mouse/juce_TooltipClient.h; sourceTree = SOURCE_ROOT; }; + 84F1EADF10403709006A1807 /* juce_BooleanPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BooleanPropertyComponent.cpp; path = ../../src/gui/components/properties/juce_BooleanPropertyComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAE010403709006A1807 /* juce_BooleanPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BooleanPropertyComponent.h; path = ../../src/gui/components/properties/juce_BooleanPropertyComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAE110403709006A1807 /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ButtonPropertyComponent.cpp; path = ../../src/gui/components/properties/juce_ButtonPropertyComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAE210403709006A1807 /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ButtonPropertyComponent.h; path = ../../src/gui/components/properties/juce_ButtonPropertyComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAE310403709006A1807 /* juce_ChoicePropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ChoicePropertyComponent.cpp; path = ../../src/gui/components/properties/juce_ChoicePropertyComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAE410403709006A1807 /* juce_ChoicePropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ChoicePropertyComponent.h; path = ../../src/gui/components/properties/juce_ChoicePropertyComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAE510403709006A1807 /* juce_PropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertyComponent.cpp; path = ../../src/gui/components/properties/juce_PropertyComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAE610403709006A1807 /* juce_PropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PropertyComponent.h; path = ../../src/gui/components/properties/juce_PropertyComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAE710403709006A1807 /* juce_PropertyPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PropertyPanel.cpp; path = ../../src/gui/components/properties/juce_PropertyPanel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAE810403709006A1807 /* juce_PropertyPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PropertyPanel.h; path = ../../src/gui/components/properties/juce_PropertyPanel.h; sourceTree = SOURCE_ROOT; }; + 84F1EAE910403709006A1807 /* juce_SliderPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SliderPropertyComponent.cpp; path = ../../src/gui/components/properties/juce_SliderPropertyComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAEA10403709006A1807 /* juce_SliderPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SliderPropertyComponent.h; path = ../../src/gui/components/properties/juce_SliderPropertyComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAEB10403709006A1807 /* juce_TextPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextPropertyComponent.cpp; path = ../../src/gui/components/properties/juce_TextPropertyComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAEC10403709006A1807 /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TextPropertyComponent.h; path = ../../src/gui/components/properties/juce_TextPropertyComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAEF10403709006A1807 /* juce_AudioDeviceSelectorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioDeviceSelectorComponent.cpp; path = ../../src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAF010403709006A1807 /* juce_AudioDeviceSelectorComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AudioDeviceSelectorComponent.h; path = ../../src/gui/components/special/juce_AudioDeviceSelectorComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAF110403709006A1807 /* juce_BubbleComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleComponent.cpp; path = ../../src/gui/components/special/juce_BubbleComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAF210403709006A1807 /* juce_BubbleComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BubbleComponent.h; path = ../../src/gui/components/special/juce_BubbleComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAF310403709006A1807 /* juce_BubbleMessageComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BubbleMessageComponent.cpp; path = ../../src/gui/components/special/juce_BubbleMessageComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAF410403709006A1807 /* juce_BubbleMessageComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BubbleMessageComponent.h; path = ../../src/gui/components/special/juce_BubbleMessageComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAF510403709006A1807 /* juce_ColourSelector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourSelector.cpp; path = ../../src/gui/components/special/juce_ColourSelector.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAF610403709006A1807 /* juce_ColourSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ColourSelector.h; path = ../../src/gui/components/special/juce_ColourSelector.h; sourceTree = SOURCE_ROOT; }; + 84F1EAF710403709006A1807 /* juce_DropShadower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadower.cpp; path = ../../src/gui/components/special/juce_DropShadower.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAF810403709006A1807 /* juce_DropShadower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DropShadower.h; path = ../../src/gui/components/special/juce_DropShadower.h; sourceTree = SOURCE_ROOT; }; + 84F1EAF910403709006A1807 /* juce_MagnifierComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MagnifierComponent.cpp; path = ../../src/gui/components/special/juce_MagnifierComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAFA10403709006A1807 /* juce_MagnifierComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MagnifierComponent.h; path = ../../src/gui/components/special/juce_MagnifierComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAFB10403709006A1807 /* juce_MidiKeyboardComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiKeyboardComponent.cpp; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAFC10403709006A1807 /* juce_MidiKeyboardComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_MidiKeyboardComponent.h; path = ../../src/gui/components/special/juce_MidiKeyboardComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAFD10403709006A1807 /* juce_NSViewComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_NSViewComponent.h; path = ../../src/gui/components/special/juce_NSViewComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EAFE10403709006A1807 /* juce_OpenGLComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_OpenGLComponent.cpp; path = ../../src/gui/components/special/juce_OpenGLComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EAFF10403709006A1807 /* juce_OpenGLComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLComponent.h; path = ../../src/gui/components/special/juce_OpenGLComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0010403709006A1807 /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../src/gui/components/special/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB0110403709006A1807 /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../src/gui/components/special/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0210403709006A1807 /* juce_QuickTimeMovieComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeMovieComponent.h; path = ../../src/gui/components/special/juce_QuickTimeMovieComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0310403709006A1807 /* juce_SystemTrayIconComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SystemTrayIconComponent.cpp; path = ../../src/gui/components/special/juce_SystemTrayIconComponent.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB0410403709006A1807 /* juce_SystemTrayIconComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SystemTrayIconComponent.h; path = ../../src/gui/components/special/juce_SystemTrayIconComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0510403709006A1807 /* juce_WebBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_WebBrowserComponent.h; path = ../../src/gui/components/special/juce_WebBrowserComponent.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0710403709006A1807 /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../src/gui/components/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB0810403709006A1807 /* juce_AlertWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../src/gui/components/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0910403709006A1807 /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ComponentPeer.cpp; path = ../../src/gui/components/windows/juce_ComponentPeer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB0A10403709006A1807 /* juce_ComponentPeer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ComponentPeer.h; path = ../../src/gui/components/windows/juce_ComponentPeer.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0B10403709006A1807 /* juce_DialogWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DialogWindow.cpp; path = ../../src/gui/components/windows/juce_DialogWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB0C10403709006A1807 /* juce_DialogWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DialogWindow.h; path = ../../src/gui/components/windows/juce_DialogWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0D10403709006A1807 /* juce_DocumentWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DocumentWindow.cpp; path = ../../src/gui/components/windows/juce_DocumentWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB0E10403709006A1807 /* juce_DocumentWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DocumentWindow.h; path = ../../src/gui/components/windows/juce_DocumentWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB0F10403709006A1807 /* juce_ResizableWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ResizableWindow.cpp; path = ../../src/gui/components/windows/juce_ResizableWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1010403709006A1807 /* juce_ResizableWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ResizableWindow.h; path = ../../src/gui/components/windows/juce_ResizableWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1110403709006A1807 /* juce_SplashScreen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SplashScreen.cpp; path = ../../src/gui/components/windows/juce_SplashScreen.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1210403709006A1807 /* juce_SplashScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SplashScreen.h; path = ../../src/gui/components/windows/juce_SplashScreen.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1310403709006A1807 /* juce_ThreadWithProgressWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ThreadWithProgressWindow.cpp; path = ../../src/gui/components/windows/juce_ThreadWithProgressWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1410403709006A1807 /* juce_ThreadWithProgressWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ThreadWithProgressWindow.h; path = ../../src/gui/components/windows/juce_ThreadWithProgressWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1510403709006A1807 /* juce_TooltipWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TooltipWindow.cpp; path = ../../src/gui/components/windows/juce_TooltipWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1610403709006A1807 /* juce_TooltipWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TooltipWindow.h; path = ../../src/gui/components/windows/juce_TooltipWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1710403709006A1807 /* juce_TopLevelWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TopLevelWindow.cpp; path = ../../src/gui/components/windows/juce_TopLevelWindow.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1810403709006A1807 /* juce_TopLevelWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TopLevelWindow.h; path = ../../src/gui/components/windows/juce_TopLevelWindow.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1B10403709006A1807 /* juce_Brush.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Brush.cpp; path = ../../src/gui/graphics/brushes/juce_Brush.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1C10403709006A1807 /* juce_Brush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Brush.h; path = ../../src/gui/graphics/brushes/juce_Brush.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1D10403709006A1807 /* juce_GradientBrush.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GradientBrush.cpp; path = ../../src/gui/graphics/brushes/juce_GradientBrush.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB1E10403709006A1807 /* juce_GradientBrush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GradientBrush.h; path = ../../src/gui/graphics/brushes/juce_GradientBrush.h; sourceTree = SOURCE_ROOT; }; + 84F1EB1F10403709006A1807 /* juce_ImageBrush.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageBrush.cpp; path = ../../src/gui/graphics/brushes/juce_ImageBrush.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2010403709006A1807 /* juce_ImageBrush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImageBrush.h; path = ../../src/gui/graphics/brushes/juce_ImageBrush.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2110403709006A1807 /* juce_SolidColourBrush.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SolidColourBrush.cpp; path = ../../src/gui/graphics/brushes/juce_SolidColourBrush.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2210403709006A1807 /* juce_SolidColourBrush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_SolidColourBrush.h; path = ../../src/gui/graphics/brushes/juce_SolidColourBrush.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2410403709006A1807 /* juce_Colour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colour.cpp; path = ../../src/gui/graphics/colour/juce_Colour.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2510403709006A1807 /* juce_ColourGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ColourGradient.cpp; path = ../../src/gui/graphics/colour/juce_ColourGradient.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2610403709006A1807 /* juce_ColourGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ColourGradient.h; path = ../../src/gui/graphics/colour/juce_ColourGradient.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2710403709006A1807 /* juce_Colours.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Colours.cpp; path = ../../src/gui/graphics/colour/juce_Colours.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2810403709006A1807 /* juce_Colours.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Colours.h; path = ../../src/gui/graphics/colour/juce_Colours.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2910403709006A1807 /* juce_PixelFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PixelFormats.h; path = ../../src/gui/graphics/colour/juce_PixelFormats.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2A10403709006A1807 /* juce_Colour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Colour.h; path = ../../src/gui/graphics/colour/juce_Colour.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2C10403709006A1807 /* juce_EdgeTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_EdgeTable.cpp; path = ../../src/gui/graphics/contexts/juce_EdgeTable.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2D10403709006A1807 /* juce_EdgeTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_EdgeTable.h; path = ../../src/gui/graphics/contexts/juce_EdgeTable.h; sourceTree = SOURCE_ROOT; }; + 84F1EB2E10403709006A1807 /* juce_Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Graphics.cpp; path = ../../src/gui/graphics/contexts/juce_Graphics.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB2F10403709006A1807 /* juce_Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Graphics.h; path = ../../src/gui/graphics/contexts/juce_Graphics.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3010403709006A1807 /* juce_Justification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Justification.cpp; path = ../../src/gui/graphics/contexts/juce_Justification.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3110403709006A1807 /* juce_Justification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Justification.h; path = ../../src/gui/graphics/contexts/juce_Justification.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3210403709006A1807 /* juce_LowLevelGraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsContext.h; path = ../../src/gui/graphics/contexts/juce_LowLevelGraphicsContext.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3310403709006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LowLevelGraphicsPostScriptRenderer.cpp; path = ../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3410403709006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsPostScriptRenderer.h; path = ../../src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3510403709006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LowLevelGraphicsSoftwareRenderer.cpp; path = ../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3610403709006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_LowLevelGraphicsSoftwareRenderer.h; path = ../../src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3710403709006A1807 /* juce_RectanglePlacement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RectanglePlacement.cpp; path = ../../src/gui/graphics/contexts/juce_RectanglePlacement.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3810403709006A1807 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_RectanglePlacement.h; path = ../../src/gui/graphics/contexts/juce_RectanglePlacement.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3A10403709006A1807 /* juce_Drawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Drawable.cpp; path = ../../src/gui/graphics/drawables/juce_Drawable.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3B10403709006A1807 /* juce_Drawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Drawable.h; path = ../../src/gui/graphics/drawables/juce_Drawable.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3C10403709006A1807 /* juce_DrawableComposite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableComposite.cpp; path = ../../src/gui/graphics/drawables/juce_DrawableComposite.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3D10403709006A1807 /* juce_DrawableComposite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DrawableComposite.h; path = ../../src/gui/graphics/drawables/juce_DrawableComposite.h; sourceTree = SOURCE_ROOT; }; + 84F1EB3E10403709006A1807 /* juce_DrawableImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableImage.cpp; path = ../../src/gui/graphics/drawables/juce_DrawableImage.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB3F10403709006A1807 /* juce_DrawableImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DrawableImage.h; path = ../../src/gui/graphics/drawables/juce_DrawableImage.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4010403709006A1807 /* juce_DrawablePath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawablePath.cpp; path = ../../src/gui/graphics/drawables/juce_DrawablePath.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4110403709006A1807 /* juce_DrawablePath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DrawablePath.h; path = ../../src/gui/graphics/drawables/juce_DrawablePath.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4210403709006A1807 /* juce_DrawableText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DrawableText.cpp; path = ../../src/gui/graphics/drawables/juce_DrawableText.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4310403709006A1807 /* juce_DrawableText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DrawableText.h; path = ../../src/gui/graphics/drawables/juce_DrawableText.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4410403709006A1807 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SVGParser.cpp; path = ../../src/gui/graphics/drawables/juce_SVGParser.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4610403709006A1807 /* juce_DropShadowEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DropShadowEffect.cpp; path = ../../src/gui/graphics/effects/juce_DropShadowEffect.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4710403709006A1807 /* juce_DropShadowEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_DropShadowEffect.h; path = ../../src/gui/graphics/effects/juce_DropShadowEffect.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4810403709006A1807 /* juce_GlowEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlowEffect.cpp; path = ../../src/gui/graphics/effects/juce_GlowEffect.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4910403709006A1807 /* juce_GlowEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GlowEffect.h; path = ../../src/gui/graphics/effects/juce_GlowEffect.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4A10403709006A1807 /* juce_ImageEffectFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImageEffectFilter.h; path = ../../src/gui/graphics/effects/juce_ImageEffectFilter.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4B10403709006A1807 /* juce_ReduceOpacityEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ReduceOpacityEffect.cpp; path = ../../src/gui/graphics/effects/juce_ReduceOpacityEffect.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4C10403709006A1807 /* juce_ReduceOpacityEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ReduceOpacityEffect.h; path = ../../src/gui/graphics/effects/juce_ReduceOpacityEffect.h; sourceTree = SOURCE_ROOT; }; + 84F1EB4E10403709006A1807 /* juce_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Font.cpp; path = ../../src/gui/graphics/fonts/juce_Font.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB4F10403709006A1807 /* juce_Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Font.h; path = ../../src/gui/graphics/fonts/juce_Font.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5010403709006A1807 /* juce_GlyphArrangement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GlyphArrangement.cpp; path = ../../src/gui/graphics/fonts/juce_GlyphArrangement.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5110403709006A1807 /* juce_GlyphArrangement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GlyphArrangement.h; path = ../../src/gui/graphics/fonts/juce_GlyphArrangement.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5210403709006A1807 /* juce_TextLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_TextLayout.cpp; path = ../../src/gui/graphics/fonts/juce_TextLayout.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5310403709006A1807 /* juce_TextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_TextLayout.h; path = ../../src/gui/graphics/fonts/juce_TextLayout.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5410403709006A1807 /* juce_Typeface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Typeface.cpp; path = ../../src/gui/graphics/fonts/juce_Typeface.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5510403709006A1807 /* juce_Typeface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Typeface.h; path = ../../src/gui/graphics/fonts/juce_Typeface.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5710403709006A1807 /* juce_AffineTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AffineTransform.cpp; path = ../../src/gui/graphics/geometry/juce_AffineTransform.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5810403709006A1807 /* juce_AffineTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AffineTransform.h; path = ../../src/gui/graphics/geometry/juce_AffineTransform.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5910403709006A1807 /* juce_BorderSize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_BorderSize.cpp; path = ../../src/gui/graphics/geometry/juce_BorderSize.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5A10403709006A1807 /* juce_BorderSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BorderSize.h; path = ../../src/gui/graphics/geometry/juce_BorderSize.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5B10403709006A1807 /* juce_Line.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Line.cpp; path = ../../src/gui/graphics/geometry/juce_Line.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5C10403709006A1807 /* juce_Line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Line.h; path = ../../src/gui/graphics/geometry/juce_Line.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5D10403709006A1807 /* juce_Path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Path.cpp; path = ../../src/gui/graphics/geometry/juce_Path.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB5E10403709006A1807 /* juce_Path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Path.h; path = ../../src/gui/graphics/geometry/juce_Path.h; sourceTree = SOURCE_ROOT; }; + 84F1EB5F10403709006A1807 /* juce_PathIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathIterator.cpp; path = ../../src/gui/graphics/geometry/juce_PathIterator.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6010403709006A1807 /* juce_PathIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PathIterator.h; path = ../../src/gui/graphics/geometry/juce_PathIterator.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6110403709006A1807 /* juce_PathStrokeType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PathStrokeType.cpp; path = ../../src/gui/graphics/geometry/juce_PathStrokeType.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6210403709006A1807 /* juce_PathStrokeType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PathStrokeType.h; path = ../../src/gui/graphics/geometry/juce_PathStrokeType.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6310403709006A1807 /* juce_Point.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Point.cpp; path = ../../src/gui/graphics/geometry/juce_Point.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6410403709006A1807 /* juce_Point.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Point.h; path = ../../src/gui/graphics/geometry/juce_Point.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6510403709006A1807 /* juce_PositionedRectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PositionedRectangle.cpp; path = ../../src/gui/graphics/geometry/juce_PositionedRectangle.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6610403709006A1807 /* juce_PositionedRectangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_PositionedRectangle.h; path = ../../src/gui/graphics/geometry/juce_PositionedRectangle.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6710403709006A1807 /* juce_Rectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Rectangle.cpp; path = ../../src/gui/graphics/geometry/juce_Rectangle.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6810403709006A1807 /* juce_Rectangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Rectangle.h; path = ../../src/gui/graphics/geometry/juce_Rectangle.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6910403709006A1807 /* juce_RectangleList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RectangleList.cpp; path = ../../src/gui/graphics/geometry/juce_RectangleList.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6A10403709006A1807 /* juce_RectangleList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_RectangleList.h; path = ../../src/gui/graphics/geometry/juce_RectangleList.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6C10403709006A1807 /* juce_CameraDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_CameraDevice.h; path = ../../src/gui/graphics/imaging/juce_CameraDevice.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6D10403709006A1807 /* juce_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Image.cpp; path = ../../src/gui/graphics/imaging/juce_Image.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB6E10403709006A1807 /* juce_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_Image.h; path = ../../src/gui/graphics/imaging/juce_Image.h; sourceTree = SOURCE_ROOT; }; + 84F1EB6F10403709006A1807 /* juce_ImageCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageCache.cpp; path = ../../src/gui/graphics/imaging/juce_ImageCache.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB7010403709006A1807 /* juce_ImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImageCache.h; path = ../../src/gui/graphics/imaging/juce_ImageCache.h; sourceTree = SOURCE_ROOT; }; + 84F1EB7110403709006A1807 /* juce_ImageConvolutionKernel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageConvolutionKernel.cpp; path = ../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB7210403709006A1807 /* juce_ImageConvolutionKernel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImageConvolutionKernel.h; path = ../../src/gui/graphics/imaging/juce_ImageConvolutionKernel.h; sourceTree = SOURCE_ROOT; }; + 84F1EB7310403709006A1807 /* juce_ImageFileFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_ImageFileFormat.cpp; path = ../../src/gui/graphics/imaging/juce_ImageFileFormat.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB7410403709006A1807 /* juce_ImageFileFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_ImageFileFormat.h; path = ../../src/gui/graphics/imaging/juce_ImageFileFormat.h; sourceTree = SOURCE_ROOT; }; + 84F1EB7610403709006A1807 /* juce_GIFLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_GIFLoader.cpp; path = ../../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB7710403709006A1807 /* juce_GIFLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_GIFLoader.h; path = ../../src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h; sourceTree = SOURCE_ROOT; }; + 84F1EB7810403709006A1807 /* juce_JPEGLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_JPEGLoader.cpp; path = ../../src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp; sourceTree = SOURCE_ROOT; }; + 84F1EB7910403709006A1807 /* juce_PNGLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PNGLoader.cpp; path = ../../src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp; sourceTree = SOURCE_ROOT; }; D2AAC046055464E500DB518D /* libjucedebug.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjucedebug.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -1218,8 +1223,17 @@ 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( - 84A4883308A22E4900752A2B /* juce_appframework */, - 84A4899708A22E4A00752A2B /* juce_core */, + 84F1E6DB10403605006A1807 /* application */, + 84F1E6F210403614006A1807 /* audio */, + 84F1E8F210403681006A1807 /* core */, + 84F1E8CF10403671006A1807 /* containers */, + 84F1E940104036B3006A1807 /* cryptography */, + 84F1E949104036B3006A1807 /* events */, + 84F1EA4410403708006A1807 /* gui */, + 84F1E988104036D6006A1807 /* io */, + 84F1E9C9104036D6006A1807 /* text */, + 84F1E9D8104036D6006A1807 /* threads */, + 84F1E9251040369C006A1807 /* utilities */, 84A4881C08A22E2400752A2B /* native mac code */, ); lineEnding = 2; @@ -1234,122 +1248,6 @@ name = Products; sourceTree = ""; }; - 84099C9A0AE52BD000B2A05D /* synthesisers */ = { - isa = PBXGroup; - children = ( - 84099C9B0AE52BD000B2A05D /* juce_Sampler.cpp */, - 84099C9C0AE52BD000B2A05D /* juce_Sampler.h */, - 84099C9D0AE52BD000B2A05D /* juce_Synthesiser.cpp */, - 84099C9E0AE52BD000B2A05D /* juce_Synthesiser.h */, - ); - path = synthesisers; - sourceTree = ""; - }; - 84198B08096D8E2B0022A439 /* devices */ = { - isa = PBXGroup; - children = ( - 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */, - 84198B0C096D8E2B0022A439 /* juce_AudioIODevice.h */, - 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */, - 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */, - 84198B0A096D8E2B0022A439 /* juce_AudioDeviceManager.cpp */, - 84198B0B096D8E2B0022A439 /* juce_AudioDeviceManager.h */, - 84198B0D096D8E2B0022A439 /* juce_MidiInput.h */, - 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */, - 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */, - ); - path = devices; - sourceTree = ""; - }; - 841B22CC0D2E7FE3009D01AA /* plugins */ = { - isa = PBXGroup; - children = ( - 841B22CD0D2E7FE3009D01AA /* formats */, - 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */, - 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */, - 841B22D60D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp */, - 841B22D70D2E7FE3009D01AA /* juce_AudioPluginFormatManager.h */, - 841B22D80D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp */, - 841B22D90D2E7FE3009D01AA /* juce_AudioPluginInstance.h */, - 841B22DA0D2E7FE3009D01AA /* juce_KnownPluginList.cpp */, - 841B22DB0D2E7FE3009D01AA /* juce_KnownPluginList.h */, - 841B22DC0D2E7FE3009D01AA /* juce_PluginDescription.cpp */, - 841B22DD0D2E7FE3009D01AA /* juce_PluginDescription.h */, - 841B22DE0D2E7FE3009D01AA /* juce_PluginDirectoryScanner.cpp */, - 841B22DF0D2E7FE3009D01AA /* juce_PluginDirectoryScanner.h */, - 841B22E00D2E7FE3009D01AA /* juce_PluginListComponent.cpp */, - 841B22E10D2E7FE3009D01AA /* juce_PluginListComponent.h */, - ); - path = plugins; - sourceTree = ""; - }; - 841B22CD0D2E7FE3009D01AA /* formats */ = { - isa = PBXGroup; - children = ( - 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */, - 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */, - 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */, - 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */, - 84CA4AFA0E9BF9EC004CCC0E /* juce_VSTPluginFormat.cpp */, - 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */, - 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */, - ); - path = formats; - sourceTree = ""; - }; - 841E062E0AF8CE74005E6FCC /* dsp */ = { - isa = PBXGroup; - children = ( - 841E062F0AF8CE74005E6FCC /* juce_AudioDataConverters.cpp */, - 841E06300AF8CE74005E6FCC /* juce_AudioDataConverters.h */, - 841E06310AF8CE74005E6FCC /* juce_AudioSampleBuffer.cpp */, - 841E06320AF8CE74005E6FCC /* juce_AudioSampleBuffer.h */, - 841E06330AF8CE74005E6FCC /* juce_IIRFilter.cpp */, - 841E06340AF8CE74005E6FCC /* juce_IIRFilter.h */, - ); - path = dsp; - sourceTree = ""; - }; - 842F9D560A19C9AF00B1358D /* properties */ = { - isa = PBXGroup; - children = ( - 84F1F05F0A36CF06008CCC5E /* juce_BooleanPropertyComponent.cpp */, - 84F1F0600A36CF06008CCC5E /* juce_BooleanPropertyComponent.h */, - 842F9D570A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp */, - 842F9D580A19C9AF00B1358D /* juce_ButtonPropertyComponent.h */, - 842F9D590A19C9AF00B1358D /* juce_ChoicePropertyComponent.cpp */, - 842F9D5A0A19C9AF00B1358D /* juce_ChoicePropertyComponent.h */, - 842F9D5B0A19C9AF00B1358D /* juce_PropertyComponent.cpp */, - 842F9D5C0A19C9AF00B1358D /* juce_PropertyComponent.h */, - 842F9D5D0A19C9AF00B1358D /* juce_PropertyPanel.cpp */, - 842F9D5E0A19C9AF00B1358D /* juce_PropertyPanel.h */, - 842F9D5F0A19C9AF00B1358D /* juce_SliderPropertyComponent.cpp */, - 842F9D600A19C9AF00B1358D /* juce_SliderPropertyComponent.h */, - 842F9D610A19C9AF00B1358D /* juce_TextPropertyComponent.cpp */, - 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */, - ); - path = properties; - sourceTree = ""; - }; - 8463D5B4098BD2CD00F9AEC2 /* midi */ = { - isa = PBXGroup; - children = ( - 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */, - 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */, - 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */, - 8463D5B8098BD2DD00F9AEC2 /* juce_MidiFile.h */, - 8463D5B9098BD2DD00F9AEC2 /* juce_MidiKeyboardState.cpp */, - 8463D5BA098BD2DD00F9AEC2 /* juce_MidiKeyboardState.h */, - 8463D5BB098BD2DD00F9AEC2 /* juce_MidiMessage.cpp */, - 8463D5BC098BD2DD00F9AEC2 /* juce_MidiMessage.h */, - 8463D5BD098BD2DD00F9AEC2 /* juce_MidiMessageCollector.cpp */, - 8463D5BE098BD2DD00F9AEC2 /* juce_MidiMessageCollector.h */, - 8463D5BF098BD2DD00F9AEC2 /* juce_MidiMessageSequence.cpp */, - 8463D5C0098BD2DD00F9AEC2 /* juce_MidiMessageSequence.h */, - ); - name = midi; - sourceTree = ""; - }; 84A4881C08A22E2400752A2B /* native mac code */ = { isa = PBXGroup; children = ( @@ -1385,870 +1283,962 @@ path = ../../src/native/mac; sourceTree = SOURCE_ROOT; }; - 84A4883308A22E4900752A2B /* juce_appframework */ = { + 84F1E6DB10403605006A1807 /* application */ = { isa = PBXGroup; children = ( - 84A4883408A22E4900752A2B /* application */, - 84A4883B08A22E4900752A2B /* audio */, - 84FC318609B749E400B75141 /* documents */, - 84A4886408A22E4900752A2B /* events */, - 84A4887908A22E4900752A2B /* gui */, - ); - name = juce_appframework; - path = ../../src/juce_appframework; - sourceTree = SOURCE_ROOT; - }; - 84A4883408A22E4900752A2B /* application */ = { - isa = PBXGroup; - children = ( - 84A4883508A22E4900752A2B /* juce_Application.cpp */, - 84A4883608A22E4900752A2B /* juce_Application.h */, - 84F589980A01493600B80939 /* juce_ApplicationCommandID.h */, - 84F589990A01493600B80939 /* juce_ApplicationCommandInfo.cpp */, - 84F5899A0A01493600B80939 /* juce_ApplicationCommandInfo.h */, - 84F5899B0A01493600B80939 /* juce_ApplicationCommandManager.cpp */, - 84F5899C0A01493600B80939 /* juce_ApplicationCommandManager.h */, - 84F5899D0A01493600B80939 /* juce_ApplicationCommandTarget.cpp */, - 84F5899E0A01493600B80939 /* juce_ApplicationCommandTarget.h */, - 84F524FE0B32A8D500597B73 /* juce_ApplicationProperties.cpp */, - 84F524FF0B32A8D500597B73 /* juce_ApplicationProperties.h */, - 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */, - 84A4883808A22E4900752A2B /* juce_DeletedAtShutdown.h */, - 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */, - 84D296BC09B763190026C535 /* juce_PropertiesFile.h */, - 84A4883A08A22E4900752A2B /* juce_SystemClipboard.h */, + 84F1E6DC10403605006A1807 /* juce_Application.cpp */, + 84F1E6DD10403605006A1807 /* juce_Application.h */, + 84F1E6DE10403605006A1807 /* juce_ApplicationCommandID.h */, + 84F1E6DF10403605006A1807 /* juce_ApplicationCommandInfo.cpp */, + 84F1E6E010403605006A1807 /* juce_ApplicationCommandInfo.h */, + 84F1E6E110403605006A1807 /* juce_ApplicationCommandManager.cpp */, + 84F1E6E210403605006A1807 /* juce_ApplicationCommandManager.h */, + 84F1E6E310403605006A1807 /* juce_ApplicationCommandTarget.cpp */, + 84F1E6E410403605006A1807 /* juce_ApplicationCommandTarget.h */, + 84F1E6E510403605006A1807 /* juce_ApplicationProperties.cpp */, + 84F1E6E610403605006A1807 /* juce_ApplicationProperties.h */, ); name = application; - path = ../../src/juce_appframework/application; + path = ../../src/application; sourceTree = SOURCE_ROOT; }; - 84A4883B08A22E4900752A2B /* audio */ = { + 84F1E6F210403614006A1807 /* audio */ = { isa = PBXGroup; children = ( - 84A4883C08A22E4900752A2B /* audio_file_formats */, - 84A4884908A22E4900752A2B /* audio_sources */, - 84198B08096D8E2B0022A439 /* devices */, - 841E062E0AF8CE74005E6FCC /* dsp */, - 841B22CC0D2E7FE3009D01AA /* plugins */, - 84BC4E200C8DD38C00FA249B /* processors */, - 8463D5B4098BD2CD00F9AEC2 /* midi */, - 84099C9A0AE52BD000B2A05D /* synthesisers */, + 84F1E6F310403614006A1807 /* audio_file_formats */, + 84F1E79210403614006A1807 /* audio_sources */, + 84F1E7A710403614006A1807 /* devices */, + 84F1E7B110403614006A1807 /* dsp */, + 84F1E7B810403614006A1807 /* midi */, + 84F1E7C510403614006A1807 /* plugins */, + 84F1E7DD10403615006A1807 /* processors */, + 84F1E7EA10403615006A1807 /* synthesisers */, ); name = audio; - path = ../../src/juce_appframework/audio; + path = ../../src/audio; sourceTree = SOURCE_ROOT; }; - 84A4883C08A22E4900752A2B /* audio_file_formats */ = { + 84F1E6F310403614006A1807 /* audio_file_formats */ = { isa = PBXGroup; children = ( - 842B63B609D8508F00255DC7 /* juce_FlacAudioFormat.cpp */, - 842B63B709D8508F00255DC7 /* juce_FlacAudioFormat.h */, - 842B63B809D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp */, - 842B63B909D8508F00255DC7 /* juce_OggVorbisAudioFormat.h */, - 84A4883D08A22E4900752A2B /* juce_AiffAudioFormat.cpp */, - 84A4883E08A22E4900752A2B /* juce_AiffAudioFormat.h */, - 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */, - 84A4883F08A22E4900752A2B /* juce_AudioCDReader.cpp */, - 84A4884008A22E4900752A2B /* juce_AudioCDReader.h */, - 84A4884108A22E4900752A2B /* juce_AudioFormat.cpp */, - 84A4884208A22E4900752A2B /* juce_AudioFormat.h */, - 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */, - 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */, - 84A4884308A22E4900752A2B /* juce_AudioFormatReader.h */, - 84A4884408A22E4900752A2B /* juce_AudioFormatWriter.h */, - 84A4884508A22E4900752A2B /* juce_AudioSubsectionReader.cpp */, - 84A4884608A22E4900752A2B /* juce_AudioSubsectionReader.h */, - 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */, - 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */, - 8495BB8A0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp */, - 8495BB8B0D8067B2001D9C0B /* juce_AudioThumbnailCache.h */, - 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */, - 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */, - 84A4884708A22E4900752A2B /* juce_WavAudioFormat.cpp */, - 84A4884808A22E4900752A2B /* juce_WavAudioFormat.h */, + 84F1E6F410403614006A1807 /* juce_AiffAudioFormat.cpp */, + 84F1E6F510403614006A1807 /* juce_AiffAudioFormat.h */, + 84F1E6F610403614006A1807 /* juce_AudioCDBurner.h */, + 84F1E6F710403614006A1807 /* juce_AudioCDReader.cpp */, + 84F1E6F810403614006A1807 /* juce_AudioCDReader.h */, + 84F1E6F910403614006A1807 /* juce_AudioFormat.cpp */, + 84F1E6FA10403614006A1807 /* juce_AudioFormat.h */, + 84F1E6FB10403614006A1807 /* juce_AudioFormatManager.cpp */, + 84F1E6FC10403614006A1807 /* juce_AudioFormatManager.h */, + 84F1E6FD10403614006A1807 /* juce_AudioFormatReader.h */, + 84F1E6FE10403614006A1807 /* juce_AudioFormatWriter.h */, + 84F1E6FF10403614006A1807 /* juce_AudioSubsectionReader.cpp */, + 84F1E70010403614006A1807 /* juce_AudioSubsectionReader.h */, + 84F1E70110403614006A1807 /* juce_AudioThumbnail.cpp */, + 84F1E70210403614006A1807 /* juce_AudioThumbnail.h */, + 84F1E70310403614006A1807 /* juce_AudioThumbnailCache.cpp */, + 84F1E70410403614006A1807 /* juce_AudioThumbnailCache.h */, + 84F1E70510403614006A1807 /* juce_FlacAudioFormat.h */, + 84F1E70610403614006A1807 /* juce_OggVorbisAudioFormat.h */, + 84F1E70710403614006A1807 /* juce_QuickTimeAudioFormat.h */, + 84F1E70810403614006A1807 /* juce_WavAudioFormat.h */, + 84F1E70910403614006A1807 /* juce_WavAudioFormat.cpp */, + 84F1E70A10403614006A1807 /* juce_QuickTimeAudioFormat.cpp */, + 84F1E70B10403614006A1807 /* juce_FlacAudioFormat.cpp */, + 84F1E70C10403614006A1807 /* juce_OggVorbisAudioFormat.cpp */, ); name = audio_file_formats; - path = ../../src/juce_appframework/audio/audio_file_formats; + path = ../../src/audio/audio_file_formats; sourceTree = SOURCE_ROOT; }; - 84A4884908A22E4900752A2B /* audio_sources */ = { + 84F1E79210403614006A1807 /* audio_sources */ = { isa = PBXGroup; children = ( - 84A4884A08A22E4900752A2B /* juce_AudioFormatReaderSource.cpp */, - 84A4884B08A22E4900752A2B /* juce_AudioFormatReaderSource.h */, - 84A4884C08A22E4900752A2B /* juce_AudioSource.h */, - 84A4884D08A22E4900752A2B /* juce_AudioSourcePlayer.cpp */, - 84A4884E08A22E4900752A2B /* juce_AudioSourcePlayer.h */, - 84A4884F08A22E4900752A2B /* juce_AudioTransportSource.cpp */, - 84A4885008A22E4900752A2B /* juce_AudioTransportSource.h */, - 84A4885108A22E4900752A2B /* juce_BufferingAudioSource.cpp */, - 84A4885208A22E4900752A2B /* juce_BufferingAudioSource.h */, - 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */, - 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */, - 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */, - 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */, - 84A4885308A22E4900752A2B /* juce_MixerAudioSource.cpp */, - 84A4885408A22E4900752A2B /* juce_MixerAudioSource.h */, - 84A4885508A22E4900752A2B /* juce_PositionableAudioSource.h */, - 84A4885608A22E4900752A2B /* juce_ResamplingAudioSource.cpp */, - 84A4885708A22E4900752A2B /* juce_ResamplingAudioSource.h */, - 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */, - 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */, + 84F1E79310403614006A1807 /* juce_AudioFormatReaderSource.cpp */, + 84F1E79410403614006A1807 /* juce_AudioFormatReaderSource.h */, + 84F1E79510403614006A1807 /* juce_AudioSource.h */, + 84F1E79610403614006A1807 /* juce_AudioSourcePlayer.cpp */, + 84F1E79710403614006A1807 /* juce_AudioSourcePlayer.h */, + 84F1E79810403614006A1807 /* juce_AudioTransportSource.cpp */, + 84F1E79910403614006A1807 /* juce_AudioTransportSource.h */, + 84F1E79A10403614006A1807 /* juce_BufferingAudioSource.cpp */, + 84F1E79B10403614006A1807 /* juce_BufferingAudioSource.h */, + 84F1E79C10403614006A1807 /* juce_ChannelRemappingAudioSource.cpp */, + 84F1E79D10403614006A1807 /* juce_ChannelRemappingAudioSource.h */, + 84F1E79E10403614006A1807 /* juce_IIRFilterAudioSource.cpp */, + 84F1E79F10403614006A1807 /* juce_IIRFilterAudioSource.h */, + 84F1E7A010403614006A1807 /* juce_MixerAudioSource.cpp */, + 84F1E7A110403614006A1807 /* juce_MixerAudioSource.h */, + 84F1E7A210403614006A1807 /* juce_PositionableAudioSource.h */, + 84F1E7A310403614006A1807 /* juce_ResamplingAudioSource.cpp */, + 84F1E7A410403614006A1807 /* juce_ResamplingAudioSource.h */, + 84F1E7A510403614006A1807 /* juce_ToneGeneratorAudioSource.cpp */, + 84F1E7A610403614006A1807 /* juce_ToneGeneratorAudioSource.h */, ); name = audio_sources; - path = ../../src/juce_appframework/audio/audio_sources; + path = ../../src/audio/audio_sources; sourceTree = SOURCE_ROOT; }; - 84A4886408A22E4900752A2B /* events */ = { + 84F1E7A710403614006A1807 /* devices */ = { isa = PBXGroup; children = ( - 84A4886508A22E4900752A2B /* juce_ActionBroadcaster.cpp */, - 84A4886608A22E4900752A2B /* juce_ActionBroadcaster.h */, - 84A4886708A22E4900752A2B /* juce_ActionListener.h */, - 84A4886808A22E4900752A2B /* juce_ActionListenerList.cpp */, - 84A4886908A22E4900752A2B /* juce_ActionListenerList.h */, - 84A4886A08A22E4900752A2B /* juce_AsyncUpdater.cpp */, - 84A4886B08A22E4900752A2B /* juce_AsyncUpdater.h */, - 84B1C1320F6287E70068E14F /* juce_CallbackMessage.h */, - 84A4886C08A22E4900752A2B /* juce_ChangeBroadcaster.cpp */, - 84A4886D08A22E4900752A2B /* juce_ChangeBroadcaster.h */, - 84A4886E08A22E4900752A2B /* juce_ChangeListener.h */, - 84A4886F08A22E4900752A2B /* juce_ChangeListenerList.cpp */, - 84A4887008A22E4900752A2B /* juce_ChangeListenerList.h */, - 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */, - 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */, - 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */, - 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */, - 84A4887108A22E4900752A2B /* juce_Message.cpp */, - 84A4887208A22E4900752A2B /* juce_Message.h */, - 84A4887308A22E4900752A2B /* juce_MessageListener.cpp */, - 84A4887408A22E4900752A2B /* juce_MessageListener.h */, - 84A4887508A22E4900752A2B /* juce_MessageManager.cpp */, - 84A4887608A22E4900752A2B /* juce_MessageManager.h */, - 84F7A7BF0A8383E000D36246 /* juce_MultiTimer.cpp */, - 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */, - 84A4887708A22E4900752A2B /* juce_Timer.cpp */, - 84A4887808A22E4900752A2B /* juce_Timer.h */, + 84F1E7A810403614006A1807 /* juce_AudioDeviceManager.cpp */, + 84F1E7A910403614006A1807 /* juce_AudioDeviceManager.h */, + 84F1E7AA10403614006A1807 /* juce_AudioIODevice.cpp */, + 84F1E7AB10403614006A1807 /* juce_AudioIODevice.h */, + 84F1E7AC10403614006A1807 /* juce_AudioIODeviceType.cpp */, + 84F1E7AD10403614006A1807 /* juce_AudioIODeviceType.h */, + 84F1E7AE10403614006A1807 /* juce_MidiInput.h */, + 84F1E7AF10403614006A1807 /* juce_MidiOutput.cpp */, + 84F1E7B010403614006A1807 /* juce_MidiOutput.h */, ); - name = events; - path = ../../src/juce_appframework/events; + name = devices; + path = ../../src/audio/devices; sourceTree = SOURCE_ROOT; }; - 84A4887908A22E4900752A2B /* gui */ = { + 84F1E7B110403614006A1807 /* dsp */ = { isa = PBXGroup; children = ( - 84A4887A08A22E4900752A2B /* components */, - 84A488FF08A22E4900752A2B /* graphics */, + 84F1E7B210403614006A1807 /* juce_AudioDataConverters.cpp */, + 84F1E7B310403614006A1807 /* juce_AudioDataConverters.h */, + 84F1E7B410403614006A1807 /* juce_AudioSampleBuffer.cpp */, + 84F1E7B510403614006A1807 /* juce_AudioSampleBuffer.h */, + 84F1E7B610403614006A1807 /* juce_IIRFilter.cpp */, + 84F1E7B710403614006A1807 /* juce_IIRFilter.h */, ); - name = gui; - path = ../../src/juce_appframework/gui; + name = dsp; + path = ../../src/audio/dsp; sourceTree = SOURCE_ROOT; }; - 84A4887A08A22E4900752A2B /* components */ = { + 84F1E7B810403614006A1807 /* midi */ = { isa = PBXGroup; children = ( - 84A4887B08A22E4900752A2B /* buttons */, - 84A4888C08A22E4900752A2B /* controls */, - 84FC319709B74A1000B75141 /* filebrowser */, - 84A488A608A22E4900752A2B /* keyboard */, - 84A488B108A22E4900752A2B /* layout */, - 84A488C508A22E4900752A2B /* lookandfeel */, - 84A488CA08A22E4900752A2B /* menus */, - 84A488D108A22E4900752A2B /* mouse */, - 842F9D560A19C9AF00B1358D /* properties */, - 84A488DF08A22E4900752A2B /* special */, - 84A488EE08A22E4900752A2B /* windows */, - 84A4889F08A22E4900752A2B /* juce_Component.cpp */, - 84A488A008A22E4900752A2B /* juce_Component.h */, - 84A488A108A22E4900752A2B /* juce_ComponentDeletionWatcher.h */, - 84A488A208A22E4900752A2B /* juce_ComponentListener.cpp */, - 84A488A308A22E4900752A2B /* juce_ComponentListener.h */, - 84A488A408A22E4900752A2B /* juce_Desktop.cpp */, - 84A488A508A22E4900752A2B /* juce_Desktop.h */, + 84F1E7B910403614006A1807 /* juce_MidiBuffer.cpp */, + 84F1E7BA10403614006A1807 /* juce_MidiBuffer.h */, + 84F1E7BB10403614006A1807 /* juce_MidiFile.cpp */, + 84F1E7BC10403614006A1807 /* juce_MidiFile.h */, + 84F1E7BD10403614006A1807 /* juce_MidiKeyboardState.cpp */, + 84F1E7BE10403614006A1807 /* juce_MidiKeyboardState.h */, + 84F1E7BF10403614006A1807 /* juce_MidiMessage.cpp */, + 84F1E7C010403614006A1807 /* juce_MidiMessage.h */, + 84F1E7C110403614006A1807 /* juce_MidiMessageCollector.cpp */, + 84F1E7C210403614006A1807 /* juce_MidiMessageCollector.h */, + 84F1E7C310403614006A1807 /* juce_MidiMessageSequence.cpp */, + 84F1E7C410403614006A1807 /* juce_MidiMessageSequence.h */, ); - name = components; - path = ../../src/juce_appframework/gui/components; + name = midi; + path = ../../src/audio/midi; sourceTree = SOURCE_ROOT; }; - 84A4887B08A22E4900752A2B /* buttons */ = { + 84F1E7C510403614006A1807 /* plugins */ = { isa = PBXGroup; children = ( - 84A4887C08A22E4900752A2B /* juce_ArrowButton.cpp */, - 84A4887D08A22E4900752A2B /* juce_ArrowButton.h */, - 84A4887E08A22E4900752A2B /* juce_Button.cpp */, - 84A4887F08A22E4900752A2B /* juce_Button.h */, - 84A4888008A22E4900752A2B /* juce_DrawableButton.cpp */, - 84A4888108A22E4900752A2B /* juce_DrawableButton.h */, - 84A4888208A22E4900752A2B /* juce_HyperlinkButton.cpp */, - 84A4888308A22E4900752A2B /* juce_HyperlinkButton.h */, - 84A4888408A22E4900752A2B /* juce_ImageButton.cpp */, - 84A4888508A22E4900752A2B /* juce_ImageButton.h */, - 84A4888608A22E4900752A2B /* juce_ShapeButton.cpp */, - 84A4888708A22E4900752A2B /* juce_ShapeButton.h */, - 84A4888808A22E4900752A2B /* juce_TextButton.cpp */, - 84A4888908A22E4900752A2B /* juce_TextButton.h */, - 84A4888A08A22E4900752A2B /* juce_ToggleButton.cpp */, - 84A4888B08A22E4900752A2B /* juce_ToggleButton.h */, - 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */, - 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */, + 84F1E7C610403614006A1807 /* juce_AudioPluginFormat.cpp */, + 84F1E7C710403614006A1807 /* juce_AudioPluginFormat.h */, + 84F1E7C810403614006A1807 /* juce_AudioPluginFormatManager.cpp */, + 84F1E7C910403614006A1807 /* juce_AudioPluginFormatManager.h */, + 84F1E7CA10403614006A1807 /* juce_AudioPluginInstance.cpp */, + 84F1E7CB10403614006A1807 /* juce_AudioPluginInstance.h */, + 84F1E7CC10403614006A1807 /* juce_KnownPluginList.cpp */, + 84F1E7CD10403614006A1807 /* juce_KnownPluginList.h */, + 84F1E7CE10403614006A1807 /* juce_PluginDescription.cpp */, + 84F1E7CF10403614006A1807 /* juce_PluginDescription.h */, + 84F1E7D010403614006A1807 /* juce_PluginDirectoryScanner.cpp */, + 84F1E7D110403614006A1807 /* juce_PluginDirectoryScanner.h */, + 84F1E7D210403614006A1807 /* juce_PluginListComponent.cpp */, + 84F1E7D310403614006A1807 /* juce_PluginListComponent.h */, + 84F1E7D410403614006A1807 /* formats */, ); - name = buttons; - path = ../../src/juce_appframework/gui/components/buttons; + name = plugins; + path = ../../src/audio/plugins; sourceTree = SOURCE_ROOT; }; - 84A4888C08A22E4900752A2B /* controls */ = { + 84F1E7D410403614006A1807 /* formats */ = { isa = PBXGroup; children = ( - 84A4888D08A22E4900752A2B /* juce_ComboBox.cpp */, - 84A4888E08A22E4900752A2B /* juce_ComboBox.h */, - 84A4889108A22E4900752A2B /* juce_Label.cpp */, - 84A4889208A22E4900752A2B /* juce_Label.h */, - 84A4889308A22E4900752A2B /* juce_ListBox.cpp */, - 84A4889408A22E4900752A2B /* juce_ListBox.h */, - 84A4889508A22E4900752A2B /* juce_ProgressBar.cpp */, - 84A4889608A22E4900752A2B /* juce_ProgressBar.h */, - 84A4889908A22E4900752A2B /* juce_Slider.cpp */, - 84A4889A08A22E4900752A2B /* juce_Slider.h */, - 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */, - 8417EE4F0A6E7A270058E04E /* juce_TableHeaderComponent.cpp */, - 8417EE500A6E7A270058E04E /* juce_TableHeaderComponent.h */, - 8417EE510A6E7A280058E04E /* juce_TableListBox.cpp */, - 8417EE520A6E7A280058E04E /* juce_TableListBox.h */, - 84A4889B08A22E4900752A2B /* juce_TextEditor.cpp */, - 84A4889C08A22E4900752A2B /* juce_TextEditor.h */, - 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */, - 84F7A7B20A8383C200D36246 /* juce_Toolbar.h */, - 84F7A7B30A8383C200D36246 /* juce_ToolbarItemComponent.cpp */, - 84F7A7B40A8383C200D36246 /* juce_ToolbarItemComponent.h */, - 84F7A7B50A8383C200D36246 /* juce_ToolbarItemFactory.h */, - 84F7A7B60A8383C200D36246 /* juce_ToolbarItemPalette.cpp */, - 84F7A7B70A8383C200D36246 /* juce_ToolbarItemPalette.h */, - 84A4889D08A22E4900752A2B /* juce_TreeView.cpp */, - 84A4889E08A22E4900752A2B /* juce_TreeView.h */, + 84F1E7D510403614006A1807 /* juce_AudioUnitPluginFormat.h */, + 84F1E7D810403614006A1807 /* juce_VSTMidiEventList.h */, + 84F1E7D910403614006A1807 /* juce_VSTPluginFormat.h */, + 84F1E7DA10403614006A1807 /* juce_VSTPluginFormat.cpp */, + 84F1E7DB10403614006A1807 /* juce_VSTPluginFormat.mm */, + 84F1E7DC10403614006A1807 /* juce_AudioUnitPluginFormat.mm */, ); - name = controls; - path = ../../src/juce_appframework/gui/components/controls; + name = formats; + path = ../../src/audio/plugins/formats; sourceTree = SOURCE_ROOT; }; - 84A488A608A22E4900752A2B /* keyboard */ = { + 84F1E7DD10403615006A1807 /* processors */ = { isa = PBXGroup; children = ( - 84F1F0670A36CF45008CCC5E /* juce_KeyboardFocusTraverser.cpp */, - 84F1F0680A36CF45008CCC5E /* juce_KeyboardFocusTraverser.h */, - 84A488A708A22E4900752A2B /* juce_KeyListener.cpp */, - 84A488A808A22E4900752A2B /* juce_KeyListener.h */, - 84A488A908A22E4900752A2B /* juce_KeyMappingEditorComponent.cpp */, - 84A488AA08A22E4900752A2B /* juce_KeyMappingEditorComponent.h */, - 84A488AB08A22E4900752A2B /* juce_KeyPress.cpp */, - 84A488AC08A22E4900752A2B /* juce_KeyPress.h */, - 84A488AD08A22E4900752A2B /* juce_KeyPressMappingSet.cpp */, - 84A488AE08A22E4900752A2B /* juce_KeyPressMappingSet.h */, - 84A488AF08A22E4900752A2B /* juce_ModifierKeys.cpp */, - 84A488B008A22E4900752A2B /* juce_ModifierKeys.h */, + 84F1E7DE10403615006A1807 /* juce_AudioPlayHead.h */, + 84F1E7DF10403615006A1807 /* juce_AudioProcessor.cpp */, + 84F1E7E010403615006A1807 /* juce_AudioProcessor.h */, + 84F1E7E110403615006A1807 /* juce_AudioProcessorEditor.cpp */, + 84F1E7E210403615006A1807 /* juce_AudioProcessorEditor.h */, + 84F1E7E310403615006A1807 /* juce_AudioProcessorGraph.cpp */, + 84F1E7E410403615006A1807 /* juce_AudioProcessorGraph.h */, + 84F1E7E510403615006A1807 /* juce_AudioProcessorListener.h */, + 84F1E7E610403615006A1807 /* juce_AudioProcessorPlayer.cpp */, + 84F1E7E710403615006A1807 /* juce_AudioProcessorPlayer.h */, + 84F1E7E810403615006A1807 /* juce_GenericAudioProcessorEditor.cpp */, + 84F1E7E910403615006A1807 /* juce_GenericAudioProcessorEditor.h */, ); - name = keyboard; - path = ../../src/juce_appframework/gui/components/keyboard; + name = processors; + path = ../../src/audio/processors; sourceTree = SOURCE_ROOT; }; - 84A488B108A22E4900752A2B /* layout */ = { + 84F1E7EA10403615006A1807 /* synthesisers */ = { isa = PBXGroup; children = ( - 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */, - 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */, - 84F46B7C098685BD0079F3FA /* juce_ComponentBoundsConstrainer.cpp */, - 84F46B7D098685BD0079F3FA /* juce_ComponentBoundsConstrainer.h */, - 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */, - 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */, - 84A488B208A22E4900752A2B /* juce_GroupComponent.cpp */, - 84A488B308A22E4900752A2B /* juce_GroupComponent.h */, - 84F555280A2235E100A8311C /* juce_MultiDocumentPanel.cpp */, - 84F555290A2235E100A8311C /* juce_MultiDocumentPanel.h */, - 84A488B508A22E4900752A2B /* juce_ResizableBorderComponent.cpp */, - 84A488B608A22E4900752A2B /* juce_ResizableBorderComponent.h */, - 84A488B708A22E4900752A2B /* juce_ResizableCornerComponent.cpp */, - 84A488B808A22E4900752A2B /* juce_ResizableCornerComponent.h */, - 84A488B908A22E4900752A2B /* juce_ScrollBar.cpp */, - 84A488BA08A22E4900752A2B /* juce_ScrollBar.h */, - 84A488BB08A22E4900752A2B /* juce_StretchableLayoutManager.cpp */, - 84A488BC08A22E4900752A2B /* juce_StretchableLayoutManager.h */, - 84A488BD08A22E4900752A2B /* juce_StretchableLayoutResizerBar.cpp */, - 84A488BE08A22E4900752A2B /* juce_StretchableLayoutResizerBar.h */, - 8417EE570A6E7A370058E04E /* juce_StretchableObjectResizer.cpp */, - 8417EE580A6E7A370058E04E /* juce_StretchableObjectResizer.h */, - 84A488BF08A22E4900752A2B /* juce_TabbedButtonBar.cpp */, - 84A488C008A22E4900752A2B /* juce_TabbedButtonBar.h */, - 84A488C108A22E4900752A2B /* juce_TabbedComponent.cpp */, - 84A488C208A22E4900752A2B /* juce_TabbedComponent.h */, - 84A488C308A22E4900752A2B /* juce_Viewport.cpp */, - 84A488C408A22E4900752A2B /* juce_Viewport.h */, + 84F1E7EB10403615006A1807 /* juce_Sampler.cpp */, + 84F1E7EC10403615006A1807 /* juce_Sampler.h */, + 84F1E7ED10403615006A1807 /* juce_Synthesiser.cpp */, + 84F1E7EE10403615006A1807 /* juce_Synthesiser.h */, ); - name = layout; - path = ../../src/juce_appframework/gui/components/layout; + name = synthesisers; + path = ../../src/audio/synthesisers; sourceTree = SOURCE_ROOT; }; - 84A488C508A22E4900752A2B /* lookandfeel */ = { + 84F1E8CF10403671006A1807 /* containers */ = { isa = PBXGroup; children = ( - 84A488C608A22E4900752A2B /* juce_LookAndFeel.cpp */, - 84A488C708A22E4900752A2B /* juce_LookAndFeel.h */, - 84A488C808A22E4900752A2B /* juce_OldSchoolLookAndFeel.cpp */, - 84A488C908A22E4900752A2B /* juce_OldSchoolLookAndFeel.h */, - ); - name = lookandfeel; - path = ../../src/juce_appframework/gui/components/lookandfeel; - sourceTree = SOURCE_ROOT; - }; - 84A488CA08A22E4900752A2B /* menus */ = { - isa = PBXGroup; - children = ( - 84A488CB08A22E4900752A2B /* juce_MenuBarComponent.cpp */, - 84A488CC08A22E4900752A2B /* juce_MenuBarComponent.h */, - 842D3D0D0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp */, - 84A488CD08A22E4900752A2B /* juce_MenuBarModel.h */, - 84A488CE08A22E4900752A2B /* juce_PopupMenu.cpp */, - 84A488CF08A22E4900752A2B /* juce_PopupMenu.h */, - 84A488D008A22E4900752A2B /* juce_PopupMenuCustomComponent.h */, - ); - name = menus; - path = ../../src/juce_appframework/gui/components/menus; - sourceTree = SOURCE_ROOT; - }; - 84A488D108A22E4900752A2B /* mouse */ = { - isa = PBXGroup; - children = ( - 84A488D208A22E4900752A2B /* juce_ComponentDragger.cpp */, - 84A488D308A22E4900752A2B /* juce_ComponentDragger.h */, - 84A488D408A22E4900752A2B /* juce_DragAndDropContainer.cpp */, - 84A488D508A22E4900752A2B /* juce_DragAndDropContainer.h */, - 84A488D608A22E4900752A2B /* juce_DragAndDropTarget.h */, - 84FED3C80CAA96DA00003997 /* juce_FileDragAndDropTarget.h */, - 84F593B009855693008153BA /* juce_LassoComponent.h */, - 84A488D708A22E4900752A2B /* juce_MouseCursor.cpp */, - 84A488D808A22E4900752A2B /* juce_MouseCursor.h */, - 84A488D908A22E4900752A2B /* juce_MouseEvent.cpp */, - 84A488DA08A22E4900752A2B /* juce_MouseEvent.h */, - 84A488DB08A22E4900752A2B /* juce_MouseHoverDetector.cpp */, - 84A488DC08A22E4900752A2B /* juce_MouseHoverDetector.h */, - 84A488DD08A22E4900752A2B /* juce_MouseListener.cpp */, - 84A488DE08A22E4900752A2B /* juce_MouseListener.h */, - 84F589940A01491F00B80939 /* juce_TooltipClient.h */, - ); - name = mouse; - path = ../../src/juce_appframework/gui/components/mouse; - sourceTree = SOURCE_ROOT; - }; - 84A488DF08A22E4900752A2B /* special */ = { - isa = PBXGroup; - children = ( - 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */, - 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */, - 84A488E008A22E4900752A2B /* juce_BubbleComponent.cpp */, - 84A488E108A22E4900752A2B /* juce_BubbleComponent.h */, - 84A488E208A22E4900752A2B /* juce_BubbleMessageComponent.cpp */, - 84A488E308A22E4900752A2B /* juce_BubbleMessageComponent.h */, - 84A488E408A22E4900752A2B /* juce_ColourSelector.cpp */, - 84A488E508A22E4900752A2B /* juce_ColourSelector.h */, - 84A488E608A22E4900752A2B /* juce_DropShadower.cpp */, - 84A488E708A22E4900752A2B /* juce_DropShadower.h */, - 84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */, - 84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */, - 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */, - 84F1B8D909499F1400AD8EDE /* juce_MidiKeyboardComponent.h */, - 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */, - 84A488E808A22E4900752A2B /* juce_OpenGLComponent.cpp */, - 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */, - 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */, - 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */, - 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */, - 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */, - ); - name = special; - path = ../../src/juce_appframework/gui/components/special; - sourceTree = SOURCE_ROOT; - }; - 84A488EE08A22E4900752A2B /* windows */ = { - isa = PBXGroup; - children = ( - 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */, - 84A488F008A22E4900752A2B /* juce_AlertWindow.h */, - 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */, - 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */, - 84A488F108A22E4900752A2B /* juce_DialogWindow.cpp */, - 84A488F208A22E4900752A2B /* juce_DialogWindow.h */, - 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */, - 84F593AD09855679008153BA /* juce_DocumentWindow.h */, - 84A488F708A22E4900752A2B /* juce_ResizableWindow.cpp */, - 84A488F808A22E4900752A2B /* juce_ResizableWindow.h */, - 84A488F908A22E4900752A2B /* juce_SplashScreen.cpp */, - 84A488FA08A22E4900752A2B /* juce_SplashScreen.h */, - 84A488FB08A22E4900752A2B /* juce_ThreadWithProgressWindow.cpp */, - 84A488FC08A22E4900752A2B /* juce_ThreadWithProgressWindow.h */, - 84A488FD08A22E4900752A2B /* juce_TooltipWindow.cpp */, - 84A488FE08A22E4900752A2B /* juce_TooltipWindow.h */, - 8463D5CE098BD30600F9AEC2 /* juce_TopLevelWindow.cpp */, - 8463D5CF098BD30600F9AEC2 /* juce_TopLevelWindow.h */, - ); - name = windows; - path = ../../src/juce_appframework/gui/components/windows; - sourceTree = SOURCE_ROOT; - }; - 84A488FF08A22E4900752A2B /* graphics */ = { - isa = PBXGroup; - children = ( - 84A4890008A22E4900752A2B /* brushes */, - 84A4890908A22E4900752A2B /* colour */, - 84A4891108A22E4900752A2B /* contexts */, - 84A4891808A22E4900752A2B /* drawables */, - 84A4892308A22E4A00752A2B /* effects */, - 84A4892B08A22E4A00752A2B /* fonts */, - 84A4893408A22E4A00752A2B /* geometry */, - 84A4894508A22E4A00752A2B /* imaging */, - ); - name = graphics; - path = ../../src/juce_appframework/gui/graphics; - sourceTree = SOURCE_ROOT; - }; - 84A4890008A22E4900752A2B /* brushes */ = { - isa = PBXGroup; - children = ( - 84A4890108A22E4900752A2B /* juce_Brush.cpp */, - 84A4890208A22E4900752A2B /* juce_Brush.h */, - 84A4890308A22E4900752A2B /* juce_GradientBrush.cpp */, - 84A4890408A22E4900752A2B /* juce_GradientBrush.h */, - 84A4890508A22E4900752A2B /* juce_ImageBrush.cpp */, - 84A4890608A22E4900752A2B /* juce_ImageBrush.h */, - 84A4890708A22E4900752A2B /* juce_SolidColourBrush.cpp */, - 84A4890808A22E4900752A2B /* juce_SolidColourBrush.h */, - ); - name = brushes; - path = ../../src/juce_appframework/gui/graphics/brushes; - sourceTree = SOURCE_ROOT; - }; - 84A4890908A22E4900752A2B /* colour */ = { - isa = PBXGroup; - children = ( - 84A4890A08A22E4900752A2B /* juce_Colour.cpp */, - 84A4890B08A22E4900752A2B /* juce_Colour.h */, - 84A4890C08A22E4900752A2B /* juce_ColourGradient.cpp */, - 84A4890D08A22E4900752A2B /* juce_ColourGradient.h */, - 84A4890E08A22E4900752A2B /* juce_Colours.cpp */, - 84A4890F08A22E4900752A2B /* juce_Colours.h */, - 84A4891008A22E4900752A2B /* juce_PixelFormats.h */, - ); - name = colour; - path = ../../src/juce_appframework/gui/graphics/colour; - sourceTree = SOURCE_ROOT; - }; - 84A4891108A22E4900752A2B /* contexts */ = { - isa = PBXGroup; - children = ( - 84A4891208A22E4900752A2B /* juce_EdgeTable.cpp */, - 84A4891308A22E4900752A2B /* juce_EdgeTable.h */, - 84A4891408A22E4900752A2B /* juce_Graphics.cpp */, - 84A4891508A22E4900752A2B /* juce_Graphics.h */, - 84A4891608A22E4900752A2B /* juce_Justification.cpp */, - 84A4891708A22E4900752A2B /* juce_Justification.h */, - 8406C44309642CE100C99145 /* juce_LowLevelGraphicsContext.h */, - 8407908D09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.cpp */, - 8407908E09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.h */, - 8406C44409642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */, - 8406C44509642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.h */, - 846927DC0A49ABE600314975 /* juce_RectanglePlacement.cpp */, - 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */, - ); - name = contexts; - path = ../../src/juce_appframework/gui/graphics/contexts; - sourceTree = SOURCE_ROOT; - }; - 84A4891808A22E4900752A2B /* drawables */ = { - isa = PBXGroup; - children = ( - 84A4891908A22E4900752A2B /* juce_Drawable.cpp */, - 84A4891A08A22E4900752A2B /* juce_Drawable.h */, - 84A4891B08A22E4A00752A2B /* juce_DrawableComposite.cpp */, - 84A4891C08A22E4A00752A2B /* juce_DrawableComposite.h */, - 84A4891D08A22E4A00752A2B /* juce_DrawableImage.cpp */, - 84A4891E08A22E4A00752A2B /* juce_DrawableImage.h */, - 84A4891F08A22E4A00752A2B /* juce_DrawablePath.cpp */, - 84A4892008A22E4A00752A2B /* juce_DrawablePath.h */, - 84A4892108A22E4A00752A2B /* juce_DrawableText.cpp */, - 84A4892208A22E4A00752A2B /* juce_DrawableText.h */, - 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */, - ); - name = drawables; - path = ../../src/juce_appframework/gui/graphics/drawables; - sourceTree = SOURCE_ROOT; - }; - 84A4892308A22E4A00752A2B /* effects */ = { - isa = PBXGroup; - children = ( - 84A4892408A22E4A00752A2B /* juce_DropShadowEffect.cpp */, - 84A4892508A22E4A00752A2B /* juce_DropShadowEffect.h */, - 84A4892608A22E4A00752A2B /* juce_GlowEffect.cpp */, - 84A4892708A22E4A00752A2B /* juce_GlowEffect.h */, - 84A4892808A22E4A00752A2B /* juce_ImageEffectFilter.h */, - 84A4892908A22E4A00752A2B /* juce_ReduceOpacityEffect.cpp */, - 84A4892A08A22E4A00752A2B /* juce_ReduceOpacityEffect.h */, - ); - name = effects; - path = ../../src/juce_appframework/gui/graphics/effects; - sourceTree = SOURCE_ROOT; - }; - 84A4892B08A22E4A00752A2B /* fonts */ = { - isa = PBXGroup; - children = ( - 84A4892C08A22E4A00752A2B /* juce_Font.cpp */, - 84A4892D08A22E4A00752A2B /* juce_Font.h */, - 84A4892E08A22E4A00752A2B /* juce_GlyphArrangement.cpp */, - 84A4892F08A22E4A00752A2B /* juce_GlyphArrangement.h */, - 84A4893008A22E4A00752A2B /* juce_TextLayout.cpp */, - 84A4893108A22E4A00752A2B /* juce_TextLayout.h */, - 84A4893208A22E4A00752A2B /* juce_Typeface.cpp */, - 84A4893308A22E4A00752A2B /* juce_Typeface.h */, - ); - name = fonts; - path = ../../src/juce_appframework/gui/graphics/fonts; - sourceTree = SOURCE_ROOT; - }; - 84A4893408A22E4A00752A2B /* geometry */ = { - isa = PBXGroup; - children = ( - 84FC31BC09B74A7700B75141 /* juce_BorderSize.cpp */, - 84FC31BD09B74A7700B75141 /* juce_BorderSize.h */, - 84A4893508A22E4A00752A2B /* juce_AffineTransform.cpp */, - 84A4893608A22E4A00752A2B /* juce_AffineTransform.h */, - 84A4893708A22E4A00752A2B /* juce_Line.cpp */, - 84A4893808A22E4A00752A2B /* juce_Line.h */, - 84A4893908A22E4A00752A2B /* juce_Path.cpp */, - 84A4893A08A22E4A00752A2B /* juce_Path.h */, - 84A4893B08A22E4A00752A2B /* juce_PathIterator.cpp */, - 84A4893C08A22E4A00752A2B /* juce_PathIterator.h */, - 84A4893D08A22E4A00752A2B /* juce_PathStrokeType.cpp */, - 84A4893E08A22E4A00752A2B /* juce_PathStrokeType.h */, - 84A4893F08A22E4A00752A2B /* juce_Point.cpp */, - 84A4894008A22E4A00752A2B /* juce_Point.h */, - 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */, - 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */, - 84A4894108A22E4A00752A2B /* juce_Rectangle.cpp */, - 84A4894208A22E4A00752A2B /* juce_Rectangle.h */, - 84A4894308A22E4A00752A2B /* juce_RectangleList.cpp */, - 84A4894408A22E4A00752A2B /* juce_RectangleList.h */, - ); - name = geometry; - path = ../../src/juce_appframework/gui/graphics/geometry; - sourceTree = SOURCE_ROOT; - }; - 84A4894508A22E4A00752A2B /* imaging */ = { - isa = PBXGroup; - children = ( - 84A4894608A22E4A00752A2B /* image_file_formats */, - 84EE01040FF235750093FACA /* juce_CameraDevice.h */, - 84A4898608A22E4A00752A2B /* juce_Image.cpp */, - 84A4898708A22E4A00752A2B /* juce_Image.h */, - 84A4898808A22E4A00752A2B /* juce_ImageCache.cpp */, - 84A4898908A22E4A00752A2B /* juce_ImageCache.h */, - 84A4898A08A22E4A00752A2B /* juce_ImageConvolutionKernel.cpp */, - 84A4898B08A22E4A00752A2B /* juce_ImageConvolutionKernel.h */, - 84A4898C08A22E4A00752A2B /* juce_ImageFileFormat.cpp */, - 84A4898D08A22E4A00752A2B /* juce_ImageFileFormat.h */, - ); - name = imaging; - path = ../../src/juce_appframework/gui/graphics/imaging; - sourceTree = SOURCE_ROOT; - }; - 84A4894608A22E4A00752A2B /* image_file_formats */ = { - isa = PBXGroup; - children = ( - 84A4897208A22E4A00752A2B /* juce_GIFLoader.cpp */, - 84A4897308A22E4A00752A2B /* juce_GIFLoader.h */, - 84A4897408A22E4A00752A2B /* juce_JPEGLoader.cpp */, - 84A4897508A22E4A00752A2B /* juce_PNGLoader.cpp */, - ); - name = image_file_formats; - path = ../../src/juce_appframework/gui/graphics/imaging/image_file_formats; - sourceTree = SOURCE_ROOT; - }; - 84A4899708A22E4A00752A2B /* juce_core */ = { - isa = PBXGroup; - children = ( - 84A4899808A22E4A00752A2B /* basics */, - 84A489AD08A22E4A00752A2B /* containers */, - 84A489BD08A22E4A00752A2B /* cryptography */, - 84A489C608A22E4A00752A2B /* io */, - 84A489FF08A22E4A00752A2B /* misc */, - 84A48A0708A22E4A00752A2B /* text */, - 84A48A1508A22E4A00752A2B /* threads */, - ); - name = juce_core; - path = ../../src/juce_core; - sourceTree = SOURCE_ROOT; - }; - 84A4899808A22E4A00752A2B /* basics */ = { - isa = PBXGroup; - children = ( - 84A4899908A22E4A00752A2B /* juce_Atomic.h */, - 84A4899A08A22E4A00752A2B /* juce_DataConversions.h */, - 84A4899B08A22E4A00752A2B /* juce_FileLogger.cpp */, - 84A4899C08A22E4A00752A2B /* juce_FileLogger.h */, - 84A4899D08A22E4A00752A2B /* juce_Initialisation.h */, - 84A4899E08A22E4A00752A2B /* juce_Logger.cpp */, - 84A4899F08A22E4A00752A2B /* juce_Logger.h */, - 84A489A008A22E4A00752A2B /* juce_MathsFunctions.h */, - 84A489A108A22E4A00752A2B /* juce_Memory.h */, - 84A489A208A22E4A00752A2B /* juce_PlatformDefs.h */, - 84A489A308A22E4A00752A2B /* juce_Random.cpp */, - 84A489A408A22E4A00752A2B /* juce_Random.h */, - 84A489A508A22E4A00752A2B /* juce_RelativeTime.cpp */, - 84A489A608A22E4A00752A2B /* juce_RelativeTime.h */, - 84A489A708A22E4A00752A2B /* juce_Singleton.h */, - 84A489A808A22E4A00752A2B /* juce_StandardHeader.h */, - 84A489A908A22E4A00752A2B /* juce_SystemStats.cpp */, - 84A489AA08A22E4A00752A2B /* juce_SystemStats.h */, - 84A489AB08A22E4A00752A2B /* juce_Time.cpp */, - 84A489AC08A22E4A00752A2B /* juce_Time.h */, - ); - name = basics; - path = ../../src/juce_core/basics; - sourceTree = SOURCE_ROOT; - }; - 84A489AD08A22E4A00752A2B /* containers */ = { - isa = PBXGroup; - children = ( - 84A489AE08A22E4A00752A2B /* juce_Array.h */, - 84A489AF08A22E4A00752A2B /* juce_ArrayAllocationBase.h */, - 84A489B008A22E4A00752A2B /* juce_BitArray.cpp */, - 84A489B108A22E4A00752A2B /* juce_BitArray.h */, - 84A489B208A22E4A00752A2B /* juce_ElementComparator.h */, - 84A489B308A22E4A00752A2B /* juce_MemoryBlock.cpp */, - 84A489B408A22E4A00752A2B /* juce_MemoryBlock.h */, - 84A489B508A22E4A00752A2B /* juce_OwnedArray.h */, - 84A489B608A22E4A00752A2B /* juce_PropertySet.cpp */, - 84A489B708A22E4A00752A2B /* juce_PropertySet.h */, - 84A489B808A22E4A00752A2B /* juce_ReferenceCountedArray.h */, - 84A489B908A22E4A00752A2B /* juce_ReferenceCountedObject.h */, - 84A489BA08A22E4A00752A2B /* juce_SortedSet.h */, - 84A489BB08A22E4A00752A2B /* juce_SparseSet.h */, - 849C0A9D0F98AF62001C1494 /* juce_Variant.cpp */, - 849C0A9C0F98AF62001C1494 /* juce_Variant.h */, - 84A489BC08A22E4A00752A2B /* juce_VoidArray.h */, + 84F1E8D010403671006A1807 /* juce_Array.h */, + 84F1E8D110403671006A1807 /* juce_ArrayAllocationBase.h */, + 84F1E8D210403671006A1807 /* juce_BitArray.cpp */, + 84F1E8D310403671006A1807 /* juce_BitArray.h */, + 84F1E8D410403671006A1807 /* juce_ElementComparator.h */, + 84F1E8D510403671006A1807 /* juce_MemoryBlock.cpp */, + 84F1E8D610403671006A1807 /* juce_MemoryBlock.h */, + 84F1E8D710403671006A1807 /* juce_OwnedArray.h */, + 84F1E8D810403671006A1807 /* juce_PropertySet.cpp */, + 84F1E8D910403671006A1807 /* juce_PropertySet.h */, + 84F1E8DA10403671006A1807 /* juce_ReferenceCountedArray.h */, + 84F1E8DB10403671006A1807 /* juce_ReferenceCountedObject.h */, + 84F1E8DC10403671006A1807 /* juce_SortedSet.h */, + 84F1E8DD10403671006A1807 /* juce_SparseSet.h */, + 84F1E8DE10403671006A1807 /* juce_Variant.cpp */, + 84F1E8DF10403671006A1807 /* juce_Variant.h */, + 84F1E8E010403671006A1807 /* juce_VoidArray.h */, ); name = containers; - path = ../../src/juce_core/containers; + path = ../../src/containers; sourceTree = SOURCE_ROOT; }; - 84A489BD08A22E4A00752A2B /* cryptography */ = { + 84F1E8F210403681006A1807 /* core */ = { isa = PBXGroup; children = ( - 84A489BE08A22E4A00752A2B /* juce_BlowFish.cpp */, - 84A489BF08A22E4A00752A2B /* juce_BlowFish.h */, - 84A489C008A22E4A00752A2B /* juce_MD5.cpp */, - 84A489C108A22E4A00752A2B /* juce_MD5.h */, - 84A489C208A22E4A00752A2B /* juce_Primes.cpp */, - 84A489C308A22E4A00752A2B /* juce_Primes.h */, - 84A489C408A22E4A00752A2B /* juce_RSAKey.cpp */, - 84A489C508A22E4A00752A2B /* juce_RSAKey.h */, + 84F1E8F310403681006A1807 /* juce_Time.h */, + 84F1E8F410403681006A1807 /* juce_Time.cpp */, + 84F1E8F510403681006A1807 /* juce_SystemStats.cpp */, + 84F1E8F610403681006A1807 /* juce_SystemStats.h */, + 84F1E8F710403681006A1807 /* juce_Singleton.h */, + 84F1E8F810403681006A1807 /* juce_RelativeTime.cpp */, + 84F1E8F910403681006A1807 /* juce_RelativeTime.h */, + 84F1E8FA10403681006A1807 /* juce_PlatformDefs.h */, + 84F1E8FB10403681006A1807 /* juce_Random.cpp */, + 84F1E8FC10403681006A1807 /* juce_Random.h */, + 84F1E8FD10403681006A1807 /* juce_MathsFunctions.h */, + 84F1E8FE10403681006A1807 /* juce_Memory.h */, + 84F1E8FF10403681006A1807 /* juce_Logger.h */, + 84F1E90010403681006A1807 /* juce_Logger.cpp */, + 84F1E90110403681006A1807 /* juce_Initialisation.h */, + 84F1E90210403681006A1807 /* juce_FileLogger.h */, + 84F1E90310403681006A1807 /* juce_FileLogger.cpp */, + 84F1E90410403681006A1807 /* juce_DataConversions.h */, + 84F1E90510403681006A1807 /* juce_Atomic.h */, + 84F1E90610403681006A1807 /* juce_Uuid.cpp */, + 84F1E90710403681006A1807 /* juce_Uuid.h */, + 84F1E90810403681006A1807 /* juce_PerformanceCounter.cpp */, + 84F1E90910403681006A1807 /* juce_PerformanceCounter.h */, + 84F1E90A10403681006A1807 /* juce_PlatformUtilities.h */, + 84F1E90B10403681006A1807 /* juce_StandardHeader.h */, + ); + name = core; + path = ../../src/core; + sourceTree = SOURCE_ROOT; + }; + 84F1E9251040369C006A1807 /* utilities */ = { + isa = PBXGroup; + children = ( + 84F1E9261040369C006A1807 /* juce_UndoManager.h */, + 84F1E9271040369C006A1807 /* juce_SystemClipboard.h */, + 84F1E9281040369C006A1807 /* juce_UndoManager.cpp */, + 84F1E9291040369C006A1807 /* juce_PropertiesFile.h */, + 84F1E92A1040369C006A1807 /* juce_UndoableAction.h */, + 84F1E92B1040369C006A1807 /* juce_SelectedItemSet.h */, + 84F1E92C1040369C006A1807 /* juce_DeletedAtShutdown.h */, + 84F1E92D1040369C006A1807 /* juce_PropertiesFile.cpp */, + 84F1E92E1040369C006A1807 /* juce_RecentlyOpenedFilesList.h */, + 84F1E92F1040369C006A1807 /* juce_FileBasedDocument.h */, + 84F1E9301040369C006A1807 /* juce_RecentlyOpenedFilesList.cpp */, + 84F1E9311040369C006A1807 /* juce_FileBasedDocument.cpp */, + 84F1E9321040369C006A1807 /* juce_DeletedAtShutdown.cpp */, + ); + name = utilities; + path = ../../src/utilities; + sourceTree = SOURCE_ROOT; + }; + 84F1E940104036B3006A1807 /* cryptography */ = { + isa = PBXGroup; + children = ( + 84F1E941104036B3006A1807 /* juce_BlowFish.cpp */, + 84F1E942104036B3006A1807 /* juce_BlowFish.h */, + 84F1E943104036B3006A1807 /* juce_MD5.cpp */, + 84F1E944104036B3006A1807 /* juce_MD5.h */, + 84F1E945104036B3006A1807 /* juce_Primes.cpp */, + 84F1E946104036B3006A1807 /* juce_Primes.h */, + 84F1E947104036B3006A1807 /* juce_RSAKey.cpp */, + 84F1E948104036B3006A1807 /* juce_RSAKey.h */, ); name = cryptography; - path = ../../src/juce_core/cryptography; + path = ../../src/cryptography; sourceTree = SOURCE_ROOT; }; - 84A489C608A22E4A00752A2B /* io */ = { + 84F1E949104036B3006A1807 /* events */ = { isa = PBXGroup; children = ( - 84A489C708A22E4A00752A2B /* files */, - 84A489D208A22E4A00752A2B /* juce_InputStream.cpp */, - 84A489D308A22E4A00752A2B /* juce_InputStream.h */, - 84A489D408A22E4A00752A2B /* juce_OutputStream.cpp */, - 84A489D508A22E4A00752A2B /* juce_OutputStream.h */, - 84A489D608A22E4A00752A2B /* network */, - 84A489D908A22E4A00752A2B /* streams */, + 84F1E94A104036B3006A1807 /* juce_ActionBroadcaster.cpp */, + 84F1E94B104036B3006A1807 /* juce_ActionBroadcaster.h */, + 84F1E94C104036B3006A1807 /* juce_ActionListener.h */, + 84F1E94D104036B3006A1807 /* juce_ActionListenerList.cpp */, + 84F1E94E104036B3006A1807 /* juce_ActionListenerList.h */, + 84F1E94F104036B3006A1807 /* juce_AsyncUpdater.cpp */, + 84F1E950104036B3006A1807 /* juce_AsyncUpdater.h */, + 84F1E951104036B3006A1807 /* juce_CallbackMessage.h */, + 84F1E952104036B3006A1807 /* juce_ChangeBroadcaster.cpp */, + 84F1E953104036B3006A1807 /* juce_ChangeBroadcaster.h */, + 84F1E954104036B3006A1807 /* juce_ChangeListener.h */, + 84F1E955104036B3006A1807 /* juce_ChangeListenerList.cpp */, + 84F1E956104036B3006A1807 /* juce_ChangeListenerList.h */, + 84F1E957104036B3006A1807 /* juce_InterprocessConnection.cpp */, + 84F1E958104036B3006A1807 /* juce_InterprocessConnection.h */, + 84F1E959104036B3006A1807 /* juce_InterprocessConnectionServer.cpp */, + 84F1E95A104036B3006A1807 /* juce_InterprocessConnectionServer.h */, + 84F1E95B104036B3006A1807 /* juce_Message.cpp */, + 84F1E95C104036B3006A1807 /* juce_Message.h */, + 84F1E95D104036B3006A1807 /* juce_MessageListener.cpp */, + 84F1E95E104036B3006A1807 /* juce_MessageListener.h */, + 84F1E95F104036B3006A1807 /* juce_MessageManager.cpp */, + 84F1E960104036B3006A1807 /* juce_MessageManager.h */, + 84F1E961104036B3006A1807 /* juce_MultiTimer.cpp */, + 84F1E962104036B3006A1807 /* juce_MultiTimer.h */, + 84F1E963104036B3006A1807 /* juce_Timer.cpp */, + 84F1E964104036B3006A1807 /* juce_Timer.h */, + ); + name = events; + path = ../../src/events; + sourceTree = SOURCE_ROOT; + }; + 84F1E988104036D6006A1807 /* io */ = { + isa = PBXGroup; + children = ( + 84F1E989104036D6006A1807 /* files */, + 84F1E998104036D6006A1807 /* network */, + 84F1E99D104036D6006A1807 /* streams */, ); name = io; - path = ../../src/juce_core/io; + path = ../../src/io; sourceTree = SOURCE_ROOT; }; - 84A489C708A22E4A00752A2B /* files */ = { + 84F1E989104036D6006A1807 /* files */ = { isa = PBXGroup; children = ( - 84A489C808A22E4A00752A2B /* juce_DirectoryIterator.cpp */, - 84A489C908A22E4A00752A2B /* juce_DirectoryIterator.h */, - 84A489CA08A22E4A00752A2B /* juce_File.cpp */, - 84A489CB08A22E4A00752A2B /* juce_File.h */, - 84A489CC08A22E4A00752A2B /* juce_FileInputStream.cpp */, - 84A489CD08A22E4A00752A2B /* juce_FileInputStream.h */, - 84A489CE08A22E4A00752A2B /* juce_FileOutputStream.cpp */, - 84A489CF08A22E4A00752A2B /* juce_FileOutputStream.h */, - 84A489D008A22E4A00752A2B /* juce_FileSearchPath.cpp */, - 84A489D108A22E4A00752A2B /* juce_FileSearchPath.h */, - 84F5598609CACFF700AC5000 /* juce_NamedPipe.cpp */, - 84F5598709CACFF700AC5000 /* juce_NamedPipe.h */, + 84F1E98A104036D6006A1807 /* juce_DirectoryIterator.cpp */, + 84F1E98B104036D6006A1807 /* juce_DirectoryIterator.h */, + 84F1E98C104036D6006A1807 /* juce_File.cpp */, + 84F1E98D104036D6006A1807 /* juce_File.h */, + 84F1E98E104036D6006A1807 /* juce_FileInputStream.cpp */, + 84F1E98F104036D6006A1807 /* juce_FileInputStream.h */, + 84F1E990104036D6006A1807 /* juce_FileOutputStream.cpp */, + 84F1E991104036D6006A1807 /* juce_FileOutputStream.h */, + 84F1E992104036D6006A1807 /* juce_FileSearchPath.cpp */, + 84F1E993104036D6006A1807 /* juce_FileSearchPath.h */, + 84F1E994104036D6006A1807 /* juce_NamedPipe.cpp */, + 84F1E995104036D6006A1807 /* juce_NamedPipe.h */, + 84F1E996104036D6006A1807 /* juce_ZipFile.cpp */, + 84F1E997104036D6006A1807 /* juce_ZipFile.h */, ); name = files; - path = ../../src/juce_core/io/files; + path = ../../src/io/files; sourceTree = SOURCE_ROOT; }; - 84A489D608A22E4A00752A2B /* network */ = { + 84F1E998104036D6006A1807 /* network */ = { isa = PBXGroup; children = ( - 84F5598209CACFDD00AC5000 /* juce_Socket.cpp */, - 84F5598309CACFDD00AC5000 /* juce_Socket.h */, - 84A489D708A22E4A00752A2B /* juce_URL.cpp */, - 84A489D808A22E4A00752A2B /* juce_URL.h */, + 84F1E999104036D6006A1807 /* juce_Socket.cpp */, + 84F1E99A104036D6006A1807 /* juce_Socket.h */, + 84F1E99B104036D6006A1807 /* juce_URL.cpp */, + 84F1E99C104036D6006A1807 /* juce_URL.h */, ); name = network; - path = ../../src/juce_core/io/network; + path = ../../src/io/network; sourceTree = SOURCE_ROOT; }; - 84A489D908A22E4A00752A2B /* streams */ = { + 84F1E99D104036D6006A1807 /* streams */ = { isa = PBXGroup; children = ( - 84A489DA08A22E4A00752A2B /* juce_BufferedInputStream.cpp */, - 84A489DB08A22E4A00752A2B /* juce_BufferedInputStream.h */, - 8495BB910D806BDA001D9C0B /* juce_FileInputSource.cpp */, - 8495BB920D806BDA001D9C0B /* juce_FileInputSource.h */, - 84A489DC08A22E4A00752A2B /* juce_GZIPCompressorOutputStream.cpp */, - 84A489DD08A22E4A00752A2B /* juce_GZIPCompressorOutputStream.h */, - 84A489DE08A22E4A00752A2B /* juce_GZIPDecompressorInputStream.cpp */, - 84A489DF08A22E4A00752A2B /* juce_GZIPDecompressorInputStream.h */, - 8495BB930D806BDA001D9C0B /* juce_InputSource.h */, - 84A489E008A22E4A00752A2B /* juce_MemoryInputStream.cpp */, - 84A489E108A22E4A00752A2B /* juce_MemoryInputStream.h */, - 84A489E208A22E4A00752A2B /* juce_MemoryOutputStream.cpp */, - 84A489E308A22E4A00752A2B /* juce_MemoryOutputStream.h */, - 84A489E408A22E4A00752A2B /* juce_SubregionStream.cpp */, - 84A489E508A22E4A00752A2B /* juce_SubregionStream.h */, + 84F1E99E104036D6006A1807 /* juce_BufferedInputStream.cpp */, + 84F1E99F104036D6006A1807 /* juce_BufferedInputStream.h */, + 84F1E9A0104036D6006A1807 /* juce_FileInputSource.cpp */, + 84F1E9A1104036D6006A1807 /* juce_FileInputSource.h */, + 84F1E9A2104036D6006A1807 /* juce_GZIPCompressorOutputStream.cpp */, + 84F1E9A3104036D6006A1807 /* juce_GZIPCompressorOutputStream.h */, + 84F1E9A4104036D6006A1807 /* juce_GZIPDecompressorInputStream.cpp */, + 84F1E9A5104036D6006A1807 /* juce_GZIPDecompressorInputStream.h */, + 84F1E9A6104036D6006A1807 /* juce_InputSource.h */, + 84F1E9A7104036D6006A1807 /* juce_MemoryInputStream.cpp */, + 84F1E9A8104036D6006A1807 /* juce_MemoryInputStream.h */, + 84F1E9A9104036D6006A1807 /* juce_MemoryOutputStream.cpp */, + 84F1E9AA104036D6006A1807 /* juce_MemoryOutputStream.h */, + 84F1E9AB104036D6006A1807 /* juce_SubregionStream.cpp */, + 84F1E9AC104036D6006A1807 /* juce_SubregionStream.h */, + 84F1E9C5104036D6006A1807 /* juce_InputStream.cpp */, + 84F1E9C6104036D6006A1807 /* juce_InputStream.h */, + 84F1E9C7104036D6006A1807 /* juce_OutputStream.cpp */, + 84F1E9C8104036D6006A1807 /* juce_OutputStream.h */, ); name = streams; - path = ../../src/juce_core/io/streams; + path = ../../src/io/streams; sourceTree = SOURCE_ROOT; }; - 84A489FF08A22E4A00752A2B /* misc */ = { + 84F1E9C9104036D6006A1807 /* text */ = { isa = PBXGroup; children = ( - 84A48A0008A22E4A00752A2B /* juce_PerformanceCounter.cpp */, - 84A48A0108A22E4A00752A2B /* juce_PerformanceCounter.h */, - 84A48A0208A22E4A00752A2B /* juce_PlatformUtilities.h */, - 84A48A0308A22E4A00752A2B /* juce_Uuid.cpp */, - 84A48A0408A22E4A00752A2B /* juce_Uuid.h */, - 84A48A0508A22E4A00752A2B /* juce_ZipFile.cpp */, - 84A48A0608A22E4A00752A2B /* juce_ZipFile.h */, - ); - name = misc; - path = ../../src/juce_core/misc; - sourceTree = SOURCE_ROOT; - }; - 84A48A0708A22E4A00752A2B /* text */ = { - isa = PBXGroup; - children = ( - 846927D80A49ABD300314975 /* juce_CharacterFunctions.cpp */, - 846927D90A49ABD300314975 /* juce_CharacterFunctions.h */, - 84A48A0808A22E4A00752A2B /* juce_LocalisedStrings.cpp */, - 84A48A0908A22E4A00752A2B /* juce_LocalisedStrings.h */, - 84A48A0A08A22E4A00752A2B /* juce_String.cpp */, - 84A48A0B08A22E4A00752A2B /* juce_String.h */, - 84A48A0C08A22E4A00752A2B /* juce_StringArray.cpp */, - 84A48A0D08A22E4A00752A2B /* juce_StringArray.h */, - 84A48A0E08A22E4A00752A2B /* juce_StringPairArray.cpp */, - 84A48A0F08A22E4A00752A2B /* juce_StringPairArray.h */, - 84A48A1108A22E4A00752A2B /* juce_XmlDocument.cpp */, - 84A48A1208A22E4A00752A2B /* juce_XmlDocument.h */, - 84A48A1308A22E4A00752A2B /* juce_XmlElement.cpp */, - 84A48A1408A22E4A00752A2B /* juce_XmlElement.h */, + 84F1E9CA104036D6006A1807 /* juce_CharacterFunctions.cpp */, + 84F1E9CB104036D6006A1807 /* juce_CharacterFunctions.h */, + 84F1E9CC104036D6006A1807 /* juce_LocalisedStrings.cpp */, + 84F1E9CD104036D6006A1807 /* juce_LocalisedStrings.h */, + 84F1E9CE104036D6006A1807 /* juce_String.cpp */, + 84F1E9CF104036D6006A1807 /* juce_String.h */, + 84F1E9D0104036D6006A1807 /* juce_StringArray.cpp */, + 84F1E9D1104036D6006A1807 /* juce_StringArray.h */, + 84F1E9D2104036D6006A1807 /* juce_StringPairArray.cpp */, + 84F1E9D3104036D6006A1807 /* juce_StringPairArray.h */, + 84F1E9D4104036D6006A1807 /* juce_XmlDocument.cpp */, + 84F1E9D5104036D6006A1807 /* juce_XmlDocument.h */, + 84F1E9D6104036D6006A1807 /* juce_XmlElement.cpp */, + 84F1E9D7104036D6006A1807 /* juce_XmlElement.h */, ); name = text; - path = ../../src/juce_core/text; + path = ../../src/text; sourceTree = SOURCE_ROOT; }; - 84A48A1508A22E4A00752A2B /* threads */ = { + 84F1E9D8104036D6006A1807 /* threads */ = { isa = PBXGroup; children = ( - 84A48A1708A22E4A00752A2B /* juce_CriticalSection.h */, - 84A48A1808A22E4A00752A2B /* juce_InterProcessLock.cpp */, - 84A48A1908A22E4A00752A2B /* juce_InterProcessLock.h */, - 84A48A1B08A22E4A00752A2B /* juce_Process.h */, - 84A48A1C08A22E4A00752A2B /* juce_ReadWriteLock.cpp */, - 84A48A1D08A22E4A00752A2B /* juce_ReadWriteLock.h */, - 84A48A1E08A22E4A00752A2B /* juce_ScopedLock.h */, - 84A48A1F08A22E4A00752A2B /* juce_ScopedReadLock.h */, - 84A48A2008A22E4A00752A2B /* juce_ScopedWriteLock.h */, - 84A48A2108A22E4A00752A2B /* juce_Thread.cpp */, - 84A48A2208A22E4A00752A2B /* juce_Thread.h */, - 84A48A2308A22E4A00752A2B /* juce_ThreadPool.cpp */, - 84A48A2408A22E4A00752A2B /* juce_ThreadPool.h */, - 84A48A2508A22E4A00752A2B /* juce_TimeSliceThread.cpp */, - 84A48A2608A22E4A00752A2B /* juce_TimeSliceThread.h */, - 84A48A2708A22E4A00752A2B /* juce_WaitableEvent.h */, + 84F1E9D9104036D6006A1807 /* juce_CriticalSection.h */, + 84F1E9DA104036D6006A1807 /* juce_InterProcessLock.cpp */, + 84F1E9DB104036D6006A1807 /* juce_InterProcessLock.h */, + 84F1E9DC104036D6006A1807 /* juce_Process.h */, + 84F1E9DD104036D6006A1807 /* juce_ReadWriteLock.cpp */, + 84F1E9DE104036D6006A1807 /* juce_ReadWriteLock.h */, + 84F1E9DF104036D6006A1807 /* juce_ScopedLock.h */, + 84F1E9E0104036D6006A1807 /* juce_ScopedReadLock.h */, + 84F1E9E1104036D6006A1807 /* juce_ScopedTryLock.h */, + 84F1E9E2104036D6006A1807 /* juce_ScopedWriteLock.h */, + 84F1E9E3104036D6006A1807 /* juce_Thread.cpp */, + 84F1E9E4104036D6006A1807 /* juce_Thread.h */, + 84F1E9E5104036D6006A1807 /* juce_ThreadPool.cpp */, + 84F1E9E6104036D6006A1807 /* juce_ThreadPool.h */, + 84F1E9E7104036D6006A1807 /* juce_TimeSliceThread.cpp */, + 84F1E9E8104036D6006A1807 /* juce_TimeSliceThread.h */, + 84F1E9E9104036D6006A1807 /* juce_WaitableEvent.h */, ); name = threads; - path = ../../src/juce_core/threads; + path = ../../src/threads; sourceTree = SOURCE_ROOT; }; - 84BC4E200C8DD38C00FA249B /* processors */ = { + 84F1EA4410403708006A1807 /* gui */ = { isa = PBXGroup; children = ( - 84BC4E210C8DD38C00FA249B /* juce_AudioPlayHead.h */, - 84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */, - 84BC4E230C8DD38C00FA249B /* juce_AudioProcessor.h */, - 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */, - 84BC4E240C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp */, - 84BC4E250C8DD38C00FA249B /* juce_AudioProcessorEditor.h */, - 84688AF70DED58820077FDEA /* juce_AudioProcessorGraph.cpp */, - 84688AF80DED58820077FDEA /* juce_AudioProcessorGraph.h */, - 84688AF90DED58820077FDEA /* juce_AudioProcessorPlayer.cpp */, - 84688AFA0DED58820077FDEA /* juce_AudioProcessorPlayer.h */, - 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */, - 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */, + 84F1EA4510403708006A1807 /* components */, + 84F1EB1910403709006A1807 /* graphics */, ); - path = processors; - sourceTree = ""; + name = gui; + path = ../../src/gui; + sourceTree = SOURCE_ROOT; }; - 84FC318609B749E400B75141 /* documents */ = { + 84F1EA4510403708006A1807 /* components */ = { isa = PBXGroup; children = ( - 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */, - 84FC318809B749FD00B75141 /* juce_FileBasedDocument.h */, - 84FC318909B749FD00B75141 /* juce_RecentlyOpenedFilesList.cpp */, - 84FC318A09B749FD00B75141 /* juce_RecentlyOpenedFilesList.h */, - 84FC318B09B749FD00B75141 /* juce_SelectedItemSet.h */, - 84FC318C09B749FD00B75141 /* juce_UndoableAction.h */, - 84FC318D09B749FD00B75141 /* juce_UndoManager.cpp */, - 84FC318E09B749FD00B75141 /* juce_UndoManager.h */, + 84F1EA4610403708006A1807 /* juce_Component.cpp */, + 84F1EA4710403708006A1807 /* juce_Component.h */, + 84F1EA4810403708006A1807 /* juce_ComponentDeletionWatcher.h */, + 84F1EA4910403708006A1807 /* juce_ComponentListener.cpp */, + 84F1EA4A10403708006A1807 /* juce_ComponentListener.h */, + 84F1EA4B10403708006A1807 /* juce_Desktop.cpp */, + 84F1EA4C10403708006A1807 /* juce_Desktop.h */, + 84F1EA4D10403708006A1807 /* buttons */, + 84F1EA6010403709006A1807 /* controls */, + 84F1EA7B10403709006A1807 /* filebrowser */, + 84F1EA9610403709006A1807 /* keyboard */, + 84F1EAA310403709006A1807 /* layout */, + 84F1EAC010403709006A1807 /* lookandfeel */, + 84F1EAC510403709006A1807 /* menus */, + 84F1EACD10403709006A1807 /* mouse */, + 84F1EADE10403709006A1807 /* properties */, + 84F1EAED10403709006A1807 /* special */, + 84F1EB0610403709006A1807 /* windows */, ); - name = documents; - sourceTree = ""; + name = components; + path = ../../src/gui/components; + sourceTree = SOURCE_ROOT; }; - 84FC319709B74A1000B75141 /* filebrowser */ = { + 84F1EA4D10403708006A1807 /* buttons */ = { isa = PBXGroup; children = ( - 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */, - 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */, - 84FC319809B74A5C00B75141 /* juce_DirectoryContentsList.cpp */, - 84FC319909B74A5C00B75141 /* juce_DirectoryContentsList.h */, - 84FC319A09B74A5C00B75141 /* juce_FileBrowserComponent.cpp */, - 84FC319B09B74A5C00B75141 /* juce_FileBrowserComponent.h */, - 84FC319C09B74A5C00B75141 /* juce_FileBrowserListener.h */, - 84FC319D09B74A5C00B75141 /* juce_FileChooser.cpp */, - 84FC319E09B74A5C00B75141 /* juce_FileChooser.h */, - 84FC319F09B74A5C00B75141 /* juce_FileChooserDialogBox.cpp */, - 84FC31A009B74A5C00B75141 /* juce_FileChooserDialogBox.h */, - 84FC31A109B74A5C00B75141 /* juce_FileFilter.cpp */, - 84FC31A209B74A5C00B75141 /* juce_FileFilter.h */, - 84FC31A309B74A5C00B75141 /* juce_FileListComponent.cpp */, - 84FC31A409B74A5C00B75141 /* juce_FileListComponent.h */, - 84FFAF290C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp */, - 84FFAF2A0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h */, - 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */, - 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */, - 84F1F05B0A36CE96008CCC5E /* juce_FilenameComponent.cpp */, - 84F1F05C0A36CE96008CCC5E /* juce_FilenameComponent.h */, - 84FC31A509B74A5C00B75141 /* juce_FilePreviewComponent.h */, - 84FC31A609B74A5C00B75141 /* juce_ImagePreviewComponent.cpp */, - 84FC31A709B74A5C00B75141 /* juce_ImagePreviewComponent.h */, - 84FC31A809B74A5C00B75141 /* juce_WildcardFileFilter.cpp */, - 84FC31A909B74A5C00B75141 /* juce_WildcardFileFilter.h */, + 84F1EA4E10403708006A1807 /* juce_ArrowButton.cpp */, + 84F1EA4F10403708006A1807 /* juce_ArrowButton.h */, + 84F1EA5010403708006A1807 /* juce_Button.cpp */, + 84F1EA5110403708006A1807 /* juce_Button.h */, + 84F1EA5210403708006A1807 /* juce_DrawableButton.cpp */, + 84F1EA5310403708006A1807 /* juce_DrawableButton.h */, + 84F1EA5410403708006A1807 /* juce_HyperlinkButton.cpp */, + 84F1EA5510403709006A1807 /* juce_HyperlinkButton.h */, + 84F1EA5610403709006A1807 /* juce_ImageButton.cpp */, + 84F1EA5710403709006A1807 /* juce_ImageButton.h */, + 84F1EA5810403709006A1807 /* juce_ShapeButton.cpp */, + 84F1EA5910403709006A1807 /* juce_ShapeButton.h */, + 84F1EA5A10403709006A1807 /* juce_TextButton.cpp */, + 84F1EA5B10403709006A1807 /* juce_TextButton.h */, + 84F1EA5C10403709006A1807 /* juce_ToggleButton.cpp */, + 84F1EA5D10403709006A1807 /* juce_ToggleButton.h */, + 84F1EA5E10403709006A1807 /* juce_ToolbarButton.cpp */, + 84F1EA5F10403709006A1807 /* juce_ToolbarButton.h */, + ); + name = buttons; + path = ../../src/gui/components/buttons; + sourceTree = SOURCE_ROOT; + }; + 84F1EA6010403709006A1807 /* controls */ = { + isa = PBXGroup; + children = ( + 84F1EA6110403709006A1807 /* juce_ComboBox.cpp */, + 84F1EA6210403709006A1807 /* juce_ComboBox.h */, + 84F1EA6310403709006A1807 /* juce_Label.cpp */, + 84F1EA6410403709006A1807 /* juce_Label.h */, + 84F1EA6510403709006A1807 /* juce_ListBox.cpp */, + 84F1EA6610403709006A1807 /* juce_ListBox.h */, + 84F1EA6710403709006A1807 /* juce_ProgressBar.cpp */, + 84F1EA6810403709006A1807 /* juce_ProgressBar.h */, + 84F1EA6910403709006A1807 /* juce_Slider.cpp */, + 84F1EA6A10403709006A1807 /* juce_Slider.h */, + 84F1EA6B10403709006A1807 /* juce_SliderListener.h */, + 84F1EA6C10403709006A1807 /* juce_TableHeaderComponent.cpp */, + 84F1EA6D10403709006A1807 /* juce_TableHeaderComponent.h */, + 84F1EA6E10403709006A1807 /* juce_TableListBox.cpp */, + 84F1EA6F10403709006A1807 /* juce_TableListBox.h */, + 84F1EA7010403709006A1807 /* juce_TextEditor.cpp */, + 84F1EA7110403709006A1807 /* juce_TextEditor.h */, + 84F1EA7210403709006A1807 /* juce_Toolbar.cpp */, + 84F1EA7310403709006A1807 /* juce_Toolbar.h */, + 84F1EA7410403709006A1807 /* juce_ToolbarItemComponent.cpp */, + 84F1EA7510403709006A1807 /* juce_ToolbarItemComponent.h */, + 84F1EA7610403709006A1807 /* juce_ToolbarItemFactory.h */, + 84F1EA7710403709006A1807 /* juce_ToolbarItemPalette.cpp */, + 84F1EA7810403709006A1807 /* juce_ToolbarItemPalette.h */, + 84F1EA7910403709006A1807 /* juce_TreeView.cpp */, + 84F1EA7A10403709006A1807 /* juce_TreeView.h */, + ); + name = controls; + path = ../../src/gui/components/controls; + sourceTree = SOURCE_ROOT; + }; + 84F1EA7B10403709006A1807 /* filebrowser */ = { + isa = PBXGroup; + children = ( + 84F1EA7C10403709006A1807 /* juce_DirectoryContentsDisplayComponent.cpp */, + 84F1EA7D10403709006A1807 /* juce_DirectoryContentsDisplayComponent.h */, + 84F1EA7E10403709006A1807 /* juce_DirectoryContentsList.cpp */, + 84F1EA7F10403709006A1807 /* juce_DirectoryContentsList.h */, + 84F1EA8010403709006A1807 /* juce_FileBrowserComponent.cpp */, + 84F1EA8110403709006A1807 /* juce_FileBrowserComponent.h */, + 84F1EA8210403709006A1807 /* juce_FileBrowserListener.h */, + 84F1EA8310403709006A1807 /* juce_FileChooser.cpp */, + 84F1EA8410403709006A1807 /* juce_FileChooser.h */, + 84F1EA8510403709006A1807 /* juce_FileChooserDialogBox.cpp */, + 84F1EA8610403709006A1807 /* juce_FileChooserDialogBox.h */, + 84F1EA8710403709006A1807 /* juce_FileFilter.cpp */, + 84F1EA8810403709006A1807 /* juce_FileFilter.h */, + 84F1EA8910403709006A1807 /* juce_FileListComponent.cpp */, + 84F1EA8A10403709006A1807 /* juce_FileListComponent.h */, + 84F1EA8B10403709006A1807 /* juce_FilenameComponent.cpp */, + 84F1EA8C10403709006A1807 /* juce_FilenameComponent.h */, + 84F1EA8D10403709006A1807 /* juce_FilePreviewComponent.h */, + 84F1EA8E10403709006A1807 /* juce_FileSearchPathListComponent.cpp */, + 84F1EA8F10403709006A1807 /* juce_FileSearchPathListComponent.h */, + 84F1EA9010403709006A1807 /* juce_FileTreeComponent.cpp */, + 84F1EA9110403709006A1807 /* juce_FileTreeComponent.h */, + 84F1EA9210403709006A1807 /* juce_ImagePreviewComponent.cpp */, + 84F1EA9310403709006A1807 /* juce_ImagePreviewComponent.h */, + 84F1EA9410403709006A1807 /* juce_WildcardFileFilter.cpp */, + 84F1EA9510403709006A1807 /* juce_WildcardFileFilter.h */, ); name = filebrowser; - sourceTree = ""; + path = ../../src/gui/components/filebrowser; + sourceTree = SOURCE_ROOT; + }; + 84F1EA9610403709006A1807 /* keyboard */ = { + isa = PBXGroup; + children = ( + 84F1EA9710403709006A1807 /* juce_KeyboardFocusTraverser.cpp */, + 84F1EA9810403709006A1807 /* juce_KeyboardFocusTraverser.h */, + 84F1EA9910403709006A1807 /* juce_KeyListener.cpp */, + 84F1EA9A10403709006A1807 /* juce_KeyListener.h */, + 84F1EA9B10403709006A1807 /* juce_KeyMappingEditorComponent.cpp */, + 84F1EA9C10403709006A1807 /* juce_KeyMappingEditorComponent.h */, + 84F1EA9D10403709006A1807 /* juce_KeyPress.cpp */, + 84F1EA9E10403709006A1807 /* juce_KeyPress.h */, + 84F1EA9F10403709006A1807 /* juce_KeyPressMappingSet.cpp */, + 84F1EAA010403709006A1807 /* juce_KeyPressMappingSet.h */, + 84F1EAA110403709006A1807 /* juce_ModifierKeys.cpp */, + 84F1EAA210403709006A1807 /* juce_ModifierKeys.h */, + ); + name = keyboard; + path = ../../src/gui/components/keyboard; + sourceTree = SOURCE_ROOT; + }; + 84F1EAA310403709006A1807 /* layout */ = { + isa = PBXGroup; + children = ( + 84F1EAA410403709006A1807 /* juce_ComponentAnimator.cpp */, + 84F1EAA510403709006A1807 /* juce_ComponentAnimator.h */, + 84F1EAA610403709006A1807 /* juce_ComponentBoundsConstrainer.cpp */, + 84F1EAA710403709006A1807 /* juce_ComponentBoundsConstrainer.h */, + 84F1EAA810403709006A1807 /* juce_ComponentMovementWatcher.cpp */, + 84F1EAA910403709006A1807 /* juce_ComponentMovementWatcher.h */, + 84F1EAAA10403709006A1807 /* juce_GroupComponent.cpp */, + 84F1EAAB10403709006A1807 /* juce_GroupComponent.h */, + 84F1EAAC10403709006A1807 /* juce_MultiDocumentPanel.cpp */, + 84F1EAAD10403709006A1807 /* juce_MultiDocumentPanel.h */, + 84F1EAAE10403709006A1807 /* juce_ResizableBorderComponent.cpp */, + 84F1EAAF10403709006A1807 /* juce_ResizableBorderComponent.h */, + 84F1EAB010403709006A1807 /* juce_ResizableCornerComponent.cpp */, + 84F1EAB110403709006A1807 /* juce_ResizableCornerComponent.h */, + 84F1EAB210403709006A1807 /* juce_ScrollBar.cpp */, + 84F1EAB310403709006A1807 /* juce_ScrollBar.h */, + 84F1EAB410403709006A1807 /* juce_StretchableLayoutManager.cpp */, + 84F1EAB510403709006A1807 /* juce_StretchableLayoutManager.h */, + 84F1EAB610403709006A1807 /* juce_StretchableLayoutResizerBar.cpp */, + 84F1EAB710403709006A1807 /* juce_StretchableLayoutResizerBar.h */, + 84F1EAB810403709006A1807 /* juce_StretchableObjectResizer.cpp */, + 84F1EAB910403709006A1807 /* juce_StretchableObjectResizer.h */, + 84F1EABA10403709006A1807 /* juce_TabbedButtonBar.cpp */, + 84F1EABB10403709006A1807 /* juce_TabbedButtonBar.h */, + 84F1EABC10403709006A1807 /* juce_TabbedComponent.cpp */, + 84F1EABD10403709006A1807 /* juce_TabbedComponent.h */, + 84F1EABE10403709006A1807 /* juce_Viewport.cpp */, + 84F1EABF10403709006A1807 /* juce_Viewport.h */, + ); + name = layout; + path = ../../src/gui/components/layout; + sourceTree = SOURCE_ROOT; + }; + 84F1EAC010403709006A1807 /* lookandfeel */ = { + isa = PBXGroup; + children = ( + 84F1EAC110403709006A1807 /* juce_LookAndFeel.cpp */, + 84F1EAC210403709006A1807 /* juce_LookAndFeel.h */, + 84F1EAC310403709006A1807 /* juce_OldSchoolLookAndFeel.cpp */, + 84F1EAC410403709006A1807 /* juce_OldSchoolLookAndFeel.h */, + ); + name = lookandfeel; + path = ../../src/gui/components/lookandfeel; + sourceTree = SOURCE_ROOT; + }; + 84F1EAC510403709006A1807 /* menus */ = { + isa = PBXGroup; + children = ( + 84F1EAC610403709006A1807 /* juce_MenuBarComponent.cpp */, + 84F1EAC710403709006A1807 /* juce_MenuBarComponent.h */, + 84F1EAC810403709006A1807 /* juce_MenuBarModel.cpp */, + 84F1EAC910403709006A1807 /* juce_MenuBarModel.h */, + 84F1EACA10403709006A1807 /* juce_PopupMenu.cpp */, + 84F1EACB10403709006A1807 /* juce_PopupMenu.h */, + 84F1EACC10403709006A1807 /* juce_PopupMenuCustomComponent.h */, + ); + name = menus; + path = ../../src/gui/components/menus; + sourceTree = SOURCE_ROOT; + }; + 84F1EACD10403709006A1807 /* mouse */ = { + isa = PBXGroup; + children = ( + 84F1EACE10403709006A1807 /* juce_ComponentDragger.cpp */, + 84F1EACF10403709006A1807 /* juce_ComponentDragger.h */, + 84F1EAD010403709006A1807 /* juce_DragAndDropContainer.cpp */, + 84F1EAD110403709006A1807 /* juce_DragAndDropContainer.h */, + 84F1EAD210403709006A1807 /* juce_DragAndDropTarget.h */, + 84F1EAD310403709006A1807 /* juce_FileDragAndDropTarget.h */, + 84F1EAD410403709006A1807 /* juce_LassoComponent.h */, + 84F1EAD510403709006A1807 /* juce_MouseCursor.h */, + 84F1EAD610403709006A1807 /* juce_MouseCursor.cpp */, + 84F1EAD710403709006A1807 /* juce_MouseEvent.h */, + 84F1EAD810403709006A1807 /* juce_MouseEvent.cpp */, + 84F1EAD910403709006A1807 /* juce_MouseHoverDetector.h */, + 84F1EADA10403709006A1807 /* juce_MouseHoverDetector.cpp */, + 84F1EADB10403709006A1807 /* juce_MouseListener.h */, + 84F1EADC10403709006A1807 /* juce_MouseListener.cpp */, + 84F1EADD10403709006A1807 /* juce_TooltipClient.h */, + ); + name = mouse; + path = ../../src/gui/components/mouse; + sourceTree = SOURCE_ROOT; + }; + 84F1EADE10403709006A1807 /* properties */ = { + isa = PBXGroup; + children = ( + 84F1EADF10403709006A1807 /* juce_BooleanPropertyComponent.cpp */, + 84F1EAE010403709006A1807 /* juce_BooleanPropertyComponent.h */, + 84F1EAE110403709006A1807 /* juce_ButtonPropertyComponent.cpp */, + 84F1EAE210403709006A1807 /* juce_ButtonPropertyComponent.h */, + 84F1EAE310403709006A1807 /* juce_ChoicePropertyComponent.cpp */, + 84F1EAE410403709006A1807 /* juce_ChoicePropertyComponent.h */, + 84F1EAE510403709006A1807 /* juce_PropertyComponent.cpp */, + 84F1EAE610403709006A1807 /* juce_PropertyComponent.h */, + 84F1EAE710403709006A1807 /* juce_PropertyPanel.cpp */, + 84F1EAE810403709006A1807 /* juce_PropertyPanel.h */, + 84F1EAE910403709006A1807 /* juce_SliderPropertyComponent.cpp */, + 84F1EAEA10403709006A1807 /* juce_SliderPropertyComponent.h */, + 84F1EAEB10403709006A1807 /* juce_TextPropertyComponent.cpp */, + 84F1EAEC10403709006A1807 /* juce_TextPropertyComponent.h */, + ); + name = properties; + path = ../../src/gui/components/properties; + sourceTree = SOURCE_ROOT; + }; + 84F1EAED10403709006A1807 /* special */ = { + isa = PBXGroup; + children = ( + 84F1EAEF10403709006A1807 /* juce_AudioDeviceSelectorComponent.cpp */, + 84F1EAF010403709006A1807 /* juce_AudioDeviceSelectorComponent.h */, + 84F1EAF110403709006A1807 /* juce_BubbleComponent.cpp */, + 84F1EAF210403709006A1807 /* juce_BubbleComponent.h */, + 84F1EAF310403709006A1807 /* juce_BubbleMessageComponent.cpp */, + 84F1EAF410403709006A1807 /* juce_BubbleMessageComponent.h */, + 84F1EAF510403709006A1807 /* juce_ColourSelector.cpp */, + 84F1EAF610403709006A1807 /* juce_ColourSelector.h */, + 84F1EAF710403709006A1807 /* juce_DropShadower.cpp */, + 84F1EAF810403709006A1807 /* juce_DropShadower.h */, + 84F1EAF910403709006A1807 /* juce_MagnifierComponent.cpp */, + 84F1EAFA10403709006A1807 /* juce_MagnifierComponent.h */, + 84F1EAFB10403709006A1807 /* juce_MidiKeyboardComponent.cpp */, + 84F1EAFC10403709006A1807 /* juce_MidiKeyboardComponent.h */, + 84F1EAFD10403709006A1807 /* juce_NSViewComponent.h */, + 84F1EAFE10403709006A1807 /* juce_OpenGLComponent.cpp */, + 84F1EAFF10403709006A1807 /* juce_OpenGLComponent.h */, + 84F1EB0010403709006A1807 /* juce_PreferencesPanel.cpp */, + 84F1EB0110403709006A1807 /* juce_PreferencesPanel.h */, + 84F1EB0210403709006A1807 /* juce_QuickTimeMovieComponent.h */, + 84F1EB0310403709006A1807 /* juce_SystemTrayIconComponent.cpp */, + 84F1EB0410403709006A1807 /* juce_SystemTrayIconComponent.h */, + 84F1EB0510403709006A1807 /* juce_WebBrowserComponent.h */, + ); + name = special; + path = ../../src/gui/components/special; + sourceTree = SOURCE_ROOT; + }; + 84F1EB0610403709006A1807 /* windows */ = { + isa = PBXGroup; + children = ( + 84F1EB0710403709006A1807 /* juce_AlertWindow.cpp */, + 84F1EB0810403709006A1807 /* juce_AlertWindow.h */, + 84F1EB0910403709006A1807 /* juce_ComponentPeer.cpp */, + 84F1EB0A10403709006A1807 /* juce_ComponentPeer.h */, + 84F1EB0B10403709006A1807 /* juce_DialogWindow.cpp */, + 84F1EB0C10403709006A1807 /* juce_DialogWindow.h */, + 84F1EB0D10403709006A1807 /* juce_DocumentWindow.cpp */, + 84F1EB0E10403709006A1807 /* juce_DocumentWindow.h */, + 84F1EB0F10403709006A1807 /* juce_ResizableWindow.cpp */, + 84F1EB1010403709006A1807 /* juce_ResizableWindow.h */, + 84F1EB1110403709006A1807 /* juce_SplashScreen.cpp */, + 84F1EB1210403709006A1807 /* juce_SplashScreen.h */, + 84F1EB1310403709006A1807 /* juce_ThreadWithProgressWindow.cpp */, + 84F1EB1410403709006A1807 /* juce_ThreadWithProgressWindow.h */, + 84F1EB1510403709006A1807 /* juce_TooltipWindow.cpp */, + 84F1EB1610403709006A1807 /* juce_TooltipWindow.h */, + 84F1EB1710403709006A1807 /* juce_TopLevelWindow.cpp */, + 84F1EB1810403709006A1807 /* juce_TopLevelWindow.h */, + ); + name = windows; + path = ../../src/gui/components/windows; + sourceTree = SOURCE_ROOT; + }; + 84F1EB1910403709006A1807 /* graphics */ = { + isa = PBXGroup; + children = ( + 84F1EB1A10403709006A1807 /* brushes */, + 84F1EB2310403709006A1807 /* colour */, + 84F1EB2B10403709006A1807 /* contexts */, + 84F1EB3910403709006A1807 /* drawables */, + 84F1EB4510403709006A1807 /* effects */, + 84F1EB4D10403709006A1807 /* fonts */, + 84F1EB5610403709006A1807 /* geometry */, + 84F1EB6B10403709006A1807 /* imaging */, + ); + name = graphics; + path = ../../src/gui/graphics; + sourceTree = SOURCE_ROOT; + }; + 84F1EB1A10403709006A1807 /* brushes */ = { + isa = PBXGroup; + children = ( + 84F1EB1B10403709006A1807 /* juce_Brush.cpp */, + 84F1EB1C10403709006A1807 /* juce_Brush.h */, + 84F1EB1D10403709006A1807 /* juce_GradientBrush.cpp */, + 84F1EB1E10403709006A1807 /* juce_GradientBrush.h */, + 84F1EB1F10403709006A1807 /* juce_ImageBrush.cpp */, + 84F1EB2010403709006A1807 /* juce_ImageBrush.h */, + 84F1EB2110403709006A1807 /* juce_SolidColourBrush.cpp */, + 84F1EB2210403709006A1807 /* juce_SolidColourBrush.h */, + ); + name = brushes; + path = ../../src/gui/graphics/brushes; + sourceTree = SOURCE_ROOT; + }; + 84F1EB2310403709006A1807 /* colour */ = { + isa = PBXGroup; + children = ( + 84F1EB2410403709006A1807 /* juce_Colour.cpp */, + 84F1EB2510403709006A1807 /* juce_ColourGradient.cpp */, + 84F1EB2610403709006A1807 /* juce_ColourGradient.h */, + 84F1EB2710403709006A1807 /* juce_Colours.cpp */, + 84F1EB2810403709006A1807 /* juce_Colours.h */, + 84F1EB2910403709006A1807 /* juce_PixelFormats.h */, + 84F1EB2A10403709006A1807 /* juce_Colour.h */, + ); + name = colour; + path = ../../src/gui/graphics/colour; + sourceTree = SOURCE_ROOT; + }; + 84F1EB2B10403709006A1807 /* contexts */ = { + isa = PBXGroup; + children = ( + 84F1EB2C10403709006A1807 /* juce_EdgeTable.cpp */, + 84F1EB2D10403709006A1807 /* juce_EdgeTable.h */, + 84F1EB2E10403709006A1807 /* juce_Graphics.cpp */, + 84F1EB2F10403709006A1807 /* juce_Graphics.h */, + 84F1EB3010403709006A1807 /* juce_Justification.cpp */, + 84F1EB3110403709006A1807 /* juce_Justification.h */, + 84F1EB3210403709006A1807 /* juce_LowLevelGraphicsContext.h */, + 84F1EB3310403709006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.cpp */, + 84F1EB3410403709006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.h */, + 84F1EB3510403709006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.cpp */, + 84F1EB3610403709006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.h */, + 84F1EB3710403709006A1807 /* juce_RectanglePlacement.cpp */, + 84F1EB3810403709006A1807 /* juce_RectanglePlacement.h */, + ); + name = contexts; + path = ../../src/gui/graphics/contexts; + sourceTree = SOURCE_ROOT; + }; + 84F1EB3910403709006A1807 /* drawables */ = { + isa = PBXGroup; + children = ( + 84F1EB3A10403709006A1807 /* juce_Drawable.cpp */, + 84F1EB3B10403709006A1807 /* juce_Drawable.h */, + 84F1EB3C10403709006A1807 /* juce_DrawableComposite.cpp */, + 84F1EB3D10403709006A1807 /* juce_DrawableComposite.h */, + 84F1EB3E10403709006A1807 /* juce_DrawableImage.cpp */, + 84F1EB3F10403709006A1807 /* juce_DrawableImage.h */, + 84F1EB4010403709006A1807 /* juce_DrawablePath.cpp */, + 84F1EB4110403709006A1807 /* juce_DrawablePath.h */, + 84F1EB4210403709006A1807 /* juce_DrawableText.cpp */, + 84F1EB4310403709006A1807 /* juce_DrawableText.h */, + 84F1EB4410403709006A1807 /* juce_SVGParser.cpp */, + ); + name = drawables; + path = ../../src/gui/graphics/drawables; + sourceTree = SOURCE_ROOT; + }; + 84F1EB4510403709006A1807 /* effects */ = { + isa = PBXGroup; + children = ( + 84F1EB4610403709006A1807 /* juce_DropShadowEffect.cpp */, + 84F1EB4710403709006A1807 /* juce_DropShadowEffect.h */, + 84F1EB4810403709006A1807 /* juce_GlowEffect.cpp */, + 84F1EB4910403709006A1807 /* juce_GlowEffect.h */, + 84F1EB4A10403709006A1807 /* juce_ImageEffectFilter.h */, + 84F1EB4B10403709006A1807 /* juce_ReduceOpacityEffect.cpp */, + 84F1EB4C10403709006A1807 /* juce_ReduceOpacityEffect.h */, + ); + name = effects; + path = ../../src/gui/graphics/effects; + sourceTree = SOURCE_ROOT; + }; + 84F1EB4D10403709006A1807 /* fonts */ = { + isa = PBXGroup; + children = ( + 84F1EB4E10403709006A1807 /* juce_Font.cpp */, + 84F1EB4F10403709006A1807 /* juce_Font.h */, + 84F1EB5010403709006A1807 /* juce_GlyphArrangement.cpp */, + 84F1EB5110403709006A1807 /* juce_GlyphArrangement.h */, + 84F1EB5210403709006A1807 /* juce_TextLayout.cpp */, + 84F1EB5310403709006A1807 /* juce_TextLayout.h */, + 84F1EB5410403709006A1807 /* juce_Typeface.cpp */, + 84F1EB5510403709006A1807 /* juce_Typeface.h */, + ); + name = fonts; + path = ../../src/gui/graphics/fonts; + sourceTree = SOURCE_ROOT; + }; + 84F1EB5610403709006A1807 /* geometry */ = { + isa = PBXGroup; + children = ( + 84F1EB5710403709006A1807 /* juce_AffineTransform.cpp */, + 84F1EB5810403709006A1807 /* juce_AffineTransform.h */, + 84F1EB5910403709006A1807 /* juce_BorderSize.cpp */, + 84F1EB5A10403709006A1807 /* juce_BorderSize.h */, + 84F1EB5B10403709006A1807 /* juce_Line.cpp */, + 84F1EB5C10403709006A1807 /* juce_Line.h */, + 84F1EB5D10403709006A1807 /* juce_Path.cpp */, + 84F1EB5E10403709006A1807 /* juce_Path.h */, + 84F1EB5F10403709006A1807 /* juce_PathIterator.cpp */, + 84F1EB6010403709006A1807 /* juce_PathIterator.h */, + 84F1EB6110403709006A1807 /* juce_PathStrokeType.cpp */, + 84F1EB6210403709006A1807 /* juce_PathStrokeType.h */, + 84F1EB6310403709006A1807 /* juce_Point.cpp */, + 84F1EB6410403709006A1807 /* juce_Point.h */, + 84F1EB6510403709006A1807 /* juce_PositionedRectangle.cpp */, + 84F1EB6610403709006A1807 /* juce_PositionedRectangle.h */, + 84F1EB6710403709006A1807 /* juce_Rectangle.cpp */, + 84F1EB6810403709006A1807 /* juce_Rectangle.h */, + 84F1EB6910403709006A1807 /* juce_RectangleList.cpp */, + 84F1EB6A10403709006A1807 /* juce_RectangleList.h */, + ); + name = geometry; + path = ../../src/gui/graphics/geometry; + sourceTree = SOURCE_ROOT; + }; + 84F1EB6B10403709006A1807 /* imaging */ = { + isa = PBXGroup; + children = ( + 84F1EB6C10403709006A1807 /* juce_CameraDevice.h */, + 84F1EB6D10403709006A1807 /* juce_Image.cpp */, + 84F1EB6E10403709006A1807 /* juce_Image.h */, + 84F1EB6F10403709006A1807 /* juce_ImageCache.cpp */, + 84F1EB7010403709006A1807 /* juce_ImageCache.h */, + 84F1EB7110403709006A1807 /* juce_ImageConvolutionKernel.cpp */, + 84F1EB7210403709006A1807 /* juce_ImageConvolutionKernel.h */, + 84F1EB7310403709006A1807 /* juce_ImageFileFormat.cpp */, + 84F1EB7410403709006A1807 /* juce_ImageFileFormat.h */, + 84F1EB7510403709006A1807 /* image_file_formats */, + ); + name = imaging; + path = ../../src/gui/graphics/imaging; + sourceTree = SOURCE_ROOT; + }; + 84F1EB7510403709006A1807 /* image_file_formats */ = { + isa = PBXGroup; + children = ( + 84F1EB7610403709006A1807 /* juce_GIFLoader.cpp */, + 84F1EB7710403709006A1807 /* juce_GIFLoader.h */, + 84F1EB7810403709006A1807 /* juce_JPEGLoader.cpp */, + 84F1EB7910403709006A1807 /* juce_PNGLoader.cpp */, + ); + name = image_file_formats; + path = ../../src/gui/graphics/imaging/image_file_formats; + sourceTree = SOURCE_ROOT; }; /* End PBXGroup section */ @@ -2257,318 +2247,319 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 84A48A2908A22E4B00752A2B /* juce_Application.h in Headers */, - 84A48A2B08A22E4B00752A2B /* juce_DeletedAtShutdown.h in Headers */, - 84A48A2D08A22E4B00752A2B /* juce_SystemClipboard.h in Headers */, - 84A48A2F08A22E4B00752A2B /* juce_AiffAudioFormat.h in Headers */, - 84A48A3108A22E4B00752A2B /* juce_AudioCDReader.h in Headers */, - 84A48A3308A22E4B00752A2B /* juce_AudioFormat.h in Headers */, - 84A48A3408A22E4B00752A2B /* juce_AudioFormatReader.h in Headers */, - 84A48A3508A22E4B00752A2B /* juce_AudioFormatWriter.h in Headers */, - 84A48A3708A22E4B00752A2B /* juce_AudioSubsectionReader.h in Headers */, - 84A48A3908A22E4B00752A2B /* juce_WavAudioFormat.h in Headers */, - 84A48A3B08A22E4B00752A2B /* juce_AudioFormatReaderSource.h in Headers */, - 84A48A3C08A22E4B00752A2B /* juce_AudioSource.h in Headers */, - 84A48A3E08A22E4B00752A2B /* juce_AudioSourcePlayer.h in Headers */, - 84A48A4008A22E4B00752A2B /* juce_AudioTransportSource.h in Headers */, - 84A48A4208A22E4B00752A2B /* juce_BufferingAudioSource.h in Headers */, - 84A48A4408A22E4B00752A2B /* juce_MixerAudioSource.h in Headers */, - 84A48A4508A22E4B00752A2B /* juce_PositionableAudioSource.h in Headers */, - 84A48A4708A22E4B00752A2B /* juce_ResamplingAudioSource.h in Headers */, - 84A48A5508A22E4B00752A2B /* juce_ActionBroadcaster.h in Headers */, - 84A48A5608A22E4B00752A2B /* juce_ActionListener.h in Headers */, - 84A48A5808A22E4B00752A2B /* juce_ActionListenerList.h in Headers */, - 84A48A5A08A22E4B00752A2B /* juce_AsyncUpdater.h in Headers */, - 84A48A5C08A22E4B00752A2B /* juce_ChangeBroadcaster.h in Headers */, - 84A48A5D08A22E4B00752A2B /* juce_ChangeListener.h in Headers */, - 84A48A5F08A22E4B00752A2B /* juce_ChangeListenerList.h in Headers */, - 84A48A6108A22E4B00752A2B /* juce_Message.h in Headers */, - 84A48A6308A22E4B00752A2B /* juce_MessageListener.h in Headers */, - 84A48A6508A22E4B00752A2B /* juce_MessageManager.h in Headers */, - 84A48A6708A22E4B00752A2B /* juce_Timer.h in Headers */, - 84A48A6908A22E4B00752A2B /* juce_ArrowButton.h in Headers */, - 84A48A6B08A22E4B00752A2B /* juce_Button.h in Headers */, - 84A48A6D08A22E4B00752A2B /* juce_DrawableButton.h in Headers */, - 84A48A6F08A22E4B00752A2B /* juce_HyperlinkButton.h in Headers */, - 84A48A7108A22E4B00752A2B /* juce_ImageButton.h in Headers */, - 84A48A7308A22E4B00752A2B /* juce_ShapeButton.h in Headers */, - 84A48A7508A22E4B00752A2B /* juce_TextButton.h in Headers */, - 84A48A7708A22E4B00752A2B /* juce_ToggleButton.h in Headers */, - 84A48A7908A22E4B00752A2B /* juce_ComboBox.h in Headers */, - 84A48A7D08A22E4B00752A2B /* juce_Label.h in Headers */, - 84A48A7F08A22E4B00752A2B /* juce_ListBox.h in Headers */, - 84A48A8108A22E4B00752A2B /* juce_ProgressBar.h in Headers */, - 84A48A8508A22E4B00752A2B /* juce_Slider.h in Headers */, - 84A48A8708A22E4B00752A2B /* juce_TextEditor.h in Headers */, - 84A48A8908A22E4B00752A2B /* juce_TreeView.h in Headers */, - 84A48A8B08A22E4B00752A2B /* juce_Component.h in Headers */, - 84A48A8C08A22E4B00752A2B /* juce_ComponentDeletionWatcher.h in Headers */, - 84A48A8E08A22E4B00752A2B /* juce_ComponentListener.h in Headers */, - 84A48A9008A22E4B00752A2B /* juce_Desktop.h in Headers */, - 84A48A9208A22E4B00752A2B /* juce_KeyListener.h in Headers */, - 84A48A9408A22E4B00752A2B /* juce_KeyMappingEditorComponent.h in Headers */, - 84A48A9608A22E4B00752A2B /* juce_KeyPress.h in Headers */, - 84A48A9808A22E4B00752A2B /* juce_KeyPressMappingSet.h in Headers */, - 84A48A9A08A22E4B00752A2B /* juce_ModifierKeys.h in Headers */, - 84A48A9C08A22E4B00752A2B /* juce_GroupComponent.h in Headers */, - 84A48A9F08A22E4B00752A2B /* juce_ResizableBorderComponent.h in Headers */, - 84A48AA108A22E4B00752A2B /* juce_ResizableCornerComponent.h in Headers */, - 84A48AA308A22E4B00752A2B /* juce_ScrollBar.h in Headers */, - 84A48AA508A22E4B00752A2B /* juce_StretchableLayoutManager.h in Headers */, - 84A48AA708A22E4B00752A2B /* juce_StretchableLayoutResizerBar.h in Headers */, - 84A48AA908A22E4B00752A2B /* juce_TabbedButtonBar.h in Headers */, - 84A48AAB08A22E4B00752A2B /* juce_TabbedComponent.h in Headers */, - 84A48AAD08A22E4B00752A2B /* juce_Viewport.h in Headers */, - 84A48AAF08A22E4B00752A2B /* juce_LookAndFeel.h in Headers */, - 84A48AB108A22E4B00752A2B /* juce_OldSchoolLookAndFeel.h in Headers */, - 84A48AB308A22E4B00752A2B /* juce_MenuBarComponent.h in Headers */, - 84A48AB408A22E4B00752A2B /* juce_MenuBarModel.h in Headers */, - 84A48AB608A22E4B00752A2B /* juce_PopupMenu.h in Headers */, - 84A48AB708A22E4B00752A2B /* juce_PopupMenuCustomComponent.h in Headers */, - 84A48AB908A22E4B00752A2B /* juce_ComponentDragger.h in Headers */, - 84A48ABB08A22E4B00752A2B /* juce_DragAndDropContainer.h in Headers */, - 84A48ABC08A22E4B00752A2B /* juce_DragAndDropTarget.h in Headers */, - 84A48ABE08A22E4B00752A2B /* juce_MouseCursor.h in Headers */, - 84A48AC008A22E4B00752A2B /* juce_MouseEvent.h in Headers */, - 84A48AC208A22E4B00752A2B /* juce_MouseHoverDetector.h in Headers */, - 84A48AC408A22E4B00752A2B /* juce_MouseListener.h in Headers */, - 84A48AC608A22E4B00752A2B /* juce_BubbleComponent.h in Headers */, - 84A48AC808A22E4B00752A2B /* juce_BubbleMessageComponent.h in Headers */, - 84A48ACA08A22E4B00752A2B /* juce_ColourSelector.h in Headers */, - 84A48ACC08A22E4B00752A2B /* juce_DropShadower.h in Headers */, - 84A48ACE08A22E4B00752A2B /* juce_OpenGLComponent.h in Headers */, - 84A48AD008A22E4B00752A2B /* juce_PreferencesPanel.h in Headers */, - 84A48AD208A22E4B00752A2B /* juce_QuickTimeMovieComponent.h in Headers */, - 84A48AD408A22E4B00752A2B /* juce_AlertWindow.h in Headers */, - 84A48AD608A22E4B00752A2B /* juce_DialogWindow.h in Headers */, - 84A48ADC08A22E4B00752A2B /* juce_ResizableWindow.h in Headers */, - 84A48ADE08A22E4B00752A2B /* juce_SplashScreen.h in Headers */, - 84A48AE008A22E4B00752A2B /* juce_ThreadWithProgressWindow.h in Headers */, - 84A48AE208A22E4B00752A2B /* juce_TooltipWindow.h in Headers */, - 84A48AE408A22E4B00752A2B /* juce_Brush.h in Headers */, - 84A48AE608A22E4B00752A2B /* juce_GradientBrush.h in Headers */, - 84A48AE808A22E4B00752A2B /* juce_ImageBrush.h in Headers */, - 84A48AEA08A22E4B00752A2B /* juce_SolidColourBrush.h in Headers */, - 84A48AEC08A22E4B00752A2B /* juce_Colour.h in Headers */, - 84A48AEE08A22E4B00752A2B /* juce_ColourGradient.h in Headers */, - 84A48AF008A22E4B00752A2B /* juce_Colours.h in Headers */, - 84A48AF108A22E4B00752A2B /* juce_PixelFormats.h in Headers */, - 84A48AF308A22E4B00752A2B /* juce_EdgeTable.h in Headers */, - 84A48AF508A22E4B00752A2B /* juce_Graphics.h in Headers */, - 84A48AF708A22E4B00752A2B /* juce_Justification.h in Headers */, - 84A48AF908A22E4B00752A2B /* juce_Drawable.h in Headers */, - 84A48AFB08A22E4B00752A2B /* juce_DrawableComposite.h in Headers */, - 84A48AFD08A22E4B00752A2B /* juce_DrawableImage.h in Headers */, - 84A48AFF08A22E4B00752A2B /* juce_DrawablePath.h in Headers */, - 84A48B0108A22E4B00752A2B /* juce_DrawableText.h in Headers */, - 84A48B0308A22E4B00752A2B /* juce_DropShadowEffect.h in Headers */, - 84A48B0508A22E4B00752A2B /* juce_GlowEffect.h in Headers */, - 84A48B0608A22E4B00752A2B /* juce_ImageEffectFilter.h in Headers */, - 84A48B0808A22E4B00752A2B /* juce_ReduceOpacityEffect.h in Headers */, - 84A48B0A08A22E4B00752A2B /* juce_Font.h in Headers */, - 84A48B0C08A22E4B00752A2B /* juce_GlyphArrangement.h in Headers */, - 84A48B0E08A22E4B00752A2B /* juce_TextLayout.h in Headers */, - 84A48B1008A22E4B00752A2B /* juce_Typeface.h in Headers */, - 84A48B1208A22E4B00752A2B /* juce_AffineTransform.h in Headers */, - 84A48B1408A22E4B00752A2B /* juce_Line.h in Headers */, - 84A48B1608A22E4B00752A2B /* juce_Path.h in Headers */, - 84A48B1808A22E4B00752A2B /* juce_PathIterator.h in Headers */, - 84A48B1A08A22E4B00752A2B /* juce_PathStrokeType.h in Headers */, - 84A48B1C08A22E4B00752A2B /* juce_Point.h in Headers */, - 84A48B1E08A22E4B00752A2B /* juce_Rectangle.h in Headers */, - 84A48B2008A22E4B00752A2B /* juce_RectangleList.h in Headers */, - 84A48B4A08A22E4B00752A2B /* juce_GIFLoader.h in Headers */, - 84A48B5B08A22E4B00752A2B /* juce_Image.h in Headers */, - 84A48B5D08A22E4B00752A2B /* juce_ImageCache.h in Headers */, - 84A48B5F08A22E4B00752A2B /* juce_ImageConvolutionKernel.h in Headers */, - 84A48B6108A22E4B00752A2B /* juce_ImageFileFormat.h in Headers */, - 84A48B6A08A22E4B00752A2B /* juce_Atomic.h in Headers */, - 84A48B6B08A22E4B00752A2B /* juce_DataConversions.h in Headers */, - 84A48B6D08A22E4B00752A2B /* juce_FileLogger.h in Headers */, - 84A48B6E08A22E4B00752A2B /* juce_Initialisation.h in Headers */, - 84A48B7008A22E4B00752A2B /* juce_Logger.h in Headers */, - 84A48B7108A22E4B00752A2B /* juce_MathsFunctions.h in Headers */, - 84A48B7208A22E4B00752A2B /* juce_Memory.h in Headers */, - 84A48B7308A22E4B00752A2B /* juce_PlatformDefs.h in Headers */, - 84A48B7508A22E4B00752A2B /* juce_Random.h in Headers */, - 84A48B7708A22E4B00752A2B /* juce_RelativeTime.h in Headers */, - 84A48B7808A22E4B00752A2B /* juce_Singleton.h in Headers */, - 84A48B7908A22E4B00752A2B /* juce_StandardHeader.h in Headers */, - 84A48B7B08A22E4B00752A2B /* juce_SystemStats.h in Headers */, - 84A48B7D08A22E4B00752A2B /* juce_Time.h in Headers */, - 84A48B7E08A22E4B00752A2B /* juce_Array.h in Headers */, - 84A48B7F08A22E4B00752A2B /* juce_ArrayAllocationBase.h in Headers */, - 84A48B8108A22E4B00752A2B /* juce_BitArray.h in Headers */, - 84A48B8208A22E4B00752A2B /* juce_ElementComparator.h in Headers */, - 84A48B8408A22E4B00752A2B /* juce_MemoryBlock.h in Headers */, - 84A48B8508A22E4B00752A2B /* juce_OwnedArray.h in Headers */, - 84A48B8708A22E4B00752A2B /* juce_PropertySet.h in Headers */, - 84A48B8808A22E4B00752A2B /* juce_ReferenceCountedArray.h in Headers */, - 84A48B8908A22E4B00752A2B /* juce_ReferenceCountedObject.h in Headers */, - 84A48B8A08A22E4B00752A2B /* juce_SortedSet.h in Headers */, - 84A48B8B08A22E4B00752A2B /* juce_SparseSet.h in Headers */, - 84A48B8C08A22E4B00752A2B /* juce_VoidArray.h in Headers */, - 84A48B8E08A22E4B00752A2B /* juce_BlowFish.h in Headers */, - 84A48B9008A22E4B00752A2B /* juce_MD5.h in Headers */, - 84A48B9208A22E4B00752A2B /* juce_Primes.h in Headers */, - 84A48B9408A22E4B00752A2B /* juce_RSAKey.h in Headers */, - 84A48B9608A22E4B00752A2B /* juce_DirectoryIterator.h in Headers */, - 84A48B9808A22E4B00752A2B /* juce_File.h in Headers */, - 84A48B9A08A22E4B00752A2B /* juce_FileInputStream.h in Headers */, - 84A48B9C08A22E4B00752A2B /* juce_FileOutputStream.h in Headers */, - 84A48B9E08A22E4B00752A2B /* juce_FileSearchPath.h in Headers */, - 84A48BA008A22E4B00752A2B /* juce_InputStream.h in Headers */, - 84A48BA208A22E4B00752A2B /* juce_OutputStream.h in Headers */, - 84A48BA408A22E4B00752A2B /* juce_URL.h in Headers */, - 84A48BA608A22E4B00752A2B /* juce_BufferedInputStream.h in Headers */, - 84A48BA808A22E4B00752A2B /* juce_GZIPCompressorOutputStream.h in Headers */, - 84A48BAA08A22E4B00752A2B /* juce_GZIPDecompressorInputStream.h in Headers */, - 84A48BAC08A22E4B00752A2B /* juce_MemoryInputStream.h in Headers */, - 84A48BAE08A22E4B00752A2B /* juce_MemoryOutputStream.h in Headers */, - 84A48BB008A22E4B00752A2B /* juce_SubregionStream.h in Headers */, - 84A48BC908A22E4B00752A2B /* juce_PerformanceCounter.h in Headers */, - 84A48BCA08A22E4B00752A2B /* juce_PlatformUtilities.h in Headers */, - 84A48BCC08A22E4B00752A2B /* juce_Uuid.h in Headers */, - 84A48BCE08A22E4B00752A2B /* juce_ZipFile.h in Headers */, - 84A48BD008A22E4B00752A2B /* juce_LocalisedStrings.h in Headers */, - 84A48BD208A22E4B00752A2B /* juce_String.h in Headers */, - 84A48BD408A22E4B00752A2B /* juce_StringArray.h in Headers */, - 84A48BD608A22E4B00752A2B /* juce_StringPairArray.h in Headers */, - 84A48BD908A22E4B00752A2B /* juce_XmlDocument.h in Headers */, - 84A48BDB08A22E4B00752A2B /* juce_XmlElement.h in Headers */, - 84A48BDD08A22E4B00752A2B /* juce_CriticalSection.h in Headers */, - 84A48BDF08A22E4B00752A2B /* juce_InterProcessLock.h in Headers */, - 84A48BE108A22E4B00752A2B /* juce_Process.h in Headers */, - 84A48BE308A22E4B00752A2B /* juce_ReadWriteLock.h in Headers */, - 84A48BE408A22E4B00752A2B /* juce_ScopedLock.h in Headers */, - 84A48BE508A22E4B00752A2B /* juce_ScopedReadLock.h in Headers */, - 84A48BE608A22E4B00752A2B /* juce_ScopedWriteLock.h in Headers */, - 84A48BE808A22E4B00752A2B /* juce_Thread.h in Headers */, - 84A48BEA08A22E4B00752A2B /* juce_ThreadPool.h in Headers */, - 84A48BEC08A22E4B00752A2B /* juce_TimeSliceThread.h in Headers */, - 84A48BED08A22E4B00752A2B /* juce_WaitableEvent.h in Headers */, - 84052DE508D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h in Headers */, 840F80BC092B399D005E7B4E /* juce.h in Headers */, - 84F1B8DB09499F1400AD8EDE /* juce_MidiKeyboardComponent.h in Headers */, - 8406C44609642CE100C99145 /* juce_LowLevelGraphicsContext.h in Headers */, - 8406C44809642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.h in Headers */, - 84198B11096D8E2B0022A439 /* juce_AudioDeviceManager.h in Headers */, - 84198B12096D8E2B0022A439 /* juce_AudioIODevice.h in Headers */, - 84198B13096D8E2B0022A439 /* juce_MidiInput.h in Headers */, - 84198B14096D8E2B0022A439 /* juce_MidiOutput.h in Headers */, - 84198BB6096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h in Headers */, - 84E8209509729D2A0097675B /* juce_AudioFormatManager.h in Headers */, - 84F593AF09855679008153BA /* juce_DocumentWindow.h in Headers */, - 84F593B109855693008153BA /* juce_LassoComponent.h in Headers */, - 84F46B7F098685BD0079F3FA /* juce_ComponentBoundsConstrainer.h in Headers */, - 8463D5C2098BD2DD00F9AEC2 /* juce_MidiBuffer.h in Headers */, - 8463D5C4098BD2DD00F9AEC2 /* juce_MidiFile.h in Headers */, - 8463D5C6098BD2DD00F9AEC2 /* juce_MidiKeyboardState.h in Headers */, - 8463D5C8098BD2DD00F9AEC2 /* juce_MidiMessage.h in Headers */, - 8463D5CA098BD2DD00F9AEC2 /* juce_MidiMessageCollector.h in Headers */, - 8463D5CC098BD2DD00F9AEC2 /* juce_MidiMessageSequence.h in Headers */, - 8463D5D1098BD30600F9AEC2 /* juce_TopLevelWindow.h in Headers */, - 84F8DAD1099C963A00E911ED /* juce_ComponentPeer.h in Headers */, - 84FC319009B749FD00B75141 /* juce_FileBasedDocument.h in Headers */, - 84FC319209B749FD00B75141 /* juce_RecentlyOpenedFilesList.h in Headers */, - 84FC319309B749FD00B75141 /* juce_SelectedItemSet.h in Headers */, - 84FC319409B749FD00B75141 /* juce_UndoableAction.h in Headers */, - 84FC319609B749FD00B75141 /* juce_UndoManager.h in Headers */, - 84FC31AB09B74A5C00B75141 /* juce_DirectoryContentsList.h in Headers */, - 84FC31AD09B74A5C00B75141 /* juce_FileBrowserComponent.h in Headers */, - 84FC31AE09B74A5C00B75141 /* juce_FileBrowserListener.h in Headers */, - 84FC31B009B74A5C00B75141 /* juce_FileChooser.h in Headers */, - 84FC31B209B74A5C00B75141 /* juce_FileChooserDialogBox.h in Headers */, - 84FC31B409B74A5C00B75141 /* juce_FileFilter.h in Headers */, - 84FC31B609B74A5C00B75141 /* juce_FileListComponent.h in Headers */, - 84FC31B709B74A5C00B75141 /* juce_FilePreviewComponent.h in Headers */, - 84FC31B909B74A5C00B75141 /* juce_ImagePreviewComponent.h in Headers */, - 84FC31BB09B74A5C00B75141 /* juce_WildcardFileFilter.h in Headers */, - 84FC31BF09B74A7700B75141 /* juce_BorderSize.h in Headers */, - 84D296BE09B763190026C535 /* juce_PropertiesFile.h in Headers */, - 84F5598509CACFDD00AC5000 /* juce_Socket.h in Headers */, - 84F5598909CACFF700AC5000 /* juce_NamedPipe.h in Headers */, - 84A06BAF09CAD6A3006A43BD /* juce_AudioIODeviceType.h in Headers */, - 846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */, - 846034E109CB374E00E255CF /* juce_InterprocessConnectionServer.h in Headers */, - 842B63BB09D8508F00255DC7 /* juce_FlacAudioFormat.h in Headers */, - 842B63BD09D8508F00255DC7 /* juce_OggVorbisAudioFormat.h in Headers */, - 8407909009E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.h in Headers */, - 84F589950A01491F00B80939 /* juce_TooltipClient.h in Headers */, - 84F5899F0A01493600B80939 /* juce_ApplicationCommandID.h in Headers */, - 84F589A10A01493600B80939 /* juce_ApplicationCommandInfo.h in Headers */, - 84F589A30A01493600B80939 /* juce_ApplicationCommandManager.h in Headers */, - 84F589A50A01493600B80939 /* juce_ApplicationCommandTarget.h in Headers */, - 842F9D640A19C9AF00B1358D /* juce_ButtonPropertyComponent.h in Headers */, - 842F9D660A19C9AF00B1358D /* juce_ChoicePropertyComponent.h in Headers */, - 842F9D680A19C9AF00B1358D /* juce_PropertyComponent.h in Headers */, - 842F9D6A0A19C9AF00B1358D /* juce_PropertyPanel.h in Headers */, - 842F9D6C0A19C9AF00B1358D /* juce_SliderPropertyComponent.h in Headers */, - 842F9D6E0A19C9AF00B1358D /* juce_TextPropertyComponent.h in Headers */, - 842F9DE30A19D2AF00B1358D /* juce_PositionedRectangle.h in Headers */, - 84F5552B0A2235E100A8311C /* juce_MultiDocumentPanel.h in Headers */, - 84F1F05E0A36CE96008CCC5E /* juce_FilenameComponent.h in Headers */, - 84F1F0620A36CF06008CCC5E /* juce_BooleanPropertyComponent.h in Headers */, - 84F1F0660A36CF32008CCC5E /* juce_MagnifierComponent.h in Headers */, - 84F1F06A0A36CF45008CCC5E /* juce_KeyboardFocusTraverser.h in Headers */, - 846927DB0A49ABD300314975 /* juce_CharacterFunctions.h in Headers */, - 846927DF0A49ABE600314975 /* juce_RectanglePlacement.h in Headers */, - 8417EE540A6E7A280058E04E /* juce_TableHeaderComponent.h in Headers */, - 8417EE560A6E7A280058E04E /* juce_TableListBox.h in Headers */, - 8417EE5A0A6E7A370058E04E /* juce_StretchableObjectResizer.h in Headers */, - 84F7A7B00A8383A100D36246 /* juce_ToolbarButton.h in Headers */, - 84F7A7B90A8383C200D36246 /* juce_Toolbar.h in Headers */, - 84F7A7BB0A8383C200D36246 /* juce_ToolbarItemComponent.h in Headers */, - 84F7A7BC0A8383C200D36246 /* juce_ToolbarItemFactory.h in Headers */, - 84F7A7BE0A8383C200D36246 /* juce_ToolbarItemPalette.h in Headers */, - 84F7A7C20A8383E000D36246 /* juce_MultiTimer.h in Headers */, - 84F7A7F00A838CC900D36246 /* juce_ComponentAnimator.h in Headers */, - 8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */, - 8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */, - 84099CA00AE52BD000B2A05D /* juce_Sampler.h in Headers */, - 84099CA20AE52BD000B2A05D /* juce_Synthesiser.h in Headers */, - 841E06360AF8CE75005E6FCC /* juce_AudioDataConverters.h in Headers */, - 841E06380AF8CE75005E6FCC /* juce_AudioSampleBuffer.h in Headers */, - 841E063A0AF8CE75005E6FCC /* juce_IIRFilter.h in Headers */, - 84F525010B32A8D500597B73 /* juce_ApplicationProperties.h in Headers */, - 84C0EA5F0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h in Headers */, - 84F6B7550C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h in Headers */, - 847F72DC0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h in Headers */, - 847F72DE0C2702A000CBECEC /* juce_FileTreeComponent.h in Headers */, - 84FFAF2C0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h in Headers */, - 84BC4E290C8DD38C00FA249B /* juce_AudioPlayHead.h in Headers */, - 84BC4E2B0C8DD38C00FA249B /* juce_AudioProcessor.h in Headers */, - 84BC4E2D0C8DD38C00FA249B /* juce_AudioProcessorEditor.h in Headers */, - 84BC4E2E0C8DD38C00FA249B /* juce_AudioProcessorListener.h in Headers */, - 84BC4E300C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h in Headers */, - 84FED3C90CAA96DA00003997 /* juce_FileDragAndDropTarget.h in Headers */, - 841B22E30D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h in Headers */, - 841B22E40D2E7FE3009D01AA /* juce_DirectXPluginFormat.h in Headers */, - 841B22E50D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h in Headers */, - 841B22E70D2E7FE3009D01AA /* juce_VSTPluginFormat.h in Headers */, - 841B22E90D2E7FE3009D01AA /* juce_AudioPluginFormat.h in Headers */, - 841B22EB0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.h in Headers */, - 841B22ED0D2E7FE3009D01AA /* juce_AudioPluginInstance.h in Headers */, - 841B22EF0D2E7FE3009D01AA /* juce_KnownPluginList.h in Headers */, - 841B22F10D2E7FE3009D01AA /* juce_PluginDescription.h in Headers */, - 841B22F30D2E7FE3009D01AA /* juce_PluginDirectoryScanner.h in Headers */, - 841B22F50D2E7FE3009D01AA /* juce_PluginListComponent.h in Headers */, - 847824810D7816A00082A5C5 /* juce_AudioCDBurner.h in Headers */, - 8495BB8D0D8067B2001D9C0B /* juce_AudioThumbnail.h in Headers */, - 8495BB8F0D8067B2001D9C0B /* juce_AudioThumbnailCache.h in Headers */, - 8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */, - 8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */, - 84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */, - 848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */, - 84688AFC0DED58820077FDEA /* juce_AudioProcessorGraph.h in Headers */, - 84688AFE0DED58820077FDEA /* juce_AudioProcessorPlayer.h in Headers */, - 8457783E0E8947C8006D9E4E /* juce_NSViewComponent.h in Headers */, - 84B1C1330F6287E70068E14F /* juce_CallbackMessage.h in Headers */, - 849C0A9E0F98AF62001C1494 /* juce_Variant.h in Headers */, - 84EE01050FF235750093FACA /* juce_CameraDevice.h in Headers */, 8484E9C1103C9595008B7C6C /* juce_mac_CarbonViewWrapperComponent.h in Headers */, 8484E9CC103C9595008B7C6C /* juce_mac_NativeIncludes.h in Headers */, 8484E9D8103C95A6008B7C6C /* juce_posix_SharedCode.h in Headers */, + 84F1E6E810403605006A1807 /* juce_Application.h in Headers */, + 84F1E6E910403605006A1807 /* juce_ApplicationCommandID.h in Headers */, + 84F1E6EB10403605006A1807 /* juce_ApplicationCommandInfo.h in Headers */, + 84F1E6ED10403605006A1807 /* juce_ApplicationCommandManager.h in Headers */, + 84F1E6EF10403605006A1807 /* juce_ApplicationCommandTarget.h in Headers */, + 84F1E6F110403605006A1807 /* juce_ApplicationProperties.h in Headers */, + 84F1E7F010403615006A1807 /* juce_AiffAudioFormat.h in Headers */, + 84F1E7F110403615006A1807 /* juce_AudioCDBurner.h in Headers */, + 84F1E7F310403615006A1807 /* juce_AudioCDReader.h in Headers */, + 84F1E7F510403615006A1807 /* juce_AudioFormat.h in Headers */, + 84F1E7F710403615006A1807 /* juce_AudioFormatManager.h in Headers */, + 84F1E7F810403615006A1807 /* juce_AudioFormatReader.h in Headers */, + 84F1E7F910403615006A1807 /* juce_AudioFormatWriter.h in Headers */, + 84F1E7FB10403615006A1807 /* juce_AudioSubsectionReader.h in Headers */, + 84F1E7FD10403615006A1807 /* juce_AudioThumbnail.h in Headers */, + 84F1E7FF10403615006A1807 /* juce_AudioThumbnailCache.h in Headers */, + 84F1E80010403615006A1807 /* juce_FlacAudioFormat.h in Headers */, + 84F1E80110403615006A1807 /* juce_OggVorbisAudioFormat.h in Headers */, + 84F1E80210403615006A1807 /* juce_QuickTimeAudioFormat.h in Headers */, + 84F1E80310403615006A1807 /* juce_WavAudioFormat.h in Headers */, + 84F1E87B10403615006A1807 /* juce_AudioFormatReaderSource.h in Headers */, + 84F1E87C10403615006A1807 /* juce_AudioSource.h in Headers */, + 84F1E87E10403615006A1807 /* juce_AudioSourcePlayer.h in Headers */, + 84F1E88010403615006A1807 /* juce_AudioTransportSource.h in Headers */, + 84F1E88210403615006A1807 /* juce_BufferingAudioSource.h in Headers */, + 84F1E88410403615006A1807 /* juce_ChannelRemappingAudioSource.h in Headers */, + 84F1E88610403615006A1807 /* juce_IIRFilterAudioSource.h in Headers */, + 84F1E88810403615006A1807 /* juce_MixerAudioSource.h in Headers */, + 84F1E88910403615006A1807 /* juce_PositionableAudioSource.h in Headers */, + 84F1E88B10403615006A1807 /* juce_ResamplingAudioSource.h in Headers */, + 84F1E88D10403615006A1807 /* juce_ToneGeneratorAudioSource.h in Headers */, + 84F1E88F10403615006A1807 /* juce_AudioDeviceManager.h in Headers */, + 84F1E89110403615006A1807 /* juce_AudioIODevice.h in Headers */, + 84F1E89310403615006A1807 /* juce_AudioIODeviceType.h in Headers */, + 84F1E89410403615006A1807 /* juce_MidiInput.h in Headers */, + 84F1E89610403615006A1807 /* juce_MidiOutput.h in Headers */, + 84F1E89810403615006A1807 /* juce_AudioDataConverters.h in Headers */, + 84F1E89A10403615006A1807 /* juce_AudioSampleBuffer.h in Headers */, + 84F1E89C10403615006A1807 /* juce_IIRFilter.h in Headers */, + 84F1E89E10403615006A1807 /* juce_MidiBuffer.h in Headers */, + 84F1E8A010403615006A1807 /* juce_MidiFile.h in Headers */, + 84F1E8A210403615006A1807 /* juce_MidiKeyboardState.h in Headers */, + 84F1E8A410403615006A1807 /* juce_MidiMessage.h in Headers */, + 84F1E8A610403615006A1807 /* juce_MidiMessageCollector.h in Headers */, + 84F1E8A810403615006A1807 /* juce_MidiMessageSequence.h in Headers */, + 84F1E8AA10403615006A1807 /* juce_AudioPluginFormat.h in Headers */, + 84F1E8AC10403615006A1807 /* juce_AudioPluginFormatManager.h in Headers */, + 84F1E8AE10403615006A1807 /* juce_AudioPluginInstance.h in Headers */, + 84F1E8B010403615006A1807 /* juce_KnownPluginList.h in Headers */, + 84F1E8B210403615006A1807 /* juce_PluginDescription.h in Headers */, + 84F1E8B410403615006A1807 /* juce_PluginDirectoryScanner.h in Headers */, + 84F1E8B610403615006A1807 /* juce_PluginListComponent.h in Headers */, + 84F1E8B710403615006A1807 /* juce_AudioUnitPluginFormat.h in Headers */, + 84F1E8BA10403615006A1807 /* juce_VSTMidiEventList.h in Headers */, + 84F1E8BB10403615006A1807 /* juce_VSTPluginFormat.h in Headers */, + 84F1E8BF10403615006A1807 /* juce_AudioPlayHead.h in Headers */, + 84F1E8C110403615006A1807 /* juce_AudioProcessor.h in Headers */, + 84F1E8C310403615006A1807 /* juce_AudioProcessorEditor.h in Headers */, + 84F1E8C510403615006A1807 /* juce_AudioProcessorGraph.h in Headers */, + 84F1E8C610403615006A1807 /* juce_AudioProcessorListener.h in Headers */, + 84F1E8C810403615006A1807 /* juce_AudioProcessorPlayer.h in Headers */, + 84F1E8CA10403615006A1807 /* juce_GenericAudioProcessorEditor.h in Headers */, + 84F1E8CC10403615006A1807 /* juce_Sampler.h in Headers */, + 84F1E8CE10403615006A1807 /* juce_Synthesiser.h in Headers */, + 84F1E8E110403671006A1807 /* juce_Array.h in Headers */, + 84F1E8E210403671006A1807 /* juce_ArrayAllocationBase.h in Headers */, + 84F1E8E410403671006A1807 /* juce_BitArray.h in Headers */, + 84F1E8E510403671006A1807 /* juce_ElementComparator.h in Headers */, + 84F1E8E710403671006A1807 /* juce_MemoryBlock.h in Headers */, + 84F1E8E810403671006A1807 /* juce_OwnedArray.h in Headers */, + 84F1E8EA10403671006A1807 /* juce_PropertySet.h in Headers */, + 84F1E8EB10403671006A1807 /* juce_ReferenceCountedArray.h in Headers */, + 84F1E8EC10403671006A1807 /* juce_ReferenceCountedObject.h in Headers */, + 84F1E8ED10403671006A1807 /* juce_SortedSet.h in Headers */, + 84F1E8EE10403671006A1807 /* juce_SparseSet.h in Headers */, + 84F1E8F010403671006A1807 /* juce_Variant.h in Headers */, + 84F1E8F110403671006A1807 /* juce_VoidArray.h in Headers */, + 84F1E90C10403681006A1807 /* juce_Time.h in Headers */, + 84F1E90F10403681006A1807 /* juce_SystemStats.h in Headers */, + 84F1E91010403681006A1807 /* juce_Singleton.h in Headers */, + 84F1E91210403681006A1807 /* juce_RelativeTime.h in Headers */, + 84F1E91310403681006A1807 /* juce_PlatformDefs.h in Headers */, + 84F1E91510403681006A1807 /* juce_Random.h in Headers */, + 84F1E91610403681006A1807 /* juce_MathsFunctions.h in Headers */, + 84F1E91710403681006A1807 /* juce_Memory.h in Headers */, + 84F1E91810403681006A1807 /* juce_Logger.h in Headers */, + 84F1E91A10403681006A1807 /* juce_Initialisation.h in Headers */, + 84F1E91B10403681006A1807 /* juce_FileLogger.h in Headers */, + 84F1E91D10403681006A1807 /* juce_DataConversions.h in Headers */, + 84F1E91E10403681006A1807 /* juce_Atomic.h in Headers */, + 84F1E92010403681006A1807 /* juce_Uuid.h in Headers */, + 84F1E92210403681006A1807 /* juce_PerformanceCounter.h in Headers */, + 84F1E92310403681006A1807 /* juce_PlatformUtilities.h in Headers */, + 84F1E92410403681006A1807 /* juce_StandardHeader.h in Headers */, + 84F1E9331040369C006A1807 /* juce_UndoManager.h in Headers */, + 84F1E9341040369C006A1807 /* juce_SystemClipboard.h in Headers */, + 84F1E9361040369C006A1807 /* juce_PropertiesFile.h in Headers */, + 84F1E9371040369C006A1807 /* juce_UndoableAction.h in Headers */, + 84F1E9381040369C006A1807 /* juce_SelectedItemSet.h in Headers */, + 84F1E9391040369C006A1807 /* juce_DeletedAtShutdown.h in Headers */, + 84F1E93B1040369C006A1807 /* juce_RecentlyOpenedFilesList.h in Headers */, + 84F1E93C1040369C006A1807 /* juce_FileBasedDocument.h in Headers */, + 84F1E966104036B3006A1807 /* juce_BlowFish.h in Headers */, + 84F1E968104036B3006A1807 /* juce_MD5.h in Headers */, + 84F1E96A104036B3006A1807 /* juce_Primes.h in Headers */, + 84F1E96C104036B3006A1807 /* juce_RSAKey.h in Headers */, + 84F1E96E104036B3006A1807 /* juce_ActionBroadcaster.h in Headers */, + 84F1E96F104036B3006A1807 /* juce_ActionListener.h in Headers */, + 84F1E971104036B3006A1807 /* juce_ActionListenerList.h in Headers */, + 84F1E973104036B3006A1807 /* juce_AsyncUpdater.h in Headers */, + 84F1E974104036B3006A1807 /* juce_CallbackMessage.h in Headers */, + 84F1E976104036B3006A1807 /* juce_ChangeBroadcaster.h in Headers */, + 84F1E977104036B3006A1807 /* juce_ChangeListener.h in Headers */, + 84F1E979104036B3006A1807 /* juce_ChangeListenerList.h in Headers */, + 84F1E97B104036B3006A1807 /* juce_InterprocessConnection.h in Headers */, + 84F1E97D104036B3006A1807 /* juce_InterprocessConnectionServer.h in Headers */, + 84F1E97F104036B3006A1807 /* juce_Message.h in Headers */, + 84F1E981104036B3006A1807 /* juce_MessageListener.h in Headers */, + 84F1E983104036B3006A1807 /* juce_MessageManager.h in Headers */, + 84F1E985104036B3006A1807 /* juce_MultiTimer.h in Headers */, + 84F1E987104036B3006A1807 /* juce_Timer.h in Headers */, + 84F1E9EB104036D6006A1807 /* juce_DirectoryIterator.h in Headers */, + 84F1E9ED104036D6006A1807 /* juce_File.h in Headers */, + 84F1E9EF104036D6006A1807 /* juce_FileInputStream.h in Headers */, + 84F1E9F1104036D6006A1807 /* juce_FileOutputStream.h in Headers */, + 84F1E9F3104036D6006A1807 /* juce_FileSearchPath.h in Headers */, + 84F1E9F5104036D6006A1807 /* juce_NamedPipe.h in Headers */, + 84F1E9F7104036D6006A1807 /* juce_ZipFile.h in Headers */, + 84F1E9F9104036D6006A1807 /* juce_Socket.h in Headers */, + 84F1E9FB104036D6006A1807 /* juce_URL.h in Headers */, + 84F1E9FD104036D6006A1807 /* juce_BufferedInputStream.h in Headers */, + 84F1E9FF104036D6006A1807 /* juce_FileInputSource.h in Headers */, + 84F1EA01104036D6006A1807 /* juce_GZIPCompressorOutputStream.h in Headers */, + 84F1EA03104036D6006A1807 /* juce_GZIPDecompressorInputStream.h in Headers */, + 84F1EA04104036D6006A1807 /* juce_InputSource.h in Headers */, + 84F1EA06104036D6006A1807 /* juce_MemoryInputStream.h in Headers */, + 84F1EA08104036D6006A1807 /* juce_MemoryOutputStream.h in Headers */, + 84F1EA0A104036D6006A1807 /* juce_SubregionStream.h in Headers */, + 84F1EA22104036D6006A1807 /* juce_InputStream.h in Headers */, + 84F1EA24104036D6006A1807 /* juce_OutputStream.h in Headers */, + 84F1EA26104036D6006A1807 /* juce_CharacterFunctions.h in Headers */, + 84F1EA28104036D6006A1807 /* juce_LocalisedStrings.h in Headers */, + 84F1EA2A104036D6006A1807 /* juce_String.h in Headers */, + 84F1EA2C104036D6006A1807 /* juce_StringArray.h in Headers */, + 84F1EA2E104036D6006A1807 /* juce_StringPairArray.h in Headers */, + 84F1EA30104036D6006A1807 /* juce_XmlDocument.h in Headers */, + 84F1EA32104036D6006A1807 /* juce_XmlElement.h in Headers */, + 84F1EA33104036D6006A1807 /* juce_CriticalSection.h in Headers */, + 84F1EA35104036D6006A1807 /* juce_InterProcessLock.h in Headers */, + 84F1EA36104036D6006A1807 /* juce_Process.h in Headers */, + 84F1EA38104036D6006A1807 /* juce_ReadWriteLock.h in Headers */, + 84F1EA39104036D6006A1807 /* juce_ScopedLock.h in Headers */, + 84F1EA3A104036D6006A1807 /* juce_ScopedReadLock.h in Headers */, + 84F1EA3B104036D6006A1807 /* juce_ScopedTryLock.h in Headers */, + 84F1EA3C104036D6006A1807 /* juce_ScopedWriteLock.h in Headers */, + 84F1EA3E104036D6006A1807 /* juce_Thread.h in Headers */, + 84F1EA40104036D6006A1807 /* juce_ThreadPool.h in Headers */, + 84F1EA42104036D6006A1807 /* juce_TimeSliceThread.h in Headers */, + 84F1EA43104036D6006A1807 /* juce_WaitableEvent.h in Headers */, + 84F1EBCD1040370A006A1807 /* juce_Component.h in Headers */, + 84F1EBCE1040370A006A1807 /* juce_ComponentDeletionWatcher.h in Headers */, + 84F1EBD01040370A006A1807 /* juce_ComponentListener.h in Headers */, + 84F1EBD21040370A006A1807 /* juce_Desktop.h in Headers */, + 84F1EBD41040370A006A1807 /* juce_ArrowButton.h in Headers */, + 84F1EBD61040370A006A1807 /* juce_Button.h in Headers */, + 84F1EBD81040370A006A1807 /* juce_DrawableButton.h in Headers */, + 84F1EBDA1040370A006A1807 /* juce_HyperlinkButton.h in Headers */, + 84F1EBDC1040370A006A1807 /* juce_ImageButton.h in Headers */, + 84F1EBDE1040370A006A1807 /* juce_ShapeButton.h in Headers */, + 84F1EBE01040370A006A1807 /* juce_TextButton.h in Headers */, + 84F1EBE21040370A006A1807 /* juce_ToggleButton.h in Headers */, + 84F1EBE41040370A006A1807 /* juce_ToolbarButton.h in Headers */, + 84F1EBE61040370A006A1807 /* juce_ComboBox.h in Headers */, + 84F1EBE81040370A006A1807 /* juce_Label.h in Headers */, + 84F1EBEA1040370A006A1807 /* juce_ListBox.h in Headers */, + 84F1EBEC1040370A006A1807 /* juce_ProgressBar.h in Headers */, + 84F1EBEE1040370A006A1807 /* juce_Slider.h in Headers */, + 84F1EBEF1040370A006A1807 /* juce_SliderListener.h in Headers */, + 84F1EBF11040370A006A1807 /* juce_TableHeaderComponent.h in Headers */, + 84F1EBF31040370A006A1807 /* juce_TableListBox.h in Headers */, + 84F1EBF51040370A006A1807 /* juce_TextEditor.h in Headers */, + 84F1EBF71040370A006A1807 /* juce_Toolbar.h in Headers */, + 84F1EBF91040370A006A1807 /* juce_ToolbarItemComponent.h in Headers */, + 84F1EBFA1040370A006A1807 /* juce_ToolbarItemFactory.h in Headers */, + 84F1EBFC1040370A006A1807 /* juce_ToolbarItemPalette.h in Headers */, + 84F1EBFE1040370A006A1807 /* juce_TreeView.h in Headers */, + 84F1EC001040370A006A1807 /* juce_DirectoryContentsDisplayComponent.h in Headers */, + 84F1EC021040370A006A1807 /* juce_DirectoryContentsList.h in Headers */, + 84F1EC041040370A006A1807 /* juce_FileBrowserComponent.h in Headers */, + 84F1EC051040370A006A1807 /* juce_FileBrowserListener.h in Headers */, + 84F1EC071040370A006A1807 /* juce_FileChooser.h in Headers */, + 84F1EC091040370A006A1807 /* juce_FileChooserDialogBox.h in Headers */, + 84F1EC0B1040370A006A1807 /* juce_FileFilter.h in Headers */, + 84F1EC0D1040370A006A1807 /* juce_FileListComponent.h in Headers */, + 84F1EC0F1040370A006A1807 /* juce_FilenameComponent.h in Headers */, + 84F1EC101040370A006A1807 /* juce_FilePreviewComponent.h in Headers */, + 84F1EC121040370A006A1807 /* juce_FileSearchPathListComponent.h in Headers */, + 84F1EC141040370A006A1807 /* juce_FileTreeComponent.h in Headers */, + 84F1EC161040370A006A1807 /* juce_ImagePreviewComponent.h in Headers */, + 84F1EC181040370A006A1807 /* juce_WildcardFileFilter.h in Headers */, + 84F1EC1A1040370A006A1807 /* juce_KeyboardFocusTraverser.h in Headers */, + 84F1EC1C1040370A006A1807 /* juce_KeyListener.h in Headers */, + 84F1EC1E1040370A006A1807 /* juce_KeyMappingEditorComponent.h in Headers */, + 84F1EC201040370A006A1807 /* juce_KeyPress.h in Headers */, + 84F1EC221040370A006A1807 /* juce_KeyPressMappingSet.h in Headers */, + 84F1EC241040370A006A1807 /* juce_ModifierKeys.h in Headers */, + 84F1EC261040370A006A1807 /* juce_ComponentAnimator.h in Headers */, + 84F1EC281040370A006A1807 /* juce_ComponentBoundsConstrainer.h in Headers */, + 84F1EC2A1040370A006A1807 /* juce_ComponentMovementWatcher.h in Headers */, + 84F1EC2C1040370A006A1807 /* juce_GroupComponent.h in Headers */, + 84F1EC2E1040370A006A1807 /* juce_MultiDocumentPanel.h in Headers */, + 84F1EC301040370A006A1807 /* juce_ResizableBorderComponent.h in Headers */, + 84F1EC321040370A006A1807 /* juce_ResizableCornerComponent.h in Headers */, + 84F1EC341040370A006A1807 /* juce_ScrollBar.h in Headers */, + 84F1EC361040370A006A1807 /* juce_StretchableLayoutManager.h in Headers */, + 84F1EC381040370A006A1807 /* juce_StretchableLayoutResizerBar.h in Headers */, + 84F1EC3A1040370A006A1807 /* juce_StretchableObjectResizer.h in Headers */, + 84F1EC3C1040370A006A1807 /* juce_TabbedButtonBar.h in Headers */, + 84F1EC3E1040370A006A1807 /* juce_TabbedComponent.h in Headers */, + 84F1EC401040370A006A1807 /* juce_Viewport.h in Headers */, + 84F1EC421040370A006A1807 /* juce_LookAndFeel.h in Headers */, + 84F1EC441040370A006A1807 /* juce_OldSchoolLookAndFeel.h in Headers */, + 84F1EC461040370A006A1807 /* juce_MenuBarComponent.h in Headers */, + 84F1EC481040370A006A1807 /* juce_MenuBarModel.h in Headers */, + 84F1EC4A1040370A006A1807 /* juce_PopupMenu.h in Headers */, + 84F1EC4B1040370A006A1807 /* juce_PopupMenuCustomComponent.h in Headers */, + 84F1EC4D1040370A006A1807 /* juce_ComponentDragger.h in Headers */, + 84F1EC4F1040370A006A1807 /* juce_DragAndDropContainer.h in Headers */, + 84F1EC501040370A006A1807 /* juce_DragAndDropTarget.h in Headers */, + 84F1EC511040370A006A1807 /* juce_FileDragAndDropTarget.h in Headers */, + 84F1EC521040370A006A1807 /* juce_LassoComponent.h in Headers */, + 84F1EC531040370A006A1807 /* juce_MouseCursor.h in Headers */, + 84F1EC551040370A006A1807 /* juce_MouseEvent.h in Headers */, + 84F1EC571040370A006A1807 /* juce_MouseHoverDetector.h in Headers */, + 84F1EC591040370A006A1807 /* juce_MouseListener.h in Headers */, + 84F1EC5B1040370A006A1807 /* juce_TooltipClient.h in Headers */, + 84F1EC5D1040370A006A1807 /* juce_BooleanPropertyComponent.h in Headers */, + 84F1EC5F1040370A006A1807 /* juce_ButtonPropertyComponent.h in Headers */, + 84F1EC611040370A006A1807 /* juce_ChoicePropertyComponent.h in Headers */, + 84F1EC631040370A006A1807 /* juce_PropertyComponent.h in Headers */, + 84F1EC651040370A006A1807 /* juce_PropertyPanel.h in Headers */, + 84F1EC671040370A006A1807 /* juce_SliderPropertyComponent.h in Headers */, + 84F1EC691040370A006A1807 /* juce_TextPropertyComponent.h in Headers */, + 84F1EC6C1040370A006A1807 /* juce_AudioDeviceSelectorComponent.h in Headers */, + 84F1EC6E1040370A006A1807 /* juce_BubbleComponent.h in Headers */, + 84F1EC701040370A006A1807 /* juce_BubbleMessageComponent.h in Headers */, + 84F1EC721040370A006A1807 /* juce_ColourSelector.h in Headers */, + 84F1EC741040370A006A1807 /* juce_DropShadower.h in Headers */, + 84F1EC761040370A006A1807 /* juce_MagnifierComponent.h in Headers */, + 84F1EC781040370A006A1807 /* juce_MidiKeyboardComponent.h in Headers */, + 84F1EC791040370A006A1807 /* juce_NSViewComponent.h in Headers */, + 84F1EC7B1040370A006A1807 /* juce_OpenGLComponent.h in Headers */, + 84F1EC7D1040370A006A1807 /* juce_PreferencesPanel.h in Headers */, + 84F1EC7E1040370A006A1807 /* juce_QuickTimeMovieComponent.h in Headers */, + 84F1EC801040370A006A1807 /* juce_SystemTrayIconComponent.h in Headers */, + 84F1EC811040370A006A1807 /* juce_WebBrowserComponent.h in Headers */, + 84F1EC831040370A006A1807 /* juce_AlertWindow.h in Headers */, + 84F1EC851040370A006A1807 /* juce_ComponentPeer.h in Headers */, + 84F1EC871040370A006A1807 /* juce_DialogWindow.h in Headers */, + 84F1EC891040370A006A1807 /* juce_DocumentWindow.h in Headers */, + 84F1EC8B1040370A006A1807 /* juce_ResizableWindow.h in Headers */, + 84F1EC8D1040370A006A1807 /* juce_SplashScreen.h in Headers */, + 84F1EC8F1040370A006A1807 /* juce_ThreadWithProgressWindow.h in Headers */, + 84F1EC911040370A006A1807 /* juce_TooltipWindow.h in Headers */, + 84F1EC931040370A006A1807 /* juce_TopLevelWindow.h in Headers */, + 84F1EC951040370A006A1807 /* juce_Brush.h in Headers */, + 84F1EC971040370A006A1807 /* juce_GradientBrush.h in Headers */, + 84F1EC991040370A006A1807 /* juce_ImageBrush.h in Headers */, + 84F1EC9B1040370A006A1807 /* juce_SolidColourBrush.h in Headers */, + 84F1EC9E1040370A006A1807 /* juce_ColourGradient.h in Headers */, + 84F1ECA01040370A006A1807 /* juce_Colours.h in Headers */, + 84F1ECA11040370A006A1807 /* juce_PixelFormats.h in Headers */, + 84F1ECA21040370A006A1807 /* juce_Colour.h in Headers */, + 84F1ECA41040370A006A1807 /* juce_EdgeTable.h in Headers */, + 84F1ECA61040370A006A1807 /* juce_Graphics.h in Headers */, + 84F1ECA81040370A006A1807 /* juce_Justification.h in Headers */, + 84F1ECA91040370A006A1807 /* juce_LowLevelGraphicsContext.h in Headers */, + 84F1ECAB1040370A006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.h in Headers */, + 84F1ECAD1040370A006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.h in Headers */, + 84F1ECAF1040370A006A1807 /* juce_RectanglePlacement.h in Headers */, + 84F1ECB11040370A006A1807 /* juce_Drawable.h in Headers */, + 84F1ECB31040370A006A1807 /* juce_DrawableComposite.h in Headers */, + 84F1ECB51040370A006A1807 /* juce_DrawableImage.h in Headers */, + 84F1ECB71040370A006A1807 /* juce_DrawablePath.h in Headers */, + 84F1ECB91040370A006A1807 /* juce_DrawableText.h in Headers */, + 84F1ECBC1040370A006A1807 /* juce_DropShadowEffect.h in Headers */, + 84F1ECBE1040370A006A1807 /* juce_GlowEffect.h in Headers */, + 84F1ECBF1040370A006A1807 /* juce_ImageEffectFilter.h in Headers */, + 84F1ECC11040370A006A1807 /* juce_ReduceOpacityEffect.h in Headers */, + 84F1ECC31040370A006A1807 /* juce_Font.h in Headers */, + 84F1ECC51040370A006A1807 /* juce_GlyphArrangement.h in Headers */, + 84F1ECC71040370A006A1807 /* juce_TextLayout.h in Headers */, + 84F1ECC91040370A006A1807 /* juce_Typeface.h in Headers */, + 84F1ECCB1040370A006A1807 /* juce_AffineTransform.h in Headers */, + 84F1ECCD1040370A006A1807 /* juce_BorderSize.h in Headers */, + 84F1ECCF1040370A006A1807 /* juce_Line.h in Headers */, + 84F1ECD11040370A006A1807 /* juce_Path.h in Headers */, + 84F1ECD31040370A006A1807 /* juce_PathIterator.h in Headers */, + 84F1ECD51040370A006A1807 /* juce_PathStrokeType.h in Headers */, + 84F1ECD71040370A006A1807 /* juce_Point.h in Headers */, + 84F1ECD91040370A006A1807 /* juce_PositionedRectangle.h in Headers */, + 84F1ECDB1040370A006A1807 /* juce_Rectangle.h in Headers */, + 84F1ECDD1040370A006A1807 /* juce_RectangleList.h in Headers */, + 84F1ECDE1040370A006A1807 /* juce_CameraDevice.h in Headers */, + 84F1ECE01040370A006A1807 /* juce_Image.h in Headers */, + 84F1ECE21040370A006A1807 /* juce_ImageCache.h in Headers */, + 84F1ECE41040370A006A1807 /* juce_ImageConvolutionKernel.h in Headers */, + 84F1ECE61040370A006A1807 /* juce_ImageFileFormat.h in Headers */, + 84F1ECE81040370A006A1807 /* juce_GIFLoader.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2614,258 +2605,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */, - 84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */, - 84A48A2E08A22E4B00752A2B /* juce_AiffAudioFormat.cpp in Sources */, - 84A48A3008A22E4B00752A2B /* juce_AudioCDReader.cpp in Sources */, - 84A48A3208A22E4B00752A2B /* juce_AudioFormat.cpp in Sources */, - 84A48A3608A22E4B00752A2B /* juce_AudioSubsectionReader.cpp in Sources */, - 84A48A3808A22E4B00752A2B /* juce_WavAudioFormat.cpp in Sources */, - 84A48A3A08A22E4B00752A2B /* juce_AudioFormatReaderSource.cpp in Sources */, - 84A48A3D08A22E4B00752A2B /* juce_AudioSourcePlayer.cpp in Sources */, - 84A48A3F08A22E4B00752A2B /* juce_AudioTransportSource.cpp in Sources */, - 84A48A4108A22E4B00752A2B /* juce_BufferingAudioSource.cpp in Sources */, - 84A48A4308A22E4B00752A2B /* juce_MixerAudioSource.cpp in Sources */, - 84A48A4608A22E4B00752A2B /* juce_ResamplingAudioSource.cpp in Sources */, - 84A48A5408A22E4B00752A2B /* juce_ActionBroadcaster.cpp in Sources */, - 84A48A5708A22E4B00752A2B /* juce_ActionListenerList.cpp in Sources */, - 84A48A5908A22E4B00752A2B /* juce_AsyncUpdater.cpp in Sources */, - 84A48A5B08A22E4B00752A2B /* juce_ChangeBroadcaster.cpp in Sources */, - 84A48A5E08A22E4B00752A2B /* juce_ChangeListenerList.cpp in Sources */, - 84A48A6008A22E4B00752A2B /* juce_Message.cpp in Sources */, - 84A48A6208A22E4B00752A2B /* juce_MessageListener.cpp in Sources */, - 84A48A6408A22E4B00752A2B /* juce_MessageManager.cpp in Sources */, - 84A48A6608A22E4B00752A2B /* juce_Timer.cpp in Sources */, - 84A48A6808A22E4B00752A2B /* juce_ArrowButton.cpp in Sources */, - 84A48A6A08A22E4B00752A2B /* juce_Button.cpp in Sources */, - 84A48A6C08A22E4B00752A2B /* juce_DrawableButton.cpp in Sources */, - 84A48A6E08A22E4B00752A2B /* juce_HyperlinkButton.cpp in Sources */, - 84A48A7008A22E4B00752A2B /* juce_ImageButton.cpp in Sources */, - 84A48A7208A22E4B00752A2B /* juce_ShapeButton.cpp in Sources */, - 84A48A7408A22E4B00752A2B /* juce_TextButton.cpp in Sources */, - 84A48A7608A22E4B00752A2B /* juce_ToggleButton.cpp in Sources */, - 84A48A7808A22E4B00752A2B /* juce_ComboBox.cpp in Sources */, - 84A48A7C08A22E4B00752A2B /* juce_Label.cpp in Sources */, - 84A48A7E08A22E4B00752A2B /* juce_ListBox.cpp in Sources */, - 84A48A8008A22E4B00752A2B /* juce_ProgressBar.cpp in Sources */, - 84A48A8408A22E4B00752A2B /* juce_Slider.cpp in Sources */, - 84A48A8608A22E4B00752A2B /* juce_TextEditor.cpp in Sources */, - 84A48A8808A22E4B00752A2B /* juce_TreeView.cpp in Sources */, - 84A48A8A08A22E4B00752A2B /* juce_Component.cpp in Sources */, - 84A48A8D08A22E4B00752A2B /* juce_ComponentListener.cpp in Sources */, - 84A48A8F08A22E4B00752A2B /* juce_Desktop.cpp in Sources */, - 84A48A9108A22E4B00752A2B /* juce_KeyListener.cpp in Sources */, - 84A48A9308A22E4B00752A2B /* juce_KeyMappingEditorComponent.cpp in Sources */, - 84A48A9508A22E4B00752A2B /* juce_KeyPress.cpp in Sources */, - 84A48A9708A22E4B00752A2B /* juce_KeyPressMappingSet.cpp in Sources */, - 84A48A9908A22E4B00752A2B /* juce_ModifierKeys.cpp in Sources */, - 84A48A9B08A22E4B00752A2B /* juce_GroupComponent.cpp in Sources */, - 84A48A9E08A22E4B00752A2B /* juce_ResizableBorderComponent.cpp in Sources */, - 84A48AA008A22E4B00752A2B /* juce_ResizableCornerComponent.cpp in Sources */, - 84A48AA208A22E4B00752A2B /* juce_ScrollBar.cpp in Sources */, - 84A48AA408A22E4B00752A2B /* juce_StretchableLayoutManager.cpp in Sources */, - 84A48AA608A22E4B00752A2B /* juce_StretchableLayoutResizerBar.cpp in Sources */, - 84A48AA808A22E4B00752A2B /* juce_TabbedButtonBar.cpp in Sources */, - 84A48AAA08A22E4B00752A2B /* juce_TabbedComponent.cpp in Sources */, - 84A48AAC08A22E4B00752A2B /* juce_Viewport.cpp in Sources */, - 84A48AAE08A22E4B00752A2B /* juce_LookAndFeel.cpp in Sources */, - 84A48AB008A22E4B00752A2B /* juce_OldSchoolLookAndFeel.cpp in Sources */, - 84A48AB208A22E4B00752A2B /* juce_MenuBarComponent.cpp in Sources */, - 84A48AB508A22E4B00752A2B /* juce_PopupMenu.cpp in Sources */, - 84A48AB808A22E4B00752A2B /* juce_ComponentDragger.cpp in Sources */, - 84A48ABA08A22E4B00752A2B /* juce_DragAndDropContainer.cpp in Sources */, - 84A48ABD08A22E4B00752A2B /* juce_MouseCursor.cpp in Sources */, - 84A48ABF08A22E4B00752A2B /* juce_MouseEvent.cpp in Sources */, - 84A48AC108A22E4B00752A2B /* juce_MouseHoverDetector.cpp in Sources */, - 84A48AC308A22E4B00752A2B /* juce_MouseListener.cpp in Sources */, - 84A48AC508A22E4B00752A2B /* juce_BubbleComponent.cpp in Sources */, - 84A48AC708A22E4B00752A2B /* juce_BubbleMessageComponent.cpp in Sources */, - 84A48AC908A22E4B00752A2B /* juce_ColourSelector.cpp in Sources */, - 84A48ACB08A22E4B00752A2B /* juce_DropShadower.cpp in Sources */, - 84A48ACD08A22E4B00752A2B /* juce_OpenGLComponent.cpp in Sources */, - 84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */, - 84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */, - 84A48AD508A22E4B00752A2B /* juce_DialogWindow.cpp in Sources */, - 84A48ADB08A22E4B00752A2B /* juce_ResizableWindow.cpp in Sources */, - 84A48ADD08A22E4B00752A2B /* juce_SplashScreen.cpp in Sources */, - 84A48ADF08A22E4B00752A2B /* juce_ThreadWithProgressWindow.cpp in Sources */, - 84A48AE108A22E4B00752A2B /* juce_TooltipWindow.cpp in Sources */, - 84A48AE308A22E4B00752A2B /* juce_Brush.cpp in Sources */, - 84A48AE508A22E4B00752A2B /* juce_GradientBrush.cpp in Sources */, - 84A48AE708A22E4B00752A2B /* juce_ImageBrush.cpp in Sources */, - 84A48AE908A22E4B00752A2B /* juce_SolidColourBrush.cpp in Sources */, - 84A48AEB08A22E4B00752A2B /* juce_Colour.cpp in Sources */, - 84A48AED08A22E4B00752A2B /* juce_ColourGradient.cpp in Sources */, - 84A48AEF08A22E4B00752A2B /* juce_Colours.cpp in Sources */, - 84A48AF208A22E4B00752A2B /* juce_EdgeTable.cpp in Sources */, - 84A48AF408A22E4B00752A2B /* juce_Graphics.cpp in Sources */, - 84A48AF608A22E4B00752A2B /* juce_Justification.cpp in Sources */, - 84A48AF808A22E4B00752A2B /* juce_Drawable.cpp in Sources */, - 84A48AFA08A22E4B00752A2B /* juce_DrawableComposite.cpp in Sources */, - 84A48AFC08A22E4B00752A2B /* juce_DrawableImage.cpp in Sources */, - 84A48AFE08A22E4B00752A2B /* juce_DrawablePath.cpp in Sources */, - 84A48B0008A22E4B00752A2B /* juce_DrawableText.cpp in Sources */, - 84A48B0208A22E4B00752A2B /* juce_DropShadowEffect.cpp in Sources */, - 84A48B0408A22E4B00752A2B /* juce_GlowEffect.cpp in Sources */, - 84A48B0708A22E4B00752A2B /* juce_ReduceOpacityEffect.cpp in Sources */, - 84A48B0908A22E4B00752A2B /* juce_Font.cpp in Sources */, - 84A48B0B08A22E4B00752A2B /* juce_GlyphArrangement.cpp in Sources */, - 84A48B0D08A22E4B00752A2B /* juce_TextLayout.cpp in Sources */, - 84A48B0F08A22E4B00752A2B /* juce_Typeface.cpp in Sources */, - 84A48B1108A22E4B00752A2B /* juce_AffineTransform.cpp in Sources */, - 84A48B1308A22E4B00752A2B /* juce_Line.cpp in Sources */, - 84A48B1508A22E4B00752A2B /* juce_Path.cpp in Sources */, - 84A48B1708A22E4B00752A2B /* juce_PathIterator.cpp in Sources */, - 84A48B1908A22E4B00752A2B /* juce_PathStrokeType.cpp in Sources */, - 84A48B1B08A22E4B00752A2B /* juce_Point.cpp in Sources */, - 84A48B1D08A22E4B00752A2B /* juce_Rectangle.cpp in Sources */, - 84A48B1F08A22E4B00752A2B /* juce_RectangleList.cpp in Sources */, - 84A48B4908A22E4B00752A2B /* juce_GIFLoader.cpp in Sources */, - 84A48B4B08A22E4B00752A2B /* juce_JPEGLoader.cpp in Sources */, - 84A48B4C08A22E4B00752A2B /* juce_PNGLoader.cpp in Sources */, - 84A48B5A08A22E4B00752A2B /* juce_Image.cpp in Sources */, - 84A48B5C08A22E4B00752A2B /* juce_ImageCache.cpp in Sources */, - 84A48B5E08A22E4B00752A2B /* juce_ImageConvolutionKernel.cpp in Sources */, - 84A48B6008A22E4B00752A2B /* juce_ImageFileFormat.cpp in Sources */, - 84A48B6C08A22E4B00752A2B /* juce_FileLogger.cpp in Sources */, - 84A48B6F08A22E4B00752A2B /* juce_Logger.cpp in Sources */, - 84A48B7408A22E4B00752A2B /* juce_Random.cpp in Sources */, - 84A48B7608A22E4B00752A2B /* juce_RelativeTime.cpp in Sources */, - 84A48B7A08A22E4B00752A2B /* juce_SystemStats.cpp in Sources */, - 84A48B7C08A22E4B00752A2B /* juce_Time.cpp in Sources */, - 84A48B8008A22E4B00752A2B /* juce_BitArray.cpp in Sources */, - 84A48B8308A22E4B00752A2B /* juce_MemoryBlock.cpp in Sources */, - 84A48B8608A22E4B00752A2B /* juce_PropertySet.cpp in Sources */, - 84A48B8D08A22E4B00752A2B /* juce_BlowFish.cpp in Sources */, - 84A48B8F08A22E4B00752A2B /* juce_MD5.cpp in Sources */, - 84A48B9108A22E4B00752A2B /* juce_Primes.cpp in Sources */, - 84A48B9308A22E4B00752A2B /* juce_RSAKey.cpp in Sources */, - 84A48B9508A22E4B00752A2B /* juce_DirectoryIterator.cpp in Sources */, - 84A48B9708A22E4B00752A2B /* juce_File.cpp in Sources */, - 84A48B9908A22E4B00752A2B /* juce_FileInputStream.cpp in Sources */, - 84A48B9B08A22E4B00752A2B /* juce_FileOutputStream.cpp in Sources */, - 84A48B9D08A22E4B00752A2B /* juce_FileSearchPath.cpp in Sources */, - 84A48B9F08A22E4B00752A2B /* juce_InputStream.cpp in Sources */, - 84A48BA108A22E4B00752A2B /* juce_OutputStream.cpp in Sources */, - 84A48BA308A22E4B00752A2B /* juce_URL.cpp in Sources */, - 84A48BA508A22E4B00752A2B /* juce_BufferedInputStream.cpp in Sources */, - 84A48BA708A22E4B00752A2B /* juce_GZIPCompressorOutputStream.cpp in Sources */, - 84A48BA908A22E4B00752A2B /* juce_GZIPDecompressorInputStream.cpp in Sources */, - 84A48BAB08A22E4B00752A2B /* juce_MemoryInputStream.cpp in Sources */, - 84A48BAD08A22E4B00752A2B /* juce_MemoryOutputStream.cpp in Sources */, - 84A48BAF08A22E4B00752A2B /* juce_SubregionStream.cpp in Sources */, - 84A48BC808A22E4B00752A2B /* juce_PerformanceCounter.cpp in Sources */, - 84A48BCB08A22E4B00752A2B /* juce_Uuid.cpp in Sources */, - 84A48BCD08A22E4B00752A2B /* juce_ZipFile.cpp in Sources */, - 84A48BCF08A22E4B00752A2B /* juce_LocalisedStrings.cpp in Sources */, - 84A48BD108A22E4B00752A2B /* juce_String.cpp in Sources */, - 84A48BD308A22E4B00752A2B /* juce_StringArray.cpp in Sources */, - 84A48BD508A22E4B00752A2B /* juce_StringPairArray.cpp in Sources */, - 84A48BD808A22E4B00752A2B /* juce_XmlDocument.cpp in Sources */, - 84A48BDA08A22E4B00752A2B /* juce_XmlElement.cpp in Sources */, - 84A48BDE08A22E4B00752A2B /* juce_InterProcessLock.cpp in Sources */, - 84A48BE208A22E4B00752A2B /* juce_ReadWriteLock.cpp in Sources */, - 84A48BE708A22E4B00752A2B /* juce_Thread.cpp in Sources */, - 84A48BE908A22E4B00752A2B /* juce_ThreadPool.cpp in Sources */, - 84A48BEB08A22E4B00752A2B /* juce_TimeSliceThread.cpp in Sources */, - 84052DE408D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp in Sources */, - 84F1B8DA09499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp in Sources */, - 8406C44709642CE100C99145 /* juce_LowLevelGraphicsSoftwareRenderer.cpp in Sources */, - 84198B10096D8E2B0022A439 /* juce_AudioDeviceManager.cpp in Sources */, - 84198BB5096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp in Sources */, - 84E8209409729D2A0097675B /* juce_AudioFormatManager.cpp in Sources */, - 84F593AE09855679008153BA /* juce_DocumentWindow.cpp in Sources */, - 84F46B7E098685BD0079F3FA /* juce_ComponentBoundsConstrainer.cpp in Sources */, - 8463D5C1098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp in Sources */, - 8463D5C3098BD2DD00F9AEC2 /* juce_MidiFile.cpp in Sources */, - 8463D5C5098BD2DD00F9AEC2 /* juce_MidiKeyboardState.cpp in Sources */, - 8463D5C7098BD2DD00F9AEC2 /* juce_MidiMessage.cpp in Sources */, - 8463D5C9098BD2DD00F9AEC2 /* juce_MidiMessageCollector.cpp in Sources */, - 8463D5CB098BD2DD00F9AEC2 /* juce_MidiMessageSequence.cpp in Sources */, - 8463D5D0098BD30600F9AEC2 /* juce_TopLevelWindow.cpp in Sources */, - 84F8DAD0099C963A00E911ED /* juce_ComponentPeer.cpp in Sources */, - 84FC318F09B749FD00B75141 /* juce_FileBasedDocument.cpp in Sources */, - 84FC319109B749FD00B75141 /* juce_RecentlyOpenedFilesList.cpp in Sources */, - 84FC319509B749FD00B75141 /* juce_UndoManager.cpp in Sources */, - 84FC31AA09B74A5C00B75141 /* juce_DirectoryContentsList.cpp in Sources */, - 84FC31AC09B74A5C00B75141 /* juce_FileBrowserComponent.cpp in Sources */, - 84FC31AF09B74A5C00B75141 /* juce_FileChooser.cpp in Sources */, - 84FC31B109B74A5C00B75141 /* juce_FileChooserDialogBox.cpp in Sources */, - 84FC31B309B74A5C00B75141 /* juce_FileFilter.cpp in Sources */, - 84FC31B509B74A5C00B75141 /* juce_FileListComponent.cpp in Sources */, - 84FC31B809B74A5C00B75141 /* juce_ImagePreviewComponent.cpp in Sources */, - 84FC31BA09B74A5C00B75141 /* juce_WildcardFileFilter.cpp in Sources */, - 84FC31BE09B74A7700B75141 /* juce_BorderSize.cpp in Sources */, - 84D296BD09B763190026C535 /* juce_PropertiesFile.cpp in Sources */, - 84F5598409CACFDD00AC5000 /* juce_Socket.cpp in Sources */, - 84F5598809CACFF700AC5000 /* juce_NamedPipe.cpp in Sources */, - 84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */, - 84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */, - 846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */, - 846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */, - 842B63BA09D8508F00255DC7 /* juce_FlacAudioFormat.cpp in Sources */, - 842B63BC09D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp in Sources */, - 8407908F09E6B688004E7BCD /* juce_LowLevelGraphicsPostScriptRenderer.cpp in Sources */, - 84F589A00A01493600B80939 /* juce_ApplicationCommandInfo.cpp in Sources */, - 84F589A20A01493600B80939 /* juce_ApplicationCommandManager.cpp in Sources */, - 84F589A40A01493600B80939 /* juce_ApplicationCommandTarget.cpp in Sources */, - 842F9D630A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp in Sources */, - 842F9D650A19C9AF00B1358D /* juce_ChoicePropertyComponent.cpp in Sources */, - 842F9D670A19C9AF00B1358D /* juce_PropertyComponent.cpp in Sources */, - 842F9D690A19C9AF00B1358D /* juce_PropertyPanel.cpp in Sources */, - 842F9D6B0A19C9AF00B1358D /* juce_SliderPropertyComponent.cpp in Sources */, - 842F9D6D0A19C9AF00B1358D /* juce_TextPropertyComponent.cpp in Sources */, - 842F9DE20A19D2AF00B1358D /* juce_PositionedRectangle.cpp in Sources */, - 84F5552A0A2235E100A8311C /* juce_MultiDocumentPanel.cpp in Sources */, - 84F1F05D0A36CE96008CCC5E /* juce_FilenameComponent.cpp in Sources */, - 84F1F0610A36CF06008CCC5E /* juce_BooleanPropertyComponent.cpp in Sources */, - 84F1F0650A36CF32008CCC5E /* juce_MagnifierComponent.cpp in Sources */, - 84F1F0690A36CF45008CCC5E /* juce_KeyboardFocusTraverser.cpp in Sources */, - 846927DA0A49ABD300314975 /* juce_CharacterFunctions.cpp in Sources */, - 846927DE0A49ABE600314975 /* juce_RectanglePlacement.cpp in Sources */, - 846927E10A49ABFD00314975 /* juce_SVGParser.cpp in Sources */, - 8417EE530A6E7A280058E04E /* juce_TableHeaderComponent.cpp in Sources */, - 8417EE550A6E7A280058E04E /* juce_TableListBox.cpp in Sources */, - 8417EE590A6E7A370058E04E /* juce_StretchableObjectResizer.cpp in Sources */, - 84F7A7AF0A8383A100D36246 /* juce_ToolbarButton.cpp in Sources */, - 84F7A7B80A8383C200D36246 /* juce_Toolbar.cpp in Sources */, - 84F7A7BA0A8383C200D36246 /* juce_ToolbarItemComponent.cpp in Sources */, - 84F7A7BD0A8383C200D36246 /* juce_ToolbarItemPalette.cpp in Sources */, - 84F7A7C10A8383E000D36246 /* juce_MultiTimer.cpp in Sources */, - 84F7A7EF0A838CC900D36246 /* juce_ComponentAnimator.cpp in Sources */, - 8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */, - 84099C9F0AE52BD000B2A05D /* juce_Sampler.cpp in Sources */, - 84099CA10AE52BD000B2A05D /* juce_Synthesiser.cpp in Sources */, - 841E06350AF8CE74005E6FCC /* juce_AudioDataConverters.cpp in Sources */, - 841E06370AF8CE75005E6FCC /* juce_AudioSampleBuffer.cpp in Sources */, - 841E06390AF8CE75005E6FCC /* juce_IIRFilter.cpp in Sources */, - 84F525000B32A8D500597B73 /* juce_ApplicationProperties.cpp in Sources */, - 84C0EA5E0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp in Sources */, - 84F6B7540C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp in Sources */, - 842D3D0E0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp in Sources */, - 847F72DB0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp in Sources */, - 847F72DD0C2702A000CBECEC /* juce_FileTreeComponent.cpp in Sources */, - 8406AA5A0C4BDF90003A0D6A /* juce_MidiOutput.cpp in Sources */, - 84FFAF2B0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp in Sources */, - 84BC4E2A0C8DD38C00FA249B /* juce_AudioProcessor.cpp in Sources */, - 84BC4E2C0C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp in Sources */, - 84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */, - 841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm in Sources */, - 841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */, - 841B22EA0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp in Sources */, - 841B22EC0D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp in Sources */, - 841B22EE0D2E7FE3009D01AA /* juce_KnownPluginList.cpp in Sources */, - 841B22F00D2E7FE3009D01AA /* juce_PluginDescription.cpp in Sources */, - 841B22F20D2E7FE3009D01AA /* juce_PluginDirectoryScanner.cpp in Sources */, - 841B22F40D2E7FE3009D01AA /* juce_PluginListComponent.cpp in Sources */, - 8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */, - 8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */, - 8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */, - 84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */, - 84688AFB0DED58820077FDEA /* juce_AudioProcessorGraph.cpp in Sources */, - 84688AFD0DED58820077FDEA /* juce_AudioProcessorPlayer.cpp in Sources */, - 84CA4AF40E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm in Sources */, - 849C0A9F0F98AF62001C1494 /* juce_Variant.cpp in Sources */, 8484E9A5103C958A008B7C6C /* juce_mac_NativeCode.mm in Sources */, 8484E9BE103C9595008B7C6C /* juce_mac_AppleRemote.mm in Sources */, 8484E9BF103C9595008B7C6C /* juce_mac_AudioCDBurner.mm in Sources */, @@ -2890,6 +2629,260 @@ 8484E9D4103C9595008B7C6C /* juce_mac_Threads.mm in Sources */, 8484E9D5103C9595008B7C6C /* juce_mac_WebBrowserComponent.mm in Sources */, 8484E9D9103C95A6008B7C6C /* juce_posix_NamedPipe.cpp in Sources */, + 84F1E6E710403605006A1807 /* juce_Application.cpp in Sources */, + 84F1E6EA10403605006A1807 /* juce_ApplicationCommandInfo.cpp in Sources */, + 84F1E6EC10403605006A1807 /* juce_ApplicationCommandManager.cpp in Sources */, + 84F1E6EE10403605006A1807 /* juce_ApplicationCommandTarget.cpp in Sources */, + 84F1E6F010403605006A1807 /* juce_ApplicationProperties.cpp in Sources */, + 84F1E7EF10403615006A1807 /* juce_AiffAudioFormat.cpp in Sources */, + 84F1E7F210403615006A1807 /* juce_AudioCDReader.cpp in Sources */, + 84F1E7F410403615006A1807 /* juce_AudioFormat.cpp in Sources */, + 84F1E7F610403615006A1807 /* juce_AudioFormatManager.cpp in Sources */, + 84F1E7FA10403615006A1807 /* juce_AudioSubsectionReader.cpp in Sources */, + 84F1E7FC10403615006A1807 /* juce_AudioThumbnail.cpp in Sources */, + 84F1E7FE10403615006A1807 /* juce_AudioThumbnailCache.cpp in Sources */, + 84F1E80410403615006A1807 /* juce_WavAudioFormat.cpp in Sources */, + 84F1E80510403615006A1807 /* juce_QuickTimeAudioFormat.cpp in Sources */, + 84F1E80610403615006A1807 /* juce_FlacAudioFormat.cpp in Sources */, + 84F1E80710403615006A1807 /* juce_OggVorbisAudioFormat.cpp in Sources */, + 84F1E87A10403615006A1807 /* juce_AudioFormatReaderSource.cpp in Sources */, + 84F1E87D10403615006A1807 /* juce_AudioSourcePlayer.cpp in Sources */, + 84F1E87F10403615006A1807 /* juce_AudioTransportSource.cpp in Sources */, + 84F1E88110403615006A1807 /* juce_BufferingAudioSource.cpp in Sources */, + 84F1E88310403615006A1807 /* juce_ChannelRemappingAudioSource.cpp in Sources */, + 84F1E88510403615006A1807 /* juce_IIRFilterAudioSource.cpp in Sources */, + 84F1E88710403615006A1807 /* juce_MixerAudioSource.cpp in Sources */, + 84F1E88A10403615006A1807 /* juce_ResamplingAudioSource.cpp in Sources */, + 84F1E88C10403615006A1807 /* juce_ToneGeneratorAudioSource.cpp in Sources */, + 84F1E88E10403615006A1807 /* juce_AudioDeviceManager.cpp in Sources */, + 84F1E89010403615006A1807 /* juce_AudioIODevice.cpp in Sources */, + 84F1E89210403615006A1807 /* juce_AudioIODeviceType.cpp in Sources */, + 84F1E89510403615006A1807 /* juce_MidiOutput.cpp in Sources */, + 84F1E89710403615006A1807 /* juce_AudioDataConverters.cpp in Sources */, + 84F1E89910403615006A1807 /* juce_AudioSampleBuffer.cpp in Sources */, + 84F1E89B10403615006A1807 /* juce_IIRFilter.cpp in Sources */, + 84F1E89D10403615006A1807 /* juce_MidiBuffer.cpp in Sources */, + 84F1E89F10403615006A1807 /* juce_MidiFile.cpp in Sources */, + 84F1E8A110403615006A1807 /* juce_MidiKeyboardState.cpp in Sources */, + 84F1E8A310403615006A1807 /* juce_MidiMessage.cpp in Sources */, + 84F1E8A510403615006A1807 /* juce_MidiMessageCollector.cpp in Sources */, + 84F1E8A710403615006A1807 /* juce_MidiMessageSequence.cpp in Sources */, + 84F1E8A910403615006A1807 /* juce_AudioPluginFormat.cpp in Sources */, + 84F1E8AB10403615006A1807 /* juce_AudioPluginFormatManager.cpp in Sources */, + 84F1E8AD10403615006A1807 /* juce_AudioPluginInstance.cpp in Sources */, + 84F1E8AF10403615006A1807 /* juce_KnownPluginList.cpp in Sources */, + 84F1E8B110403615006A1807 /* juce_PluginDescription.cpp in Sources */, + 84F1E8B310403615006A1807 /* juce_PluginDirectoryScanner.cpp in Sources */, + 84F1E8B510403615006A1807 /* juce_PluginListComponent.cpp in Sources */, + 84F1E8BC10403615006A1807 /* juce_VSTPluginFormat.cpp in Sources */, + 84F1E8BD10403615006A1807 /* juce_VSTPluginFormat.mm in Sources */, + 84F1E8BE10403615006A1807 /* juce_AudioUnitPluginFormat.mm in Sources */, + 84F1E8C010403615006A1807 /* juce_AudioProcessor.cpp in Sources */, + 84F1E8C210403615006A1807 /* juce_AudioProcessorEditor.cpp in Sources */, + 84F1E8C410403615006A1807 /* juce_AudioProcessorGraph.cpp in Sources */, + 84F1E8C710403615006A1807 /* juce_AudioProcessorPlayer.cpp in Sources */, + 84F1E8C910403615006A1807 /* juce_GenericAudioProcessorEditor.cpp in Sources */, + 84F1E8CB10403615006A1807 /* juce_Sampler.cpp in Sources */, + 84F1E8CD10403615006A1807 /* juce_Synthesiser.cpp in Sources */, + 84F1E8E310403671006A1807 /* juce_BitArray.cpp in Sources */, + 84F1E8E610403671006A1807 /* juce_MemoryBlock.cpp in Sources */, + 84F1E8E910403671006A1807 /* juce_PropertySet.cpp in Sources */, + 84F1E8EF10403671006A1807 /* juce_Variant.cpp in Sources */, + 84F1E90D10403681006A1807 /* juce_Time.cpp in Sources */, + 84F1E90E10403681006A1807 /* juce_SystemStats.cpp in Sources */, + 84F1E91110403681006A1807 /* juce_RelativeTime.cpp in Sources */, + 84F1E91410403681006A1807 /* juce_Random.cpp in Sources */, + 84F1E91910403681006A1807 /* juce_Logger.cpp in Sources */, + 84F1E91C10403681006A1807 /* juce_FileLogger.cpp in Sources */, + 84F1E91F10403681006A1807 /* juce_Uuid.cpp in Sources */, + 84F1E92110403681006A1807 /* juce_PerformanceCounter.cpp in Sources */, + 84F1E9351040369C006A1807 /* juce_UndoManager.cpp in Sources */, + 84F1E93A1040369C006A1807 /* juce_PropertiesFile.cpp in Sources */, + 84F1E93D1040369C006A1807 /* juce_RecentlyOpenedFilesList.cpp in Sources */, + 84F1E93E1040369C006A1807 /* juce_FileBasedDocument.cpp in Sources */, + 84F1E93F1040369C006A1807 /* juce_DeletedAtShutdown.cpp in Sources */, + 84F1E965104036B3006A1807 /* juce_BlowFish.cpp in Sources */, + 84F1E967104036B3006A1807 /* juce_MD5.cpp in Sources */, + 84F1E969104036B3006A1807 /* juce_Primes.cpp in Sources */, + 84F1E96B104036B3006A1807 /* juce_RSAKey.cpp in Sources */, + 84F1E96D104036B3006A1807 /* juce_ActionBroadcaster.cpp in Sources */, + 84F1E970104036B3006A1807 /* juce_ActionListenerList.cpp in Sources */, + 84F1E972104036B3006A1807 /* juce_AsyncUpdater.cpp in Sources */, + 84F1E975104036B3006A1807 /* juce_ChangeBroadcaster.cpp in Sources */, + 84F1E978104036B3006A1807 /* juce_ChangeListenerList.cpp in Sources */, + 84F1E97A104036B3006A1807 /* juce_InterprocessConnection.cpp in Sources */, + 84F1E97C104036B3006A1807 /* juce_InterprocessConnectionServer.cpp in Sources */, + 84F1E97E104036B3006A1807 /* juce_Message.cpp in Sources */, + 84F1E980104036B3006A1807 /* juce_MessageListener.cpp in Sources */, + 84F1E982104036B3006A1807 /* juce_MessageManager.cpp in Sources */, + 84F1E984104036B3006A1807 /* juce_MultiTimer.cpp in Sources */, + 84F1E986104036B3006A1807 /* juce_Timer.cpp in Sources */, + 84F1E9EA104036D6006A1807 /* juce_DirectoryIterator.cpp in Sources */, + 84F1E9EC104036D6006A1807 /* juce_File.cpp in Sources */, + 84F1E9EE104036D6006A1807 /* juce_FileInputStream.cpp in Sources */, + 84F1E9F0104036D6006A1807 /* juce_FileOutputStream.cpp in Sources */, + 84F1E9F2104036D6006A1807 /* juce_FileSearchPath.cpp in Sources */, + 84F1E9F4104036D6006A1807 /* juce_NamedPipe.cpp in Sources */, + 84F1E9F6104036D6006A1807 /* juce_ZipFile.cpp in Sources */, + 84F1E9F8104036D6006A1807 /* juce_Socket.cpp in Sources */, + 84F1E9FA104036D6006A1807 /* juce_URL.cpp in Sources */, + 84F1E9FC104036D6006A1807 /* juce_BufferedInputStream.cpp in Sources */, + 84F1E9FE104036D6006A1807 /* juce_FileInputSource.cpp in Sources */, + 84F1EA00104036D6006A1807 /* juce_GZIPCompressorOutputStream.cpp in Sources */, + 84F1EA02104036D6006A1807 /* juce_GZIPDecompressorInputStream.cpp in Sources */, + 84F1EA05104036D6006A1807 /* juce_MemoryInputStream.cpp in Sources */, + 84F1EA07104036D6006A1807 /* juce_MemoryOutputStream.cpp in Sources */, + 84F1EA09104036D6006A1807 /* juce_SubregionStream.cpp in Sources */, + 84F1EA21104036D6006A1807 /* juce_InputStream.cpp in Sources */, + 84F1EA23104036D6006A1807 /* juce_OutputStream.cpp in Sources */, + 84F1EA25104036D6006A1807 /* juce_CharacterFunctions.cpp in Sources */, + 84F1EA27104036D6006A1807 /* juce_LocalisedStrings.cpp in Sources */, + 84F1EA29104036D6006A1807 /* juce_String.cpp in Sources */, + 84F1EA2B104036D6006A1807 /* juce_StringArray.cpp in Sources */, + 84F1EA2D104036D6006A1807 /* juce_StringPairArray.cpp in Sources */, + 84F1EA2F104036D6006A1807 /* juce_XmlDocument.cpp in Sources */, + 84F1EA31104036D6006A1807 /* juce_XmlElement.cpp in Sources */, + 84F1EA34104036D6006A1807 /* juce_InterProcessLock.cpp in Sources */, + 84F1EA37104036D6006A1807 /* juce_ReadWriteLock.cpp in Sources */, + 84F1EA3D104036D6006A1807 /* juce_Thread.cpp in Sources */, + 84F1EA3F104036D6006A1807 /* juce_ThreadPool.cpp in Sources */, + 84F1EA41104036D6006A1807 /* juce_TimeSliceThread.cpp in Sources */, + 84F1EBCC1040370A006A1807 /* juce_Component.cpp in Sources */, + 84F1EBCF1040370A006A1807 /* juce_ComponentListener.cpp in Sources */, + 84F1EBD11040370A006A1807 /* juce_Desktop.cpp in Sources */, + 84F1EBD31040370A006A1807 /* juce_ArrowButton.cpp in Sources */, + 84F1EBD51040370A006A1807 /* juce_Button.cpp in Sources */, + 84F1EBD71040370A006A1807 /* juce_DrawableButton.cpp in Sources */, + 84F1EBD91040370A006A1807 /* juce_HyperlinkButton.cpp in Sources */, + 84F1EBDB1040370A006A1807 /* juce_ImageButton.cpp in Sources */, + 84F1EBDD1040370A006A1807 /* juce_ShapeButton.cpp in Sources */, + 84F1EBDF1040370A006A1807 /* juce_TextButton.cpp in Sources */, + 84F1EBE11040370A006A1807 /* juce_ToggleButton.cpp in Sources */, + 84F1EBE31040370A006A1807 /* juce_ToolbarButton.cpp in Sources */, + 84F1EBE51040370A006A1807 /* juce_ComboBox.cpp in Sources */, + 84F1EBE71040370A006A1807 /* juce_Label.cpp in Sources */, + 84F1EBE91040370A006A1807 /* juce_ListBox.cpp in Sources */, + 84F1EBEB1040370A006A1807 /* juce_ProgressBar.cpp in Sources */, + 84F1EBED1040370A006A1807 /* juce_Slider.cpp in Sources */, + 84F1EBF01040370A006A1807 /* juce_TableHeaderComponent.cpp in Sources */, + 84F1EBF21040370A006A1807 /* juce_TableListBox.cpp in Sources */, + 84F1EBF41040370A006A1807 /* juce_TextEditor.cpp in Sources */, + 84F1EBF61040370A006A1807 /* juce_Toolbar.cpp in Sources */, + 84F1EBF81040370A006A1807 /* juce_ToolbarItemComponent.cpp in Sources */, + 84F1EBFB1040370A006A1807 /* juce_ToolbarItemPalette.cpp in Sources */, + 84F1EBFD1040370A006A1807 /* juce_TreeView.cpp in Sources */, + 84F1EBFF1040370A006A1807 /* juce_DirectoryContentsDisplayComponent.cpp in Sources */, + 84F1EC011040370A006A1807 /* juce_DirectoryContentsList.cpp in Sources */, + 84F1EC031040370A006A1807 /* juce_FileBrowserComponent.cpp in Sources */, + 84F1EC061040370A006A1807 /* juce_FileChooser.cpp in Sources */, + 84F1EC081040370A006A1807 /* juce_FileChooserDialogBox.cpp in Sources */, + 84F1EC0A1040370A006A1807 /* juce_FileFilter.cpp in Sources */, + 84F1EC0C1040370A006A1807 /* juce_FileListComponent.cpp in Sources */, + 84F1EC0E1040370A006A1807 /* juce_FilenameComponent.cpp in Sources */, + 84F1EC111040370A006A1807 /* juce_FileSearchPathListComponent.cpp in Sources */, + 84F1EC131040370A006A1807 /* juce_FileTreeComponent.cpp in Sources */, + 84F1EC151040370A006A1807 /* juce_ImagePreviewComponent.cpp in Sources */, + 84F1EC171040370A006A1807 /* juce_WildcardFileFilter.cpp in Sources */, + 84F1EC191040370A006A1807 /* juce_KeyboardFocusTraverser.cpp in Sources */, + 84F1EC1B1040370A006A1807 /* juce_KeyListener.cpp in Sources */, + 84F1EC1D1040370A006A1807 /* juce_KeyMappingEditorComponent.cpp in Sources */, + 84F1EC1F1040370A006A1807 /* juce_KeyPress.cpp in Sources */, + 84F1EC211040370A006A1807 /* juce_KeyPressMappingSet.cpp in Sources */, + 84F1EC231040370A006A1807 /* juce_ModifierKeys.cpp in Sources */, + 84F1EC251040370A006A1807 /* juce_ComponentAnimator.cpp in Sources */, + 84F1EC271040370A006A1807 /* juce_ComponentBoundsConstrainer.cpp in Sources */, + 84F1EC291040370A006A1807 /* juce_ComponentMovementWatcher.cpp in Sources */, + 84F1EC2B1040370A006A1807 /* juce_GroupComponent.cpp in Sources */, + 84F1EC2D1040370A006A1807 /* juce_MultiDocumentPanel.cpp in Sources */, + 84F1EC2F1040370A006A1807 /* juce_ResizableBorderComponent.cpp in Sources */, + 84F1EC311040370A006A1807 /* juce_ResizableCornerComponent.cpp in Sources */, + 84F1EC331040370A006A1807 /* juce_ScrollBar.cpp in Sources */, + 84F1EC351040370A006A1807 /* juce_StretchableLayoutManager.cpp in Sources */, + 84F1EC371040370A006A1807 /* juce_StretchableLayoutResizerBar.cpp in Sources */, + 84F1EC391040370A006A1807 /* juce_StretchableObjectResizer.cpp in Sources */, + 84F1EC3B1040370A006A1807 /* juce_TabbedButtonBar.cpp in Sources */, + 84F1EC3D1040370A006A1807 /* juce_TabbedComponent.cpp in Sources */, + 84F1EC3F1040370A006A1807 /* juce_Viewport.cpp in Sources */, + 84F1EC411040370A006A1807 /* juce_LookAndFeel.cpp in Sources */, + 84F1EC431040370A006A1807 /* juce_OldSchoolLookAndFeel.cpp in Sources */, + 84F1EC451040370A006A1807 /* juce_MenuBarComponent.cpp in Sources */, + 84F1EC471040370A006A1807 /* juce_MenuBarModel.cpp in Sources */, + 84F1EC491040370A006A1807 /* juce_PopupMenu.cpp in Sources */, + 84F1EC4C1040370A006A1807 /* juce_ComponentDragger.cpp in Sources */, + 84F1EC4E1040370A006A1807 /* juce_DragAndDropContainer.cpp in Sources */, + 84F1EC541040370A006A1807 /* juce_MouseCursor.cpp in Sources */, + 84F1EC561040370A006A1807 /* juce_MouseEvent.cpp in Sources */, + 84F1EC581040370A006A1807 /* juce_MouseHoverDetector.cpp in Sources */, + 84F1EC5A1040370A006A1807 /* juce_MouseListener.cpp in Sources */, + 84F1EC5C1040370A006A1807 /* juce_BooleanPropertyComponent.cpp in Sources */, + 84F1EC5E1040370A006A1807 /* juce_ButtonPropertyComponent.cpp in Sources */, + 84F1EC601040370A006A1807 /* juce_ChoicePropertyComponent.cpp in Sources */, + 84F1EC621040370A006A1807 /* juce_PropertyComponent.cpp in Sources */, + 84F1EC641040370A006A1807 /* juce_PropertyPanel.cpp in Sources */, + 84F1EC661040370A006A1807 /* juce_SliderPropertyComponent.cpp in Sources */, + 84F1EC681040370A006A1807 /* juce_TextPropertyComponent.cpp in Sources */, + 84F1EC6B1040370A006A1807 /* juce_AudioDeviceSelectorComponent.cpp in Sources */, + 84F1EC6D1040370A006A1807 /* juce_BubbleComponent.cpp in Sources */, + 84F1EC6F1040370A006A1807 /* juce_BubbleMessageComponent.cpp in Sources */, + 84F1EC711040370A006A1807 /* juce_ColourSelector.cpp in Sources */, + 84F1EC731040370A006A1807 /* juce_DropShadower.cpp in Sources */, + 84F1EC751040370A006A1807 /* juce_MagnifierComponent.cpp in Sources */, + 84F1EC771040370A006A1807 /* juce_MidiKeyboardComponent.cpp in Sources */, + 84F1EC7A1040370A006A1807 /* juce_OpenGLComponent.cpp in Sources */, + 84F1EC7C1040370A006A1807 /* juce_PreferencesPanel.cpp in Sources */, + 84F1EC7F1040370A006A1807 /* juce_SystemTrayIconComponent.cpp in Sources */, + 84F1EC821040370A006A1807 /* juce_AlertWindow.cpp in Sources */, + 84F1EC841040370A006A1807 /* juce_ComponentPeer.cpp in Sources */, + 84F1EC861040370A006A1807 /* juce_DialogWindow.cpp in Sources */, + 84F1EC881040370A006A1807 /* juce_DocumentWindow.cpp in Sources */, + 84F1EC8A1040370A006A1807 /* juce_ResizableWindow.cpp in Sources */, + 84F1EC8C1040370A006A1807 /* juce_SplashScreen.cpp in Sources */, + 84F1EC8E1040370A006A1807 /* juce_ThreadWithProgressWindow.cpp in Sources */, + 84F1EC901040370A006A1807 /* juce_TooltipWindow.cpp in Sources */, + 84F1EC921040370A006A1807 /* juce_TopLevelWindow.cpp in Sources */, + 84F1EC941040370A006A1807 /* juce_Brush.cpp in Sources */, + 84F1EC961040370A006A1807 /* juce_GradientBrush.cpp in Sources */, + 84F1EC981040370A006A1807 /* juce_ImageBrush.cpp in Sources */, + 84F1EC9A1040370A006A1807 /* juce_SolidColourBrush.cpp in Sources */, + 84F1EC9C1040370A006A1807 /* juce_Colour.cpp in Sources */, + 84F1EC9D1040370A006A1807 /* juce_ColourGradient.cpp in Sources */, + 84F1EC9F1040370A006A1807 /* juce_Colours.cpp in Sources */, + 84F1ECA31040370A006A1807 /* juce_EdgeTable.cpp in Sources */, + 84F1ECA51040370A006A1807 /* juce_Graphics.cpp in Sources */, + 84F1ECA71040370A006A1807 /* juce_Justification.cpp in Sources */, + 84F1ECAA1040370A006A1807 /* juce_LowLevelGraphicsPostScriptRenderer.cpp in Sources */, + 84F1ECAC1040370A006A1807 /* juce_LowLevelGraphicsSoftwareRenderer.cpp in Sources */, + 84F1ECAE1040370A006A1807 /* juce_RectanglePlacement.cpp in Sources */, + 84F1ECB01040370A006A1807 /* juce_Drawable.cpp in Sources */, + 84F1ECB21040370A006A1807 /* juce_DrawableComposite.cpp in Sources */, + 84F1ECB41040370A006A1807 /* juce_DrawableImage.cpp in Sources */, + 84F1ECB61040370A006A1807 /* juce_DrawablePath.cpp in Sources */, + 84F1ECB81040370A006A1807 /* juce_DrawableText.cpp in Sources */, + 84F1ECBA1040370A006A1807 /* juce_SVGParser.cpp in Sources */, + 84F1ECBB1040370A006A1807 /* juce_DropShadowEffect.cpp in Sources */, + 84F1ECBD1040370A006A1807 /* juce_GlowEffect.cpp in Sources */, + 84F1ECC01040370A006A1807 /* juce_ReduceOpacityEffect.cpp in Sources */, + 84F1ECC21040370A006A1807 /* juce_Font.cpp in Sources */, + 84F1ECC41040370A006A1807 /* juce_GlyphArrangement.cpp in Sources */, + 84F1ECC61040370A006A1807 /* juce_TextLayout.cpp in Sources */, + 84F1ECC81040370A006A1807 /* juce_Typeface.cpp in Sources */, + 84F1ECCA1040370A006A1807 /* juce_AffineTransform.cpp in Sources */, + 84F1ECCC1040370A006A1807 /* juce_BorderSize.cpp in Sources */, + 84F1ECCE1040370A006A1807 /* juce_Line.cpp in Sources */, + 84F1ECD01040370A006A1807 /* juce_Path.cpp in Sources */, + 84F1ECD21040370A006A1807 /* juce_PathIterator.cpp in Sources */, + 84F1ECD41040370A006A1807 /* juce_PathStrokeType.cpp in Sources */, + 84F1ECD61040370A006A1807 /* juce_Point.cpp in Sources */, + 84F1ECD81040370A006A1807 /* juce_PositionedRectangle.cpp in Sources */, + 84F1ECDA1040370A006A1807 /* juce_Rectangle.cpp in Sources */, + 84F1ECDC1040370A006A1807 /* juce_RectangleList.cpp in Sources */, + 84F1ECDF1040370A006A1807 /* juce_Image.cpp in Sources */, + 84F1ECE11040370A006A1807 /* juce_ImageCache.cpp in Sources */, + 84F1ECE31040370A006A1807 /* juce_ImageConvolutionKernel.cpp in Sources */, + 84F1ECE51040370A006A1807 /* juce_ImageFileFormat.cpp in Sources */, + 84F1ECE71040370A006A1807 /* juce_GIFLoader.cpp in Sources */, + 84F1ECE91040370A006A1807 /* juce_JPEGLoader.cpp in Sources */, + 84F1ECEA1040370A006A1807 /* juce_PNGLoader.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/build/win32/vc8/JUCE.vcproj b/build/win32/vc8/JUCE.vcproj index 84205be32b..8256c273c5 100644 --- a/build/win32/vc8/JUCE.vcproj +++ b/build/win32/vc8/JUCE.vcproj @@ -339,5344 +339,519 @@ > + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extras/juce demo/build/linux/JuceDemo.make b/extras/juce demo/build/linux/JuceDemo.make index d4f7d12c9d..81fc352705 100644 --- a/extras/juce demo/build/linux/JuceDemo.make +++ b/extras/juce demo/build/linux/JuceDemo.make @@ -40,22 +40,22 @@ endif OBJECTS := \ $(OBJDIR)/ApplicationStartup.o \ - $(OBJDIR)/BinaryData.o \ $(OBJDIR)/juce_LibrarySource.o \ $(OBJDIR)/MainDemoWindow.o \ - $(OBJDIR)/PathsAndTransformsDemo.o \ - $(OBJDIR)/WidgetsDemo.o \ - $(OBJDIR)/ThreadingDemo.o \ - $(OBJDIR)/TreeViewDemo.o \ - $(OBJDIR)/QuickTimeDemo.o \ - $(OBJDIR)/TableDemo.o \ - $(OBJDIR)/OpenGLDemo.o \ + $(OBJDIR)/BinaryData.o \ + $(OBJDIR)/AudioDemo.o \ + $(OBJDIR)/CameraDemo.o \ + $(OBJDIR)/DragAndDropDemo.o \ $(OBJDIR)/FontsAndTextDemo.o \ $(OBJDIR)/InterprocessCommsDemo.o \ - $(OBJDIR)/DragAndDropDemo.o \ - $(OBJDIR)/CameraDemo.o \ - $(OBJDIR)/AudioDemo.o \ + $(OBJDIR)/OpenGLDemo.o \ + $(OBJDIR)/PathsAndTransformsDemo.o \ + $(OBJDIR)/QuickTimeDemo.o \ + $(OBJDIR)/TableDemo.o \ + $(OBJDIR)/ThreadingDemo.o \ + $(OBJDIR)/TreeViewDemo.o \ $(OBJDIR)/WebBrowserDemo.o \ + $(OBJDIR)/WidgetsDemo.o \ MKDIR_TYPE := msdos CMD := $(subst \,\\,$(ComSpec)$(COMSPEC)) @@ -102,11 +102,6 @@ $(OBJDIR)/ApplicationStartup.o: ../../src/ApplicationStartup.cpp @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/BinaryData.o: ../../src/BinaryData.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - $(OBJDIR)/juce_LibrarySource.o: ../../src/juce_LibrarySource.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @@ -117,37 +112,22 @@ $(OBJDIR)/MainDemoWindow.o: ../../src/MainDemoWindow.cpp @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/PathsAndTransformsDemo.o: ../../src/demos/PathsAndTransformsDemo.cpp +$(OBJDIR)/BinaryData.o: ../../src/BinaryData.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/WidgetsDemo.o: ../../src/demos/WidgetsDemo.cpp +$(OBJDIR)/AudioDemo.o: ../../src/demos/AudioDemo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/ThreadingDemo.o: ../../src/demos/ThreadingDemo.cpp +$(OBJDIR)/CameraDemo.o: ../../src/demos/CameraDemo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/TreeViewDemo.o: ../../src/demos/TreeViewDemo.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/QuickTimeDemo.o: ../../src/demos/QuickTimeDemo.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/TableDemo.o: ../../src/demos/TableDemo.cpp - -@$(CMD_MKOBJDIR) - @echo $(notdir $<) - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -$(OBJDIR)/OpenGLDemo.o: ../../src/demos/OpenGLDemo.cpp +$(OBJDIR)/DragAndDropDemo.o: ../../src/demos/DragAndDropDemo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" @@ -162,17 +142,32 @@ $(OBJDIR)/InterprocessCommsDemo.o: ../../src/demos/InterprocessCommsDemo.cpp @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/DragAndDropDemo.o: ../../src/demos/DragAndDropDemo.cpp +$(OBJDIR)/OpenGLDemo.o: ../../src/demos/OpenGLDemo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/CameraDemo.o: ../../src/demos/CameraDemo.cpp +$(OBJDIR)/PathsAndTransformsDemo.o: ../../src/demos/PathsAndTransformsDemo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AudioDemo.o: ../../src/demos/AudioDemo.cpp +$(OBJDIR)/QuickTimeDemo.o: ../../src/demos/QuickTimeDemo.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TableDemo.o: ../../src/demos/TableDemo.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/ThreadingDemo.o: ../../src/demos/ThreadingDemo.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + +$(OBJDIR)/TreeViewDemo.o: ../../src/demos/TreeViewDemo.cpp -@$(CMD_MKOBJDIR) @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" @@ -182,5 +177,10 @@ $(OBJDIR)/WebBrowserDemo.o: ../../src/demos/WebBrowserDemo.cpp @echo $(notdir $<) @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" +$(OBJDIR)/WidgetsDemo.o: ../../src/demos/WidgetsDemo.cpp + -@$(CMD_MKOBJDIR) + @echo $(notdir $<) + @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + -include $(OBJECTS:%.o=%.d) diff --git a/juce.h b/juce.h index 5161a577f7..63d951e6b3 100644 --- a/juce.h +++ b/juce.h @@ -34,7 +34,7 @@ //============================================================================== // (this includes things that need defining outside of the JUCE namespace) -#include "src/juce_core/basics/juce_StandardHeader.h" +#include "src/core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index 21c9c5b82b..14d5f31993 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -17144,6 +17144,611 @@ PropertiesFile* PropertiesFile::createDefaultAppPropertiesFile (const String& ap END_JUCE_NAMESPACE /********* End of inlined file: juce_PropertiesFile.cpp *********/ +/********* Start of inlined file: juce_FileBasedDocument.cpp *********/ + +BEGIN_JUCE_NAMESPACE + +FileBasedDocument::FileBasedDocument (const String& fileExtension_, + const String& fileWildcard_, + const String& openFileDialogTitle_, + const String& saveFileDialogTitle_) + : changedSinceSave (false), + fileExtension (fileExtension_), + fileWildcard (fileWildcard_), + openFileDialogTitle (openFileDialogTitle_), + saveFileDialogTitle (saveFileDialogTitle_) +{ +} + +FileBasedDocument::~FileBasedDocument() +{ +} + +void FileBasedDocument::setChangedFlag (const bool hasChanged) +{ + changedSinceSave = hasChanged; +} + +void FileBasedDocument::changed() +{ + changedSinceSave = true; + sendChangeMessage (this); +} + +void FileBasedDocument::setFile (const File& newFile) +{ + if (documentFile != newFile) + { + documentFile = newFile; + changedSinceSave = true; + } +} + +bool FileBasedDocument::loadFrom (const File& newFile, + const bool showMessageOnFailure) +{ + MouseCursor::showWaitCursor(); + + const File oldFile (documentFile); + documentFile = newFile; + + String error; + + if (newFile.existsAsFile()) + { + error = loadDocument (newFile); + + if (error.isEmpty()) + { + setChangedFlag (false); + MouseCursor::hideWaitCursor(); + + setLastDocumentOpened (newFile); + return true; + } + } + else + { + error = "The file doesn't exist"; + } + + documentFile = oldFile; + MouseCursor::hideWaitCursor(); + + if (showMessageOnFailure) + { + AlertWindow::showMessageBox (AlertWindow::WarningIcon, + TRANS("Failed to open file..."), + TRANS("There was an error while trying to load the file:\n\n") + + newFile.getFullPathName() + + T("\n\n") + + error); + } + + return false; +} + +bool FileBasedDocument::loadFromUserSpecifiedFile (const bool showMessageOnFailure) +{ + FileChooser fc (openFileDialogTitle, + getLastDocumentOpened(), + fileWildcard); + + if (fc.browseForFileToOpen()) + return loadFrom (fc.getResult(), showMessageOnFailure); + + return false; +} + +FileBasedDocument::SaveResult FileBasedDocument::save (const bool askUserForFileIfNotSpecified, + const bool showMessageOnFailure) +{ + return saveAs (documentFile, + false, + askUserForFileIfNotSpecified, + showMessageOnFailure); +} + +FileBasedDocument::SaveResult FileBasedDocument::saveAs (const File& newFile, + const bool warnAboutOverwritingExistingFiles, + const bool askUserForFileIfNotSpecified, + const bool showMessageOnFailure) +{ + if (newFile == File::nonexistent) + { + if (askUserForFileIfNotSpecified) + { + return saveAsInteractive (true); + } + else + { + // can't save to an unspecified file + jassertfalse + return failedToWriteToFile; + } + } + + if (warnAboutOverwritingExistingFiles && newFile.exists()) + { + if (! AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, + TRANS("File already exists"), + TRANS("There's already a file called:\n\n") + + newFile.getFullPathName() + + TRANS("\n\nAre you sure you want to overwrite it?"), + TRANS("overwrite"), + TRANS("cancel"))) + { + return userCancelledSave; + } + } + + MouseCursor::showWaitCursor(); + + const File oldFile (documentFile); + documentFile = newFile; + + String error (saveDocument (newFile)); + + if (error.isEmpty()) + { + setChangedFlag (false); + MouseCursor::hideWaitCursor(); + + return savedOk; + } + + documentFile = oldFile; + MouseCursor::hideWaitCursor(); + + if (showMessageOnFailure) + { + AlertWindow::showMessageBox (AlertWindow::WarningIcon, + TRANS("Error writing to file..."), + TRANS("An error occurred while trying to save \"") + + getDocumentTitle() + + TRANS("\" to the file:\n\n") + + newFile.getFullPathName() + + T("\n\n") + + error); + } + + return failedToWriteToFile; +} + +FileBasedDocument::SaveResult FileBasedDocument::saveIfNeededAndUserAgrees() +{ + if (! hasChangedSinceSaved()) + return savedOk; + + const int r = AlertWindow::showYesNoCancelBox (AlertWindow::QuestionIcon, + TRANS("Closing document..."), + TRANS("Do you want to save the changes to \"") + + getDocumentTitle() + T("\"?"), + TRANS("save"), + TRANS("discard changes"), + TRANS("cancel")); + + if (r == 1) + { + // save changes + return save (true, true); + } + else if (r == 2) + { + // discard changes + return savedOk; + } + + return userCancelledSave; +} + +FileBasedDocument::SaveResult FileBasedDocument::saveAsInteractive (const bool warnAboutOverwritingExistingFiles) +{ + File f; + + if (documentFile.existsAsFile()) + f = documentFile; + else + f = getLastDocumentOpened(); + + String legalFilename (File::createLegalFileName (getDocumentTitle())); + + if (legalFilename.isEmpty()) + legalFilename = "unnamed"; + + if (f.existsAsFile() || f.getParentDirectory().isDirectory()) + f = f.getSiblingFile (legalFilename); + else + f = File::getSpecialLocation (File::userDocumentsDirectory).getChildFile (legalFilename); + + f = f.withFileExtension (fileExtension) + .getNonexistentSibling (true); + + FileChooser fc (saveFileDialogTitle, f, fileWildcard); + + if (fc.browseForFileToSave (warnAboutOverwritingExistingFiles)) + { + setLastDocumentOpened (fc.getResult()); + + File chosen (fc.getResult()); + if (chosen.getFileExtension().isEmpty()) + chosen = chosen.withFileExtension (fileExtension); + + return saveAs (chosen, false, false, true); + } + + return userCancelledSave; +} + +END_JUCE_NAMESPACE +/********* End of inlined file: juce_FileBasedDocument.cpp *********/ + +/********* Start of inlined file: juce_RecentlyOpenedFilesList.cpp *********/ + +BEGIN_JUCE_NAMESPACE + +RecentlyOpenedFilesList::RecentlyOpenedFilesList() + : maxNumberOfItems (10) +{ +} + +RecentlyOpenedFilesList::~RecentlyOpenedFilesList() +{ +} + +void RecentlyOpenedFilesList::setMaxNumberOfItems (const int newMaxNumber) +{ + maxNumberOfItems = jmax (1, newMaxNumber); + + while (getNumFiles() > maxNumberOfItems) + files.remove (getNumFiles() - 1); +} + +int RecentlyOpenedFilesList::getNumFiles() const +{ + return files.size(); +} + +const File RecentlyOpenedFilesList::getFile (const int index) const +{ + return File (files [index]); +} + +void RecentlyOpenedFilesList::clear() +{ + files.clear(); +} + +void RecentlyOpenedFilesList::addFile (const File& file) +{ + const String path (file.getFullPathName()); + + files.removeString (path, true); + files.insert (0, path); + + setMaxNumberOfItems (maxNumberOfItems); +} + +void RecentlyOpenedFilesList::removeNonExistentFiles() +{ + for (int i = getNumFiles(); --i >= 0;) + if (! getFile(i).exists()) + files.remove (i); +} + +int RecentlyOpenedFilesList::createPopupMenuItems (PopupMenu& menuToAddTo, + const int baseItemId, + const bool showFullPaths, + const bool dontAddNonExistentFiles, + const File** filesToAvoid) +{ + int num = 0; + + for (int i = 0; i < getNumFiles(); ++i) + { + const File f (getFile(i)); + + if ((! dontAddNonExistentFiles) || f.exists()) + { + bool needsAvoiding = false; + + if (filesToAvoid != 0) + { + const File** files = filesToAvoid; + + while (*files != 0) + { + if (f == **files) + { + needsAvoiding = true; + break; + } + + ++files; + } + } + + if (! needsAvoiding) + { + menuToAddTo.addItem (baseItemId + i, + showFullPaths ? f.getFullPathName() + : f.getFileName()); + ++num; + } + } + } + + return num; +} + +const String RecentlyOpenedFilesList::toString() const +{ + return files.joinIntoString (T("\n")); +} + +void RecentlyOpenedFilesList::restoreFromString (const String& stringifiedVersion) +{ + clear(); + files.addLines (stringifiedVersion); + + setMaxNumberOfItems (maxNumberOfItems); +} + +END_JUCE_NAMESPACE +/********* End of inlined file: juce_RecentlyOpenedFilesList.cpp *********/ + +/********* Start of inlined file: juce_UndoManager.cpp *********/ + +BEGIN_JUCE_NAMESPACE + +UndoManager::UndoManager (const int maxNumberOfUnitsToKeep, + const int minimumTransactions) + : totalUnitsStored (0), + nextIndex (0), + newTransaction (true), + reentrancyCheck (false) +{ + setMaxNumberOfStoredUnits (maxNumberOfUnitsToKeep, + minimumTransactions); +} + +UndoManager::~UndoManager() +{ + clearUndoHistory(); +} + +void UndoManager::clearUndoHistory() +{ + transactions.clear(); + transactionNames.clear(); + totalUnitsStored = 0; + nextIndex = 0; + sendChangeMessage (this); +} + +int UndoManager::getNumberOfUnitsTakenUpByStoredCommands() const +{ + return totalUnitsStored; +} + +void UndoManager::setMaxNumberOfStoredUnits (const int maxNumberOfUnitsToKeep, + const int minimumTransactions) +{ + maxNumUnitsToKeep = jmax (1, maxNumberOfUnitsToKeep); + minimumTransactionsToKeep = jmax (1, minimumTransactions); +} + +bool UndoManager::perform (UndoableAction* const command, const String& actionName) +{ + if (command != 0) + { + if (actionName.isNotEmpty()) + currentTransactionName = actionName; + + if (reentrancyCheck) + { + jassertfalse // don't call perform() recursively from the UndoableAction::perform() or + // undo() methods, or else these actions won't actually get done. + + return false; + } + else + { + bool success = false; + + JUCE_TRY + { + success = command->perform(); + } + JUCE_CATCH_EXCEPTION + + jassert (success); + if (success) + { + if (nextIndex > 0 && ! newTransaction) + { + OwnedArray* commandSet = transactions [nextIndex - 1]; + + jassert (commandSet != 0); + if (commandSet == 0) + return false; + + commandSet->add (command); + } + else + { + OwnedArray* commandSet = new OwnedArray(); + commandSet->add (command); + transactions.insert (nextIndex, commandSet); + transactionNames.insert (nextIndex, currentTransactionName); + ++nextIndex; + } + + totalUnitsStored += command->getSizeInUnits(); + newTransaction = false; + } + + while (nextIndex < transactions.size()) + { + const OwnedArray * const lastSet = transactions.getLast(); + + for (int i = lastSet->size(); --i >= 0;) + totalUnitsStored -= lastSet->getUnchecked (i)->getSizeInUnits(); + + transactions.removeLast(); + transactionNames.remove (transactionNames.size() - 1); + } + + while (nextIndex > 0 + && totalUnitsStored > maxNumUnitsToKeep + && transactions.size() > minimumTransactionsToKeep) + { + const OwnedArray * const firstSet = transactions.getFirst(); + + for (int i = firstSet->size(); --i >= 0;) + totalUnitsStored -= firstSet->getUnchecked (i)->getSizeInUnits(); + + jassert (totalUnitsStored >= 0); // something fishy going on if this fails! + + transactions.remove (0); + transactionNames.remove (0); + --nextIndex; + } + + sendChangeMessage (this); + + return success; + } + } + + return false; +} + +void UndoManager::beginNewTransaction (const String& actionName) +{ + newTransaction = true; + currentTransactionName = actionName; +} + +void UndoManager::setCurrentTransactionName (const String& newName) +{ + currentTransactionName = newName; +} + +bool UndoManager::canUndo() const +{ + return nextIndex > 0; +} + +bool UndoManager::canRedo() const +{ + return nextIndex < transactions.size(); +} + +const String UndoManager::getUndoDescription() const +{ + return transactionNames [nextIndex - 1]; +} + +const String UndoManager::getRedoDescription() const +{ + return transactionNames [nextIndex]; +} + +bool UndoManager::undo() +{ + const OwnedArray* const commandSet = transactions [nextIndex - 1]; + + if (commandSet == 0) + return false; + + reentrancyCheck = true; + bool failed = false; + + for (int i = commandSet->size(); --i >= 0;) + { + if (! commandSet->getUnchecked(i)->undo()) + { + jassertfalse + failed = true; + break; + } + } + + reentrancyCheck = false; + + if (failed) + { + clearUndoHistory(); + } + else + { + --nextIndex; + } + + beginNewTransaction(); + + sendChangeMessage (this); + return true; +} + +bool UndoManager::redo() +{ + const OwnedArray* const commandSet = transactions [nextIndex]; + + if (commandSet == 0) + return false; + + reentrancyCheck = true; + bool failed = false; + + for (int i = 0; i < commandSet->size(); ++i) + { + if (! commandSet->getUnchecked(i)->perform()) + { + jassertfalse + failed = true; + break; + } + } + + reentrancyCheck = false; + + if (failed) + { + clearUndoHistory(); + } + else + { + ++nextIndex; + } + + beginNewTransaction(); + + sendChangeMessage (this); + return true; +} + +bool UndoManager::undoCurrentTransactionOnly() +{ + return newTransaction ? false + : undo(); +} + +void UndoManager::getActionsInCurrentTransaction (Array & actionsFound) const +{ + const OwnedArray * const commandSet = transactions [nextIndex - 1]; + + if (commandSet != 0 && ! newTransaction) + { + for (int i = 0; i < commandSet->size(); ++i) + actionsFound.add (commandSet->getUnchecked(i)); + } +} + +END_JUCE_NAMESPACE +/********* End of inlined file: juce_UndoManager.cpp *********/ + /********* Start of inlined file: juce_AiffAudioFormat.cpp *********/ BEGIN_JUCE_NAMESPACE @@ -35232,611 +35837,6 @@ SynthesiserVoice* Synthesiser::findFreeVoice (SynthesiserSound* soundToPlay, END_JUCE_NAMESPACE /********* End of inlined file: juce_Synthesiser.cpp *********/ -/********* Start of inlined file: juce_FileBasedDocument.cpp *********/ - -BEGIN_JUCE_NAMESPACE - -FileBasedDocument::FileBasedDocument (const String& fileExtension_, - const String& fileWildcard_, - const String& openFileDialogTitle_, - const String& saveFileDialogTitle_) - : changedSinceSave (false), - fileExtension (fileExtension_), - fileWildcard (fileWildcard_), - openFileDialogTitle (openFileDialogTitle_), - saveFileDialogTitle (saveFileDialogTitle_) -{ -} - -FileBasedDocument::~FileBasedDocument() -{ -} - -void FileBasedDocument::setChangedFlag (const bool hasChanged) -{ - changedSinceSave = hasChanged; -} - -void FileBasedDocument::changed() -{ - changedSinceSave = true; - sendChangeMessage (this); -} - -void FileBasedDocument::setFile (const File& newFile) -{ - if (documentFile != newFile) - { - documentFile = newFile; - changedSinceSave = true; - } -} - -bool FileBasedDocument::loadFrom (const File& newFile, - const bool showMessageOnFailure) -{ - MouseCursor::showWaitCursor(); - - const File oldFile (documentFile); - documentFile = newFile; - - String error; - - if (newFile.existsAsFile()) - { - error = loadDocument (newFile); - - if (error.isEmpty()) - { - setChangedFlag (false); - MouseCursor::hideWaitCursor(); - - setLastDocumentOpened (newFile); - return true; - } - } - else - { - error = "The file doesn't exist"; - } - - documentFile = oldFile; - MouseCursor::hideWaitCursor(); - - if (showMessageOnFailure) - { - AlertWindow::showMessageBox (AlertWindow::WarningIcon, - TRANS("Failed to open file..."), - TRANS("There was an error while trying to load the file:\n\n") - + newFile.getFullPathName() - + T("\n\n") - + error); - } - - return false; -} - -bool FileBasedDocument::loadFromUserSpecifiedFile (const bool showMessageOnFailure) -{ - FileChooser fc (openFileDialogTitle, - getLastDocumentOpened(), - fileWildcard); - - if (fc.browseForFileToOpen()) - return loadFrom (fc.getResult(), showMessageOnFailure); - - return false; -} - -FileBasedDocument::SaveResult FileBasedDocument::save (const bool askUserForFileIfNotSpecified, - const bool showMessageOnFailure) -{ - return saveAs (documentFile, - false, - askUserForFileIfNotSpecified, - showMessageOnFailure); -} - -FileBasedDocument::SaveResult FileBasedDocument::saveAs (const File& newFile, - const bool warnAboutOverwritingExistingFiles, - const bool askUserForFileIfNotSpecified, - const bool showMessageOnFailure) -{ - if (newFile == File::nonexistent) - { - if (askUserForFileIfNotSpecified) - { - return saveAsInteractive (true); - } - else - { - // can't save to an unspecified file - jassertfalse - return failedToWriteToFile; - } - } - - if (warnAboutOverwritingExistingFiles && newFile.exists()) - { - if (! AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, - TRANS("File already exists"), - TRANS("There's already a file called:\n\n") - + newFile.getFullPathName() - + TRANS("\n\nAre you sure you want to overwrite it?"), - TRANS("overwrite"), - TRANS("cancel"))) - { - return userCancelledSave; - } - } - - MouseCursor::showWaitCursor(); - - const File oldFile (documentFile); - documentFile = newFile; - - String error (saveDocument (newFile)); - - if (error.isEmpty()) - { - setChangedFlag (false); - MouseCursor::hideWaitCursor(); - - return savedOk; - } - - documentFile = oldFile; - MouseCursor::hideWaitCursor(); - - if (showMessageOnFailure) - { - AlertWindow::showMessageBox (AlertWindow::WarningIcon, - TRANS("Error writing to file..."), - TRANS("An error occurred while trying to save \"") - + getDocumentTitle() - + TRANS("\" to the file:\n\n") - + newFile.getFullPathName() - + T("\n\n") - + error); - } - - return failedToWriteToFile; -} - -FileBasedDocument::SaveResult FileBasedDocument::saveIfNeededAndUserAgrees() -{ - if (! hasChangedSinceSaved()) - return savedOk; - - const int r = AlertWindow::showYesNoCancelBox (AlertWindow::QuestionIcon, - TRANS("Closing document..."), - TRANS("Do you want to save the changes to \"") - + getDocumentTitle() + T("\"?"), - TRANS("save"), - TRANS("discard changes"), - TRANS("cancel")); - - if (r == 1) - { - // save changes - return save (true, true); - } - else if (r == 2) - { - // discard changes - return savedOk; - } - - return userCancelledSave; -} - -FileBasedDocument::SaveResult FileBasedDocument::saveAsInteractive (const bool warnAboutOverwritingExistingFiles) -{ - File f; - - if (documentFile.existsAsFile()) - f = documentFile; - else - f = getLastDocumentOpened(); - - String legalFilename (File::createLegalFileName (getDocumentTitle())); - - if (legalFilename.isEmpty()) - legalFilename = "unnamed"; - - if (f.existsAsFile() || f.getParentDirectory().isDirectory()) - f = f.getSiblingFile (legalFilename); - else - f = File::getSpecialLocation (File::userDocumentsDirectory).getChildFile (legalFilename); - - f = f.withFileExtension (fileExtension) - .getNonexistentSibling (true); - - FileChooser fc (saveFileDialogTitle, f, fileWildcard); - - if (fc.browseForFileToSave (warnAboutOverwritingExistingFiles)) - { - setLastDocumentOpened (fc.getResult()); - - File chosen (fc.getResult()); - if (chosen.getFileExtension().isEmpty()) - chosen = chosen.withFileExtension (fileExtension); - - return saveAs (chosen, false, false, true); - } - - return userCancelledSave; -} - -END_JUCE_NAMESPACE -/********* End of inlined file: juce_FileBasedDocument.cpp *********/ - -/********* Start of inlined file: juce_RecentlyOpenedFilesList.cpp *********/ - -BEGIN_JUCE_NAMESPACE - -RecentlyOpenedFilesList::RecentlyOpenedFilesList() - : maxNumberOfItems (10) -{ -} - -RecentlyOpenedFilesList::~RecentlyOpenedFilesList() -{ -} - -void RecentlyOpenedFilesList::setMaxNumberOfItems (const int newMaxNumber) -{ - maxNumberOfItems = jmax (1, newMaxNumber); - - while (getNumFiles() > maxNumberOfItems) - files.remove (getNumFiles() - 1); -} - -int RecentlyOpenedFilesList::getNumFiles() const -{ - return files.size(); -} - -const File RecentlyOpenedFilesList::getFile (const int index) const -{ - return File (files [index]); -} - -void RecentlyOpenedFilesList::clear() -{ - files.clear(); -} - -void RecentlyOpenedFilesList::addFile (const File& file) -{ - const String path (file.getFullPathName()); - - files.removeString (path, true); - files.insert (0, path); - - setMaxNumberOfItems (maxNumberOfItems); -} - -void RecentlyOpenedFilesList::removeNonExistentFiles() -{ - for (int i = getNumFiles(); --i >= 0;) - if (! getFile(i).exists()) - files.remove (i); -} - -int RecentlyOpenedFilesList::createPopupMenuItems (PopupMenu& menuToAddTo, - const int baseItemId, - const bool showFullPaths, - const bool dontAddNonExistentFiles, - const File** filesToAvoid) -{ - int num = 0; - - for (int i = 0; i < getNumFiles(); ++i) - { - const File f (getFile(i)); - - if ((! dontAddNonExistentFiles) || f.exists()) - { - bool needsAvoiding = false; - - if (filesToAvoid != 0) - { - const File** files = filesToAvoid; - - while (*files != 0) - { - if (f == **files) - { - needsAvoiding = true; - break; - } - - ++files; - } - } - - if (! needsAvoiding) - { - menuToAddTo.addItem (baseItemId + i, - showFullPaths ? f.getFullPathName() - : f.getFileName()); - ++num; - } - } - } - - return num; -} - -const String RecentlyOpenedFilesList::toString() const -{ - return files.joinIntoString (T("\n")); -} - -void RecentlyOpenedFilesList::restoreFromString (const String& stringifiedVersion) -{ - clear(); - files.addLines (stringifiedVersion); - - setMaxNumberOfItems (maxNumberOfItems); -} - -END_JUCE_NAMESPACE -/********* End of inlined file: juce_RecentlyOpenedFilesList.cpp *********/ - -/********* Start of inlined file: juce_UndoManager.cpp *********/ - -BEGIN_JUCE_NAMESPACE - -UndoManager::UndoManager (const int maxNumberOfUnitsToKeep, - const int minimumTransactions) - : totalUnitsStored (0), - nextIndex (0), - newTransaction (true), - reentrancyCheck (false) -{ - setMaxNumberOfStoredUnits (maxNumberOfUnitsToKeep, - minimumTransactions); -} - -UndoManager::~UndoManager() -{ - clearUndoHistory(); -} - -void UndoManager::clearUndoHistory() -{ - transactions.clear(); - transactionNames.clear(); - totalUnitsStored = 0; - nextIndex = 0; - sendChangeMessage (this); -} - -int UndoManager::getNumberOfUnitsTakenUpByStoredCommands() const -{ - return totalUnitsStored; -} - -void UndoManager::setMaxNumberOfStoredUnits (const int maxNumberOfUnitsToKeep, - const int minimumTransactions) -{ - maxNumUnitsToKeep = jmax (1, maxNumberOfUnitsToKeep); - minimumTransactionsToKeep = jmax (1, minimumTransactions); -} - -bool UndoManager::perform (UndoableAction* const command, const String& actionName) -{ - if (command != 0) - { - if (actionName.isNotEmpty()) - currentTransactionName = actionName; - - if (reentrancyCheck) - { - jassertfalse // don't call perform() recursively from the UndoableAction::perform() or - // undo() methods, or else these actions won't actually get done. - - return false; - } - else - { - bool success = false; - - JUCE_TRY - { - success = command->perform(); - } - JUCE_CATCH_EXCEPTION - - jassert (success); - if (success) - { - if (nextIndex > 0 && ! newTransaction) - { - OwnedArray* commandSet = transactions [nextIndex - 1]; - - jassert (commandSet != 0); - if (commandSet == 0) - return false; - - commandSet->add (command); - } - else - { - OwnedArray* commandSet = new OwnedArray(); - commandSet->add (command); - transactions.insert (nextIndex, commandSet); - transactionNames.insert (nextIndex, currentTransactionName); - ++nextIndex; - } - - totalUnitsStored += command->getSizeInUnits(); - newTransaction = false; - } - - while (nextIndex < transactions.size()) - { - const OwnedArray * const lastSet = transactions.getLast(); - - for (int i = lastSet->size(); --i >= 0;) - totalUnitsStored -= lastSet->getUnchecked (i)->getSizeInUnits(); - - transactions.removeLast(); - transactionNames.remove (transactionNames.size() - 1); - } - - while (nextIndex > 0 - && totalUnitsStored > maxNumUnitsToKeep - && transactions.size() > minimumTransactionsToKeep) - { - const OwnedArray * const firstSet = transactions.getFirst(); - - for (int i = firstSet->size(); --i >= 0;) - totalUnitsStored -= firstSet->getUnchecked (i)->getSizeInUnits(); - - jassert (totalUnitsStored >= 0); // something fishy going on if this fails! - - transactions.remove (0); - transactionNames.remove (0); - --nextIndex; - } - - sendChangeMessage (this); - - return success; - } - } - - return false; -} - -void UndoManager::beginNewTransaction (const String& actionName) -{ - newTransaction = true; - currentTransactionName = actionName; -} - -void UndoManager::setCurrentTransactionName (const String& newName) -{ - currentTransactionName = newName; -} - -bool UndoManager::canUndo() const -{ - return nextIndex > 0; -} - -bool UndoManager::canRedo() const -{ - return nextIndex < transactions.size(); -} - -const String UndoManager::getUndoDescription() const -{ - return transactionNames [nextIndex - 1]; -} - -const String UndoManager::getRedoDescription() const -{ - return transactionNames [nextIndex]; -} - -bool UndoManager::undo() -{ - const OwnedArray* const commandSet = transactions [nextIndex - 1]; - - if (commandSet == 0) - return false; - - reentrancyCheck = true; - bool failed = false; - - for (int i = commandSet->size(); --i >= 0;) - { - if (! commandSet->getUnchecked(i)->undo()) - { - jassertfalse - failed = true; - break; - } - } - - reentrancyCheck = false; - - if (failed) - { - clearUndoHistory(); - } - else - { - --nextIndex; - } - - beginNewTransaction(); - - sendChangeMessage (this); - return true; -} - -bool UndoManager::redo() -{ - const OwnedArray* const commandSet = transactions [nextIndex]; - - if (commandSet == 0) - return false; - - reentrancyCheck = true; - bool failed = false; - - for (int i = 0; i < commandSet->size(); ++i) - { - if (! commandSet->getUnchecked(i)->perform()) - { - jassertfalse - failed = true; - break; - } - } - - reentrancyCheck = false; - - if (failed) - { - clearUndoHistory(); - } - else - { - ++nextIndex; - } - - beginNewTransaction(); - - sendChangeMessage (this); - return true; -} - -bool UndoManager::undoCurrentTransactionOnly() -{ - return newTransaction ? false - : undo(); -} - -void UndoManager::getActionsInCurrentTransaction (Array & actionsFound) const -{ - const OwnedArray * const commandSet = transactions [nextIndex - 1]; - - if (commandSet != 0 && ! newTransaction) - { - for (int i = 0; i < commandSet->size(); ++i) - actionsFound.add (commandSet->getUnchecked(i)); - } -} - -END_JUCE_NAMESPACE -/********* End of inlined file: juce_UndoManager.cpp *********/ - /********* Start of inlined file: juce_ActionBroadcaster.cpp *********/ BEGIN_JUCE_NAMESPACE @@ -62418,7 +62418,7 @@ void LookAndFeel::drawPropertyComponentLabel (Graphics& g, int, int height, g.setColour (Colours::black); if (! component.isEnabled()) - g.setOpacity (g.getCurrentColour().getAlpha() * 0.6f); + g.setOpacity (g.getCurrentColour().getFloatAlpha() * 0.6f); g.setFont (jmin (height, 24) * 0.65f); @@ -66094,6 +66094,9 @@ public: // a modal loop and deletes this object before the method completes) const String dragDescLocal (dragDesc); + currentlyOver = 0; + deleteAndZero (currentlyOverWatcher); + ddt->itemDropped (dragDescLocal, source, relX, relY); } @@ -232819,7 +232822,10 @@ bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAdd MapiRecipDesc recip; zerostruct (recip); recip.ulRecipClass = MAPI_TO; - recip.lpszName = (LPSTR) (LPCSTR) targetEmailAddress; + String targetEmailAddress_ (targetEmailAddress); + if (targetEmailAddress_.isEmpty()) + targetEmailAddress_ = " "; // (Windows Mail can't deal with a blank address) + recip.lpszName = (LPSTR) (LPCSTR) targetEmailAddress_; message.nRecipCount = 1; message.lpRecips = &recip; diff --git a/juce_amalgamated.h b/juce_amalgamated.h index 30e4c5458e..30de2ae275 100644 --- a/juce_amalgamated.h +++ b/juce_amalgamated.h @@ -2516,1459 +2516,7 @@ BEGIN_JUCE_NAMESPACE #ifndef __JUCE_JUCE_CORE_INCLUDES_INCLUDEFILES__ #define __JUCE_JUCE_CORE_INCLUDES_INCLUDEFILES__ -#ifndef __JUCE_ATOMIC_JUCEHEADER__ - -/********* Start of inlined file: juce_Atomic.h *********/ -#ifndef __JUCE_ATOMIC_JUCEHEADER__ -#define __JUCE_ATOMIC_JUCEHEADER__ - -// Atomic increment/decrement operations.. - -#if JUCE_MAC && ! DOXYGEN - - #if ! MACOS_10_3_OR_EARLIER - - forcedinline void atomicIncrement (int& variable) throw() { OSAtomicIncrement32 ((int32_t*) &variable); } - forcedinline int atomicIncrementAndReturn (int& variable) throw() { return OSAtomicIncrement32 ((int32_t*) &variable); } - forcedinline void atomicDecrement (int& variable) throw() { OSAtomicDecrement32 ((int32_t*) &variable); } - forcedinline int atomicDecrementAndReturn (int& variable) throw() { return OSAtomicDecrement32 ((int32_t*) &variable); } - #else - - forcedinline void atomicIncrement (int& variable) throw() { OTAtomicAdd32 (1, (SInt32*) &variable); } - forcedinline int atomicIncrementAndReturn (int& variable) throw() { return OTAtomicAdd32 (1, (SInt32*) &variable); } - forcedinline void atomicDecrement (int& variable) throw() { OTAtomicAdd32 (-1, (SInt32*) &variable); } - forcedinline int atomicDecrementAndReturn (int& variable) throw() { return OTAtomicAdd32 (-1, (SInt32*) &variable); } - #endif - -#elif JUCE_GCC - - #if JUCE_USE_GCC_ATOMIC_INTRINSICS - forcedinline void atomicIncrement (int& variable) throw() { __sync_add_and_fetch (&variable, 1); } - forcedinline int atomicIncrementAndReturn (int& variable) throw() { return __sync_add_and_fetch (&variable, 1); } - forcedinline void atomicDecrement (int& variable) throw() { __sync_add_and_fetch (&variable, -1); } - forcedinline int atomicDecrementAndReturn (int& variable) throw() { return __sync_add_and_fetch (&variable, -1); } - #else - - /** Increments an integer in a thread-safe way. */ - forcedinline void atomicIncrement (int& variable) throw() - { - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock incl (%%rax)" - : - : "a" (&variable) - : "cc", "memory"); - #else - "lock incl %0" - : "=m" (variable) - : "m" (variable)); - #endif - } - - /** Increments an integer in a thread-safe way and returns the incremented value. */ - forcedinline int atomicIncrementAndReturn (int& variable) throw() - { - int result; - - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock xaddl %%ebx, (%%rax) \n\ - incl %%ebx" - : "=b" (result) - : "a" (&variable), "b" (1) - : "cc", "memory"); - #else - "lock xaddl %%eax, (%%ecx) \n\ - incl %%eax" - : "=a" (result) - : "c" (&variable), "a" (1) - : "memory"); - #endif - - return result; - } - - /** Decrememts an integer in a thread-safe way. */ - forcedinline void atomicDecrement (int& variable) throw() - { - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock decl (%%rax)" - : - : "a" (&variable) - : "cc", "memory"); - #else - "lock decl %0" - : "=m" (variable) - : "m" (variable)); - #endif - } - - /** Decrememts an integer in a thread-safe way and returns the incremented value. */ - forcedinline int atomicDecrementAndReturn (int& variable) throw() - { - int result; - - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock xaddl %%ebx, (%%rax) \n\ - decl %%ebx" - : "=b" (result) - : "a" (&variable), "b" (-1) - : "cc", "memory"); - #else - "lock xaddl %%eax, (%%ecx) \n\ - decl %%eax" - : "=a" (result) - : "c" (&variable), "a" (-1) - : "memory"); - #endif - return result; - } - #endif - -#elif JUCE_USE_INTRINSICS - - #pragma intrinsic (_InterlockedIncrement) - #pragma intrinsic (_InterlockedDecrement) - - /** Increments an integer in a thread-safe way. */ - forcedinline void __fastcall atomicIncrement (int& variable) throw() - { - _InterlockedIncrement (reinterpret_cast (&variable)); - } - - /** Increments an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicIncrementAndReturn (int& variable) throw() - { - return _InterlockedIncrement (reinterpret_cast (&variable)); - } - - /** Decrememts an integer in a thread-safe way. */ - forcedinline void __fastcall atomicDecrement (int& variable) throw() - { - _InterlockedDecrement (reinterpret_cast (&variable)); - } - - /** Decrememts an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicDecrementAndReturn (int& variable) throw() - { - return _InterlockedDecrement (reinterpret_cast (&variable)); - } -#else - - /** Increments an integer in a thread-safe way. */ - forcedinline void __fastcall atomicIncrement (int& variable) throw() - { - __asm { - mov ecx, dword ptr [variable] - lock inc dword ptr [ecx] - } - } - - /** Increments an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicIncrementAndReturn (int& variable) throw() - { - int result; - - __asm { - mov ecx, dword ptr [variable] - mov eax, 1 - lock xadd dword ptr [ecx], eax - inc eax - mov result, eax - } - - return result; - } - - /** Decrememts an integer in a thread-safe way. */ - forcedinline void __fastcall atomicDecrement (int& variable) throw() - { - __asm { - mov ecx, dword ptr [variable] - lock dec dword ptr [ecx] - } - } - - /** Decrememts an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicDecrementAndReturn (int& variable) throw() - { - int result; - - __asm { - mov ecx, dword ptr [variable] - mov eax, -1 - lock xadd dword ptr [ecx], eax - dec eax - mov result, eax - } - - return result; - } -#endif - -#endif // __JUCE_ATOMIC_JUCEHEADER__ -/********* End of inlined file: juce_Atomic.h *********/ - -#endif -#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__ - -#endif -#ifndef __JUCE_FILELOGGER_JUCEHEADER__ - -/********* Start of inlined file: juce_FileLogger.h *********/ -#ifndef __JUCE_FILELOGGER_JUCEHEADER__ -#define __JUCE_FILELOGGER_JUCEHEADER__ - -/********* Start of inlined file: juce_File.h *********/ -#ifndef __JUCE_FILE_JUCEHEADER__ -#define __JUCE_FILE_JUCEHEADER__ - -/********* Start of inlined file: juce_OwnedArray.h *********/ -#ifndef __JUCE_OWNEDARRAY_JUCEHEADER__ -#define __JUCE_OWNEDARRAY_JUCEHEADER__ - -/********* Start of inlined file: juce_ArrayAllocationBase.h *********/ -#ifndef __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ -#define __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ - -/** The default size of chunk in which arrays increase their storage. - - Used by ArrayAllocationBase and its subclasses. -*/ -const int juceDefaultArrayGranularity = 8; - -/** - Implements some basic array storage allocation functions. - - This class isn't really for public use - it's used by the other - array classes, but might come in handy for some purposes. - - @see Array, OwnedArray, ReferenceCountedArray -*/ -template -class ArrayAllocationBase -{ -protected: - - /** Creates an empty array. - - @param granularity_ this is the size of increment by which the internal storage - will be increased. - */ - ArrayAllocationBase (const int granularity_) throw() - : elements (0), - numAllocated (0), - granularity (granularity_) - { - jassert (granularity > 0); - } - - /** Destructor. */ - ~ArrayAllocationBase() throw() - { - delete[] elements; - } - - /** Changes the amount of storage allocated. - - This will retain any data currently held in the array, and either add or - remove extra space at the end. - - @param numElements the number of elements that are needed - */ - void setAllocatedSize (const int numElements) throw() - { - if (numAllocated != numElements) - { - if (numElements > 0) - { - ElementType* const newElements = new ElementType [numElements]; - - const int itemsToRetain = jmin (numElements, numAllocated); - - for (int i = 0; i < itemsToRetain; ++i) - newElements[i] = elements[i]; - - delete[] elements; - elements = newElements; - - } - else if (elements != 0) - { - delete[] elements; - elements = 0; - } - - numAllocated = numElements; - } - } - - /** Increases the amount of storage allocated if it is less than a given amount. - - This will retain any data currently held in the array, but will add - extra space at the end to make sure there it's at least as big as the size - passed in. If it's already bigger, no action is taken. - - @param minNumElements the minimum number of elements that are needed - */ - void ensureAllocatedSize (int minNumElements) throw() - { - if (minNumElements > numAllocated) - { - // for arrays with small granularity that get big, start - // increasing the size in bigger jumps - if (minNumElements > (granularity << 6)) - { - minNumElements += (minNumElements / granularity); - if (minNumElements > (granularity << 8)) - minNumElements += granularity << 6; - else - minNumElements += granularity << 5; - } - - setAllocatedSize (granularity * (minNumElements / granularity + 1)); - } - } - - ElementType* elements; - int numAllocated, granularity; - -private: - ArrayAllocationBase (const ArrayAllocationBase&); - const ArrayAllocationBase& operator= (const ArrayAllocationBase&); -}; - -#endif // __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ -/********* End of inlined file: juce_ArrayAllocationBase.h *********/ - -/********* Start of inlined file: juce_ElementComparator.h *********/ -#ifndef __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ -#define __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ - -/** - Sorts a range of elements in an array. - - The comparator object that is passed-in must define a public method with the following - signature: - @code - int compareElements (ElementType first, ElementType second); - @endcode - - ..and this method must return: - - a value of < 0 if the first comes before the second - - a value of 0 if the two objects are equivalent - - a value of > 0 if the second comes before the first - - To improve performance, the compareElements() method can be declared as static or const. - - @param comparator an object which defines a compareElements() method - @param array the array to sort - @param firstElement the index of the first element of the range to be sorted - @param lastElement the index of the last element in the range that needs - sorting (this is inclusive) - @param retainOrderOfEquivalentItems if true, the order of items that the - comparator deems the same will be maintained - this will be - a slower algorithm than if they are allowed to be moved around. - - @see sortArrayRetainingOrder -*/ -template -static void sortArray (ElementComparator& comparator, - ElementType* const array, - int firstElement, - int lastElement, - const bool retainOrderOfEquivalentItems) -{ - (void) comparator; // if you pass in an object with a static compareElements() method, this - // avoids getting warning messages about the parameter being unused - - if (lastElement > firstElement) - { - if (retainOrderOfEquivalentItems) - { - for (int i = firstElement; i < lastElement; ++i) - { - if (comparator.compareElements (array[i], array [i + 1]) > 0) - { - const ElementType temp = array [i]; - array [i] = array[i + 1]; - array [i + 1] = temp; - - if (i > firstElement) - i -= 2; - } - } - } - else - { - int fromStack[30], toStack[30]; - int stackIndex = 0; - - for (;;) - { - const int size = (lastElement - firstElement) + 1; - - if (size <= 8) - { - int j = lastElement; - int maxIndex; - - while (j > firstElement) - { - maxIndex = firstElement; - for (int k = firstElement + 1; k <= j; ++k) - if (comparator.compareElements (array[k], array [maxIndex]) > 0) - maxIndex = k; - - const ElementType temp = array [maxIndex]; - array [maxIndex] = array[j]; - array [j] = temp; - - --j; - } - } - else - { - const int mid = firstElement + (size >> 1); - ElementType temp = array [mid]; - array [mid] = array [firstElement]; - array [firstElement] = temp; - - int i = firstElement; - int j = lastElement + 1; - - for (;;) - { - while (++i <= lastElement - && comparator.compareElements (array[i], array [firstElement]) <= 0) - {} - - while (--j > firstElement - && comparator.compareElements (array[j], array [firstElement]) >= 0) - {} - - if (j < i) - break; - - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - temp = array [firstElement]; - array [firstElement] = array[j]; - array [j] = temp; - - if (j - 1 - firstElement >= lastElement - i) - { - if (firstElement + 1 < j) - { - fromStack [stackIndex] = firstElement; - toStack [stackIndex] = j - 1; - ++stackIndex; - } - - if (i < lastElement) - { - firstElement = i; - continue; - } - } - else - { - if (i < lastElement) - { - fromStack [stackIndex] = i; - toStack [stackIndex] = lastElement; - ++stackIndex; - } - - if (firstElement + 1 < j) - { - lastElement = j - 1; - continue; - } - } - } - - if (--stackIndex < 0) - break; - - jassert (stackIndex < numElementsInArray (fromStack)); - - firstElement = fromStack [stackIndex]; - lastElement = toStack [stackIndex]; - } - } - } -} - -/** - Searches a sorted array of elements, looking for the index at which a specified value - should be inserted for it to be in the correct order. - - The comparator object that is passed-in must define a public method with the following - signature: - @code - int compareElements (ElementType first, ElementType second); - @endcode - - ..and this method must return: - - a value of < 0 if the first comes before the second - - a value of 0 if the two objects are equivalent - - a value of > 0 if the second comes before the first - - To improve performance, the compareElements() method can be declared as static or const. - - @param comparator an object which defines a compareElements() method - @param array the array to search - @param newElement the value that is going to be inserted - @param firstElement the index of the first element to search - @param lastElement the index of the last element in the range (this is non-inclusive) -*/ -template -static int findInsertIndexInSortedArray (ElementComparator& comparator, - ElementType* const array, - const ElementType newElement, - int firstElement, - int lastElement) -{ - jassert (firstElement <= lastElement); - - (void) comparator; // if you pass in an object with a static compareElements() method, this - // avoids getting warning messages about the parameter being unused - - while (firstElement < lastElement) - { - if (comparator.compareElements (newElement, array [firstElement]) == 0) - { - ++firstElement; - break; - } - else - { - const int halfway = (firstElement + lastElement) >> 1; - - if (halfway == firstElement) - { - if (comparator.compareElements (newElement, array [halfway]) >= 0) - ++firstElement; - - break; - } - else if (comparator.compareElements (newElement, array [halfway]) >= 0) - { - firstElement = halfway; - } - else - { - lastElement = halfway; - } - } - } - - return firstElement; -} - -/** - A simple ElementComparator class that can be used to sort an array of - integer primitive objects. - - Example: @code - Array myArray; - - IntegerElementComparator sorter; - myArray.sort (sorter); - @endcode - - For floating point values, see the FloatElementComparator class instead. - - @see FloatElementComparator, ElementComparator -*/ -template -class IntegerElementComparator -{ -public: - static int compareElements (const ElementType first, - const ElementType second) throw() - { - return (first < second) ? -1 : ((first == second) ? 0 : 1); - } -}; - -/** - A simple ElementComparator class that can be used to sort an array of numeric - double or floating point primitive objects. - - Example: @code - Array myArray; - - FloatElementComparator sorter; - myArray.sort (sorter); - @endcode - - For integer values, see the IntegerElementComparator class instead. - - @see IntegerElementComparator, ElementComparator -*/ -template -class FloatElementComparator -{ -public: - static int compareElements (const ElementType first, - const ElementType second) throw() - { - return (first < second) ? -1 : ((first == second) ? 0 : 1); - } -}; - -#endif // __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ -/********* End of inlined file: juce_ElementComparator.h *********/ - -/********* Start of inlined file: juce_CriticalSection.h *********/ -#ifndef __JUCE_CRITICALSECTION_JUCEHEADER__ -#define __JUCE_CRITICALSECTION_JUCEHEADER__ - -/** - Prevents multiple threads from accessing shared objects at the same time. - - @see ScopedLock, Thread, InterProcessLock -*/ -class JUCE_API CriticalSection -{ -public: - - /** - Creates a CriticalSection object - */ - CriticalSection() throw(); - - /** Destroys a CriticalSection object. - - If the critical section is deleted whilst locked, its subsequent behaviour - is unpredictable. - */ - ~CriticalSection() throw(); - - /** Locks this critical section. - - If the lock is currently held by another thread, this will wait until it - becomes free. - - If the lock is already held by the caller thread, the method returns immediately. - - @see exit, ScopedLock - */ - void enter() const throw(); - - /** Attempts to lock this critical section without blocking. - - This method behaves identically to CriticalSection::enter, except that the caller thread - does not wait if the lock is currently held by another thread but returns false immediately. - - @returns false if the lock is currently held by another thread, true otherwise. - @see enter - */ - bool tryEnter() const throw(); - - /** Releases the lock. - - If the caller thread hasn't got the lock, this can have unpredictable results. - - If the enter() method has been called multiple times by the thread, each - call must be matched by a call to exit() before other threads will be allowed - to take over the lock. - - @see enter, ScopedLock - */ - void exit() const throw(); - - juce_UseDebuggingNewOperator - -private: - -#if JUCE_WIN32 - #if JUCE_64BIT - // To avoid including windows.h in the public Juce includes, we'll just allocate a - // block of memory here that's big enough to be used internally as a windows critical - // section object. - uint8 internal [44]; - #else - uint8 internal [24]; - #endif -#else - mutable pthread_mutex_t internal; -#endif - - CriticalSection (const CriticalSection&); - const CriticalSection& operator= (const CriticalSection&); -}; - -/** - A class that can be used in place of a real CriticalSection object. - - This is currently used by some templated array classes, and should get - optimised out by the compiler. - - @see Array, OwnedArray, ReferenceCountedArray -*/ -class JUCE_API DummyCriticalSection -{ -public: - forcedinline DummyCriticalSection() throw() {} - forcedinline ~DummyCriticalSection() throw() {} - - forcedinline void enter() const throw() {} - forcedinline void exit() const throw() {} -}; - -#endif // __JUCE_CRITICALSECTION_JUCEHEADER__ -/********* End of inlined file: juce_CriticalSection.h *********/ - -/** An array designed for holding objects. - - This holds a list of pointers to objects, and will automatically - delete the objects when they are removed from the array, or when the - array is itself deleted. - - Declare it in the form: OwnedArray - - ..and then add new objects, e.g. myOwnedArray.add (new MyObjectClass()); - - After adding objects, they are 'owned' by the array and will be deleted when - removed or replaced. - - To make all the array's methods thread-safe, pass in "CriticalSection" as the templated - TypeOfCriticalSectionToUse parameter, instead of the default DummyCriticalSection. - - @see Array, ReferenceCountedArray, StringArray, CriticalSection -*/ -template - -class OwnedArray : private ArrayAllocationBase -{ -public: - - /** Creates an empty array. - - @param granularity this is the size of increment by which the internal storage - used by the array will grow. Only change it from the default if you know the - array is going to be very big and needs to be able to grow efficiently. - - @see ArrayAllocationBase - */ - OwnedArray (const int granularity = juceDefaultArrayGranularity) throw() - : ArrayAllocationBase (granularity), - numUsed (0) - { - } - - /** Deletes the array and also deletes any objects inside it. - - To get rid of the array without deleting its objects, use its - clear (false) method before deleting it. - */ - ~OwnedArray() - { - clear (true); - } - - /** Clears the array, optionally deleting the objects inside it first. */ - void clear (const bool deleteObjects = true) - { - lock.enter(); - - if (deleteObjects) - { - while (numUsed > 0) - delete this->elements [--numUsed]; - } - - this->setAllocatedSize (0); - numUsed = 0; - lock.exit(); - } - - /** Returns the number of items currently in the array. - @see operator[] - */ - inline int size() const throw() - { - return numUsed; - } - - /** Returns a pointer to the object at this index in the array. - - If the index is out-of-range, this will return a null pointer, (and - it could be null anyway, because it's ok for the array to hold null - pointers as well as objects). - - @see getUnchecked - */ - inline ObjectClass* operator[] (const int index) const throw() - { - lock.enter(); - ObjectClass* const result = (((unsigned int) index) < (unsigned int) numUsed) - ? this->elements [index] - : (ObjectClass*) 0; - lock.exit(); - - return result; - } - - /** Returns a pointer to the object at this index in the array, without checking whether the index is in-range. - - This is a faster and less safe version of operator[] which doesn't check the index passed in, so - it can be used when you're sure the index if always going to be legal. - */ - inline ObjectClass* getUnchecked (const int index) const throw() - { - lock.enter(); - jassert (((unsigned int) index) < (unsigned int) numUsed); - ObjectClass* const result = this->elements [index]; - lock.exit(); - - return result; - } - - /** Returns a pointer to the first object in the array. - - This will return a null pointer if the array's empty. - @see getLast - */ - inline ObjectClass* getFirst() const throw() - { - lock.enter(); - ObjectClass* const result = (numUsed > 0) ? this->elements [0] - : (ObjectClass*) 0; - lock.exit(); - return result; - } - - /** Returns a pointer to the last object in the array. - - This will return a null pointer if the array's empty. - @see getFirst - */ - inline ObjectClass* getLast() const throw() - { - lock.enter(); - ObjectClass* const result = (numUsed > 0) ? this->elements [numUsed - 1] - : (ObjectClass*) 0; - lock.exit(); - - return result; - } - - /** Finds the index of an object which might be in the array. - - @param objectToLookFor the object to look for - @returns the index at which the object was found, or -1 if it's not found - */ - int indexOf (const ObjectClass* const objectToLookFor) const throw() - { - int result = -1; - - lock.enter(); - ObjectClass* const* e = this->elements; - - for (int i = numUsed; --i >= 0;) - { - if (objectToLookFor == *e) - { - result = (int) (e - this->elements); - break; - } - - ++e; - } - - lock.exit(); - return result; - } - - /** Returns true if the array contains a specified object. - - @param objectToLookFor the object to look for - @returns true if the object is in the array - */ - bool contains (const ObjectClass* const objectToLookFor) const throw() - { - lock.enter(); - - ObjectClass* const* e = this->elements; - int i = numUsed; - - while (i >= 4) - { - if (objectToLookFor == *e - || objectToLookFor == *++e - || objectToLookFor == *++e - || objectToLookFor == *++e) - { - lock.exit(); - return true; - } - - i -= 4; - ++e; - } - - while (i > 0) - { - if (objectToLookFor == *e) - { - lock.exit(); - return true; - } - - --i; - ++e; - } - - lock.exit(); - return false; - } - - /** Appends a new object to the end of the array. - - Note that the this object will be deleted by the OwnedArray when it - is removed, so be careful not to delete it somewhere else. - - Also be careful not to add the same object to the array more than once, - as this will obviously cause deletion of dangling pointers. - - @param newObject the new object to add to the array - @see set, insert, addIfNotAlreadyThere, addSorted - */ - void add (const ObjectClass* const newObject) throw() - { - lock.enter(); - this->ensureAllocatedSize (numUsed + 1); - this->elements [numUsed++] = const_cast (newObject); - lock.exit(); - } - - /** Inserts a new object into the array at the given index. - - Note that the this object will be deleted by the OwnedArray when it - is removed, so be careful not to delete it somewhere else. - - If the index is less than 0 or greater than the size of the array, the - element will be added to the end of the array. - Otherwise, it will be inserted into the array, moving all the later elements - along to make room. - - Be careful not to add the same object to the array more than once, - as this will obviously cause deletion of dangling pointers. - - @param indexToInsertAt the index at which the new element should be inserted - @param newObject the new object to add to the array - @see add, addSorted, addIfNotAlreadyThere, set - */ - void insert (int indexToInsertAt, - const ObjectClass* const newObject) throw() - { - if (indexToInsertAt >= 0) - { - lock.enter(); - - if (indexToInsertAt > numUsed) - indexToInsertAt = numUsed; - - this->ensureAllocatedSize (numUsed + 1); - - ObjectClass** const e = this->elements + indexToInsertAt; - const int numToMove = numUsed - indexToInsertAt; - - if (numToMove > 0) - memmove (e + 1, e, numToMove * sizeof (ObjectClass*)); - - *e = const_cast (newObject); - ++numUsed; - - lock.exit(); - } - else - { - add (newObject); - } - } - - /** Appends a new object at the end of the array as long as the array doesn't - already contain it. - - If the array already contains a matching object, nothing will be done. - - @param newObject the new object to add to the array - */ - void addIfNotAlreadyThere (const ObjectClass* const newObject) throw() - { - lock.enter(); - - if (! contains (newObject)) - add (newObject); - - lock.exit(); - } - - /** Replaces an object in the array with a different one. - - If the index is less than zero, this method does nothing. - If the index is beyond the end of the array, the new object is added to the end of the array. - - Be careful not to add the same object to the array more than once, - as this will obviously cause deletion of dangling pointers. - - @param indexToChange the index whose value you want to change - @param newObject the new value to set for this index. - @param deleteOldElement whether to delete the object that's being replaced with the new one - @see add, insert, remove - */ - void set (const int indexToChange, - const ObjectClass* const newObject, - const bool deleteOldElement = true) - { - if (indexToChange >= 0) - { - ObjectClass* toDelete = 0; - lock.enter(); - - if (indexToChange < numUsed) - { - if (deleteOldElement) - { - toDelete = this->elements [indexToChange]; - - if (toDelete == newObject) - toDelete = 0; - } - - this->elements [indexToChange] = const_cast (newObject); - } - else - { - this->ensureAllocatedSize (numUsed + 1); - this->elements [numUsed++] = const_cast (newObject); - } - - lock.exit(); - - delete toDelete; - } - } - - /** Inserts a new object into the array assuming that the array is sorted. - - This will use a comparator to find the position at which the new object - should go. If the array isn't sorted, the behaviour of this - method will be unpredictable. - - @param comparator the comparator to use to compare the elements - see the sort method - for details about this object's structure - @param newObject the new object to insert to the array - @see add, sort, indexOfSorted - */ - template - void addSorted (ElementComparator& comparator, - ObjectClass* const newObject) throw() - { - (void) comparator; // if you pass in an object with a static compareElements() method, this - // avoids getting warning messages about the parameter being unused - lock.enter(); - insert (findInsertIndexInSortedArray (comparator, this->elements, newObject, 0, numUsed), newObject); - lock.exit(); - } - - /** Finds the index of an object in the array, assuming that the array is sorted. - - This will use a comparator to do a binary-chop to find the index of the given - element, if it exists. If the array isn't sorted, the behaviour of this - method will be unpredictable. - - @param comparator the comparator to use to compare the elements - see the sort() - method for details about the form this object should take - @param objectToLookFor the object to search for - @returns the index of the element, or -1 if it's not found - @see addSorted, sort - */ - template - int indexOfSorted (ElementComparator& comparator, - const ObjectClass* const objectToLookFor) const throw() - { - (void) comparator; // if you pass in an object with a static compareElements() method, this - // avoids getting warning messages about the parameter being unused - lock.enter(); - - int start = 0; - int end = numUsed; - - for (;;) - { - if (start >= end) - { - lock.exit(); - return -1; - } - else if (comparator.compareElements (objectToLookFor, this->elements [start]) == 0) - { - lock.exit(); - return start; - } - else - { - const int halfway = (start + end) >> 1; - - if (halfway == start) - { - lock.exit(); - return -1; - } - else if (comparator.compareElements (objectToLookFor, this->elements [halfway]) >= 0) - start = halfway; - else - end = halfway; - } - } - } - - /** Removes an object from the array. - - This will remove the object at a given index (optionally also - deleting it) and move back all the subsequent objects to close the gap. - If the index passed in is out-of-range, nothing will happen. - - @param indexToRemove the index of the element to remove - @param deleteObject whether to delete the object that is removed - @see removeObject, removeRange - */ - void remove (const int indexToRemove, - const bool deleteObject = true) - { - lock.enter(); - ObjectClass* toDelete = 0; - - if (((unsigned int) indexToRemove) < (unsigned int) numUsed) - { - ObjectClass** const e = this->elements + indexToRemove; - - if (deleteObject) - toDelete = *e; - - --numUsed; - const int numToShift = numUsed - indexToRemove; - - if (numToShift > 0) - memmove (e, e + 1, numToShift * sizeof (ObjectClass*)); - - if ((numUsed << 1) < this->numAllocated) - minimiseStorageOverheads(); - } - - lock.exit(); - - delete toDelete; - } - - /** Removes a specified object from the array. - - If the item isn't found, no action is taken. - - @param objectToRemove the object to try to remove - @param deleteObject whether to delete the object (if it's found) - @see remove, removeRange - */ - void removeObject (const ObjectClass* const objectToRemove, - const bool deleteObject = true) - { - lock.enter(); - ObjectClass** e = this->elements; - - for (int i = numUsed; --i >= 0;) - { - if (objectToRemove == *e) - { - remove ((int) (e - this->elements), deleteObject); - break; - } - - ++e; - } - - lock.exit(); - } - - /** Removes a range of objects from the array. - - This will remove a set of objects, starting from the given index, - and move any subsequent elements down to close the gap. - - If the range extends beyond the bounds of the array, it will - be safely clipped to the size of the array. - - @param startIndex the index of the first object to remove - @param numberToRemove how many objects should be removed - @param deleteObjects whether to delete the objects that get removed - @see remove, removeObject - */ - void removeRange (int startIndex, - const int numberToRemove, - const bool deleteObjects = true) - { - lock.enter(); - const int endIndex = jlimit (0, numUsed, startIndex + numberToRemove); - startIndex = jlimit (0, numUsed, startIndex); - - if (endIndex > startIndex) - { - if (deleteObjects) - { - for (int i = startIndex; i < endIndex; ++i) - { - delete this->elements [i]; - this->elements [i] = 0; // (in case one of the destructors accesses this array and hits a dangling pointer) - } - } - - const int rangeSize = endIndex - startIndex; - ObjectClass** e = this->elements + startIndex; - int numToShift = numUsed - endIndex; - numUsed -= rangeSize; - - while (--numToShift >= 0) - { - *e = e [rangeSize]; - ++e; - } - - if ((numUsed << 1) < this->numAllocated) - minimiseStorageOverheads(); - } - - lock.exit(); - } - - /** Removes the last n objects from the array. - - @param howManyToRemove how many objects to remove from the end of the array - @param deleteObjects whether to also delete the objects that are removed - @see remove, removeObject, removeRange - */ - void removeLast (int howManyToRemove = 1, - const bool deleteObjects = true) - { - lock.enter(); - - if (howManyToRemove >= numUsed) - { - clear (deleteObjects); - } - else - { - while (--howManyToRemove >= 0) - remove (numUsed - 1, deleteObjects); - } - - lock.exit(); - } - - /** Swaps a pair of objects in the array. - - If either of the indexes passed in is out-of-range, nothing will happen, - otherwise the two objects at these positions will be exchanged. - */ - void swap (const int index1, - const int index2) throw() - { - lock.enter(); - - if (((unsigned int) index1) < (unsigned int) numUsed - && ((unsigned int) index2) < (unsigned int) numUsed) - { - swapVariables (this->elements [index1], - this->elements [index2]); - } - - lock.exit(); - } - - /** Moves one of the objects to a different position. - - This will move the object to a specified index, shuffling along - any intervening elements as required. - - So for example, if you have the array { 0, 1, 2, 3, 4, 5 } then calling - move (2, 4) would result in { 0, 1, 3, 4, 2, 5 }. - - @param currentIndex the index of the object to be moved. If this isn't a - valid index, then nothing will be done - @param newIndex the index at which you'd like this object to end up. If this - is less than zero, it will be moved to the end of the array - */ - void move (const int currentIndex, - int newIndex) throw() - { - if (currentIndex != newIndex) - { - lock.enter(); - - if (((unsigned int) currentIndex) < (unsigned int) numUsed) - { - if (((unsigned int) newIndex) >= (unsigned int) numUsed) - newIndex = numUsed - 1; - - ObjectClass* const value = this->elements [currentIndex]; - - if (newIndex > currentIndex) - { - memmove (this->elements + currentIndex, - this->elements + currentIndex + 1, - (newIndex - currentIndex) * sizeof (ObjectClass*)); - } - else - { - memmove (this->elements + newIndex + 1, - this->elements + newIndex, - (currentIndex - newIndex) * sizeof (ObjectClass*)); - } - - this->elements [newIndex] = value; - } - - lock.exit(); - } - } - - /** This swaps the contents of this array with those of another array. - - If you need to exchange two arrays, this is vastly quicker than using copy-by-value - because it just swaps their internal pointers. - */ - template - void swapWithArray (OtherArrayType& otherArray) throw() - { - lock.enter(); - otherArray.lock.enter(); - swapVariables (this->numUsed, otherArray.numUsed); - swapVariables (this->elements, otherArray.elements); - swapVariables (this->numAllocated, otherArray.numAllocated); - otherArray.lock.exit(); - lock.exit(); - } - - /** Reduces the amount of storage being used by the array. - - Arrays typically allocate slightly more storage than they need, and after - removing elements, they may have quite a lot of unused space allocated. - This method will reduce the amount of allocated storage to a minimum. - */ - void minimiseStorageOverheads() throw() - { - lock.enter(); - - if (numUsed == 0) - { - this->setAllocatedSize (0); - } - else - { - const int newAllocation = this->granularity * (numUsed / this->granularity + 1); - - if (newAllocation < this->numAllocated) - this->setAllocatedSize (newAllocation); - } - - lock.exit(); - } - - /** Increases the array's internal storage to hold a minimum number of elements. - - Calling this before adding a large known number of elements means that - the array won't have to keep dynamically resizing itself as the elements - are added, and it'll therefore be more efficient. - */ - void ensureStorageAllocated (const int minNumElements) throw() - { - this->ensureAllocatedSize (minNumElements); - } - - /** Sorts the elements in the array. - - This will use a comparator object to sort the elements into order. The object - passed must have a method of the form: - @code - int compareElements (ElementType first, ElementType second); - @endcode - - ..and this method must return: - - a value of < 0 if the first comes before the second - - a value of 0 if the two objects are equivalent - - a value of > 0 if the second comes before the first - - To improve performance, the compareElements() method can be declared as static or const. - - @param comparator the comparator to use for comparing elements. - @param retainOrderOfEquivalentItems if this is true, then items - which the comparator says are equivalent will be - kept in the order in which they currently appear - in the array. This is slower to perform, but may - be important in some cases. If it's false, a faster - algorithm is used, but equivalent elements may be - rearranged. - @see sortArray, indexOfSorted - */ - template - void sort (ElementComparator& comparator, - const bool retainOrderOfEquivalentItems = false) const throw() - { - (void) comparator; // if you pass in an object with a static compareElements() method, this - // avoids getting warning messages about the parameter being unused - - lock.enter(); - sortArray (comparator, this->elements, 0, size() - 1, retainOrderOfEquivalentItems); - lock.exit(); - } - - /** Locks the array's CriticalSection. - - Of course if the type of section used is a DummyCriticalSection, this won't - have any effect. - - @see unlockArray - */ - void lockArray() const throw() - { - lock.enter(); - } - - /** Unlocks the array's CriticalSection. - - Of course if the type of section used is a DummyCriticalSection, this won't - have any effect. - - @see lockArray - */ - void unlockArray() const throw() - { - lock.exit(); - } - - juce_UseDebuggingNewOperator - -private: - int numUsed; - TypeOfCriticalSectionToUse lock; - - // disallow copy constructor and assignment - OwnedArray (const OwnedArray&); - const OwnedArray& operator= (const OwnedArray&); -}; - -#endif // __JUCE_OWNEDARRAY_JUCEHEADER__ -/********* End of inlined file: juce_OwnedArray.h *********/ +#ifndef __JUCE_TIME_JUCEHEADER__ /********* Start of inlined file: juce_Time.h *********/ #ifndef __JUCE_TIME_JUCEHEADER__ @@ -4492,18 +3040,1055 @@ private: #endif // __JUCE_TIME_JUCEHEADER__ /********* End of inlined file: juce_Time.h *********/ -/********* Start of inlined file: juce_StringArray.h *********/ -#ifndef __JUCE_STRINGARRAY_JUCEHEADER__ -#define __JUCE_STRINGARRAY_JUCEHEADER__ +#endif +#ifndef __JUCE_STANDARDHEADER_JUCEHEADER__ -/********* Start of inlined file: juce_VoidArray.h *********/ -#ifndef __JUCE_VOIDARRAY_JUCEHEADER__ -#define __JUCE_VOIDARRAY_JUCEHEADER__ +#endif +#ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ + +/********* Start of inlined file: juce_SystemStats.h *********/ +#ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ +#define __JUCE_SYSTEMSTATS_JUCEHEADER__ + +/** + Contains methods for finding out about the current hardware and OS configuration. +*/ +class JUCE_API SystemStats +{ +public: + + /** Returns the current version of JUCE, + + (just in case you didn't already know at compile-time.) + + See also the JUCE_VERSION, JUCE_MAJOR_VERSION and JUCE_MINOR_VERSION macros. + */ + static const String getJUCEVersion() throw(); + + /** The set of possible results of the getOperatingSystemType() method. + */ + enum OperatingSystemType + { + UnknownOS = 0, + + MacOSX = 0x1000, + Linux = 0x2000, + + Win95 = 0x4001, + Win98 = 0x4002, + WinNT351 = 0x4103, + WinNT40 = 0x4104, + Win2000 = 0x4105, + WinXP = 0x4106, + WinVista = 0x4107, + + Windows = 0x4000, /**< To test whether any version of Windows is running, + you can use the expression ((getOperatingSystemType() & Windows) != 0). */ + WindowsNT = 0x0100, /**< To test whether the platform is Windows NT or later (i.e. not Win95 or 98), + you can use the expression ((getOperatingSystemType() & WindowsNT) != 0). */ + }; + + /** Returns the type of operating system we're running on. + + @returns one of the values from the OperatingSystemType enum. + @see getOperatingSystemName + */ + static OperatingSystemType getOperatingSystemType() throw(); + + /** Returns the name of the type of operating system we're running on. + + @returns a string describing the OS type. + @see getOperatingSystemType + */ + static const String getOperatingSystemName() throw(); + + /** Returns true if the OS is 64-bit, or false for a 32-bit OS. + */ + static bool isOperatingSystem64Bit() throw(); + + // CPU and memory information.. + + /** Returns the approximate CPU speed. + + @returns the speed in megahertz, e.g. 1500, 2500, 32000 (depending on + what year you're reading this...) + */ + static int getCpuSpeedInMegaherz() throw(); + + /** Returns a string to indicate the CPU vendor. + + Might not be known on some systems. + */ + static const String getCpuVendor() throw(); + + /** Checks whether Intel MMX instructions are available. */ + static bool hasMMX() throw(); + + /** Checks whether Intel SSE instructions are available. */ + static bool hasSSE() throw(); + + /** Checks whether Intel SSE2 instructions are available. */ + static bool hasSSE2() throw(); + + /** Checks whether AMD 3DNOW instructions are available. */ + static bool has3DNow() throw(); + + /** Returns the number of CPUs. + */ + static int getNumCpus() throw(); + + /** Returns a clock-cycle tick counter, if available. + + If the machine can do it, this will return a tick-count + where each tick is one cpu clock cycle - used for profiling + code. + + @returns the tick count, or zero if not available. + */ + static int64 getClockCycleCounter() throw(); + + /** Finds out how much RAM is in the machine. + + @returns the approximate number of megabytes of memory, or zero if + something goes wrong when finding out. + */ + static int getMemorySizeInMegabytes() throw(); + + /** Returns the system page-size. + + This is only used by programmers with beards. + */ + static int getPageSize() throw(); + + /** Returns a list of MAC addresses found on this machine. + + @param addresses an array into which the MAC addresses should be copied + @param maxNum the number of elements in this array + @param littleEndian the endianness of the numbers to return. Note that + the default values of this parameter are different on + Mac/PC to avoid breaking old software that was written + before this parameter was added (when the two systems + defaulted to using different endiannesses). In newer + software you probably want to specify an explicit value + for this. + @returns the number of MAC addresses that were found + */ + static int getMACAddresses (int64* addresses, int maxNum, +#if JUCE_MAC + const bool littleEndian = true) throw(); +#else + const bool littleEndian = false) throw(); +#endif + + // not-for-public-use platform-specific method gets called at startup to initialise things. + static void initialiseStats() throw(); +}; + +#endif // __JUCE_SYSTEMSTATS_JUCEHEADER__ +/********* End of inlined file: juce_SystemStats.h *********/ + +#endif +#ifndef __JUCE_SINGLETON_JUCEHEADER__ + +/********* Start of inlined file: juce_Singleton.h *********/ +#ifndef __JUCE_SINGLETON_JUCEHEADER__ +#define __JUCE_SINGLETON_JUCEHEADER__ + +/********* Start of inlined file: juce_ScopedLock.h *********/ +#ifndef __JUCE_SCOPEDLOCK_JUCEHEADER__ +#define __JUCE_SCOPEDLOCK_JUCEHEADER__ + +/********* Start of inlined file: juce_CriticalSection.h *********/ +#ifndef __JUCE_CRITICALSECTION_JUCEHEADER__ +#define __JUCE_CRITICALSECTION_JUCEHEADER__ + +/** + Prevents multiple threads from accessing shared objects at the same time. + + @see ScopedLock, Thread, InterProcessLock +*/ +class JUCE_API CriticalSection +{ +public: + + /** + Creates a CriticalSection object + */ + CriticalSection() throw(); + + /** Destroys a CriticalSection object. + + If the critical section is deleted whilst locked, its subsequent behaviour + is unpredictable. + */ + ~CriticalSection() throw(); + + /** Locks this critical section. + + If the lock is currently held by another thread, this will wait until it + becomes free. + + If the lock is already held by the caller thread, the method returns immediately. + + @see exit, ScopedLock + */ + void enter() const throw(); + + /** Attempts to lock this critical section without blocking. + + This method behaves identically to CriticalSection::enter, except that the caller thread + does not wait if the lock is currently held by another thread but returns false immediately. + + @returns false if the lock is currently held by another thread, true otherwise. + @see enter + */ + bool tryEnter() const throw(); + + /** Releases the lock. + + If the caller thread hasn't got the lock, this can have unpredictable results. + + If the enter() method has been called multiple times by the thread, each + call must be matched by a call to exit() before other threads will be allowed + to take over the lock. + + @see enter, ScopedLock + */ + void exit() const throw(); + + juce_UseDebuggingNewOperator + +private: + +#if JUCE_WIN32 + #if JUCE_64BIT + // To avoid including windows.h in the public Juce includes, we'll just allocate a + // block of memory here that's big enough to be used internally as a windows critical + // section object. + uint8 internal [44]; + #else + uint8 internal [24]; + #endif +#else + mutable pthread_mutex_t internal; +#endif + + CriticalSection (const CriticalSection&); + const CriticalSection& operator= (const CriticalSection&); +}; + +/** + A class that can be used in place of a real CriticalSection object. + + This is currently used by some templated array classes, and should get + optimised out by the compiler. + + @see Array, OwnedArray, ReferenceCountedArray +*/ +class JUCE_API DummyCriticalSection +{ +public: + forcedinline DummyCriticalSection() throw() {} + forcedinline ~DummyCriticalSection() throw() {} + + forcedinline void enter() const throw() {} + forcedinline void exit() const throw() {} +}; + +#endif // __JUCE_CRITICALSECTION_JUCEHEADER__ +/********* End of inlined file: juce_CriticalSection.h *********/ + +/** + Automatically locks and unlocks a CriticalSection object. + + Use one of these as a local variable to control access to a CriticalSection. + + e.g. @code + + CriticalSection myCriticalSection; + + for (;;) + { + const ScopedLock myScopedLock (myCriticalSection); + // myCriticalSection is now locked + + ...do some stuff... + + // myCriticalSection gets unlocked here. + } + @endcode + + @see CriticalSection, ScopedUnlock +*/ +class JUCE_API ScopedLock +{ +public: + + /** Creates a ScopedLock. + + As soon as it is created, this will lock the CriticalSection, and + when the ScopedLock object is deleted, the CriticalSection will + be unlocked. + + Make sure this object is created and deleted by the same thread, + otherwise there are no guarantees what will happen! Best just to use it + as a local stack object, rather than creating one with the new() operator. + */ + inline ScopedLock (const CriticalSection& lock) throw() : lock_ (lock) { lock.enter(); } + + /** Destructor. + + The CriticalSection will be unlocked when the destructor is called. + + Make sure this object is created and deleted by the same thread, + otherwise there are no guarantees what will happen! + */ + inline ~ScopedLock() throw() { lock_.exit(); } + +private: + + const CriticalSection& lock_; + + ScopedLock (const ScopedLock&); + const ScopedLock& operator= (const ScopedLock&); +}; + +/** + Automatically unlocks and re-locks a CriticalSection object. + + This is the reverse of a ScopedLock object - instead of locking the critical + section for the lifetime of this object, it unlocks it. + + Make sure you don't try to unlock critical sections that aren't actually locked! + + e.g. @code + + CriticalSection myCriticalSection; + + for (;;) + { + const ScopedLock myScopedLock (myCriticalSection); + // myCriticalSection is now locked + + ... do some stuff with it locked .. + + while (xyz) + { + ... do some stuff with it locked .. + + const ScopedUnlock unlocker (myCriticalSection); + + // myCriticalSection is now unlocked for the remainder of this block, + // and re-locked at the end. + + ...do some stuff with it unlocked ... + } + + // myCriticalSection gets unlocked here. + } + @endcode + + @see CriticalSection, ScopedLock +*/ +class ScopedUnlock +{ +public: + + /** Creates a ScopedUnlock. + + As soon as it is created, this will unlock the CriticalSection, and + when the ScopedLock object is deleted, the CriticalSection will + be re-locked. + + Make sure this object is created and deleted by the same thread, + otherwise there are no guarantees what will happen! Best just to use it + as a local stack object, rather than creating one with the new() operator. + */ + inline ScopedUnlock (const CriticalSection& lock) throw() : lock_ (lock) { lock.exit(); } + + /** Destructor. + + The CriticalSection will be unlocked when the destructor is called. + + Make sure this object is created and deleted by the same thread, + otherwise there are no guarantees what will happen! + */ + inline ~ScopedUnlock() throw() { lock_.enter(); } + +private: + + const CriticalSection& lock_; + + ScopedUnlock (const ScopedLock&); + const ScopedUnlock& operator= (const ScopedUnlock&); +}; + +#endif // __JUCE_SCOPEDLOCK_JUCEHEADER__ +/********* End of inlined file: juce_ScopedLock.h *********/ + +/** + Macro to declare member variables and methods for a singleton class. + + To use this, add the line juce_DeclareSingleton (MyClass, allowOnlyOneInstance) + to the class's definition. + + If allowOnlyOneInstance == true, it won't allow the object to be created + more than once in the process's lifetime. + + Then put a macro juce_ImplementSingleton (MyClass) along with the class's + implementation code. + + Clients can then call the static MyClass::getInstance() to get a pointer to the + singleton, or MyClass::getInstanceWithoutCreating() which may return 0 if no instance + is currently extant + + it's a very good idea to also add the call clearSingletonInstance() to the + destructor of the class, in case it is deleted by other means than deleteInstance() + + e.g. @code + + class MySingleton + { + public: + MySingleton() + { + } + + ~MySingleton() + { + // this ensures that no dangling pointers are left when the + // singleton is deleted. + clearSingletonInstance(); + } + + juce_DeclareSingleton (MySingleton, false) + }; + + juce_ImplementSingleton (MySingleton) + + // example of usage: + MySingleton* m = MySingleton::getInstance(); // creates the singleton if there isn't already one. + + ... + + MySingleton::deleteInstance(); // safely deletes the singleton (if it's been created). + + @endcode + + If you know that your object will only be created and deleted by a single thread, you + can use the slightly more efficient juce_DeclareSingleton_SingleThreaded() macro instead + of this one. + + @see juce_ImplementSingleton, juce_DeclareSingleton_SingleThreaded +*/ +#define juce_DeclareSingleton(classname, allowOnlyOneInstance) \ +\ + static classname* _singletonInstance; \ + static JUCE_NAMESPACE::CriticalSection _singletonLock; \ +\ + static classname* getInstance() \ + { \ + if (_singletonInstance == 0) \ + {\ + const JUCE_NAMESPACE::ScopedLock sl (_singletonLock); \ +\ + if (_singletonInstance == 0) \ + { \ + static bool alreadyInside = false; \ + static bool createdOnceAlready = false; \ +\ + const bool problem = alreadyInside || ((allowOnlyOneInstance) && createdOnceAlready); \ + jassert (! problem); \ + if (! problem) \ + { \ + createdOnceAlready = true; \ + alreadyInside = true; \ + classname* newObject = new classname(); /* (use a stack variable to avoid setting the newObject value before the class has finished its constructor) */ \ + alreadyInside = false; \ +\ + _singletonInstance = newObject; \ + } \ + } \ + } \ +\ + return _singletonInstance; \ + } \ +\ + static inline classname* getInstanceWithoutCreating() throw() \ + { \ + return _singletonInstance; \ + } \ +\ + static void deleteInstance() \ + { \ + const JUCE_NAMESPACE::ScopedLock sl (_singletonLock); \ + if (_singletonInstance != 0) \ + { \ + classname* const old = _singletonInstance; \ + _singletonInstance = 0; \ + delete old; \ + } \ + } \ +\ + void clearSingletonInstance() throw() \ + { \ + if (_singletonInstance == this) \ + _singletonInstance = 0; \ + } + +/** This is a counterpart to the juce_DeclareSingleton macro. + + After adding the juce_DeclareSingleton to the class definition, this macro has + to be used in the cpp file. +*/ +#define juce_ImplementSingleton(classname) \ +\ + classname* classname::_singletonInstance = 0; \ + JUCE_NAMESPACE::CriticalSection classname::_singletonLock; + +/** + Macro to declare member variables and methods for a singleton class. + + This is exactly the same as juce_DeclareSingleton, but doesn't use a critical + section to make access to it thread-safe. If you know that your object will + only ever be created or deleted by a single thread, then this is a + more efficient version to use. + + See the documentation for juce_DeclareSingleton for more information about + how to use it, the only difference being that you have to use + juce_ImplementSingleton_SingleThreaded instead of juce_ImplementSingleton. + + @see juce_ImplementSingleton_SingleThreaded, juce_DeclareSingleton, juce_DeclareSingleton_SingleThreaded_Minimal +*/ +#define juce_DeclareSingleton_SingleThreaded(classname, allowOnlyOneInstance) \ +\ + static classname* _singletonInstance; \ +\ + static classname* getInstance() \ + { \ + if (_singletonInstance == 0) \ + { \ + static bool alreadyInside = false; \ + static bool createdOnceAlready = false; \ +\ + const bool problem = alreadyInside || ((allowOnlyOneInstance) && createdOnceAlready); \ + jassert (! problem); \ + if (! problem) \ + { \ + createdOnceAlready = true; \ + alreadyInside = true; \ + classname* newObject = new classname(); /* (use a stack variable to avoid setting the newObject value before the class has finished its constructor) */ \ + alreadyInside = false; \ +\ + _singletonInstance = newObject; \ + } \ + } \ +\ + return _singletonInstance; \ + } \ +\ + static inline classname* getInstanceWithoutCreating() throw() \ + { \ + return _singletonInstance; \ + } \ +\ + static void deleteInstance() \ + { \ + if (_singletonInstance != 0) \ + { \ + classname* const old = _singletonInstance; \ + _singletonInstance = 0; \ + delete old; \ + } \ + } \ +\ + void clearSingletonInstance() throw() \ + { \ + if (_singletonInstance == this) \ + _singletonInstance = 0; \ + } + +/** + Macro to declare member variables and methods for a singleton class. + + This is like juce_DeclareSingleton_SingleThreaded, but doesn't do any checking + for recursion or repeated instantiation. It's intended for use as a lightweight + version of a singleton, where you're using it in very straightforward + circumstances and don't need the extra checking. + + Juce use the normal juce_ImplementSingleton_SingleThreaded as the counterpart + to this declaration, as you would with juce_DeclareSingleton_SingleThreaded. + + See the documentation for juce_DeclareSingleton for more information about + how to use it, the only difference being that you have to use + juce_ImplementSingleton_SingleThreaded instead of juce_ImplementSingleton. + + @see juce_ImplementSingleton_SingleThreaded, juce_DeclareSingleton +*/ +#define juce_DeclareSingleton_SingleThreaded_Minimal(classname) \ +\ + static classname* _singletonInstance; \ +\ + static classname* getInstance() \ + { \ + if (_singletonInstance == 0) \ + _singletonInstance = new classname(); \ +\ + return _singletonInstance; \ + } \ +\ + static inline classname* getInstanceWithoutCreating() throw() \ + { \ + return _singletonInstance; \ + } \ +\ + static void deleteInstance() \ + { \ + if (_singletonInstance != 0) \ + { \ + classname* const old = _singletonInstance; \ + _singletonInstance = 0; \ + delete old; \ + } \ + } \ +\ + void clearSingletonInstance() throw() \ + { \ + if (_singletonInstance == this) \ + _singletonInstance = 0; \ + } + +/** This is a counterpart to the juce_DeclareSingleton_SingleThreaded macro. + + After adding juce_DeclareSingleton_SingleThreaded or juce_DeclareSingleton_SingleThreaded_Minimal + to the class definition, this macro has to be used somewhere in the cpp file. +*/ +#define juce_ImplementSingleton_SingleThreaded(classname) \ +\ + classname* classname::_singletonInstance = 0; + +#endif // __JUCE_SINGLETON_JUCEHEADER__ +/********* End of inlined file: juce_Singleton.h *********/ + +#endif +#ifndef __JUCE_RELATIVETIME_JUCEHEADER__ + +#endif +#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__ + +#endif +#ifndef __JUCE_RANDOM_JUCEHEADER__ + +/********* Start of inlined file: juce_Random.h *********/ +#ifndef __JUCE_RANDOM_JUCEHEADER__ +#define __JUCE_RANDOM_JUCEHEADER__ + +/********* Start of inlined file: juce_BitArray.h *********/ +#ifndef __JUCE_BITARRAY_JUCEHEADER__ +#define __JUCE_BITARRAY_JUCEHEADER__ /********* Start of inlined file: juce_Array.h *********/ #ifndef __JUCE_ARRAY_JUCEHEADER__ #define __JUCE_ARRAY_JUCEHEADER__ +/********* Start of inlined file: juce_ArrayAllocationBase.h *********/ +#ifndef __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ +#define __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ + +/** The default size of chunk in which arrays increase their storage. + + Used by ArrayAllocationBase and its subclasses. +*/ +const int juceDefaultArrayGranularity = 8; + +/** + Implements some basic array storage allocation functions. + + This class isn't really for public use - it's used by the other + array classes, but might come in handy for some purposes. + + @see Array, OwnedArray, ReferenceCountedArray +*/ +template +class ArrayAllocationBase +{ +protected: + + /** Creates an empty array. + + @param granularity_ this is the size of increment by which the internal storage + will be increased. + */ + ArrayAllocationBase (const int granularity_) throw() + : elements (0), + numAllocated (0), + granularity (granularity_) + { + jassert (granularity > 0); + } + + /** Destructor. */ + ~ArrayAllocationBase() throw() + { + delete[] elements; + } + + /** Changes the amount of storage allocated. + + This will retain any data currently held in the array, and either add or + remove extra space at the end. + + @param numElements the number of elements that are needed + */ + void setAllocatedSize (const int numElements) throw() + { + if (numAllocated != numElements) + { + if (numElements > 0) + { + ElementType* const newElements = new ElementType [numElements]; + + const int itemsToRetain = jmin (numElements, numAllocated); + + for (int i = 0; i < itemsToRetain; ++i) + newElements[i] = elements[i]; + + delete[] elements; + elements = newElements; + + } + else if (elements != 0) + { + delete[] elements; + elements = 0; + } + + numAllocated = numElements; + } + } + + /** Increases the amount of storage allocated if it is less than a given amount. + + This will retain any data currently held in the array, but will add + extra space at the end to make sure there it's at least as big as the size + passed in. If it's already bigger, no action is taken. + + @param minNumElements the minimum number of elements that are needed + */ + void ensureAllocatedSize (int minNumElements) throw() + { + if (minNumElements > numAllocated) + { + // for arrays with small granularity that get big, start + // increasing the size in bigger jumps + if (minNumElements > (granularity << 6)) + { + minNumElements += (minNumElements / granularity); + if (minNumElements > (granularity << 8)) + minNumElements += granularity << 6; + else + minNumElements += granularity << 5; + } + + setAllocatedSize (granularity * (minNumElements / granularity + 1)); + } + } + + ElementType* elements; + int numAllocated, granularity; + +private: + ArrayAllocationBase (const ArrayAllocationBase&); + const ArrayAllocationBase& operator= (const ArrayAllocationBase&); +}; + +#endif // __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ +/********* End of inlined file: juce_ArrayAllocationBase.h *********/ + +/********* Start of inlined file: juce_ElementComparator.h *********/ +#ifndef __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ +#define __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ + +/** + Sorts a range of elements in an array. + + The comparator object that is passed-in must define a public method with the following + signature: + @code + int compareElements (ElementType first, ElementType second); + @endcode + + ..and this method must return: + - a value of < 0 if the first comes before the second + - a value of 0 if the two objects are equivalent + - a value of > 0 if the second comes before the first + + To improve performance, the compareElements() method can be declared as static or const. + + @param comparator an object which defines a compareElements() method + @param array the array to sort + @param firstElement the index of the first element of the range to be sorted + @param lastElement the index of the last element in the range that needs + sorting (this is inclusive) + @param retainOrderOfEquivalentItems if true, the order of items that the + comparator deems the same will be maintained - this will be + a slower algorithm than if they are allowed to be moved around. + + @see sortArrayRetainingOrder +*/ +template +static void sortArray (ElementComparator& comparator, + ElementType* const array, + int firstElement, + int lastElement, + const bool retainOrderOfEquivalentItems) +{ + (void) comparator; // if you pass in an object with a static compareElements() method, this + // avoids getting warning messages about the parameter being unused + + if (lastElement > firstElement) + { + if (retainOrderOfEquivalentItems) + { + for (int i = firstElement; i < lastElement; ++i) + { + if (comparator.compareElements (array[i], array [i + 1]) > 0) + { + const ElementType temp = array [i]; + array [i] = array[i + 1]; + array [i + 1] = temp; + + if (i > firstElement) + i -= 2; + } + } + } + else + { + int fromStack[30], toStack[30]; + int stackIndex = 0; + + for (;;) + { + const int size = (lastElement - firstElement) + 1; + + if (size <= 8) + { + int j = lastElement; + int maxIndex; + + while (j > firstElement) + { + maxIndex = firstElement; + for (int k = firstElement + 1; k <= j; ++k) + if (comparator.compareElements (array[k], array [maxIndex]) > 0) + maxIndex = k; + + const ElementType temp = array [maxIndex]; + array [maxIndex] = array[j]; + array [j] = temp; + + --j; + } + } + else + { + const int mid = firstElement + (size >> 1); + ElementType temp = array [mid]; + array [mid] = array [firstElement]; + array [firstElement] = temp; + + int i = firstElement; + int j = lastElement + 1; + + for (;;) + { + while (++i <= lastElement + && comparator.compareElements (array[i], array [firstElement]) <= 0) + {} + + while (--j > firstElement + && comparator.compareElements (array[j], array [firstElement]) >= 0) + {} + + if (j < i) + break; + + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + temp = array [firstElement]; + array [firstElement] = array[j]; + array [j] = temp; + + if (j - 1 - firstElement >= lastElement - i) + { + if (firstElement + 1 < j) + { + fromStack [stackIndex] = firstElement; + toStack [stackIndex] = j - 1; + ++stackIndex; + } + + if (i < lastElement) + { + firstElement = i; + continue; + } + } + else + { + if (i < lastElement) + { + fromStack [stackIndex] = i; + toStack [stackIndex] = lastElement; + ++stackIndex; + } + + if (firstElement + 1 < j) + { + lastElement = j - 1; + continue; + } + } + } + + if (--stackIndex < 0) + break; + + jassert (stackIndex < numElementsInArray (fromStack)); + + firstElement = fromStack [stackIndex]; + lastElement = toStack [stackIndex]; + } + } + } +} + +/** + Searches a sorted array of elements, looking for the index at which a specified value + should be inserted for it to be in the correct order. + + The comparator object that is passed-in must define a public method with the following + signature: + @code + int compareElements (ElementType first, ElementType second); + @endcode + + ..and this method must return: + - a value of < 0 if the first comes before the second + - a value of 0 if the two objects are equivalent + - a value of > 0 if the second comes before the first + + To improve performance, the compareElements() method can be declared as static or const. + + @param comparator an object which defines a compareElements() method + @param array the array to search + @param newElement the value that is going to be inserted + @param firstElement the index of the first element to search + @param lastElement the index of the last element in the range (this is non-inclusive) +*/ +template +static int findInsertIndexInSortedArray (ElementComparator& comparator, + ElementType* const array, + const ElementType newElement, + int firstElement, + int lastElement) +{ + jassert (firstElement <= lastElement); + + (void) comparator; // if you pass in an object with a static compareElements() method, this + // avoids getting warning messages about the parameter being unused + + while (firstElement < lastElement) + { + if (comparator.compareElements (newElement, array [firstElement]) == 0) + { + ++firstElement; + break; + } + else + { + const int halfway = (firstElement + lastElement) >> 1; + + if (halfway == firstElement) + { + if (comparator.compareElements (newElement, array [halfway]) >= 0) + ++firstElement; + + break; + } + else if (comparator.compareElements (newElement, array [halfway]) >= 0) + { + firstElement = halfway; + } + else + { + lastElement = halfway; + } + } + } + + return firstElement; +} + +/** + A simple ElementComparator class that can be used to sort an array of + integer primitive objects. + + Example: @code + Array myArray; + + IntegerElementComparator sorter; + myArray.sort (sorter); + @endcode + + For floating point values, see the FloatElementComparator class instead. + + @see FloatElementComparator, ElementComparator +*/ +template +class IntegerElementComparator +{ +public: + static int compareElements (const ElementType first, + const ElementType second) throw() + { + return (first < second) ? -1 : ((first == second) ? 0 : 1); + } +}; + +/** + A simple ElementComparator class that can be used to sort an array of numeric + double or floating point primitive objects. + + Example: @code + Array myArray; + + FloatElementComparator sorter; + myArray.sort (sorter); + @endcode + + For integer values, see the IntegerElementComparator class instead. + + @see IntegerElementComparator, ElementComparator +*/ +template +class FloatElementComparator +{ +public: + static int compareElements (const ElementType first, + const ElementType second) throw() + { + return (first < second) ? -1 : ((first == second) ? 0 : 1); + } +}; + +#endif // __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ +/********* End of inlined file: juce_ElementComparator.h *********/ + /** Holds a list of primitive objects, such as ints, doubles, or pointers. @@ -5542,6 +5127,1230 @@ private: #endif // __JUCE_ARRAY_JUCEHEADER__ /********* End of inlined file: juce_Array.h *********/ +class MemoryBlock; + +/** + An array of on/off bits, also usable to store large binary integers. + + A BitArray acts like an arbitrarily large integer whose bits can be set or + cleared, and some basic mathematical operations can be done on the number as + a whole. +*/ +class JUCE_API BitArray +{ +public: + + /** Creates an empty BitArray */ + BitArray() throw(); + + /** Creates a BitArray containing an integer value in its low bits. + + The low 32 bits of the array are initialised with this value. + */ + BitArray (const unsigned int value) throw(); + + /** Creates a BitArray containing an integer value in its low bits. + + The low 32 bits of the array are initialised with the absolute value + passed in, and its sign is set to reflect the sign of the number. + */ + BitArray (const int value) throw(); + + /** Creates a BitArray containing an integer value in its low bits. + + The low 64 bits of the array are initialised with the absolute value + passed in, and its sign is set to reflect the sign of the number. + */ + BitArray (int64 value) throw(); + + /** Creates a copy of another BitArray. */ + BitArray (const BitArray& other) throw(); + + /** Destructor. */ + ~BitArray() throw(); + + /** Copies another BitArray onto this one. */ + const BitArray& operator= (const BitArray& other) throw(); + + /** Two arrays are the same if the same bits are set. */ + bool operator== (const BitArray& other) const throw(); + /** Two arrays are the same if the same bits are set. */ + bool operator!= (const BitArray& other) const throw(); + + /** Clears all bits in the BitArray to 0. */ + void clear() throw(); + + /** Clears a particular bit in the array. */ + void clearBit (const int bitNumber) throw(); + + /** Sets a specified bit to 1. + + If the bit number is high, this will grow the array to accomodate it. + */ + void setBit (const int bitNumber) throw(); + + /** Sets or clears a specified bit. */ + void setBit (const int bitNumber, + const bool shouldBeSet) throw(); + + /** Sets a range of bits to be either on or off. + + @param startBit the first bit to change + @param numBits the number of bits to change + @param shouldBeSet whether to turn these bits on or off + */ + void setRange (int startBit, + int numBits, + const bool shouldBeSet) throw(); + + /** Inserts a bit an a given position, shifting up any bits above it. */ + void insertBit (const int bitNumber, + const bool shouldBeSet) throw(); + + /** Returns the value of a specified bit in the array. + + If the index is out-of-range, the result will be false. + */ + bool operator[] (const int bit) const throw(); + + /** Returns true if no bits are set. */ + bool isEmpty() const throw(); + + /** Returns a range of bits in the array as a new BitArray. + + e.g. getBitRangeAsInt (0, 64) would return the lowest 64 bits. + @see getBitRangeAsInt + */ + const BitArray getBitRange (int startBit, int numBits) const throw(); + + /** Returns a range of bits in the array as an integer value. + + e.g. getBitRangeAsInt (0, 32) would return the lowest 32 bits. + + Asking for more than 32 bits isn't allowed (obviously) - for that, use + getBitRange(). + */ + int getBitRangeAsInt (int startBit, int numBits) const throw(); + + /** Sets a range of bits in the array based on an integer value. + + Copies the given integer into the array, starting at startBit, + and only using up to numBits of the available bits. + */ + void setBitRangeAsInt (int startBit, int numBits, + unsigned int valueToSet) throw(); + + /** Performs a bitwise OR with another BitArray. + + The result ends up in this array. + */ + void orWith (const BitArray& other) throw(); + + /** Performs a bitwise AND with another BitArray. + + The result ends up in this array. + */ + void andWith (const BitArray& other) throw(); + + /** Performs a bitwise XOR with another BitArray. + + The result ends up in this array. + */ + void xorWith (const BitArray& other) throw(); + + /** Adds another BitArray's value to this one. + + Treating the two arrays as large positive integers, this + adds them up and puts the result in this array. + */ + void add (const BitArray& other) throw(); + + /** Subtracts another BitArray's value from this one. + + Treating the two arrays as large positive integers, this + subtracts them and puts the result in this array. + + Note that if the result should be negative, this won't be + handled correctly. + */ + void subtract (const BitArray& other) throw(); + + /** Multiplies another BitArray's value with this one. + + Treating the two arrays as large positive integers, this + multiplies them and puts the result in this array. + */ + void multiplyBy (const BitArray& other) throw(); + + /** Divides another BitArray's value into this one and also produces a remainder. + + Treating the two arrays as large positive integers, this + divides this value by the other, leaving the quotient in this + array, and the remainder is copied into the other BitArray passed in. + */ + void divideBy (const BitArray& divisor, BitArray& remainder) throw(); + + /** Returns the largest value that will divide both this value and the one + passed-in. + */ + const BitArray findGreatestCommonDivisor (BitArray other) const throw(); + + /** Performs a modulo operation on this value. + + The result is stored in this value. + */ + void modulo (const BitArray& divisor) throw(); + + /** Performs a combined exponent and modulo operation. + + This BitArray's value becomes (this ^ exponent) % modulus. + */ + void exponentModulo (const BitArray& exponent, const BitArray& modulus) throw(); + + /** Performs an inverse modulo on the value. + + i.e. the result is (this ^ -1) mod (modulus). + */ + void inverseModulo (const BitArray& modulus) throw(); + + /** Shifts a section of bits left or right. + + @param howManyBitsLeft how far to move the bits (+ve numbers shift it left, -ve numbers shift it right). + @param startBit the first bit to affect - if this is > 0, only bits above that index will be affected. + */ + void shiftBits (int howManyBitsLeft, + int startBit = 0) throw(); + + /** Does a signed comparison of two BitArrays. + + Return values are: + - 0 if the numbers are the same + - < 0 if this number is smaller than the other + - > 0 if this number is bigger than the other + */ + int compare (const BitArray& other) const throw(); + + /** Compares the magnitudes of two BitArrays, ignoring their signs. + + Return values are: + - 0 if the numbers are the same + - < 0 if this number is smaller than the other + - > 0 if this number is bigger than the other + */ + int compareAbsolute (const BitArray& other) const throw(); + + /** Returns true if the value is less than zero. + + @see setNegative, negate + */ + bool isNegative() const throw(); + + /** Changes the sign of the number to be positive or negative. + + @see isNegative, negate + */ + void setNegative (const bool shouldBeNegative) throw(); + + /** Inverts the sign of the number. + + @see isNegative, setNegative + */ + void negate() throw(); + + /** Counts the total number of set bits in the array. */ + int countNumberOfSetBits() const throw(); + + /** Looks for the index of the next set bit after a given starting point. + + searches from startIndex (inclusive) upwards for the first set bit, + and returns its index. + + If no set bits are found, it returns -1. + */ + int findNextSetBit (int startIndex = 0) const throw(); + + /** Looks for the index of the next clear bit after a given starting point. + + searches from startIndex (inclusive) upwards for the first clear bit, + and returns its index. + */ + int findNextClearBit (int startIndex = 0) const throw(); + + /** Returns the index of the highest set bit in the array. + + If the array is empty, this will return -1. + */ + int getHighestBit() const throw(); + + /** Converts the array to a number string. + + Specify a base such as 2 (binary), 8 (octal), 10 (decimal), 16 (hex). + + If minuimumNumCharacters is greater than 0, the returned string will be + padded with leading zeros to reach at least that length. + */ + const String toString (const int base, const int minimumNumCharacters = 1) const throw(); + + /** Converts a number string to an array. + + Any non-valid characters will be ignored. + + Specify a base such as 2 (binary), 8 (octal), 10 (decimal), 16 (hex). + */ + void parseString (const String& text, + const int base) throw(); + + /** Turns the array into a block of binary data. + + The data is arranged as little-endian, so the first byte of data is the low 8 bits + of the array, and so on. + + @see loadFromMemoryBlock + */ + const MemoryBlock toMemoryBlock() const throw(); + + /** Copies a block of raw data onto this array. + + The data is arranged as little-endian, so the first byte of data is the low 8 bits + of the array, and so on. + + @see toMemoryBlock + */ + void loadFromMemoryBlock (const MemoryBlock& data) throw(); + + juce_UseDebuggingNewOperator + +private: + void ensureSize (const int numVals) throw(); + unsigned int* values; + int numValues, highestBit; + bool negative; +}; + +#endif // __JUCE_BITARRAY_JUCEHEADER__ +/********* End of inlined file: juce_BitArray.h *********/ + +/** + A simple pseudo-random number generator. +*/ +class JUCE_API Random +{ +public: + + /** Creates a Random object based on a seed value. + + For a given seed value, the subsequent numbers generated by this object + will be predictable, so a good idea is to set this value based + on the time, e.g. + + new Random (Time::currentTimeMillis()) + */ + Random (const int64 seedValue) throw(); + + /** Destructor. */ + ~Random() throw(); + + /** Returns the next random 32 bit integer. + + @returns a random integer from the full range 0x80000000 to 0x7fffffff + */ + int nextInt() throw(); + + /** Returns the next random number, limited to a given range. + + @returns a random integer between 0 (inclusive) and maxValue (exclusive). + */ + int nextInt (const int maxValue) throw(); + + /** Returns the next 64-bit random number. + + @returns a random integer from the full range 0x8000000000000000 to 0x7fffffffffffffff + */ + int64 nextInt64() throw(); + + /** Returns the next random floating-point number. + + @returns a random value in the range 0 to 1.0 + */ + float nextFloat() throw(); + + /** Returns the next random floating-point number. + + @returns a random value in the range 0 to 1.0 + */ + double nextDouble() throw(); + + /** Returns the next random boolean value. + */ + bool nextBool() throw(); + + /** Returns a BitArray containing a random number. + + @returns a random value in the range 0 to (maximumValue - 1). + */ + const BitArray nextLargeNumber (const BitArray& maximumValue) throw(); + + /** Sets a range of bits in a BitArray to random values. */ + void fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw(); + + /** To avoid the overhead of having to create a new Random object whenever + you need a number, this is a shared application-wide object that + can be used. + + It's not thread-safe though, so threads should use their own Random object. + */ + static Random& getSystemRandom() throw(); + + /** Resets this Random object to a given seed value. */ + void setSeed (const int64 newSeed) throw(); + + /** Reseeds this generator using a value generated from various semi-random system + properties like the current time, etc. + + Because this function convolves the time with the last seed value, calling + it repeatedly will increase the randomness of the final result. + */ + void setSeedRandomly(); + + juce_UseDebuggingNewOperator + +private: + int64 seed; +}; + +#endif // __JUCE_RANDOM_JUCEHEADER__ +/********* End of inlined file: juce_Random.h *********/ + +#endif +#ifndef __JUCE_MATHSFUNCTIONS_JUCEHEADER__ + +#endif +#ifndef __JUCE_MEMORY_JUCEHEADER__ + +#endif +#ifndef __JUCE_LOGGER_JUCEHEADER__ + +#endif +#ifndef __JUCE_INITIALISATION_JUCEHEADER__ + +/********* Start of inlined file: juce_Initialisation.h *********/ +#ifndef __JUCE_INITIALISATION_JUCEHEADER__ +#define __JUCE_INITIALISATION_JUCEHEADER__ + +/** Initialises Juce's GUI classes. + + If you're embedding Juce into an application that uses its own event-loop rather + than using the START_JUCE_APPLICATION macro, call this function before making any + Juce calls, to make sure things are initialised correctly. + + Note that if you're creating a Juce DLL for Windows, you may also need to call the + PlatformUtilities::setCurrentModuleInstanceHandle() method. + + @see shutdownJuce_GUI(), initialiseJuce_NonGUI() +*/ +void JUCE_PUBLIC_FUNCTION initialiseJuce_GUI(); + +/** Clears up any static data being used by Juce's GUI classes. + + If you're embedding Juce into an application that uses its own event-loop rather + than using the START_JUCE_APPLICATION macro, call this function in your shutdown + code to clean up any juce objects that might be lying around. + + @see initialiseJuce_GUI(), initialiseJuce_NonGUI() +*/ +void JUCE_PUBLIC_FUNCTION shutdownJuce_GUI(); + +/** Initialises the core parts of Juce. + + If you're embedding Juce into either a command-line program, call this function + at the start of your main() function to make sure that Juce is initialised correctly. + + Note that if you're creating a Juce DLL for Windows, you may also need to call the + PlatformUtilities::setCurrentModuleInstanceHandle() method. + + @see shutdownJuce_NonGUI, initialiseJuce_GUI +*/ +void JUCE_PUBLIC_FUNCTION initialiseJuce_NonGUI(); + +/** Clears up any static data being used by Juce's non-gui core classes. + + If you're embedding Juce into either a command-line program, call this function + at the end of your main() function if you want to make sure any Juce objects are + cleaned up correctly. + + @see initialiseJuce_NonGUI, initialiseJuce_GUI +*/ +void JUCE_PUBLIC_FUNCTION shutdownJuce_NonGUI(); + +#endif // __JUCE_INITIALISATION_JUCEHEADER__ +/********* End of inlined file: juce_Initialisation.h *********/ + +#endif +#ifndef __JUCE_FILELOGGER_JUCEHEADER__ + +/********* Start of inlined file: juce_FileLogger.h *********/ +#ifndef __JUCE_FILELOGGER_JUCEHEADER__ +#define __JUCE_FILELOGGER_JUCEHEADER__ + +/********* Start of inlined file: juce_File.h *********/ +#ifndef __JUCE_FILE_JUCEHEADER__ +#define __JUCE_FILE_JUCEHEADER__ + +/********* Start of inlined file: juce_OwnedArray.h *********/ +#ifndef __JUCE_OWNEDARRAY_JUCEHEADER__ +#define __JUCE_OWNEDARRAY_JUCEHEADER__ + +/** An array designed for holding objects. + + This holds a list of pointers to objects, and will automatically + delete the objects when they are removed from the array, or when the + array is itself deleted. + + Declare it in the form: OwnedArray + + ..and then add new objects, e.g. myOwnedArray.add (new MyObjectClass()); + + After adding objects, they are 'owned' by the array and will be deleted when + removed or replaced. + + To make all the array's methods thread-safe, pass in "CriticalSection" as the templated + TypeOfCriticalSectionToUse parameter, instead of the default DummyCriticalSection. + + @see Array, ReferenceCountedArray, StringArray, CriticalSection +*/ +template + +class OwnedArray : private ArrayAllocationBase +{ +public: + + /** Creates an empty array. + + @param granularity this is the size of increment by which the internal storage + used by the array will grow. Only change it from the default if you know the + array is going to be very big and needs to be able to grow efficiently. + + @see ArrayAllocationBase + */ + OwnedArray (const int granularity = juceDefaultArrayGranularity) throw() + : ArrayAllocationBase (granularity), + numUsed (0) + { + } + + /** Deletes the array and also deletes any objects inside it. + + To get rid of the array without deleting its objects, use its + clear (false) method before deleting it. + */ + ~OwnedArray() + { + clear (true); + } + + /** Clears the array, optionally deleting the objects inside it first. */ + void clear (const bool deleteObjects = true) + { + lock.enter(); + + if (deleteObjects) + { + while (numUsed > 0) + delete this->elements [--numUsed]; + } + + this->setAllocatedSize (0); + numUsed = 0; + lock.exit(); + } + + /** Returns the number of items currently in the array. + @see operator[] + */ + inline int size() const throw() + { + return numUsed; + } + + /** Returns a pointer to the object at this index in the array. + + If the index is out-of-range, this will return a null pointer, (and + it could be null anyway, because it's ok for the array to hold null + pointers as well as objects). + + @see getUnchecked + */ + inline ObjectClass* operator[] (const int index) const throw() + { + lock.enter(); + ObjectClass* const result = (((unsigned int) index) < (unsigned int) numUsed) + ? this->elements [index] + : (ObjectClass*) 0; + lock.exit(); + + return result; + } + + /** Returns a pointer to the object at this index in the array, without checking whether the index is in-range. + + This is a faster and less safe version of operator[] which doesn't check the index passed in, so + it can be used when you're sure the index if always going to be legal. + */ + inline ObjectClass* getUnchecked (const int index) const throw() + { + lock.enter(); + jassert (((unsigned int) index) < (unsigned int) numUsed); + ObjectClass* const result = this->elements [index]; + lock.exit(); + + return result; + } + + /** Returns a pointer to the first object in the array. + + This will return a null pointer if the array's empty. + @see getLast + */ + inline ObjectClass* getFirst() const throw() + { + lock.enter(); + ObjectClass* const result = (numUsed > 0) ? this->elements [0] + : (ObjectClass*) 0; + lock.exit(); + return result; + } + + /** Returns a pointer to the last object in the array. + + This will return a null pointer if the array's empty. + @see getFirst + */ + inline ObjectClass* getLast() const throw() + { + lock.enter(); + ObjectClass* const result = (numUsed > 0) ? this->elements [numUsed - 1] + : (ObjectClass*) 0; + lock.exit(); + + return result; + } + + /** Finds the index of an object which might be in the array. + + @param objectToLookFor the object to look for + @returns the index at which the object was found, or -1 if it's not found + */ + int indexOf (const ObjectClass* const objectToLookFor) const throw() + { + int result = -1; + + lock.enter(); + ObjectClass* const* e = this->elements; + + for (int i = numUsed; --i >= 0;) + { + if (objectToLookFor == *e) + { + result = (int) (e - this->elements); + break; + } + + ++e; + } + + lock.exit(); + return result; + } + + /** Returns true if the array contains a specified object. + + @param objectToLookFor the object to look for + @returns true if the object is in the array + */ + bool contains (const ObjectClass* const objectToLookFor) const throw() + { + lock.enter(); + + ObjectClass* const* e = this->elements; + int i = numUsed; + + while (i >= 4) + { + if (objectToLookFor == *e + || objectToLookFor == *++e + || objectToLookFor == *++e + || objectToLookFor == *++e) + { + lock.exit(); + return true; + } + + i -= 4; + ++e; + } + + while (i > 0) + { + if (objectToLookFor == *e) + { + lock.exit(); + return true; + } + + --i; + ++e; + } + + lock.exit(); + return false; + } + + /** Appends a new object to the end of the array. + + Note that the this object will be deleted by the OwnedArray when it + is removed, so be careful not to delete it somewhere else. + + Also be careful not to add the same object to the array more than once, + as this will obviously cause deletion of dangling pointers. + + @param newObject the new object to add to the array + @see set, insert, addIfNotAlreadyThere, addSorted + */ + void add (const ObjectClass* const newObject) throw() + { + lock.enter(); + this->ensureAllocatedSize (numUsed + 1); + this->elements [numUsed++] = const_cast (newObject); + lock.exit(); + } + + /** Inserts a new object into the array at the given index. + + Note that the this object will be deleted by the OwnedArray when it + is removed, so be careful not to delete it somewhere else. + + If the index is less than 0 or greater than the size of the array, the + element will be added to the end of the array. + Otherwise, it will be inserted into the array, moving all the later elements + along to make room. + + Be careful not to add the same object to the array more than once, + as this will obviously cause deletion of dangling pointers. + + @param indexToInsertAt the index at which the new element should be inserted + @param newObject the new object to add to the array + @see add, addSorted, addIfNotAlreadyThere, set + */ + void insert (int indexToInsertAt, + const ObjectClass* const newObject) throw() + { + if (indexToInsertAt >= 0) + { + lock.enter(); + + if (indexToInsertAt > numUsed) + indexToInsertAt = numUsed; + + this->ensureAllocatedSize (numUsed + 1); + + ObjectClass** const e = this->elements + indexToInsertAt; + const int numToMove = numUsed - indexToInsertAt; + + if (numToMove > 0) + memmove (e + 1, e, numToMove * sizeof (ObjectClass*)); + + *e = const_cast (newObject); + ++numUsed; + + lock.exit(); + } + else + { + add (newObject); + } + } + + /** Appends a new object at the end of the array as long as the array doesn't + already contain it. + + If the array already contains a matching object, nothing will be done. + + @param newObject the new object to add to the array + */ + void addIfNotAlreadyThere (const ObjectClass* const newObject) throw() + { + lock.enter(); + + if (! contains (newObject)) + add (newObject); + + lock.exit(); + } + + /** Replaces an object in the array with a different one. + + If the index is less than zero, this method does nothing. + If the index is beyond the end of the array, the new object is added to the end of the array. + + Be careful not to add the same object to the array more than once, + as this will obviously cause deletion of dangling pointers. + + @param indexToChange the index whose value you want to change + @param newObject the new value to set for this index. + @param deleteOldElement whether to delete the object that's being replaced with the new one + @see add, insert, remove + */ + void set (const int indexToChange, + const ObjectClass* const newObject, + const bool deleteOldElement = true) + { + if (indexToChange >= 0) + { + ObjectClass* toDelete = 0; + lock.enter(); + + if (indexToChange < numUsed) + { + if (deleteOldElement) + { + toDelete = this->elements [indexToChange]; + + if (toDelete == newObject) + toDelete = 0; + } + + this->elements [indexToChange] = const_cast (newObject); + } + else + { + this->ensureAllocatedSize (numUsed + 1); + this->elements [numUsed++] = const_cast (newObject); + } + + lock.exit(); + + delete toDelete; + } + } + + /** Inserts a new object into the array assuming that the array is sorted. + + This will use a comparator to find the position at which the new object + should go. If the array isn't sorted, the behaviour of this + method will be unpredictable. + + @param comparator the comparator to use to compare the elements - see the sort method + for details about this object's structure + @param newObject the new object to insert to the array + @see add, sort, indexOfSorted + */ + template + void addSorted (ElementComparator& comparator, + ObjectClass* const newObject) throw() + { + (void) comparator; // if you pass in an object with a static compareElements() method, this + // avoids getting warning messages about the parameter being unused + lock.enter(); + insert (findInsertIndexInSortedArray (comparator, this->elements, newObject, 0, numUsed), newObject); + lock.exit(); + } + + /** Finds the index of an object in the array, assuming that the array is sorted. + + This will use a comparator to do a binary-chop to find the index of the given + element, if it exists. If the array isn't sorted, the behaviour of this + method will be unpredictable. + + @param comparator the comparator to use to compare the elements - see the sort() + method for details about the form this object should take + @param objectToLookFor the object to search for + @returns the index of the element, or -1 if it's not found + @see addSorted, sort + */ + template + int indexOfSorted (ElementComparator& comparator, + const ObjectClass* const objectToLookFor) const throw() + { + (void) comparator; // if you pass in an object with a static compareElements() method, this + // avoids getting warning messages about the parameter being unused + lock.enter(); + + int start = 0; + int end = numUsed; + + for (;;) + { + if (start >= end) + { + lock.exit(); + return -1; + } + else if (comparator.compareElements (objectToLookFor, this->elements [start]) == 0) + { + lock.exit(); + return start; + } + else + { + const int halfway = (start + end) >> 1; + + if (halfway == start) + { + lock.exit(); + return -1; + } + else if (comparator.compareElements (objectToLookFor, this->elements [halfway]) >= 0) + start = halfway; + else + end = halfway; + } + } + } + + /** Removes an object from the array. + + This will remove the object at a given index (optionally also + deleting it) and move back all the subsequent objects to close the gap. + If the index passed in is out-of-range, nothing will happen. + + @param indexToRemove the index of the element to remove + @param deleteObject whether to delete the object that is removed + @see removeObject, removeRange + */ + void remove (const int indexToRemove, + const bool deleteObject = true) + { + lock.enter(); + ObjectClass* toDelete = 0; + + if (((unsigned int) indexToRemove) < (unsigned int) numUsed) + { + ObjectClass** const e = this->elements + indexToRemove; + + if (deleteObject) + toDelete = *e; + + --numUsed; + const int numToShift = numUsed - indexToRemove; + + if (numToShift > 0) + memmove (e, e + 1, numToShift * sizeof (ObjectClass*)); + + if ((numUsed << 1) < this->numAllocated) + minimiseStorageOverheads(); + } + + lock.exit(); + + delete toDelete; + } + + /** Removes a specified object from the array. + + If the item isn't found, no action is taken. + + @param objectToRemove the object to try to remove + @param deleteObject whether to delete the object (if it's found) + @see remove, removeRange + */ + void removeObject (const ObjectClass* const objectToRemove, + const bool deleteObject = true) + { + lock.enter(); + ObjectClass** e = this->elements; + + for (int i = numUsed; --i >= 0;) + { + if (objectToRemove == *e) + { + remove ((int) (e - this->elements), deleteObject); + break; + } + + ++e; + } + + lock.exit(); + } + + /** Removes a range of objects from the array. + + This will remove a set of objects, starting from the given index, + and move any subsequent elements down to close the gap. + + If the range extends beyond the bounds of the array, it will + be safely clipped to the size of the array. + + @param startIndex the index of the first object to remove + @param numberToRemove how many objects should be removed + @param deleteObjects whether to delete the objects that get removed + @see remove, removeObject + */ + void removeRange (int startIndex, + const int numberToRemove, + const bool deleteObjects = true) + { + lock.enter(); + const int endIndex = jlimit (0, numUsed, startIndex + numberToRemove); + startIndex = jlimit (0, numUsed, startIndex); + + if (endIndex > startIndex) + { + if (deleteObjects) + { + for (int i = startIndex; i < endIndex; ++i) + { + delete this->elements [i]; + this->elements [i] = 0; // (in case one of the destructors accesses this array and hits a dangling pointer) + } + } + + const int rangeSize = endIndex - startIndex; + ObjectClass** e = this->elements + startIndex; + int numToShift = numUsed - endIndex; + numUsed -= rangeSize; + + while (--numToShift >= 0) + { + *e = e [rangeSize]; + ++e; + } + + if ((numUsed << 1) < this->numAllocated) + minimiseStorageOverheads(); + } + + lock.exit(); + } + + /** Removes the last n objects from the array. + + @param howManyToRemove how many objects to remove from the end of the array + @param deleteObjects whether to also delete the objects that are removed + @see remove, removeObject, removeRange + */ + void removeLast (int howManyToRemove = 1, + const bool deleteObjects = true) + { + lock.enter(); + + if (howManyToRemove >= numUsed) + { + clear (deleteObjects); + } + else + { + while (--howManyToRemove >= 0) + remove (numUsed - 1, deleteObjects); + } + + lock.exit(); + } + + /** Swaps a pair of objects in the array. + + If either of the indexes passed in is out-of-range, nothing will happen, + otherwise the two objects at these positions will be exchanged. + */ + void swap (const int index1, + const int index2) throw() + { + lock.enter(); + + if (((unsigned int) index1) < (unsigned int) numUsed + && ((unsigned int) index2) < (unsigned int) numUsed) + { + swapVariables (this->elements [index1], + this->elements [index2]); + } + + lock.exit(); + } + + /** Moves one of the objects to a different position. + + This will move the object to a specified index, shuffling along + any intervening elements as required. + + So for example, if you have the array { 0, 1, 2, 3, 4, 5 } then calling + move (2, 4) would result in { 0, 1, 3, 4, 2, 5 }. + + @param currentIndex the index of the object to be moved. If this isn't a + valid index, then nothing will be done + @param newIndex the index at which you'd like this object to end up. If this + is less than zero, it will be moved to the end of the array + */ + void move (const int currentIndex, + int newIndex) throw() + { + if (currentIndex != newIndex) + { + lock.enter(); + + if (((unsigned int) currentIndex) < (unsigned int) numUsed) + { + if (((unsigned int) newIndex) >= (unsigned int) numUsed) + newIndex = numUsed - 1; + + ObjectClass* const value = this->elements [currentIndex]; + + if (newIndex > currentIndex) + { + memmove (this->elements + currentIndex, + this->elements + currentIndex + 1, + (newIndex - currentIndex) * sizeof (ObjectClass*)); + } + else + { + memmove (this->elements + newIndex + 1, + this->elements + newIndex, + (currentIndex - newIndex) * sizeof (ObjectClass*)); + } + + this->elements [newIndex] = value; + } + + lock.exit(); + } + } + + /** This swaps the contents of this array with those of another array. + + If you need to exchange two arrays, this is vastly quicker than using copy-by-value + because it just swaps their internal pointers. + */ + template + void swapWithArray (OtherArrayType& otherArray) throw() + { + lock.enter(); + otherArray.lock.enter(); + swapVariables (this->numUsed, otherArray.numUsed); + swapVariables (this->elements, otherArray.elements); + swapVariables (this->numAllocated, otherArray.numAllocated); + otherArray.lock.exit(); + lock.exit(); + } + + /** Reduces the amount of storage being used by the array. + + Arrays typically allocate slightly more storage than they need, and after + removing elements, they may have quite a lot of unused space allocated. + This method will reduce the amount of allocated storage to a minimum. + */ + void minimiseStorageOverheads() throw() + { + lock.enter(); + + if (numUsed == 0) + { + this->setAllocatedSize (0); + } + else + { + const int newAllocation = this->granularity * (numUsed / this->granularity + 1); + + if (newAllocation < this->numAllocated) + this->setAllocatedSize (newAllocation); + } + + lock.exit(); + } + + /** Increases the array's internal storage to hold a minimum number of elements. + + Calling this before adding a large known number of elements means that + the array won't have to keep dynamically resizing itself as the elements + are added, and it'll therefore be more efficient. + */ + void ensureStorageAllocated (const int minNumElements) throw() + { + this->ensureAllocatedSize (minNumElements); + } + + /** Sorts the elements in the array. + + This will use a comparator object to sort the elements into order. The object + passed must have a method of the form: + @code + int compareElements (ElementType first, ElementType second); + @endcode + + ..and this method must return: + - a value of < 0 if the first comes before the second + - a value of 0 if the two objects are equivalent + - a value of > 0 if the second comes before the first + + To improve performance, the compareElements() method can be declared as static or const. + + @param comparator the comparator to use for comparing elements. + @param retainOrderOfEquivalentItems if this is true, then items + which the comparator says are equivalent will be + kept in the order in which they currently appear + in the array. This is slower to perform, but may + be important in some cases. If it's false, a faster + algorithm is used, but equivalent elements may be + rearranged. + @see sortArray, indexOfSorted + */ + template + void sort (ElementComparator& comparator, + const bool retainOrderOfEquivalentItems = false) const throw() + { + (void) comparator; // if you pass in an object with a static compareElements() method, this + // avoids getting warning messages about the parameter being unused + + lock.enter(); + sortArray (comparator, this->elements, 0, size() - 1, retainOrderOfEquivalentItems); + lock.exit(); + } + + /** Locks the array's CriticalSection. + + Of course if the type of section used is a DummyCriticalSection, this won't + have any effect. + + @see unlockArray + */ + void lockArray() const throw() + { + lock.enter(); + } + + /** Unlocks the array's CriticalSection. + + Of course if the type of section used is a DummyCriticalSection, this won't + have any effect. + + @see lockArray + */ + void unlockArray() const throw() + { + lock.exit(); + } + + juce_UseDebuggingNewOperator + +private: + int numUsed; + TypeOfCriticalSectionToUse lock; + + // disallow copy constructor and assignment + OwnedArray (const OwnedArray&); + const OwnedArray& operator= (const OwnedArray&); +}; + +#endif // __JUCE_OWNEDARRAY_JUCEHEADER__ +/********* End of inlined file: juce_OwnedArray.h *********/ + +/********* Start of inlined file: juce_StringArray.h *********/ +#ifndef __JUCE_STRINGARRAY_JUCEHEADER__ +#define __JUCE_STRINGARRAY_JUCEHEADER__ + +/********* Start of inlined file: juce_VoidArray.h *********/ +#ifndef __JUCE_VOIDARRAY_JUCEHEADER__ +#define __JUCE_VOIDARRAY_JUCEHEADER__ + /** A typedef for an Array of void*'s. @@ -6963,1012 +7772,641 @@ private: /********* End of inlined file: juce_FileLogger.h *********/ #endif -#ifndef __JUCE_INITIALISATION_JUCEHEADER__ - -/********* Start of inlined file: juce_Initialisation.h *********/ -#ifndef __JUCE_INITIALISATION_JUCEHEADER__ -#define __JUCE_INITIALISATION_JUCEHEADER__ - -/** Initialises Juce's GUI classes. - - If you're embedding Juce into an application that uses its own event-loop rather - than using the START_JUCE_APPLICATION macro, call this function before making any - Juce calls, to make sure things are initialised correctly. - - Note that if you're creating a Juce DLL for Windows, you may also need to call the - PlatformUtilities::setCurrentModuleInstanceHandle() method. - - @see shutdownJuce_GUI(), initialiseJuce_NonGUI() -*/ -void JUCE_PUBLIC_FUNCTION initialiseJuce_GUI(); - -/** Clears up any static data being used by Juce's GUI classes. - - If you're embedding Juce into an application that uses its own event-loop rather - than using the START_JUCE_APPLICATION macro, call this function in your shutdown - code to clean up any juce objects that might be lying around. - - @see initialiseJuce_GUI(), initialiseJuce_NonGUI() -*/ -void JUCE_PUBLIC_FUNCTION shutdownJuce_GUI(); - -/** Initialises the core parts of Juce. - - If you're embedding Juce into either a command-line program, call this function - at the start of your main() function to make sure that Juce is initialised correctly. - - Note that if you're creating a Juce DLL for Windows, you may also need to call the - PlatformUtilities::setCurrentModuleInstanceHandle() method. - - @see shutdownJuce_NonGUI, initialiseJuce_GUI -*/ -void JUCE_PUBLIC_FUNCTION initialiseJuce_NonGUI(); - -/** Clears up any static data being used by Juce's non-gui core classes. - - If you're embedding Juce into either a command-line program, call this function - at the end of your main() function if you want to make sure any Juce objects are - cleaned up correctly. - - @see initialiseJuce_NonGUI, initialiseJuce_GUI -*/ -void JUCE_PUBLIC_FUNCTION shutdownJuce_NonGUI(); - -#endif // __JUCE_INITIALISATION_JUCEHEADER__ -/********* End of inlined file: juce_Initialisation.h *********/ +#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__ #endif -#ifndef __JUCE_LOGGER_JUCEHEADER__ +#ifndef __JUCE_ATOMIC_JUCEHEADER__ -#endif -#ifndef __JUCE_MATHSFUNCTIONS_JUCEHEADER__ +/********* Start of inlined file: juce_Atomic.h *********/ +#ifndef __JUCE_ATOMIC_JUCEHEADER__ +#define __JUCE_ATOMIC_JUCEHEADER__ -#endif -#ifndef __JUCE_MEMORY_JUCEHEADER__ +// Atomic increment/decrement operations.. -#endif -#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__ +#if JUCE_MAC && ! DOXYGEN -#endif -#ifndef __JUCE_RANDOM_JUCEHEADER__ + #if ! MACOS_10_3_OR_EARLIER -/********* Start of inlined file: juce_Random.h *********/ -#ifndef __JUCE_RANDOM_JUCEHEADER__ -#define __JUCE_RANDOM_JUCEHEADER__ + forcedinline void atomicIncrement (int& variable) throw() { OSAtomicIncrement32 ((int32_t*) &variable); } + forcedinline int atomicIncrementAndReturn (int& variable) throw() { return OSAtomicIncrement32 ((int32_t*) &variable); } + forcedinline void atomicDecrement (int& variable) throw() { OSAtomicDecrement32 ((int32_t*) &variable); } + forcedinline int atomicDecrementAndReturn (int& variable) throw() { return OSAtomicDecrement32 ((int32_t*) &variable); } + #else -/********* Start of inlined file: juce_BitArray.h *********/ -#ifndef __JUCE_BITARRAY_JUCEHEADER__ -#define __JUCE_BITARRAY_JUCEHEADER__ + forcedinline void atomicIncrement (int& variable) throw() { OTAtomicAdd32 (1, (SInt32*) &variable); } + forcedinline int atomicIncrementAndReturn (int& variable) throw() { return OTAtomicAdd32 (1, (SInt32*) &variable); } + forcedinline void atomicDecrement (int& variable) throw() { OTAtomicAdd32 (-1, (SInt32*) &variable); } + forcedinline int atomicDecrementAndReturn (int& variable) throw() { return OTAtomicAdd32 (-1, (SInt32*) &variable); } + #endif -class MemoryBlock; +#elif JUCE_GCC -/** - An array of on/off bits, also usable to store large binary integers. + #if JUCE_USE_GCC_ATOMIC_INTRINSICS + forcedinline void atomicIncrement (int& variable) throw() { __sync_add_and_fetch (&variable, 1); } + forcedinline int atomicIncrementAndReturn (int& variable) throw() { return __sync_add_and_fetch (&variable, 1); } + forcedinline void atomicDecrement (int& variable) throw() { __sync_add_and_fetch (&variable, -1); } + forcedinline int atomicDecrementAndReturn (int& variable) throw() { return __sync_add_and_fetch (&variable, -1); } + #else - A BitArray acts like an arbitrarily large integer whose bits can be set or - cleared, and some basic mathematical operations can be done on the number as - a whole. -*/ -class JUCE_API BitArray -{ -public: - - /** Creates an empty BitArray */ - BitArray() throw(); - - /** Creates a BitArray containing an integer value in its low bits. - - The low 32 bits of the array are initialised with this value. - */ - BitArray (const unsigned int value) throw(); - - /** Creates a BitArray containing an integer value in its low bits. - - The low 32 bits of the array are initialised with the absolute value - passed in, and its sign is set to reflect the sign of the number. - */ - BitArray (const int value) throw(); - - /** Creates a BitArray containing an integer value in its low bits. - - The low 64 bits of the array are initialised with the absolute value - passed in, and its sign is set to reflect the sign of the number. - */ - BitArray (int64 value) throw(); - - /** Creates a copy of another BitArray. */ - BitArray (const BitArray& other) throw(); - - /** Destructor. */ - ~BitArray() throw(); - - /** Copies another BitArray onto this one. */ - const BitArray& operator= (const BitArray& other) throw(); - - /** Two arrays are the same if the same bits are set. */ - bool operator== (const BitArray& other) const throw(); - /** Two arrays are the same if the same bits are set. */ - bool operator!= (const BitArray& other) const throw(); - - /** Clears all bits in the BitArray to 0. */ - void clear() throw(); - - /** Clears a particular bit in the array. */ - void clearBit (const int bitNumber) throw(); - - /** Sets a specified bit to 1. - - If the bit number is high, this will grow the array to accomodate it. - */ - void setBit (const int bitNumber) throw(); - - /** Sets or clears a specified bit. */ - void setBit (const int bitNumber, - const bool shouldBeSet) throw(); - - /** Sets a range of bits to be either on or off. - - @param startBit the first bit to change - @param numBits the number of bits to change - @param shouldBeSet whether to turn these bits on or off - */ - void setRange (int startBit, - int numBits, - const bool shouldBeSet) throw(); - - /** Inserts a bit an a given position, shifting up any bits above it. */ - void insertBit (const int bitNumber, - const bool shouldBeSet) throw(); - - /** Returns the value of a specified bit in the array. - - If the index is out-of-range, the result will be false. - */ - bool operator[] (const int bit) const throw(); - - /** Returns true if no bits are set. */ - bool isEmpty() const throw(); - - /** Returns a range of bits in the array as a new BitArray. - - e.g. getBitRangeAsInt (0, 64) would return the lowest 64 bits. - @see getBitRangeAsInt - */ - const BitArray getBitRange (int startBit, int numBits) const throw(); - - /** Returns a range of bits in the array as an integer value. - - e.g. getBitRangeAsInt (0, 32) would return the lowest 32 bits. - - Asking for more than 32 bits isn't allowed (obviously) - for that, use - getBitRange(). - */ - int getBitRangeAsInt (int startBit, int numBits) const throw(); - - /** Sets a range of bits in the array based on an integer value. - - Copies the given integer into the array, starting at startBit, - and only using up to numBits of the available bits. - */ - void setBitRangeAsInt (int startBit, int numBits, - unsigned int valueToSet) throw(); - - /** Performs a bitwise OR with another BitArray. - - The result ends up in this array. - */ - void orWith (const BitArray& other) throw(); - - /** Performs a bitwise AND with another BitArray. - - The result ends up in this array. - */ - void andWith (const BitArray& other) throw(); - - /** Performs a bitwise XOR with another BitArray. - - The result ends up in this array. - */ - void xorWith (const BitArray& other) throw(); - - /** Adds another BitArray's value to this one. - - Treating the two arrays as large positive integers, this - adds them up and puts the result in this array. - */ - void add (const BitArray& other) throw(); - - /** Subtracts another BitArray's value from this one. - - Treating the two arrays as large positive integers, this - subtracts them and puts the result in this array. - - Note that if the result should be negative, this won't be - handled correctly. - */ - void subtract (const BitArray& other) throw(); - - /** Multiplies another BitArray's value with this one. - - Treating the two arrays as large positive integers, this - multiplies them and puts the result in this array. - */ - void multiplyBy (const BitArray& other) throw(); - - /** Divides another BitArray's value into this one and also produces a remainder. - - Treating the two arrays as large positive integers, this - divides this value by the other, leaving the quotient in this - array, and the remainder is copied into the other BitArray passed in. - */ - void divideBy (const BitArray& divisor, BitArray& remainder) throw(); - - /** Returns the largest value that will divide both this value and the one - passed-in. - */ - const BitArray findGreatestCommonDivisor (BitArray other) const throw(); - - /** Performs a modulo operation on this value. - - The result is stored in this value. - */ - void modulo (const BitArray& divisor) throw(); - - /** Performs a combined exponent and modulo operation. - - This BitArray's value becomes (this ^ exponent) % modulus. - */ - void exponentModulo (const BitArray& exponent, const BitArray& modulus) throw(); - - /** Performs an inverse modulo on the value. - - i.e. the result is (this ^ -1) mod (modulus). - */ - void inverseModulo (const BitArray& modulus) throw(); - - /** Shifts a section of bits left or right. - - @param howManyBitsLeft how far to move the bits (+ve numbers shift it left, -ve numbers shift it right). - @param startBit the first bit to affect - if this is > 0, only bits above that index will be affected. - */ - void shiftBits (int howManyBitsLeft, - int startBit = 0) throw(); - - /** Does a signed comparison of two BitArrays. - - Return values are: - - 0 if the numbers are the same - - < 0 if this number is smaller than the other - - > 0 if this number is bigger than the other - */ - int compare (const BitArray& other) const throw(); - - /** Compares the magnitudes of two BitArrays, ignoring their signs. - - Return values are: - - 0 if the numbers are the same - - < 0 if this number is smaller than the other - - > 0 if this number is bigger than the other - */ - int compareAbsolute (const BitArray& other) const throw(); - - /** Returns true if the value is less than zero. - - @see setNegative, negate - */ - bool isNegative() const throw(); - - /** Changes the sign of the number to be positive or negative. - - @see isNegative, negate - */ - void setNegative (const bool shouldBeNegative) throw(); - - /** Inverts the sign of the number. - - @see isNegative, setNegative - */ - void negate() throw(); - - /** Counts the total number of set bits in the array. */ - int countNumberOfSetBits() const throw(); - - /** Looks for the index of the next set bit after a given starting point. - - searches from startIndex (inclusive) upwards for the first set bit, - and returns its index. - - If no set bits are found, it returns -1. - */ - int findNextSetBit (int startIndex = 0) const throw(); - - /** Looks for the index of the next clear bit after a given starting point. - - searches from startIndex (inclusive) upwards for the first clear bit, - and returns its index. - */ - int findNextClearBit (int startIndex = 0) const throw(); - - /** Returns the index of the highest set bit in the array. - - If the array is empty, this will return -1. - */ - int getHighestBit() const throw(); - - /** Converts the array to a number string. - - Specify a base such as 2 (binary), 8 (octal), 10 (decimal), 16 (hex). - - If minuimumNumCharacters is greater than 0, the returned string will be - padded with leading zeros to reach at least that length. - */ - const String toString (const int base, const int minimumNumCharacters = 1) const throw(); - - /** Converts a number string to an array. - - Any non-valid characters will be ignored. - - Specify a base such as 2 (binary), 8 (octal), 10 (decimal), 16 (hex). - */ - void parseString (const String& text, - const int base) throw(); - - /** Turns the array into a block of binary data. - - The data is arranged as little-endian, so the first byte of data is the low 8 bits - of the array, and so on. - - @see loadFromMemoryBlock - */ - const MemoryBlock toMemoryBlock() const throw(); - - /** Copies a block of raw data onto this array. - - The data is arranged as little-endian, so the first byte of data is the low 8 bits - of the array, and so on. - - @see toMemoryBlock - */ - void loadFromMemoryBlock (const MemoryBlock& data) throw(); - - juce_UseDebuggingNewOperator - -private: - void ensureSize (const int numVals) throw(); - unsigned int* values; - int numValues, highestBit; - bool negative; -}; - -#endif // __JUCE_BITARRAY_JUCEHEADER__ -/********* End of inlined file: juce_BitArray.h *********/ - -/** - A simple pseudo-random number generator. -*/ -class JUCE_API Random -{ -public: - - /** Creates a Random object based on a seed value. - - For a given seed value, the subsequent numbers generated by this object - will be predictable, so a good idea is to set this value based - on the time, e.g. - - new Random (Time::currentTimeMillis()) - */ - Random (const int64 seedValue) throw(); - - /** Destructor. */ - ~Random() throw(); - - /** Returns the next random 32 bit integer. - - @returns a random integer from the full range 0x80000000 to 0x7fffffff - */ - int nextInt() throw(); - - /** Returns the next random number, limited to a given range. - - @returns a random integer between 0 (inclusive) and maxValue (exclusive). - */ - int nextInt (const int maxValue) throw(); - - /** Returns the next 64-bit random number. - - @returns a random integer from the full range 0x8000000000000000 to 0x7fffffffffffffff - */ - int64 nextInt64() throw(); - - /** Returns the next random floating-point number. - - @returns a random value in the range 0 to 1.0 - */ - float nextFloat() throw(); - - /** Returns the next random floating-point number. - - @returns a random value in the range 0 to 1.0 - */ - double nextDouble() throw(); - - /** Returns the next random boolean value. - */ - bool nextBool() throw(); - - /** Returns a BitArray containing a random number. - - @returns a random value in the range 0 to (maximumValue - 1). - */ - const BitArray nextLargeNumber (const BitArray& maximumValue) throw(); - - /** Sets a range of bits in a BitArray to random values. */ - void fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw(); - - /** To avoid the overhead of having to create a new Random object whenever - you need a number, this is a shared application-wide object that - can be used. - - It's not thread-safe though, so threads should use their own Random object. - */ - static Random& getSystemRandom() throw(); - - /** Resets this Random object to a given seed value. */ - void setSeed (const int64 newSeed) throw(); - - /** Reseeds this generator using a value generated from various semi-random system - properties like the current time, etc. - - Because this function convolves the time with the last seed value, calling - it repeatedly will increase the randomness of the final result. - */ - void setSeedRandomly(); - - juce_UseDebuggingNewOperator - -private: - int64 seed; -}; - -#endif // __JUCE_RANDOM_JUCEHEADER__ -/********* End of inlined file: juce_Random.h *********/ - -#endif -#ifndef __JUCE_RELATIVETIME_JUCEHEADER__ - -#endif -#ifndef __JUCE_SINGLETON_JUCEHEADER__ - -/********* Start of inlined file: juce_Singleton.h *********/ -#ifndef __JUCE_SINGLETON_JUCEHEADER__ -#define __JUCE_SINGLETON_JUCEHEADER__ - -/********* Start of inlined file: juce_ScopedLock.h *********/ -#ifndef __JUCE_SCOPEDLOCK_JUCEHEADER__ -#define __JUCE_SCOPEDLOCK_JUCEHEADER__ - -/** - Automatically locks and unlocks a CriticalSection object. - - Use one of these as a local variable to control access to a CriticalSection. - - e.g. @code - - CriticalSection myCriticalSection; - - for (;;) + /** Increments an integer in a thread-safe way. */ + forcedinline void atomicIncrement (int& variable) throw() { - const ScopedLock myScopedLock (myCriticalSection); - // myCriticalSection is now locked - - ...do some stuff... - - // myCriticalSection gets unlocked here. + __asm__ __volatile__ ( + #if JUCE_64BIT + "lock incl (%%rax)" + : + : "a" (&variable) + : "cc", "memory"); + #else + "lock incl %0" + : "=m" (variable) + : "m" (variable)); + #endif } - @endcode - @see CriticalSection, ScopedUnlock -*/ -class JUCE_API ScopedLock -{ -public: - - /** Creates a ScopedLock. - - As soon as it is created, this will lock the CriticalSection, and - when the ScopedLock object is deleted, the CriticalSection will - be unlocked. - - Make sure this object is created and deleted by the same thread, - otherwise there are no guarantees what will happen! Best just to use it - as a local stack object, rather than creating one with the new() operator. - */ - inline ScopedLock (const CriticalSection& lock) throw() : lock_ (lock) { lock.enter(); } - - /** Destructor. - - The CriticalSection will be unlocked when the destructor is called. - - Make sure this object is created and deleted by the same thread, - otherwise there are no guarantees what will happen! - */ - inline ~ScopedLock() throw() { lock_.exit(); } - -private: - - const CriticalSection& lock_; - - ScopedLock (const ScopedLock&); - const ScopedLock& operator= (const ScopedLock&); -}; - -/** - Automatically unlocks and re-locks a CriticalSection object. - - This is the reverse of a ScopedLock object - instead of locking the critical - section for the lifetime of this object, it unlocks it. - - Make sure you don't try to unlock critical sections that aren't actually locked! - - e.g. @code - - CriticalSection myCriticalSection; - - for (;;) + /** Increments an integer in a thread-safe way and returns the incremented value. */ + forcedinline int atomicIncrementAndReturn (int& variable) throw() { - const ScopedLock myScopedLock (myCriticalSection); - // myCriticalSection is now locked + int result; - ... do some stuff with it locked .. + __asm__ __volatile__ ( + #if JUCE_64BIT + "lock xaddl %%ebx, (%%rax) \n\ + incl %%ebx" + : "=b" (result) + : "a" (&variable), "b" (1) + : "cc", "memory"); + #else + "lock xaddl %%eax, (%%ecx) \n\ + incl %%eax" + : "=a" (result) + : "c" (&variable), "a" (1) + : "memory"); + #endif - while (xyz) - { - ... do some stuff with it locked .. + return result; + } - const ScopedUnlock unlocker (myCriticalSection); + /** Decrememts an integer in a thread-safe way. */ + forcedinline void atomicDecrement (int& variable) throw() + { + __asm__ __volatile__ ( + #if JUCE_64BIT + "lock decl (%%rax)" + : + : "a" (&variable) + : "cc", "memory"); + #else + "lock decl %0" + : "=m" (variable) + : "m" (variable)); + #endif + } - // myCriticalSection is now unlocked for the remainder of this block, - // and re-locked at the end. + /** Decrememts an integer in a thread-safe way and returns the incremented value. */ + forcedinline int atomicDecrementAndReturn (int& variable) throw() + { + int result; - ...do some stuff with it unlocked ... + __asm__ __volatile__ ( + #if JUCE_64BIT + "lock xaddl %%ebx, (%%rax) \n\ + decl %%ebx" + : "=b" (result) + : "a" (&variable), "b" (-1) + : "cc", "memory"); + #else + "lock xaddl %%eax, (%%ecx) \n\ + decl %%eax" + : "=a" (result) + : "c" (&variable), "a" (-1) + : "memory"); + #endif + return result; + } + #endif + +#elif JUCE_USE_INTRINSICS + + #pragma intrinsic (_InterlockedIncrement) + #pragma intrinsic (_InterlockedDecrement) + + /** Increments an integer in a thread-safe way. */ + forcedinline void __fastcall atomicIncrement (int& variable) throw() + { + _InterlockedIncrement (reinterpret_cast (&variable)); + } + + /** Increments an integer in a thread-safe way and returns the incremented value. */ + forcedinline int __fastcall atomicIncrementAndReturn (int& variable) throw() + { + return _InterlockedIncrement (reinterpret_cast (&variable)); + } + + /** Decrememts an integer in a thread-safe way. */ + forcedinline void __fastcall atomicDecrement (int& variable) throw() + { + _InterlockedDecrement (reinterpret_cast (&variable)); + } + + /** Decrememts an integer in a thread-safe way and returns the incremented value. */ + forcedinline int __fastcall atomicDecrementAndReturn (int& variable) throw() + { + return _InterlockedDecrement (reinterpret_cast (&variable)); + } +#else + + /** Increments an integer in a thread-safe way. */ + forcedinline void __fastcall atomicIncrement (int& variable) throw() + { + __asm { + mov ecx, dword ptr [variable] + lock inc dword ptr [ecx] + } + } + + /** Increments an integer in a thread-safe way and returns the incremented value. */ + forcedinline int __fastcall atomicIncrementAndReturn (int& variable) throw() + { + int result; + + __asm { + mov ecx, dword ptr [variable] + mov eax, 1 + lock xadd dword ptr [ecx], eax + inc eax + mov result, eax } - // myCriticalSection gets unlocked here. + return result; } - @endcode - @see CriticalSection, ScopedLock + /** Decrememts an integer in a thread-safe way. */ + forcedinline void __fastcall atomicDecrement (int& variable) throw() + { + __asm { + mov ecx, dword ptr [variable] + lock dec dword ptr [ecx] + } + } + + /** Decrememts an integer in a thread-safe way and returns the incremented value. */ + forcedinline int __fastcall atomicDecrementAndReturn (int& variable) throw() + { + int result; + + __asm { + mov ecx, dword ptr [variable] + mov eax, -1 + lock xadd dword ptr [ecx], eax + dec eax + mov result, eax + } + + return result; + } +#endif + +#endif // __JUCE_ATOMIC_JUCEHEADER__ +/********* End of inlined file: juce_Atomic.h *********/ + +#endif +#ifndef __JUCE_UUID_JUCEHEADER__ + +/********* Start of inlined file: juce_Uuid.h *********/ +#ifndef __JUCE_UUID_JUCEHEADER__ +#define __JUCE_UUID_JUCEHEADER__ + +/** + A universally unique 128-bit identifier. + + This class generates very random unique numbers based on the system time + and MAC addresses if any are available. It's extremely unlikely that two identical + UUIDs would ever be created by chance. + + The class includes methods for saving the ID as a string or as raw binary data. */ -class ScopedUnlock +class JUCE_API Uuid { public: - /** Creates a ScopedUnlock. + /** Creates a new unique ID. */ + Uuid(); - As soon as it is created, this will unlock the CriticalSection, and - when the ScopedLock object is deleted, the CriticalSection will - be re-locked. + /** Destructor. */ + ~Uuid() throw(); - Make sure this object is created and deleted by the same thread, - otherwise there are no guarantees what will happen! Best just to use it - as a local stack object, rather than creating one with the new() operator. + /** Creates a copy of another UUID. */ + Uuid (const Uuid& other); + + /** Copies another UUID. */ + Uuid& operator= (const Uuid& other); + + /** Returns true if the ID is zero. */ + bool isNull() const throw(); + + /** Compares two UUIDs. */ + bool operator== (const Uuid& other) const; + + /** Compares two UUIDs. */ + bool operator!= (const Uuid& other) const; + + /** Returns a stringified version of this UUID. + + A Uuid object can later be reconstructed from this string using operator= or + the constructor that takes a string parameter. + + @returns a 32 character hex string. */ - inline ScopedUnlock (const CriticalSection& lock) throw() : lock_ (lock) { lock.exit(); } + const String toString() const; - /** Destructor. + /** Creates an ID from an encoded string version. - The CriticalSection will be unlocked when the destructor is called. - - Make sure this object is created and deleted by the same thread, - otherwise there are no guarantees what will happen! + @see toString */ - inline ~ScopedUnlock() throw() { lock_.enter(); } + Uuid (const String& uuidString); + + /** Copies from a stringified UUID. + + The string passed in should be one that was created with the toString() method. + */ + Uuid& operator= (const String& uuidString); + + /** Returns a pointer to the internal binary representation of the ID. + + This is an array of 16 bytes. To reconstruct a Uuid from its data, use + the constructor or operator= method that takes an array of uint8s. + */ + const uint8* getRawData() const throw() { return value.asBytes; } + + /** Creates a UUID from a 16-byte array. + + @see getRawData + */ + Uuid (const uint8* const rawData); + + /** Sets this UUID from 16-bytes of raw data. */ + Uuid& operator= (const uint8* const rawData); + + juce_UseDebuggingNewOperator private: + union + { + uint8 asBytes [16]; + int asInt[4]; + int64 asInt64[2]; - const CriticalSection& lock_; - - ScopedUnlock (const ScopedLock&); - const ScopedUnlock& operator= (const ScopedUnlock&); + } value; }; -#endif // __JUCE_SCOPEDLOCK_JUCEHEADER__ -/********* End of inlined file: juce_ScopedLock.h *********/ +#endif // __JUCE_UUID_JUCEHEADER__ +/********* End of inlined file: juce_Uuid.h *********/ -/** - Macro to declare member variables and methods for a singleton class. +#endif +#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ - To use this, add the line juce_DeclareSingleton (MyClass, allowOnlyOneInstance) - to the class's definition. +/********* Start of inlined file: juce_PerformanceCounter.h *********/ +#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ +#define __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ - If allowOnlyOneInstance == true, it won't allow the object to be created - more than once in the process's lifetime. - - Then put a macro juce_ImplementSingleton (MyClass) along with the class's - implementation code. - - Clients can then call the static MyClass::getInstance() to get a pointer to the - singleton, or MyClass::getInstanceWithoutCreating() which may return 0 if no instance - is currently extant - - it's a very good idea to also add the call clearSingletonInstance() to the - destructor of the class, in case it is deleted by other means than deleteInstance() +/** A timer for measuring performance of code and dumping the results to a file. e.g. @code - class MySingleton + PerformanceCounter pc ("fish", 50, "/temp/myfishlog.txt"); + + for (;;) { - public: - MySingleton() - { - } + pc.start(); - ~MySingleton() - { - // this ensures that no dangling pointers are left when the - // singleton is deleted. - clearSingletonInstance(); - } - - juce_DeclareSingleton (MySingleton, false) - }; - - juce_ImplementSingleton (MySingleton) - - // example of usage: - MySingleton* m = MySingleton::getInstance(); // creates the singleton if there isn't already one. - - ... - - MySingleton::deleteInstance(); // safely deletes the singleton (if it's been created). + doSomethingFishy(); + pc.stop(); + } @endcode - If you know that your object will only be created and deleted by a single thread, you - can use the slightly more efficient juce_DeclareSingleton_SingleThreaded() macro instead - of this one. - - @see juce_ImplementSingleton, juce_DeclareSingleton_SingleThreaded + In this example, the time of each period between calling start/stop will be + measured and averaged over 50 runs, and the results printed to a file + every 50 times round the loop. */ -#define juce_DeclareSingleton(classname, allowOnlyOneInstance) \ -\ - static classname* _singletonInstance; \ - static JUCE_NAMESPACE::CriticalSection _singletonLock; \ -\ - static classname* getInstance() \ - { \ - if (_singletonInstance == 0) \ - {\ - const JUCE_NAMESPACE::ScopedLock sl (_singletonLock); \ -\ - if (_singletonInstance == 0) \ - { \ - static bool alreadyInside = false; \ - static bool createdOnceAlready = false; \ -\ - const bool problem = alreadyInside || ((allowOnlyOneInstance) && createdOnceAlready); \ - jassert (! problem); \ - if (! problem) \ - { \ - createdOnceAlready = true; \ - alreadyInside = true; \ - classname* newObject = new classname(); /* (use a stack variable to avoid setting the newObject value before the class has finished its constructor) */ \ - alreadyInside = false; \ -\ - _singletonInstance = newObject; \ - } \ - } \ - } \ -\ - return _singletonInstance; \ - } \ -\ - static inline classname* getInstanceWithoutCreating() throw() \ - { \ - return _singletonInstance; \ - } \ -\ - static void deleteInstance() \ - { \ - const JUCE_NAMESPACE::ScopedLock sl (_singletonLock); \ - if (_singletonInstance != 0) \ - { \ - classname* const old = _singletonInstance; \ - _singletonInstance = 0; \ - delete old; \ - } \ - } \ -\ - void clearSingletonInstance() throw() \ - { \ - if (_singletonInstance == this) \ - _singletonInstance = 0; \ - } - -/** This is a counterpart to the juce_DeclareSingleton macro. - - After adding the juce_DeclareSingleton to the class definition, this macro has - to be used in the cpp file. -*/ -#define juce_ImplementSingleton(classname) \ -\ - classname* classname::_singletonInstance = 0; \ - JUCE_NAMESPACE::CriticalSection classname::_singletonLock; - -/** - Macro to declare member variables and methods for a singleton class. - - This is exactly the same as juce_DeclareSingleton, but doesn't use a critical - section to make access to it thread-safe. If you know that your object will - only ever be created or deleted by a single thread, then this is a - more efficient version to use. - - See the documentation for juce_DeclareSingleton for more information about - how to use it, the only difference being that you have to use - juce_ImplementSingleton_SingleThreaded instead of juce_ImplementSingleton. - - @see juce_ImplementSingleton_SingleThreaded, juce_DeclareSingleton, juce_DeclareSingleton_SingleThreaded_Minimal -*/ -#define juce_DeclareSingleton_SingleThreaded(classname, allowOnlyOneInstance) \ -\ - static classname* _singletonInstance; \ -\ - static classname* getInstance() \ - { \ - if (_singletonInstance == 0) \ - { \ - static bool alreadyInside = false; \ - static bool createdOnceAlready = false; \ -\ - const bool problem = alreadyInside || ((allowOnlyOneInstance) && createdOnceAlready); \ - jassert (! problem); \ - if (! problem) \ - { \ - createdOnceAlready = true; \ - alreadyInside = true; \ - classname* newObject = new classname(); /* (use a stack variable to avoid setting the newObject value before the class has finished its constructor) */ \ - alreadyInside = false; \ -\ - _singletonInstance = newObject; \ - } \ - } \ -\ - return _singletonInstance; \ - } \ -\ - static inline classname* getInstanceWithoutCreating() throw() \ - { \ - return _singletonInstance; \ - } \ -\ - static void deleteInstance() \ - { \ - if (_singletonInstance != 0) \ - { \ - classname* const old = _singletonInstance; \ - _singletonInstance = 0; \ - delete old; \ - } \ - } \ -\ - void clearSingletonInstance() throw() \ - { \ - if (_singletonInstance == this) \ - _singletonInstance = 0; \ - } - -/** - Macro to declare member variables and methods for a singleton class. - - This is like juce_DeclareSingleton_SingleThreaded, but doesn't do any checking - for recursion or repeated instantiation. It's intended for use as a lightweight - version of a singleton, where you're using it in very straightforward - circumstances and don't need the extra checking. - - Juce use the normal juce_ImplementSingleton_SingleThreaded as the counterpart - to this declaration, as you would with juce_DeclareSingleton_SingleThreaded. - - See the documentation for juce_DeclareSingleton for more information about - how to use it, the only difference being that you have to use - juce_ImplementSingleton_SingleThreaded instead of juce_ImplementSingleton. - - @see juce_ImplementSingleton_SingleThreaded, juce_DeclareSingleton -*/ -#define juce_DeclareSingleton_SingleThreaded_Minimal(classname) \ -\ - static classname* _singletonInstance; \ -\ - static classname* getInstance() \ - { \ - if (_singletonInstance == 0) \ - _singletonInstance = new classname(); \ -\ - return _singletonInstance; \ - } \ -\ - static inline classname* getInstanceWithoutCreating() throw() \ - { \ - return _singletonInstance; \ - } \ -\ - static void deleteInstance() \ - { \ - if (_singletonInstance != 0) \ - { \ - classname* const old = _singletonInstance; \ - _singletonInstance = 0; \ - delete old; \ - } \ - } \ -\ - void clearSingletonInstance() throw() \ - { \ - if (_singletonInstance == this) \ - _singletonInstance = 0; \ - } - -/** This is a counterpart to the juce_DeclareSingleton_SingleThreaded macro. - - After adding juce_DeclareSingleton_SingleThreaded or juce_DeclareSingleton_SingleThreaded_Minimal - to the class definition, this macro has to be used somewhere in the cpp file. -*/ -#define juce_ImplementSingleton_SingleThreaded(classname) \ -\ - classname* classname::_singletonInstance = 0; - -#endif // __JUCE_SINGLETON_JUCEHEADER__ -/********* End of inlined file: juce_Singleton.h *********/ - -#endif -#ifndef __JUCE_STANDARDHEADER_JUCEHEADER__ - -#endif -#ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ - -/********* Start of inlined file: juce_SystemStats.h *********/ -#ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ -#define __JUCE_SYSTEMSTATS_JUCEHEADER__ - -/** - Contains methods for finding out about the current hardware and OS configuration. -*/ -class JUCE_API SystemStats +class JUCE_API PerformanceCounter { public: - /** Returns the current version of JUCE, + /** Creates a PerformanceCounter object. - (just in case you didn't already know at compile-time.) - - See also the JUCE_VERSION, JUCE_MAJOR_VERSION and JUCE_MINOR_VERSION macros. + @param counterName the name used when printing out the statistics + @param runsPerPrintout the number of start/stop iterations before calling + printStatistics() + @param loggingFile a file to dump the results to - if this is File::nonexistent, + the results are just written to the debugger output */ - static const String getJUCEVersion() throw(); + PerformanceCounter (const String& counterName, + int runsPerPrintout = 100, + const File& loggingFile = File::nonexistent); - /** The set of possible results of the getOperatingSystemType() method. + /** Destructor. */ + ~PerformanceCounter(); + + /** Starts timing. + + @see stop */ - enum OperatingSystemType - { - UnknownOS = 0, + void start(); - MacOSX = 0x1000, - Linux = 0x2000, + /** Stops timing and prints out the results. - Win95 = 0x4001, - Win98 = 0x4002, - WinNT351 = 0x4103, - WinNT40 = 0x4104, - Win2000 = 0x4105, - WinXP = 0x4106, - WinVista = 0x4107, + The number of iterations before doing a printout of the + results is set in the constructor. - Windows = 0x4000, /**< To test whether any version of Windows is running, - you can use the expression ((getOperatingSystemType() & Windows) != 0). */ - WindowsNT = 0x0100, /**< To test whether the platform is Windows NT or later (i.e. not Win95 or 98), - you can use the expression ((getOperatingSystemType() & WindowsNT) != 0). */ - }; - - /** Returns the type of operating system we're running on. - - @returns one of the values from the OperatingSystemType enum. - @see getOperatingSystemName + @see start */ - static OperatingSystemType getOperatingSystemType() throw(); + void stop(); - /** Returns the name of the type of operating system we're running on. + /** Dumps the current metrics to the debugger output and to a file. - @returns a string describing the OS type. - @see getOperatingSystemType + As well as using Logger::outputDebugString to print the results, + this will write then to the file specified in the constructor (if + this was valid). */ - static const String getOperatingSystemName() throw(); + void printStatistics(); - /** Returns true if the OS is 64-bit, or false for a 32-bit OS. - */ - static bool isOperatingSystem64Bit() throw(); + juce_UseDebuggingNewOperator - // CPU and memory information.. +private: - /** Returns the approximate CPU speed. - - @returns the speed in megahertz, e.g. 1500, 2500, 32000 (depending on - what year you're reading this...) - */ - static int getCpuSpeedInMegaherz() throw(); - - /** Returns a string to indicate the CPU vendor. - - Might not be known on some systems. - */ - static const String getCpuVendor() throw(); - - /** Checks whether Intel MMX instructions are available. */ - static bool hasMMX() throw(); - - /** Checks whether Intel SSE instructions are available. */ - static bool hasSSE() throw(); - - /** Checks whether Intel SSE2 instructions are available. */ - static bool hasSSE2() throw(); - - /** Checks whether AMD 3DNOW instructions are available. */ - static bool has3DNow() throw(); - - /** Returns the number of CPUs. - */ - static int getNumCpus() throw(); - - /** Returns a clock-cycle tick counter, if available. - - If the machine can do it, this will return a tick-count - where each tick is one cpu clock cycle - used for profiling - code. - - @returns the tick count, or zero if not available. - */ - static int64 getClockCycleCounter() throw(); - - /** Finds out how much RAM is in the machine. - - @returns the approximate number of megabytes of memory, or zero if - something goes wrong when finding out. - */ - static int getMemorySizeInMegabytes() throw(); - - /** Returns the system page-size. - - This is only used by programmers with beards. - */ - static int getPageSize() throw(); - - /** Returns a list of MAC addresses found on this machine. - - @param addresses an array into which the MAC addresses should be copied - @param maxNum the number of elements in this array - @param littleEndian the endianness of the numbers to return. Note that - the default values of this parameter are different on - Mac/PC to avoid breaking old software that was written - before this parameter was added (when the two systems - defaulted to using different endiannesses). In newer - software you probably want to specify an explicit value - for this. - @returns the number of MAC addresses that were found - */ - static int getMACAddresses (int64* addresses, int maxNum, -#if JUCE_MAC - const bool littleEndian = true) throw(); -#else - const bool littleEndian = false) throw(); -#endif - - // not-for-public-use platform-specific method gets called at startup to initialise things. - static void initialiseStats() throw(); + String name; + int numRuns, runsPerPrint; + double totalTime; + int64 started; + File outputFile; }; -#endif // __JUCE_SYSTEMSTATS_JUCEHEADER__ -/********* End of inlined file: juce_SystemStats.h *********/ +#endif // __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ +/********* End of inlined file: juce_PerformanceCounter.h *********/ #endif -#ifndef __JUCE_TIME_JUCEHEADER__ +#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ + +/********* Start of inlined file: juce_PlatformUtilities.h *********/ +#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ +#define __JUCE_PLATFORMUTILITIES_JUCEHEADER__ + +/** + A collection of miscellaneous platform-specific utilities. + +*/ +class JUCE_API PlatformUtilities +{ +public: + + /** Plays the operating system's default alert 'beep' sound. */ + static void beep(); + + static bool launchEmailWithAttachments (const String& targetEmailAddress, + const String& emailSubject, + const String& bodyText, + const StringArray& filesToAttach); + +#if JUCE_MAC || DOXYGEN + + /** MAC ONLY - Turns a Core CF String into a juce one. */ + static const String cfStringToJuceString (CFStringRef cfString); + + /** MAC ONLY - Turns a juce string into a Core CF one. */ + static CFStringRef juceStringToCFString (const String& s); + + /** MAC ONLY - Turns a file path into an FSRef, returning true if it succeeds. */ + static bool makeFSRefFromPath (FSRef* destFSRef, const String& path); + + /** MAC ONLY - Turns an FSRef into a juce string path. */ + static const String makePathFromFSRef (FSRef* file); + + /** MAC ONLY - Converts any decomposed unicode characters in a string into + their precomposed equivalents. + */ + static const String convertToPrecomposedUnicode (const String& s); + + /** MAC ONLY - Gets the type of a file from the file's resources. */ + static OSType getTypeOfFile (const String& filename); + + /** MAC ONLY - Returns true if this file is actually a bundle. */ + static bool isBundle (const String& filename); + + /** MAC ONLY - Adds an item to the dock */ + static void addItemToDock (const File& file); +#endif + +#if JUCE_WIN32 || DOXYGEN + + // Some registry helper functions: + + /** WIN32 ONLY - Returns a string from the registry. + + The path is a string for the entire path of a value in the registry, + e.g. "HKEY_CURRENT_USER\Software\foo\bar" + */ + static const String getRegistryValue (const String& regValuePath, + const String& defaultValue = String::empty); + + /** WIN32 ONLY - Sets a registry value as a string. + + This will take care of creating any groups needed to get to the given + registry value. + */ + static void setRegistryValue (const String& regValuePath, + const String& value); + + /** WIN32 ONLY - Returns true if the given value exists in the registry. */ + static bool registryValueExists (const String& regValuePath); + + /** WIN32 ONLY - Deletes a registry value. */ + static void deleteRegistryValue (const String& regValuePath); + + /** WIN32 ONLY - Deletes a registry key (which is registry-talk for 'folder'). */ + static void deleteRegistryKey (const String& regKeyPath); + + /** WIN32 ONLY - Creates a file association in the registry. + + This lets you set the exe that should be launched by a given file extension. + @param fileExtension the file extension to associate, including the + initial dot, e.g. ".txt" + @param symbolicDescription a space-free short token to identify the file type + @param fullDescription a human-readable description of the file type + @param targetExecutable the executable that should be launched + @param iconResourceNumber the icon that gets displayed for the file type will be + found by looking up this resource number in the + executable. Pass 0 here to not use an icon + */ + static void registerFileAssociation (const String& fileExtension, + const String& symbolicDescription, + const String& fullDescription, + const File& targetExecutable, + int iconResourceNumber); + + /** WIN32 ONLY - This returns the HINSTANCE of the current module. + + In a normal Juce application this will be set to the module handle + of the application executable. + + If you're writing a DLL using Juce and plan to use any Juce messaging or + windows, you'll need to make sure you use the setCurrentModuleInstanceHandle() + to set the correct module handle in your DllMain() function, because + the win32 system relies on the correct instance handle when opening windows. + */ + static void* JUCE_CALLTYPE getCurrentModuleInstanceHandle() throw(); + + /** WIN32 ONLY - Sets a new module handle to be used by the library. + + @see getCurrentModuleInstanceHandle() + */ + static void JUCE_CALLTYPE setCurrentModuleInstanceHandle (void* newHandle) throw(); + + /** WIN32 ONLY - Gets the command-line params as a string. + + This is needed to avoid unicode problems with the argc type params. + */ + static const String JUCE_CALLTYPE getCurrentCommandLineParams() throw(); +#endif + + /** Clears the floating point unit's flags. + + Only has an effect under win32, currently. + */ + static void fpuReset(); + +#if JUCE_LINUX || JUCE_WIN32 + + /** Loads a dynamically-linked library into the process's address space. + + @param pathOrFilename the platform-dependent name and search path + @returns a handle which can be used by getProcedureEntryPoint(), or + zero if it fails. + @see freeDynamicLibrary, getProcedureEntryPoint + */ + static void* loadDynamicLibrary (const String& pathOrFilename); + + /** Frees a dynamically-linked library. + + @param libraryHandle a handle created by loadDynamicLibrary + @see loadDynamicLibrary, getProcedureEntryPoint + */ + static void freeDynamicLibrary (void* libraryHandle); + + /** Finds a procedure call in a dynamically-linked library. + + @param libraryHandle a library handle returned by loadDynamicLibrary + @param procedureName the name of the procedure call to try to load + @returns a pointer to the function if found, or 0 if it fails + @see loadDynamicLibrary + */ + static void* getProcedureEntryPoint (void* libraryHandle, + const String& procedureName); +#endif + +#if JUCE_LINUX || DOXYGEN + +#endif +}; + +#if JUCE_MAC + +/** A handy C++ wrapper that creates and deletes an NSAutoreleasePool object + using RAII. +*/ +class ScopedAutoReleasePool +{ +public: + ScopedAutoReleasePool(); + ~ScopedAutoReleasePool(); + +private: + void* pool; +}; + +/** + A wrapper class for picking up events from an Apple IR remote control device. + + To use it, just create a subclass of this class, implementing the buttonPressed() + callback, then call start() and stop() to start or stop receiving events. +*/ +class JUCE_API AppleRemoteDevice +{ +public: + + AppleRemoteDevice(); + virtual ~AppleRemoteDevice(); + + /** The set of buttons that may be pressed. + @see buttonPressed + */ + enum ButtonType + { + menuButton = 0, /**< The menu button (if it's held for a short time). */ + playButton, /**< The play button. */ + plusButton, /**< The plus or volume-up button. */ + minusButton, /**< The minus or volume-down button. */ + rightButton, /**< The right button (if it's held for a short time). */ + leftButton, /**< The left button (if it's held for a short time). */ + rightButton_Long, /**< The right button (if it's held for a long time). */ + leftButton_Long, /**< The menu button (if it's held for a long time). */ + menuButton_Long, /**< The menu button (if it's held for a long time). */ + playButtonSleepMode, + switched + }; + + /** Override this method to receive the callback about a button press. + + The callback will happen on the application's message thread. + + Some buttons trigger matching up and down events, in which the isDown parameter + will be true and then false. Others only send a single event when the + button is pressed. + */ + virtual void buttonPressed (const ButtonType buttonId, const bool isDown) = 0; + + /** Starts the device running and responding to events. + + Returns true if it managed to open the device. + + @param inExclusiveMode if true, the remote will be grabbed exclusively for this app, + and will not be available to any other part of the system. If + false, it will be shared with other apps. + @see stop + */ + bool start (const bool inExclusiveMode) throw(); + + /** Stops the device running. + @see start + */ + void stop() throw(); + + /** Returns true if the device has been started successfully. + */ + bool isActive() const throw(); + + /** Returns the ID number of the remote, if it has sent one. + */ + int getRemoteId() const throw() { return remoteId; } + + juce_UseDebuggingNewOperator + + /** @internal */ + void handleCallbackInternal(); + +private: + void* device; + void* queue; + int remoteId; + + bool open (const bool openInExclusiveMode) throw(); +}; + +#endif + +#endif // __JUCE_PLATFORMUTILITIES_JUCEHEADER__ +/********* End of inlined file: juce_PlatformUtilities.h *********/ #endif #ifndef __JUCE_ARRAY_JUCEHEADER__ @@ -9716,10 +10154,10 @@ public: /** Creates a copy of another array */ ReferenceCountedArray (const ReferenceCountedArray& other) throw() - : ArrayAllocationBase (other.granularity), - numUsed (other.numUsed) + : ArrayAllocationBase (other.granularity) { other.lockArray(); + numUsed = other.numUsed; this->setAllocatedSize (numUsed); memcpy (this->elements, other.elements, numUsed * sizeof (ObjectClass*)); @@ -11585,12 +12023,6 @@ private: #endif #ifndef __JUCE_VOIDARRAY_JUCEHEADER__ -#endif -#ifndef __JUCE_INPUTSTREAM_JUCEHEADER__ - -#endif -#ifndef __JUCE_OUTPUTSTREAM_JUCEHEADER__ - #endif #ifndef __JUCE_DIRECTORYITERATOR_JUCEHEADER__ @@ -12014,6 +12446,188 @@ private: #endif // __JUCE_NAMEDPIPE_JUCEHEADER__ /********* End of inlined file: juce_NamedPipe.h *********/ +#endif +#ifndef __JUCE_ZIPFILE_JUCEHEADER__ + +/********* Start of inlined file: juce_ZipFile.h *********/ +#ifndef __JUCE_ZIPFILE_JUCEHEADER__ +#define __JUCE_ZIPFILE_JUCEHEADER__ + +/********* Start of inlined file: juce_InputSource.h *********/ +#ifndef __JUCE_INPUTSOURCE_JUCEHEADER__ +#define __JUCE_INPUTSOURCE_JUCEHEADER__ + +/** + A lightweight object that can create a stream to read some kind of resource. + + This may be used to refer to a file, or some other kind of source, allowing a + caller to create an input stream that can read from it when required. + + @see FileInputSource +*/ +class JUCE_API InputSource +{ +public: + + InputSource() throw() {} + + /** Destructor. */ + virtual ~InputSource() {} + + /** Returns a new InputStream to read this item. + + @returns an inputstream that the caller will delete, or 0 if + the filename isn't found. + */ + virtual InputStream* createInputStream() = 0; + + /** Returns a new InputStream to read an item, relative. + + @param relatedItemPath the relative pathname of the resource that is required + @returns an inputstream that the caller will delete, or 0 if + the item isn't found. + */ + virtual InputStream* createInputStreamFor (const String& relatedItemPath) = 0; + + /** Returns a hash code that uniquely represents this item. + */ + virtual int64 hashCode() const = 0; + + juce_UseDebuggingNewOperator +}; + +#endif // __JUCE_INPUTSOURCE_JUCEHEADER__ +/********* End of inlined file: juce_InputSource.h *********/ + +/** + Decodes a ZIP file from a stream. + + This can enumerate the items in a ZIP file and can create suitable stream objects + to read each one. +*/ +class JUCE_API ZipFile +{ +public: + + /** Creates a ZipFile for a given stream. + + @param inputStream the stream to read from + @param deleteStreamWhenDestroyed if set to true, the object passed-in + will be deleted when this ZipFile object is deleted + */ + ZipFile (InputStream* const inputStream, + const bool deleteStreamWhenDestroyed) throw(); + + /** Creates a ZipFile based for a file. */ + ZipFile (const File& file); + + /** Creates a ZipFile for an input source. + + The inputSource object will be owned by the zip file, which will delete + it later when not needed. + */ + ZipFile (InputSource* const inputSource); + + /** Destructor. */ + ~ZipFile() throw(); + + /** + Contains information about one of the entries in a ZipFile. + + @see ZipFile::getEntry + */ + struct ZipEntry + { + /** The name of the file, which may also include a partial pathname. */ + String filename; + + /** The file's original size. */ + unsigned int uncompressedSize; + + /** The last time the file was modified. */ + Time fileTime; + }; + + /** Returns the number of items in the zip file. */ + int getNumEntries() const throw(); + + /** Returns a structure that describes one of the entries in the zip file. + + This may return zero if the index is out of range. + + @see ZipFile::ZipEntry + */ + const ZipEntry* getEntry (const int index) const throw(); + + /** Returns the index of the first entry with a given filename. + + This uses a case-sensitive comparison to look for a filename in the + list of entries. It might return -1 if no match is found. + + @see ZipFile::ZipEntry + */ + int getIndexOfFileName (const String& fileName) const throw(); + + /** Returns a structure that describes one of the entries in the zip file. + + This uses a case-sensitive comparison to look for a filename in the + list of entries. It might return 0 if no match is found. + + @see ZipFile::ZipEntry + */ + const ZipEntry* getEntry (const String& fileName) const throw(); + + /** Sorts the list of entries, based on the filename. + */ + void sortEntriesByFilename(); + + /** Creates a stream that can read from one of the zip file's entries. + + The stream that is returned must be deleted by the caller (and + zero might be returned if a stream can't be opened for some reason). + + The stream must not be used after the ZipFile object that created + has been deleted. + */ + InputStream* createStreamForEntry (const int index); + + /** Uncompresses all of the files in the zip file. + + This will expand all the entires into a target directory. The relative + paths of the entries are used. + + @param targetDirectory the root folder to uncompress to + @param shouldOverwriteFiles whether to overwrite existing files with similarly-named ones + */ + void uncompressTo (const File& targetDirectory, + const bool shouldOverwriteFiles = true); + + juce_UseDebuggingNewOperator + +private: + VoidArray entries; + friend class ZipInputStream; + CriticalSection lock; + InputStream* inputStream; + InputSource* inputSource; + + bool deleteStreamWhenDestroyed; + int numEntries, centralRecStart; + +#ifdef JUCE_DEBUG + int numOpenStreams; +#endif + + void init(); + int findEndOfZipEntryTable (InputStream* in); + + ZipFile (const ZipFile&); + const ZipFile& operator= (const ZipFile&); +}; + +#endif // __JUCE_ZIPFILE_JUCEHEADER__ +/********* End of inlined file: juce_ZipFile.h *********/ + #endif #ifndef __JUCE_BLOWFISH_JUCEHEADER__ @@ -12867,52 +13481,6 @@ private: #ifndef __JUCE_FILEINPUTSOURCE_JUCEHEADER__ #define __JUCE_FILEINPUTSOURCE_JUCEHEADER__ -/********* Start of inlined file: juce_InputSource.h *********/ -#ifndef __JUCE_INPUTSOURCE_JUCEHEADER__ -#define __JUCE_INPUTSOURCE_JUCEHEADER__ - -/** - A lightweight object that can create a stream to read some kind of resource. - - This may be used to refer to a file, or some other kind of source, allowing a - caller to create an input stream that can read from it when required. - - @see FileInputSource -*/ -class JUCE_API InputSource -{ -public: - - InputSource() throw() {} - - /** Destructor. */ - virtual ~InputSource() {} - - /** Returns a new InputStream to read this item. - - @returns an inputstream that the caller will delete, or 0 if - the filename isn't found. - */ - virtual InputStream* createInputStream() = 0; - - /** Returns a new InputStream to read an item, relative. - - @param relatedItemPath the relative pathname of the resource that is required - @returns an inputstream that the caller will delete, or 0 if - the item isn't found. - */ - virtual InputStream* createInputStreamFor (const String& relatedItemPath) = 0; - - /** Returns a hash code that uniquely represents this item. - */ - virtual int64 hashCode() const = 0; - - juce_UseDebuggingNewOperator -}; - -#endif // __JUCE_INPUTSOURCE_JUCEHEADER__ -/********* End of inlined file: juce_InputSource.h *********/ - /** A type of InputSource that represents a normal file. @@ -13249,578 +13817,10 @@ private: /********* End of inlined file: juce_SubregionStream.h *********/ #endif -#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ - -/********* Start of inlined file: juce_PerformanceCounter.h *********/ -#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ -#define __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ - -/** A timer for measuring performance of code and dumping the results to a file. - - e.g. @code - - PerformanceCounter pc ("fish", 50, "/temp/myfishlog.txt"); - - for (;;) - { - pc.start(); - - doSomethingFishy(); - - pc.stop(); - } - @endcode - - In this example, the time of each period between calling start/stop will be - measured and averaged over 50 runs, and the results printed to a file - every 50 times round the loop. -*/ -class JUCE_API PerformanceCounter -{ -public: - - /** Creates a PerformanceCounter object. - - @param counterName the name used when printing out the statistics - @param runsPerPrintout the number of start/stop iterations before calling - printStatistics() - @param loggingFile a file to dump the results to - if this is File::nonexistent, - the results are just written to the debugger output - */ - PerformanceCounter (const String& counterName, - int runsPerPrintout = 100, - const File& loggingFile = File::nonexistent); - - /** Destructor. */ - ~PerformanceCounter(); - - /** Starts timing. - - @see stop - */ - void start(); - - /** Stops timing and prints out the results. - - The number of iterations before doing a printout of the - results is set in the constructor. - - @see start - */ - void stop(); - - /** Dumps the current metrics to the debugger output and to a file. - - As well as using Logger::outputDebugString to print the results, - this will write then to the file specified in the constructor (if - this was valid). - */ - void printStatistics(); - - juce_UseDebuggingNewOperator - -private: - - String name; - int numRuns, runsPerPrint; - double totalTime; - int64 started; - File outputFile; -}; - -#endif // __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ -/********* End of inlined file: juce_PerformanceCounter.h *********/ +#ifndef __JUCE_INPUTSTREAM_JUCEHEADER__ #endif -#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ - -/********* Start of inlined file: juce_PlatformUtilities.h *********/ -#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ -#define __JUCE_PLATFORMUTILITIES_JUCEHEADER__ - -/** - A collection of miscellaneous platform-specific utilities. - -*/ -class JUCE_API PlatformUtilities -{ -public: - - /** Plays the operating system's default alert 'beep' sound. */ - static void beep(); - - static bool launchEmailWithAttachments (const String& targetEmailAddress, - const String& emailSubject, - const String& bodyText, - const StringArray& filesToAttach); - -#if JUCE_MAC || DOXYGEN - - /** MAC ONLY - Turns a Core CF String into a juce one. */ - static const String cfStringToJuceString (CFStringRef cfString); - - /** MAC ONLY - Turns a juce string into a Core CF one. */ - static CFStringRef juceStringToCFString (const String& s); - - /** MAC ONLY - Turns a file path into an FSRef, returning true if it succeeds. */ - static bool makeFSRefFromPath (FSRef* destFSRef, const String& path); - - /** MAC ONLY - Turns an FSRef into a juce string path. */ - static const String makePathFromFSRef (FSRef* file); - - /** MAC ONLY - Converts any decomposed unicode characters in a string into - their precomposed equivalents. - */ - static const String convertToPrecomposedUnicode (const String& s); - - /** MAC ONLY - Gets the type of a file from the file's resources. */ - static OSType getTypeOfFile (const String& filename); - - /** MAC ONLY - Returns true if this file is actually a bundle. */ - static bool isBundle (const String& filename); - - /** MAC ONLY - Adds an item to the dock */ - static void addItemToDock (const File& file); -#endif - -#if JUCE_WIN32 || DOXYGEN - - // Some registry helper functions: - - /** WIN32 ONLY - Returns a string from the registry. - - The path is a string for the entire path of a value in the registry, - e.g. "HKEY_CURRENT_USER\Software\foo\bar" - */ - static const String getRegistryValue (const String& regValuePath, - const String& defaultValue = String::empty); - - /** WIN32 ONLY - Sets a registry value as a string. - - This will take care of creating any groups needed to get to the given - registry value. - */ - static void setRegistryValue (const String& regValuePath, - const String& value); - - /** WIN32 ONLY - Returns true if the given value exists in the registry. */ - static bool registryValueExists (const String& regValuePath); - - /** WIN32 ONLY - Deletes a registry value. */ - static void deleteRegistryValue (const String& regValuePath); - - /** WIN32 ONLY - Deletes a registry key (which is registry-talk for 'folder'). */ - static void deleteRegistryKey (const String& regKeyPath); - - /** WIN32 ONLY - Creates a file association in the registry. - - This lets you set the exe that should be launched by a given file extension. - @param fileExtension the file extension to associate, including the - initial dot, e.g. ".txt" - @param symbolicDescription a space-free short token to identify the file type - @param fullDescription a human-readable description of the file type - @param targetExecutable the executable that should be launched - @param iconResourceNumber the icon that gets displayed for the file type will be - found by looking up this resource number in the - executable. Pass 0 here to not use an icon - */ - static void registerFileAssociation (const String& fileExtension, - const String& symbolicDescription, - const String& fullDescription, - const File& targetExecutable, - int iconResourceNumber); - - /** WIN32 ONLY - This returns the HINSTANCE of the current module. - - In a normal Juce application this will be set to the module handle - of the application executable. - - If you're writing a DLL using Juce and plan to use any Juce messaging or - windows, you'll need to make sure you use the setCurrentModuleInstanceHandle() - to set the correct module handle in your DllMain() function, because - the win32 system relies on the correct instance handle when opening windows. - */ - static void* JUCE_CALLTYPE getCurrentModuleInstanceHandle() throw(); - - /** WIN32 ONLY - Sets a new module handle to be used by the library. - - @see getCurrentModuleInstanceHandle() - */ - static void JUCE_CALLTYPE setCurrentModuleInstanceHandle (void* newHandle) throw(); - - /** WIN32 ONLY - Gets the command-line params as a string. - - This is needed to avoid unicode problems with the argc type params. - */ - static const String JUCE_CALLTYPE getCurrentCommandLineParams() throw(); -#endif - - /** Clears the floating point unit's flags. - - Only has an effect under win32, currently. - */ - static void fpuReset(); - -#if JUCE_LINUX || JUCE_WIN32 - - /** Loads a dynamically-linked library into the process's address space. - - @param pathOrFilename the platform-dependent name and search path - @returns a handle which can be used by getProcedureEntryPoint(), or - zero if it fails. - @see freeDynamicLibrary, getProcedureEntryPoint - */ - static void* loadDynamicLibrary (const String& pathOrFilename); - - /** Frees a dynamically-linked library. - - @param libraryHandle a handle created by loadDynamicLibrary - @see loadDynamicLibrary, getProcedureEntryPoint - */ - static void freeDynamicLibrary (void* libraryHandle); - - /** Finds a procedure call in a dynamically-linked library. - - @param libraryHandle a library handle returned by loadDynamicLibrary - @param procedureName the name of the procedure call to try to load - @returns a pointer to the function if found, or 0 if it fails - @see loadDynamicLibrary - */ - static void* getProcedureEntryPoint (void* libraryHandle, - const String& procedureName); -#endif - -#if JUCE_LINUX || DOXYGEN - -#endif -}; - -#if JUCE_MAC - -/** A handy C++ wrapper that creates and deletes an NSAutoreleasePool object - using RAII. -*/ -class ScopedAutoReleasePool -{ -public: - ScopedAutoReleasePool(); - ~ScopedAutoReleasePool(); - -private: - void* pool; -}; - -/** - A wrapper class for picking up events from an Apple IR remote control device. - - To use it, just create a subclass of this class, implementing the buttonPressed() - callback, then call start() and stop() to start or stop receiving events. -*/ -class JUCE_API AppleRemoteDevice -{ -public: - - AppleRemoteDevice(); - virtual ~AppleRemoteDevice(); - - /** The set of buttons that may be pressed. - @see buttonPressed - */ - enum ButtonType - { - menuButton = 0, /**< The menu button (if it's held for a short time). */ - playButton, /**< The play button. */ - plusButton, /**< The plus or volume-up button. */ - minusButton, /**< The minus or volume-down button. */ - rightButton, /**< The right button (if it's held for a short time). */ - leftButton, /**< The left button (if it's held for a short time). */ - rightButton_Long, /**< The right button (if it's held for a long time). */ - leftButton_Long, /**< The menu button (if it's held for a long time). */ - menuButton_Long, /**< The menu button (if it's held for a long time). */ - playButtonSleepMode, - switched - }; - - /** Override this method to receive the callback about a button press. - - The callback will happen on the application's message thread. - - Some buttons trigger matching up and down events, in which the isDown parameter - will be true and then false. Others only send a single event when the - button is pressed. - */ - virtual void buttonPressed (const ButtonType buttonId, const bool isDown) = 0; - - /** Starts the device running and responding to events. - - Returns true if it managed to open the device. - - @param inExclusiveMode if true, the remote will be grabbed exclusively for this app, - and will not be available to any other part of the system. If - false, it will be shared with other apps. - @see stop - */ - bool start (const bool inExclusiveMode) throw(); - - /** Stops the device running. - @see start - */ - void stop() throw(); - - /** Returns true if the device has been started successfully. - */ - bool isActive() const throw(); - - /** Returns the ID number of the remote, if it has sent one. - */ - int getRemoteId() const throw() { return remoteId; } - - juce_UseDebuggingNewOperator - - /** @internal */ - void handleCallbackInternal(); - -private: - void* device; - void* queue; - int remoteId; - - bool open (const bool openInExclusiveMode) throw(); -}; - -#endif - -#endif // __JUCE_PLATFORMUTILITIES_JUCEHEADER__ -/********* End of inlined file: juce_PlatformUtilities.h *********/ - -#endif -#ifndef __JUCE_UUID_JUCEHEADER__ - -/********* Start of inlined file: juce_Uuid.h *********/ -#ifndef __JUCE_UUID_JUCEHEADER__ -#define __JUCE_UUID_JUCEHEADER__ - -/** - A universally unique 128-bit identifier. - - This class generates very random unique numbers based on the system time - and MAC addresses if any are available. It's extremely unlikely that two identical - UUIDs would ever be created by chance. - - The class includes methods for saving the ID as a string or as raw binary data. -*/ -class JUCE_API Uuid -{ -public: - - /** Creates a new unique ID. */ - Uuid(); - - /** Destructor. */ - ~Uuid() throw(); - - /** Creates a copy of another UUID. */ - Uuid (const Uuid& other); - - /** Copies another UUID. */ - Uuid& operator= (const Uuid& other); - - /** Returns true if the ID is zero. */ - bool isNull() const throw(); - - /** Compares two UUIDs. */ - bool operator== (const Uuid& other) const; - - /** Compares two UUIDs. */ - bool operator!= (const Uuid& other) const; - - /** Returns a stringified version of this UUID. - - A Uuid object can later be reconstructed from this string using operator= or - the constructor that takes a string parameter. - - @returns a 32 character hex string. - */ - const String toString() const; - - /** Creates an ID from an encoded string version. - - @see toString - */ - Uuid (const String& uuidString); - - /** Copies from a stringified UUID. - - The string passed in should be one that was created with the toString() method. - */ - Uuid& operator= (const String& uuidString); - - /** Returns a pointer to the internal binary representation of the ID. - - This is an array of 16 bytes. To reconstruct a Uuid from its data, use - the constructor or operator= method that takes an array of uint8s. - */ - const uint8* getRawData() const throw() { return value.asBytes; } - - /** Creates a UUID from a 16-byte array. - - @see getRawData - */ - Uuid (const uint8* const rawData); - - /** Sets this UUID from 16-bytes of raw data. */ - Uuid& operator= (const uint8* const rawData); - - juce_UseDebuggingNewOperator - -private: - union - { - uint8 asBytes [16]; - int asInt[4]; - int64 asInt64[2]; - - } value; -}; - -#endif // __JUCE_UUID_JUCEHEADER__ -/********* End of inlined file: juce_Uuid.h *********/ - -#endif -#ifndef __JUCE_ZIPFILE_JUCEHEADER__ - -/********* Start of inlined file: juce_ZipFile.h *********/ -#ifndef __JUCE_ZIPFILE_JUCEHEADER__ -#define __JUCE_ZIPFILE_JUCEHEADER__ - -/** - Decodes a ZIP file from a stream. - - This can enumerate the items in a ZIP file and can create suitable stream objects - to read each one. -*/ -class JUCE_API ZipFile -{ -public: - - /** Creates a ZipFile for a given stream. - - @param inputStream the stream to read from - @param deleteStreamWhenDestroyed if set to true, the object passed-in - will be deleted when this ZipFile object is deleted - */ - ZipFile (InputStream* const inputStream, - const bool deleteStreamWhenDestroyed) throw(); - - /** Creates a ZipFile based for a file. */ - ZipFile (const File& file); - - /** Creates a ZipFile for an input source. - - The inputSource object will be owned by the zip file, which will delete - it later when not needed. - */ - ZipFile (InputSource* const inputSource); - - /** Destructor. */ - ~ZipFile() throw(); - - /** - Contains information about one of the entries in a ZipFile. - - @see ZipFile::getEntry - */ - struct ZipEntry - { - /** The name of the file, which may also include a partial pathname. */ - String filename; - - /** The file's original size. */ - unsigned int uncompressedSize; - - /** The last time the file was modified. */ - Time fileTime; - }; - - /** Returns the number of items in the zip file. */ - int getNumEntries() const throw(); - - /** Returns a structure that describes one of the entries in the zip file. - - This may return zero if the index is out of range. - - @see ZipFile::ZipEntry - */ - const ZipEntry* getEntry (const int index) const throw(); - - /** Returns the index of the first entry with a given filename. - - This uses a case-sensitive comparison to look for a filename in the - list of entries. It might return -1 if no match is found. - - @see ZipFile::ZipEntry - */ - int getIndexOfFileName (const String& fileName) const throw(); - - /** Returns a structure that describes one of the entries in the zip file. - - This uses a case-sensitive comparison to look for a filename in the - list of entries. It might return 0 if no match is found. - - @see ZipFile::ZipEntry - */ - const ZipEntry* getEntry (const String& fileName) const throw(); - - /** Sorts the list of entries, based on the filename. - */ - void sortEntriesByFilename(); - - /** Creates a stream that can read from one of the zip file's entries. - - The stream that is returned must be deleted by the caller (and - zero might be returned if a stream can't be opened for some reason). - - The stream must not be used after the ZipFile object that created - has been deleted. - */ - InputStream* createStreamForEntry (const int index); - - /** Uncompresses all of the files in the zip file. - - This will expand all the entires into a target directory. The relative - paths of the entries are used. - - @param targetDirectory the root folder to uncompress to - @param shouldOverwriteFiles whether to overwrite existing files with similarly-named ones - */ - void uncompressTo (const File& targetDirectory, - const bool shouldOverwriteFiles = true); - - juce_UseDebuggingNewOperator - -private: - VoidArray entries; - friend class ZipInputStream; - CriticalSection lock; - InputStream* inputStream; - InputSource* inputSource; - - bool deleteStreamWhenDestroyed; - int numEntries, centralRecStart; - -#ifdef JUCE_DEBUG - int numOpenStreams; -#endif - - void init(); - int findEndOfZipEntryTable (InputStream* in); - - ZipFile (const ZipFile&); - const ZipFile& operator= (const ZipFile&); -}; - -#endif // __JUCE_ZIPFILE_JUCEHEADER__ -/********* End of inlined file: juce_ZipFile.h *********/ +#ifndef __JUCE_OUTPUTSTREAM_JUCEHEADER__ #endif #ifndef __JUCE_CHARACTERFUNCTIONS_JUCEHEADER__ @@ -18930,7 +18930,7 @@ public: /** Creates a colour from a 32-bit ARGB value. The format of this number is: - ((alpha << 24) | (red << 16) | (green << 16) | blue). + ((alpha << 24) | (red << 16) | (green << 8) | blue). All components in the range 0x00 to 0xff. An alpha of 0x00 is completely transparent, alpha of 0xff is opaque. @@ -25107,39 +25107,6 @@ private: #endif // __JUCE_APPLICATIONPROPERTIES_JUCEHEADER__ /********* End of inlined file: juce_ApplicationProperties.h *********/ -#endif -#ifndef __JUCE_DELETEDATSHUTDOWN_JUCEHEADER__ - -#endif -#ifndef __JUCE_PROPERTIESFILE_JUCEHEADER__ - -#endif -#ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ - -/********* Start of inlined file: juce_SystemClipboard.h *********/ -#ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ -#define __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ - -/** - Handles reading/writing to the system's clipboard. -*/ -class JUCE_API SystemClipboard -{ -public: - /** Copies a string of text onto the clipboard */ - static void copyTextToClipboard (const String& text) throw(); - - /** Gets the current clipboard's contents. - - Obviously this might have come from another app, so could contain - anything.. - */ - static const String getTextFromClipboard() throw(); -}; - -#endif // __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ -/********* End of inlined file: juce_SystemClipboard.h *********/ - #endif #ifndef __JUCE_MIDIBUFFER_JUCEHEADER__ @@ -39127,9 +39094,6 @@ private: #endif #ifndef __JUCE_SOLIDCOLOURBRUSH_JUCEHEADER__ -#endif -#ifndef __JUCE_COLOUR_JUCEHEADER__ - #endif #ifndef __JUCE_COLOURGRADIENT_JUCEHEADER__ @@ -39139,6 +39103,9 @@ private: #endif #ifndef __JUCE_PIXELFORMATS_JUCEHEADER__ +#endif +#ifndef __JUCE_COLOUR_JUCEHEADER__ + #endif #ifndef __JUCE_FONT_JUCEHEADER__ @@ -54448,6 +54415,178 @@ private: #endif // __JUCE_OLDSCHOOLLOOKANDFEEL_JUCEHEADER__ /********* End of inlined file: juce_OldSchoolLookAndFeel.h *********/ +#endif +#ifndef __JUCE_UNDOMANAGER_JUCEHEADER__ + +#endif +#ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ + +/********* Start of inlined file: juce_SystemClipboard.h *********/ +#ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ +#define __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ + +/** + Handles reading/writing to the system's clipboard. +*/ +class JUCE_API SystemClipboard +{ +public: + /** Copies a string of text onto the clipboard */ + static void copyTextToClipboard (const String& text) throw(); + + /** Gets the current clipboard's contents. + + Obviously this might have come from another app, so could contain + anything.. + */ + static const String getTextFromClipboard() throw(); +}; + +#endif // __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ +/********* End of inlined file: juce_SystemClipboard.h *********/ + +#endif +#ifndef __JUCE_PROPERTIESFILE_JUCEHEADER__ + +#endif +#ifndef __JUCE_UNDOABLEACTION_JUCEHEADER__ + +#endif +#ifndef __JUCE_SELECTEDITEMSET_JUCEHEADER__ + +#endif +#ifndef __JUCE_DELETEDATSHUTDOWN_JUCEHEADER__ + +#endif +#ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ + +/********* Start of inlined file: juce_RecentlyOpenedFilesList.h *********/ +#ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ +#define __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ + +/** + Manages a set of files for use as a list of recently-opened documents. + + This is a handy class for holding your list of recently-opened documents, with + helpful methods for things like purging any non-existent files, automatically + adding them to a menu, and making persistence easy. + + @see File, FileBasedDocument +*/ +class JUCE_API RecentlyOpenedFilesList +{ +public: + + /** Creates an empty list. + */ + RecentlyOpenedFilesList(); + + /** Destructor. */ + ~RecentlyOpenedFilesList(); + + /** Sets a limit for the number of files that will be stored in the list. + + When addFile() is called, then if there is no more space in the list, the + least-recently added file will be dropped. + + @see getMaxNumberOfItems + */ + void setMaxNumberOfItems (const int newMaxNumber); + + /** Returns the number of items that this list will store. + @see setMaxNumberOfItems + */ + int getMaxNumberOfItems() const throw() { return maxNumberOfItems; } + + /** Returns the number of files in the list. + + The most recently added file is always at index 0. + */ + int getNumFiles() const; + + /** Returns one of the files in the list. + + The most recently added file is always at index 0. + */ + const File getFile (const int index) const; + + /** Returns an array of all the absolute pathnames in the list. + */ + const StringArray& getAllFilenames() const throw() { return files; } + + /** Clears all the files from the list. */ + void clear(); + + /** Adds a file to the list. + + The file will be added at index 0. If this file is already in the list, it will + be moved up to index 0, but a file can only appear once in the list. + + If the list already contains the maximum number of items that is permitted, the + least-recently added file will be dropped from the end. + */ + void addFile (const File& file); + + /** Checks each of the files in the list, removing any that don't exist. + + You might want to call this after reloading a list of files, or before putting them + on a menu. + */ + void removeNonExistentFiles(); + + /** Adds entries to a menu, representing each of the files in the list. + + This is handy for creating an "open recent file..." menu in your app. The + menu items are numbered consecutively starting with the baseItemId value, + and can either be added as complete pathnames, or just the last part of the + filename. + + If dontAddNonExistentFiles is true, then each file will be checked and only those + that exist will be added. + + If filesToAvoid is non-zero, then it is considered to be a zero-terminated array of + pointers to file objects. Any files that appear in this list will not be added to the + menu - the reason for this is that you might have a number of files already open, so + might not want these to be shown in the menu. + + It returns the number of items that were added. + */ + int createPopupMenuItems (PopupMenu& menuToAddItemsTo, + const int baseItemId, + const bool showFullPaths, + const bool dontAddNonExistentFiles, + const File** filesToAvoid = 0); + + /** Returns a string that encapsulates all the files in the list. + + The string that is returned can later be passed into restoreFromString() in + order to recreate the list. This is handy for persisting your list, e.g. in + a PropertiesFile object. + + @see restoreFromString + */ + const String toString() const; + + /** Restores the list from a previously stringified version of the list. + + Pass in a stringified version created with toString() in order to persist/restore + your list. + + @see toString + */ + void restoreFromString (const String& stringifiedVersion); + + juce_UseDebuggingNewOperator + +private: + + StringArray files; + int maxNumberOfItems; +}; + +#endif // __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ +/********* End of inlined file: juce_RecentlyOpenedFilesList.h *********/ + #endif #ifndef __JUCE_FILEBASEDDOCUMENT_JUCEHEADER__ @@ -54714,145 +54853,6 @@ private: #endif // __JUCE_FILEBASEDDOCUMENT_JUCEHEADER__ /********* End of inlined file: juce_FileBasedDocument.h *********/ -#endif -#ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ - -/********* Start of inlined file: juce_RecentlyOpenedFilesList.h *********/ -#ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ -#define __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ - -/** - Manages a set of files for use as a list of recently-opened documents. - - This is a handy class for holding your list of recently-opened documents, with - helpful methods for things like purging any non-existent files, automatically - adding them to a menu, and making persistence easy. - - @see File, FileBasedDocument -*/ -class JUCE_API RecentlyOpenedFilesList -{ -public: - - /** Creates an empty list. - */ - RecentlyOpenedFilesList(); - - /** Destructor. */ - ~RecentlyOpenedFilesList(); - - /** Sets a limit for the number of files that will be stored in the list. - - When addFile() is called, then if there is no more space in the list, the - least-recently added file will be dropped. - - @see getMaxNumberOfItems - */ - void setMaxNumberOfItems (const int newMaxNumber); - - /** Returns the number of items that this list will store. - @see setMaxNumberOfItems - */ - int getMaxNumberOfItems() const throw() { return maxNumberOfItems; } - - /** Returns the number of files in the list. - - The most recently added file is always at index 0. - */ - int getNumFiles() const; - - /** Returns one of the files in the list. - - The most recently added file is always at index 0. - */ - const File getFile (const int index) const; - - /** Returns an array of all the absolute pathnames in the list. - */ - const StringArray& getAllFilenames() const throw() { return files; } - - /** Clears all the files from the list. */ - void clear(); - - /** Adds a file to the list. - - The file will be added at index 0. If this file is already in the list, it will - be moved up to index 0, but a file can only appear once in the list. - - If the list already contains the maximum number of items that is permitted, the - least-recently added file will be dropped from the end. - */ - void addFile (const File& file); - - /** Checks each of the files in the list, removing any that don't exist. - - You might want to call this after reloading a list of files, or before putting them - on a menu. - */ - void removeNonExistentFiles(); - - /** Adds entries to a menu, representing each of the files in the list. - - This is handy for creating an "open recent file..." menu in your app. The - menu items are numbered consecutively starting with the baseItemId value, - and can either be added as complete pathnames, or just the last part of the - filename. - - If dontAddNonExistentFiles is true, then each file will be checked and only those - that exist will be added. - - If filesToAvoid is non-zero, then it is considered to be a zero-terminated array of - pointers to file objects. Any files that appear in this list will not be added to the - menu - the reason for this is that you might have a number of files already open, so - might not want these to be shown in the menu. - - It returns the number of items that were added. - */ - int createPopupMenuItems (PopupMenu& menuToAddItemsTo, - const int baseItemId, - const bool showFullPaths, - const bool dontAddNonExistentFiles, - const File** filesToAvoid = 0); - - /** Returns a string that encapsulates all the files in the list. - - The string that is returned can later be passed into restoreFromString() in - order to recreate the list. This is handy for persisting your list, e.g. in - a PropertiesFile object. - - @see restoreFromString - */ - const String toString() const; - - /** Restores the list from a previously stringified version of the list. - - Pass in a stringified version created with toString() in order to persist/restore - your list. - - @see toString - */ - void restoreFromString (const String& stringifiedVersion); - - juce_UseDebuggingNewOperator - -private: - - StringArray files; - int maxNumberOfItems; -}; - -#endif // __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ -/********* End of inlined file: juce_RecentlyOpenedFilesList.h *********/ - -#endif -#ifndef __JUCE_SELECTEDITEMSET_JUCEHEADER__ - -#endif -#ifndef __JUCE_UNDOABLEACTION_JUCEHEADER__ - -#endif -#ifndef __JUCE_UNDOMANAGER_JUCEHEADER__ - #endif #endif diff --git a/src/juce_appframework/application/juce_Application.cpp b/src/application/juce_Application.cpp similarity index 92% rename from src/juce_appframework/application/juce_Application.cpp rename to src/application/juce_Application.cpp index c1771b4f14..5e832a6417 100644 --- a/src/juce_appframework/application/juce_Application.cpp +++ b/src/application/juce_Application.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" #if JUCE_MSVC #pragma warning (push) @@ -35,17 +35,17 @@ BEGIN_JUCE_NAMESPACE #include "juce_Application.h" -#include "juce_DeletedAtShutdown.h" +#include "../utilities/juce_DeletedAtShutdown.h" #include "../events/juce_MessageManager.h" #include "../gui/graphics/contexts/juce_Graphics.h" #include "../gui/components/windows/juce_AlertWindow.h" #include "../gui/components/buttons/juce_TextButton.h" #include "../gui/components/lookandfeel/juce_LookAndFeel.h" -#include "../../juce_core/basics/juce_Time.h" -#include "../../juce_core/basics/juce_Initialisation.h" -#include "../../juce_core/threads/juce_Process.h" -#include "../../juce_core/threads/juce_InterProcessLock.h" -#include "../../juce_core/misc/juce_PlatformUtilities.h" +#include "../core/juce_Time.h" +#include "../core/juce_Initialisation.h" +#include "../threads/juce_Process.h" +#include "../threads/juce_InterProcessLock.h" +#include "../core/juce_PlatformUtilities.h" void juce_setCurrentThreadName (const String& name) throw(); diff --git a/src/juce_appframework/application/juce_Application.h b/src/application/juce_Application.h similarity index 100% rename from src/juce_appframework/application/juce_Application.h rename to src/application/juce_Application.h diff --git a/src/juce_appframework/application/juce_ApplicationCommandID.h b/src/application/juce_ApplicationCommandID.h similarity index 100% rename from src/juce_appframework/application/juce_ApplicationCommandID.h rename to src/application/juce_ApplicationCommandID.h diff --git a/src/juce_appframework/application/juce_ApplicationCommandInfo.cpp b/src/application/juce_ApplicationCommandInfo.cpp similarity index 94% rename from src/juce_appframework/application/juce_ApplicationCommandInfo.cpp rename to src/application/juce_ApplicationCommandInfo.cpp index 453f3ccddc..6f5b50167b 100644 --- a/src/juce_appframework/application/juce_ApplicationCommandInfo.cpp +++ b/src/application/juce_ApplicationCommandInfo.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/application/juce_ApplicationCommandInfo.h b/src/application/juce_ApplicationCommandInfo.h similarity index 96% rename from src/juce_appframework/application/juce_ApplicationCommandInfo.h rename to src/application/juce_ApplicationCommandInfo.h index a6c23a055a..84751ee058 100644 --- a/src/juce_appframework/application/juce_ApplicationCommandInfo.h +++ b/src/application/juce_ApplicationCommandInfo.h @@ -26,8 +26,8 @@ #ifndef __JUCE_APPLICATIONCOMMANDINFO_JUCEHEADER__ #define __JUCE_APPLICATIONCOMMANDINFO_JUCEHEADER__ -#include "../../juce_core/text/juce_String.h" -#include "../../juce_core/containers/juce_Array.h" +#include "../text/juce_String.h" +#include "../containers/juce_Array.h" #include "../gui/components/keyboard/juce_KeyPress.h" #include "juce_ApplicationCommandID.h" diff --git a/src/juce_appframework/application/juce_ApplicationCommandManager.cpp b/src/application/juce_ApplicationCommandManager.cpp similarity index 96% rename from src/juce_appframework/application/juce_ApplicationCommandManager.cpp rename to src/application/juce_ApplicationCommandManager.cpp index 9f539d6cb6..ba5102c53f 100644 --- a/src/juce_appframework/application/juce_ApplicationCommandManager.cpp +++ b/src/application/juce_ApplicationCommandManager.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -33,7 +33,7 @@ BEGIN_JUCE_NAMESPACE #include "../gui/components/windows/juce_ResizableWindow.h" #include "../gui/components/juce_Desktop.h" #include "../events/juce_MessageManager.h" -#include "../../juce_core/threads/juce_Process.h" +#include "../threads/juce_Process.h" //============================================================================== diff --git a/src/juce_appframework/application/juce_ApplicationCommandManager.h b/src/application/juce_ApplicationCommandManager.h similarity index 97% rename from src/juce_appframework/application/juce_ApplicationCommandManager.h rename to src/application/juce_ApplicationCommandManager.h index 08d052cd31..c5e63898e5 100644 --- a/src/juce_appframework/application/juce_ApplicationCommandManager.h +++ b/src/application/juce_ApplicationCommandManager.h @@ -29,7 +29,7 @@ #include "juce_ApplicationCommandTarget.h" #include "../events/juce_AsyncUpdater.h" #include "../gui/components/juce_Desktop.h" -#include "../../juce_core/containers/juce_SortedSet.h" +#include "../containers/juce_SortedSet.h" class KeyPressMappingSet; class ApplicationCommandManagerListener; diff --git a/src/juce_appframework/application/juce_ApplicationCommandTarget.cpp b/src/application/juce_ApplicationCommandTarget.cpp similarity index 95% rename from src/juce_appframework/application/juce_ApplicationCommandTarget.cpp rename to src/application/juce_ApplicationCommandTarget.cpp index 5855699cde..cc3b47fe15 100644 --- a/src/juce_appframework/application/juce_ApplicationCommandTarget.cpp +++ b/src/application/juce_ApplicationCommandTarget.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/application/juce_ApplicationCommandTarget.h b/src/application/juce_ApplicationCommandTarget.h similarity index 100% rename from src/juce_appframework/application/juce_ApplicationCommandTarget.h rename to src/application/juce_ApplicationCommandTarget.h diff --git a/src/juce_appframework/application/juce_ApplicationProperties.cpp b/src/application/juce_ApplicationProperties.cpp similarity index 95% rename from src/juce_appframework/application/juce_ApplicationProperties.cpp rename to src/application/juce_ApplicationProperties.cpp index cfdc4cc5b3..74d13c0af5 100644 --- a/src/juce_appframework/application/juce_ApplicationProperties.cpp +++ b/src/application/juce_ApplicationProperties.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ApplicationProperties.h" #include "../gui/components/windows/juce_AlertWindow.h" -#include "../../juce_core/text/juce_LocalisedStrings.h" +#include "../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/application/juce_ApplicationProperties.h b/src/application/juce_ApplicationProperties.h similarity index 95% rename from src/juce_appframework/application/juce_ApplicationProperties.h rename to src/application/juce_ApplicationProperties.h index b3fe0612ee..b17d859c94 100644 --- a/src/juce_appframework/application/juce_ApplicationProperties.h +++ b/src/application/juce_ApplicationProperties.h @@ -26,9 +26,9 @@ #ifndef __JUCE_APPLICATIONPROPERTIES_JUCEHEADER__ #define __JUCE_APPLICATIONPROPERTIES_JUCEHEADER__ -#include "juce_PropertiesFile.h" -#include "juce_DeletedAtShutdown.h" -#include "../../juce_core/basics/juce_Singleton.h" +#include "../utilities/juce_PropertiesFile.h" +#include "../utilities/juce_DeletedAtShutdown.h" +#include "../core/juce_Singleton.h" //============================================================================== diff --git a/src/juce_core/containers/juce_Array.h b/src/containers/juce_Array.h similarity index 100% rename from src/juce_core/containers/juce_Array.h rename to src/containers/juce_Array.h diff --git a/src/juce_core/containers/juce_ArrayAllocationBase.h b/src/containers/juce_ArrayAllocationBase.h similarity index 100% rename from src/juce_core/containers/juce_ArrayAllocationBase.h rename to src/containers/juce_ArrayAllocationBase.h diff --git a/src/juce_core/containers/juce_BitArray.cpp b/src/containers/juce_BitArray.cpp similarity index 95% rename from src/juce_core/containers/juce_BitArray.cpp rename to src/containers/juce_BitArray.cpp index 2febd08a48..5c7501529b 100644 --- a/src/juce_core/containers/juce_BitArray.cpp +++ b/src/containers/juce_BitArray.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_BitArray.h" #include "juce_MemoryBlock.h" -#include "../basics/juce_Random.h" +#include "../core/juce_Random.h" //============================================================================== diff --git a/src/juce_core/containers/juce_BitArray.h b/src/containers/juce_BitArray.h similarity index 100% rename from src/juce_core/containers/juce_BitArray.h rename to src/containers/juce_BitArray.h diff --git a/src/juce_core/containers/juce_ElementComparator.h b/src/containers/juce_ElementComparator.h similarity index 100% rename from src/juce_core/containers/juce_ElementComparator.h rename to src/containers/juce_ElementComparator.h diff --git a/src/juce_core/containers/juce_MemoryBlock.cpp b/src/containers/juce_MemoryBlock.cpp similarity index 95% rename from src/juce_core/containers/juce_MemoryBlock.cpp rename to src/containers/juce_MemoryBlock.cpp index 256336de0e..bbc178c21a 100644 --- a/src/juce_core/containers/juce_MemoryBlock.cpp +++ b/src/containers/juce_MemoryBlock.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/containers/juce_MemoryBlock.h b/src/containers/juce_MemoryBlock.h similarity index 100% rename from src/juce_core/containers/juce_MemoryBlock.h rename to src/containers/juce_MemoryBlock.h diff --git a/src/juce_core/containers/juce_OwnedArray.h b/src/containers/juce_OwnedArray.h similarity index 100% rename from src/juce_core/containers/juce_OwnedArray.h rename to src/containers/juce_OwnedArray.h diff --git a/src/juce_core/containers/juce_PropertySet.cpp b/src/containers/juce_PropertySet.cpp similarity index 96% rename from src/juce_core/containers/juce_PropertySet.cpp rename to src/containers/juce_PropertySet.cpp index cf48287f24..c84bb29699 100644 --- a/src/juce_core/containers/juce_PropertySet.cpp +++ b/src/containers/juce_PropertySet.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/containers/juce_PropertySet.h b/src/containers/juce_PropertySet.h similarity index 100% rename from src/juce_core/containers/juce_PropertySet.h rename to src/containers/juce_PropertySet.h diff --git a/src/juce_core/containers/juce_ReferenceCountedArray.h b/src/containers/juce_ReferenceCountedArray.h similarity index 96% rename from src/juce_core/containers/juce_ReferenceCountedArray.h rename to src/containers/juce_ReferenceCountedArray.h index c80290db9b..f69f5b2034 100644 --- a/src/juce_core/containers/juce_ReferenceCountedArray.h +++ b/src/containers/juce_ReferenceCountedArray.h @@ -66,10 +66,10 @@ public: /** Creates a copy of another array */ ReferenceCountedArray (const ReferenceCountedArray& other) throw() - : ArrayAllocationBase (other.granularity), - numUsed (other.numUsed) + : ArrayAllocationBase (other.granularity) { other.lockArray(); + numUsed = other.numUsed; this->setAllocatedSize (numUsed); memcpy (this->elements, other.elements, numUsed * sizeof (ObjectClass*)); diff --git a/src/juce_core/containers/juce_ReferenceCountedObject.h b/src/containers/juce_ReferenceCountedObject.h similarity index 96% rename from src/juce_core/containers/juce_ReferenceCountedObject.h rename to src/containers/juce_ReferenceCountedObject.h index d59aa02602..6adef6d768 100644 --- a/src/juce_core/containers/juce_ReferenceCountedObject.h +++ b/src/containers/juce_ReferenceCountedObject.h @@ -26,7 +26,7 @@ #ifndef __JUCE_REFERENCECOUNTEDOBJECT_JUCEHEADER__ #define __JUCE_REFERENCECOUNTEDOBJECT_JUCEHEADER__ -#include "../basics/juce_Atomic.h" +#include "../core/juce_Atomic.h" //============================================================================== diff --git a/src/juce_core/containers/juce_SortedSet.h b/src/containers/juce_SortedSet.h similarity index 100% rename from src/juce_core/containers/juce_SortedSet.h rename to src/containers/juce_SortedSet.h diff --git a/src/juce_core/containers/juce_SparseSet.h b/src/containers/juce_SparseSet.h similarity index 100% rename from src/juce_core/containers/juce_SparseSet.h rename to src/containers/juce_SparseSet.h diff --git a/src/juce_core/containers/juce_Variant.cpp b/src/containers/juce_Variant.cpp similarity index 95% rename from src/juce_core/containers/juce_Variant.cpp rename to src/containers/juce_Variant.cpp index 049424911c..08f30d93a6 100644 --- a/src/juce_core/containers/juce_Variant.cpp +++ b/src/containers/juce_Variant.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/containers/juce_Variant.h b/src/containers/juce_Variant.h similarity index 100% rename from src/juce_core/containers/juce_Variant.h rename to src/containers/juce_Variant.h diff --git a/src/juce_core/containers/juce_VoidArray.h b/src/containers/juce_VoidArray.h similarity index 100% rename from src/juce_core/containers/juce_VoidArray.h rename to src/containers/juce_VoidArray.h diff --git a/src/juce_core/cryptography/juce_BlowFish.cpp b/src/cryptography/juce_BlowFish.cpp similarity index 97% rename from src/juce_core/cryptography/juce_BlowFish.cpp rename to src/cryptography/juce_BlowFish.cpp index 335439a8ac..f5ba6ef7b5 100644 --- a/src/juce_core/cryptography/juce_BlowFish.cpp +++ b/src/cryptography/juce_BlowFish.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/cryptography/juce_BlowFish.h b/src/cryptography/juce_BlowFish.h similarity index 100% rename from src/juce_core/cryptography/juce_BlowFish.h rename to src/cryptography/juce_BlowFish.h diff --git a/src/juce_core/cryptography/juce_MD5.cpp b/src/cryptography/juce_MD5.cpp similarity index 96% rename from src/juce_core/cryptography/juce_MD5.cpp rename to src/cryptography/juce_MD5.cpp index e9b60881a2..03974529a2 100644 --- a/src/juce_core/cryptography/juce_MD5.cpp +++ b/src/cryptography/juce_MD5.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/cryptography/juce_MD5.h b/src/cryptography/juce_MD5.h similarity index 96% rename from src/juce_core/cryptography/juce_MD5.h rename to src/cryptography/juce_MD5.h index 373c3f7662..f15dfe7090 100644 --- a/src/juce_core/cryptography/juce_MD5.h +++ b/src/cryptography/juce_MD5.h @@ -27,7 +27,7 @@ #define __JUCE_MD5_JUCEHEADER__ #include "../containers/juce_MemoryBlock.h" -#include "../io/juce_InputStream.h" +#include "../io/streams/juce_InputStream.h" #include "../io/files/juce_File.h" diff --git a/src/juce_core/cryptography/juce_Primes.cpp b/src/cryptography/juce_Primes.cpp similarity index 95% rename from src/juce_core/cryptography/juce_Primes.cpp rename to src/cryptography/juce_Primes.cpp index a725c8ea99..4fb0647af3 100644 --- a/src/juce_core/cryptography/juce_Primes.cpp +++ b/src/cryptography/juce_Primes.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_Primes.h" -#include "../basics/juce_Random.h" +#include "../core/juce_Random.h" //============================================================================== diff --git a/src/juce_core/cryptography/juce_Primes.h b/src/cryptography/juce_Primes.h similarity index 100% rename from src/juce_core/cryptography/juce_Primes.h rename to src/cryptography/juce_Primes.h diff --git a/src/juce_core/cryptography/juce_RSAKey.cpp b/src/cryptography/juce_RSAKey.cpp similarity index 95% rename from src/juce_core/cryptography/juce_RSAKey.cpp rename to src/cryptography/juce_RSAKey.cpp index b7d5b6f441..67086187ef 100644 --- a/src/juce_core/cryptography/juce_RSAKey.cpp +++ b/src/cryptography/juce_RSAKey.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/cryptography/juce_RSAKey.h b/src/cryptography/juce_RSAKey.h similarity index 100% rename from src/juce_core/cryptography/juce_RSAKey.h rename to src/cryptography/juce_RSAKey.h diff --git a/src/juce_appframework/events/juce_ActionBroadcaster.cpp b/src/events/juce_ActionBroadcaster.cpp similarity index 94% rename from src/juce_appframework/events/juce_ActionBroadcaster.cpp rename to src/events/juce_ActionBroadcaster.cpp index 0736b8994f..1db5b71337 100644 --- a/src/juce_appframework/events/juce_ActionBroadcaster.cpp +++ b/src/events/juce_ActionBroadcaster.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_ActionBroadcaster.h b/src/events/juce_ActionBroadcaster.h similarity index 100% rename from src/juce_appframework/events/juce_ActionBroadcaster.h rename to src/events/juce_ActionBroadcaster.h diff --git a/src/juce_appframework/events/juce_ActionListener.h b/src/events/juce_ActionListener.h similarity index 95% rename from src/juce_appframework/events/juce_ActionListener.h rename to src/events/juce_ActionListener.h index 27d8be867d..98330b3fb8 100644 --- a/src/juce_appframework/events/juce_ActionListener.h +++ b/src/events/juce_ActionListener.h @@ -26,7 +26,7 @@ #ifndef __JUCE_ACTIONLISTENER_JUCEHEADER__ #define __JUCE_ACTIONLISTENER_JUCEHEADER__ -#include "../../juce_core/text/juce_String.h" +#include "../text/juce_String.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_ActionListenerList.cpp b/src/events/juce_ActionListenerList.cpp similarity index 93% rename from src/juce_appframework/events/juce_ActionListenerList.cpp rename to src/events/juce_ActionListenerList.cpp index a9befe23d6..4e221e0882 100644 --- a/src/juce_appframework/events/juce_ActionListenerList.cpp +++ b/src/events/juce_ActionListenerList.cpp @@ -23,12 +23,12 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ActionListenerList.h" -#include "../../juce_core/threads/juce_ScopedLock.h" +#include "../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_ActionListenerList.h b/src/events/juce_ActionListenerList.h similarity index 94% rename from src/juce_appframework/events/juce_ActionListenerList.h rename to src/events/juce_ActionListenerList.h index 72da5fe000..bbf49baceb 100644 --- a/src/juce_appframework/events/juce_ActionListenerList.h +++ b/src/events/juce_ActionListenerList.h @@ -28,8 +28,8 @@ #include "juce_ActionListener.h" #include "juce_MessageListener.h" -#include "../../juce_core/containers/juce_SortedSet.h" -#include "../../juce_core/threads/juce_CriticalSection.h" +#include "../containers/juce_SortedSet.h" +#include "../threads/juce_CriticalSection.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_AsyncUpdater.cpp b/src/events/juce_AsyncUpdater.cpp similarity index 93% rename from src/juce_appframework/events/juce_AsyncUpdater.cpp rename to src/events/juce_AsyncUpdater.cpp index 65b70a7a7d..e4c408e920 100644 --- a/src/juce_appframework/events/juce_AsyncUpdater.cpp +++ b/src/events/juce_AsyncUpdater.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_AsyncUpdater.h b/src/events/juce_AsyncUpdater.h similarity index 100% rename from src/juce_appframework/events/juce_AsyncUpdater.h rename to src/events/juce_AsyncUpdater.h diff --git a/src/juce_appframework/events/juce_CallbackMessage.h b/src/events/juce_CallbackMessage.h similarity index 100% rename from src/juce_appframework/events/juce_CallbackMessage.h rename to src/events/juce_CallbackMessage.h diff --git a/src/juce_appframework/events/juce_ChangeBroadcaster.cpp b/src/events/juce_ChangeBroadcaster.cpp similarity index 95% rename from src/juce_appframework/events/juce_ChangeBroadcaster.cpp rename to src/events/juce_ChangeBroadcaster.cpp index 2c8ad45faa..49fe7eceaf 100644 --- a/src/juce_appframework/events/juce_ChangeBroadcaster.cpp +++ b/src/events/juce_ChangeBroadcaster.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_ChangeBroadcaster.h b/src/events/juce_ChangeBroadcaster.h similarity index 100% rename from src/juce_appframework/events/juce_ChangeBroadcaster.h rename to src/events/juce_ChangeBroadcaster.h diff --git a/src/juce_appframework/events/juce_ChangeListener.h b/src/events/juce_ChangeListener.h similarity index 100% rename from src/juce_appframework/events/juce_ChangeListener.h rename to src/events/juce_ChangeListener.h diff --git a/src/juce_appframework/events/juce_ChangeListenerList.cpp b/src/events/juce_ChangeListenerList.cpp similarity index 94% rename from src/juce_appframework/events/juce_ChangeListenerList.cpp rename to src/events/juce_ChangeListenerList.cpp index e6dcbae64b..d18352ea29 100644 --- a/src/juce_appframework/events/juce_ChangeListenerList.cpp +++ b/src/events/juce_ChangeListenerList.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_ChangeListenerList.h b/src/events/juce_ChangeListenerList.h similarity index 95% rename from src/juce_appframework/events/juce_ChangeListenerList.h rename to src/events/juce_ChangeListenerList.h index 5dc17cd1ee..737df5b793 100644 --- a/src/juce_appframework/events/juce_ChangeListenerList.h +++ b/src/events/juce_ChangeListenerList.h @@ -28,8 +28,8 @@ #include "juce_ChangeListener.h" #include "juce_MessageListener.h" -#include "../../juce_core/containers/juce_SortedSet.h" -#include "../../juce_core/threads/juce_ScopedLock.h" +#include "../containers/juce_SortedSet.h" +#include "../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_InterprocessConnection.cpp b/src/events/juce_InterprocessConnection.cpp similarity index 95% rename from src/juce_appframework/events/juce_InterprocessConnection.cpp rename to src/events/juce_InterprocessConnection.cpp index bc28e7de0b..0b0a1fe1eb 100644 --- a/src/juce_appframework/events/juce_InterprocessConnection.cpp +++ b/src/events/juce_InterprocessConnection.cpp @@ -23,12 +23,12 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_InterprocessConnection.h" -#include "../../juce_core/threads/juce_ScopedLock.h" +#include "../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_InterprocessConnection.h b/src/events/juce_InterprocessConnection.h similarity index 96% rename from src/juce_appframework/events/juce_InterprocessConnection.h rename to src/events/juce_InterprocessConnection.h index 60739a6aee..d8bf1d87f2 100644 --- a/src/juce_appframework/events/juce_InterprocessConnection.h +++ b/src/events/juce_InterprocessConnection.h @@ -27,9 +27,9 @@ #define __JUCE_INTERPROCESSCONNECTION_JUCEHEADER__ #include "juce_MessageListener.h" -#include "../../juce_core/threads/juce_Thread.h" -#include "../../juce_core/io/network/juce_Socket.h" -#include "../../juce_core/io/files/juce_NamedPipe.h" +#include "../threads/juce_Thread.h" +#include "../io/network/juce_Socket.h" +#include "../io/files/juce_NamedPipe.h" class InterprocessConnectionServer; diff --git a/src/juce_appframework/events/juce_InterprocessConnectionServer.cpp b/src/events/juce_InterprocessConnectionServer.cpp similarity index 94% rename from src/juce_appframework/events/juce_InterprocessConnectionServer.cpp rename to src/events/juce_InterprocessConnectionServer.cpp index 9110b8d64d..ee5b0959ce 100644 --- a/src/juce_appframework/events/juce_InterprocessConnectionServer.cpp +++ b/src/events/juce_InterprocessConnectionServer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_InterprocessConnectionServer.h b/src/events/juce_InterprocessConnectionServer.h similarity index 100% rename from src/juce_appframework/events/juce_InterprocessConnectionServer.h rename to src/events/juce_InterprocessConnectionServer.h diff --git a/src/juce_appframework/events/juce_Message.cpp b/src/events/juce_Message.cpp similarity index 93% rename from src/juce_appframework/events/juce_Message.cpp rename to src/events/juce_Message.cpp index 852878130d..c93d5f99f2 100644 --- a/src/juce_appframework/events/juce_Message.cpp +++ b/src/events/juce_Message.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_Message.h b/src/events/juce_Message.h similarity index 100% rename from src/juce_appframework/events/juce_Message.h rename to src/events/juce_Message.h diff --git a/src/juce_appframework/events/juce_MessageListener.cpp b/src/events/juce_MessageListener.cpp similarity index 94% rename from src/juce_appframework/events/juce_MessageListener.cpp rename to src/events/juce_MessageListener.cpp index 309c8adccc..a30c77be8d 100644 --- a/src/juce_appframework/events/juce_MessageListener.cpp +++ b/src/events/juce_MessageListener.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/events/juce_MessageListener.h b/src/events/juce_MessageListener.h similarity index 100% rename from src/juce_appframework/events/juce_MessageListener.h rename to src/events/juce_MessageListener.h diff --git a/src/juce_appframework/events/juce_MessageManager.cpp b/src/events/juce_MessageManager.cpp similarity index 95% rename from src/juce_appframework/events/juce_MessageManager.cpp rename to src/events/juce_MessageManager.cpp index 5bf18bf1c0..e4f639e8ab 100644 --- a/src/juce_appframework/events/juce_MessageManager.cpp +++ b/src/events/juce_MessageManager.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -31,9 +31,9 @@ BEGIN_JUCE_NAMESPACE #include "juce_ActionListenerList.h" #include "../application/juce_Application.h" #include "../gui/components/juce_Component.h" -#include "../../juce_core/threads/juce_Thread.h" -#include "../../juce_core/threads/juce_ScopedLock.h" -#include "../../juce_core/basics/juce_Time.h" +#include "../threads/juce_Thread.h" +#include "../threads/juce_ScopedLock.h" +#include "../core/juce_Time.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_MessageManager.h b/src/events/juce_MessageManager.h similarity index 95% rename from src/juce_appframework/events/juce_MessageManager.h rename to src/events/juce_MessageManager.h index ced3f7ce4e..813348dc92 100644 --- a/src/juce_appframework/events/juce_MessageManager.h +++ b/src/events/juce_MessageManager.h @@ -26,11 +26,11 @@ #ifndef __JUCE_MESSAGEMANAGER_JUCEHEADER__ #define __JUCE_MESSAGEMANAGER_JUCEHEADER__ -#include "../application/juce_DeletedAtShutdown.h" -#include "../../juce_core/containers/juce_SortedSet.h" -#include "../../juce_core/containers/juce_VoidArray.h" -#include "../../juce_core/threads/juce_Thread.h" -#include "../../juce_core/threads/juce_ThreadPool.h" +#include "../utilities/juce_DeletedAtShutdown.h" +#include "../containers/juce_SortedSet.h" +#include "../containers/juce_VoidArray.h" +#include "../threads/juce_Thread.h" +#include "../threads/juce_ThreadPool.h" #include "juce_ActionListenerList.h" #include "juce_CallbackMessage.h" class Component; diff --git a/src/juce_appframework/events/juce_MultiTimer.cpp b/src/events/juce_MultiTimer.cpp similarity index 93% rename from src/juce_appframework/events/juce_MultiTimer.cpp rename to src/events/juce_MultiTimer.cpp index 158ccb883a..ad074a710b 100644 --- a/src/juce_appframework/events/juce_MultiTimer.cpp +++ b/src/events/juce_MultiTimer.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_MultiTimer.h" #include "juce_Timer.h" -#include "../../juce_core/threads/juce_ScopedLock.h" +#include "../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_MultiTimer.h b/src/events/juce_MultiTimer.h similarity index 96% rename from src/juce_appframework/events/juce_MultiTimer.h rename to src/events/juce_MultiTimer.h index fa55ae0ad8..1abd025893 100644 --- a/src/juce_appframework/events/juce_MultiTimer.h +++ b/src/events/juce_MultiTimer.h @@ -27,7 +27,7 @@ #define __JUCE_MULTITIMER_JUCEHEADER__ #include "juce_Timer.h" -#include "../../juce_core/containers/juce_VoidArray.h" +#include "../containers/juce_VoidArray.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_Timer.cpp b/src/events/juce_Timer.cpp similarity index 93% rename from src/juce_appframework/events/juce_Timer.cpp rename to src/events/juce_Timer.cpp index 37d02941b2..daa8c5197e 100644 --- a/src/juce_appframework/events/juce_Timer.cpp +++ b/src/events/juce_Timer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -31,11 +31,11 @@ BEGIN_JUCE_NAMESPACE #include "juce_MessageManager.h" #include "juce_AsyncUpdater.h" #include "../application/juce_Application.h" -#include "../application/juce_DeletedAtShutdown.h" -#include "../../juce_core/basics/juce_Time.h" -#include "../../juce_core/threads/juce_Thread.h" -#include "../../juce_core/threads/juce_ScopedLock.h" -#include "../../juce_core/containers/juce_VoidArray.h" +#include "../utilities/juce_DeletedAtShutdown.h" +#include "../core/juce_Time.h" +#include "../threads/juce_Thread.h" +#include "../threads/juce_ScopedLock.h" +#include "../containers/juce_VoidArray.h" //============================================================================== diff --git a/src/juce_appframework/events/juce_Timer.h b/src/events/juce_Timer.h similarity index 100% rename from src/juce_appframework/events/juce_Timer.h rename to src/events/juce_Timer.h diff --git a/src/juce_appframework/gui/components/buttons/juce_ArrowButton.cpp b/src/gui/components/buttons/juce_ArrowButton.cpp similarity index 94% rename from src/juce_appframework/gui/components/buttons/juce_ArrowButton.cpp rename to src/gui/components/buttons/juce_ArrowButton.cpp index 6ea4907e66..402b5ece5b 100644 --- a/src/juce_appframework/gui/components/buttons/juce_ArrowButton.cpp +++ b/src/gui/components/buttons/juce_ArrowButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_ArrowButton.h b/src/gui/components/buttons/juce_ArrowButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_ArrowButton.h rename to src/gui/components/buttons/juce_ArrowButton.h diff --git a/src/juce_appframework/gui/components/buttons/juce_Button.cpp b/src/gui/components/buttons/juce_Button.cpp similarity index 95% rename from src/juce_appframework/gui/components/buttons/juce_Button.cpp rename to src/gui/components/buttons/juce_Button.cpp index 10600d9cff..00ac728828 100644 --- a/src/juce_appframework/gui/components/buttons/juce_Button.cpp +++ b/src/gui/components/buttons/juce_Button.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_Button.h b/src/gui/components/buttons/juce_Button.h similarity index 97% rename from src/juce_appframework/gui/components/buttons/juce_Button.h rename to src/gui/components/buttons/juce_Button.h index cf115bcc0b..a5f7aee05a 100644 --- a/src/juce_appframework/gui/components/buttons/juce_Button.h +++ b/src/gui/components/buttons/juce_Button.h @@ -29,7 +29,7 @@ #include "../juce_Component.h" #include "../keyboard/juce_KeyListener.h" #include "../../../application/juce_ApplicationCommandManager.h" -#include "../../../../juce_core/containers/juce_SortedSet.h" +#include "../../../containers/juce_SortedSet.h" #include "../windows/juce_TooltipWindow.h" #include "../../../events/juce_Timer.h" class Button; diff --git a/src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp b/src/gui/components/buttons/juce_DrawableButton.cpp similarity index 95% rename from src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp rename to src/gui/components/buttons/juce_DrawableButton.cpp index e311289900..e37378828e 100644 --- a/src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp +++ b/src/gui/components/buttons/juce_DrawableButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_DrawableButton.h b/src/gui/components/buttons/juce_DrawableButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_DrawableButton.h rename to src/gui/components/buttons/juce_DrawableButton.h diff --git a/src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.cpp b/src/gui/components/buttons/juce_HyperlinkButton.cpp similarity index 95% rename from src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.cpp rename to src/gui/components/buttons/juce_HyperlinkButton.cpp index bab028e5bc..abbffc4c64 100644 --- a/src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.cpp +++ b/src/gui/components/buttons/juce_HyperlinkButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.h b/src/gui/components/buttons/juce_HyperlinkButton.h similarity index 96% rename from src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.h rename to src/gui/components/buttons/juce_HyperlinkButton.h index 6fdd880924..9b0b7127b6 100644 --- a/src/juce_appframework/gui/components/buttons/juce_HyperlinkButton.h +++ b/src/gui/components/buttons/juce_HyperlinkButton.h @@ -27,7 +27,7 @@ #define __JUCE_HYPERLINKBUTTON_JUCEHEADER__ #include "juce_Button.h" -#include "../../../../juce_core/io/network/juce_URL.h" +#include "../../../io/network/juce_URL.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp b/src/gui/components/buttons/juce_ImageButton.cpp similarity index 95% rename from src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp rename to src/gui/components/buttons/juce_ImageButton.cpp index c5ff20c60b..eeac63a820 100644 --- a/src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp +++ b/src/gui/components/buttons/juce_ImageButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_ImageButton.h b/src/gui/components/buttons/juce_ImageButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_ImageButton.h rename to src/gui/components/buttons/juce_ImageButton.h diff --git a/src/juce_appframework/gui/components/buttons/juce_ShapeButton.cpp b/src/gui/components/buttons/juce_ShapeButton.cpp similarity index 95% rename from src/juce_appframework/gui/components/buttons/juce_ShapeButton.cpp rename to src/gui/components/buttons/juce_ShapeButton.cpp index e449d9d3f1..a3c6a10de3 100644 --- a/src/juce_appframework/gui/components/buttons/juce_ShapeButton.cpp +++ b/src/gui/components/buttons/juce_ShapeButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_ShapeButton.h b/src/gui/components/buttons/juce_ShapeButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_ShapeButton.h rename to src/gui/components/buttons/juce_ShapeButton.h diff --git a/src/juce_appframework/gui/components/buttons/juce_TextButton.cpp b/src/gui/components/buttons/juce_TextButton.cpp similarity index 94% rename from src/juce_appframework/gui/components/buttons/juce_TextButton.cpp rename to src/gui/components/buttons/juce_TextButton.cpp index 76b22a2bc5..72ab8cfa1c 100644 --- a/src/juce_appframework/gui/components/buttons/juce_TextButton.cpp +++ b/src/gui/components/buttons/juce_TextButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_TextButton.h b/src/gui/components/buttons/juce_TextButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_TextButton.h rename to src/gui/components/buttons/juce_TextButton.h diff --git a/src/juce_appframework/gui/components/buttons/juce_ToggleButton.cpp b/src/gui/components/buttons/juce_ToggleButton.cpp similarity index 94% rename from src/juce_appframework/gui/components/buttons/juce_ToggleButton.cpp rename to src/gui/components/buttons/juce_ToggleButton.cpp index 077b44e9e4..97b9bbc2d2 100644 --- a/src/juce_appframework/gui/components/buttons/juce_ToggleButton.cpp +++ b/src/gui/components/buttons/juce_ToggleButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_ToggleButton.h b/src/gui/components/buttons/juce_ToggleButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_ToggleButton.h rename to src/gui/components/buttons/juce_ToggleButton.h diff --git a/src/juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp b/src/gui/components/buttons/juce_ToolbarButton.cpp similarity index 95% rename from src/juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp rename to src/gui/components/buttons/juce_ToolbarButton.cpp index e546fe1d5c..6603d91042 100644 --- a/src/juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp +++ b/src/gui/components/buttons/juce_ToolbarButton.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/buttons/juce_ToolbarButton.h b/src/gui/components/buttons/juce_ToolbarButton.h similarity index 100% rename from src/juce_appframework/gui/components/buttons/juce_ToolbarButton.h rename to src/gui/components/buttons/juce_ToolbarButton.h diff --git a/src/juce_appframework/gui/components/controls/juce_ComboBox.cpp b/src/gui/components/controls/juce_ComboBox.cpp similarity index 95% rename from src/juce_appframework/gui/components/controls/juce_ComboBox.cpp rename to src/gui/components/controls/juce_ComboBox.cpp index a2cfd14f18..0a02ecac00 100644 --- a/src/juce_appframework/gui/components/controls/juce_ComboBox.cpp +++ b/src/gui/components/controls/juce_ComboBox.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ComboBox.h" #include "../menus/juce_PopupMenu.h" #include "../lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/controls/juce_ComboBox.h b/src/gui/components/controls/juce_ComboBox.h similarity index 97% rename from src/juce_appframework/gui/components/controls/juce_ComboBox.h rename to src/gui/components/controls/juce_ComboBox.h index 76fdc20b07..78a1fe7e5f 100644 --- a/src/juce_appframework/gui/components/controls/juce_ComboBox.h +++ b/src/gui/components/controls/juce_ComboBox.h @@ -27,7 +27,7 @@ #define __JUCE_COMBOBOX_JUCEHEADER__ #include "juce_Label.h" -#include "../../../../juce_core/text/juce_StringArray.h" +#include "../../../text/juce_StringArray.h" class ComboBox; diff --git a/src/juce_appframework/gui/components/controls/juce_Label.cpp b/src/gui/components/controls/juce_Label.cpp similarity index 95% rename from src/juce_appframework/gui/components/controls/juce_Label.cpp rename to src/gui/components/controls/juce_Label.cpp index 51af25818a..546554f9d0 100644 --- a/src/juce_appframework/gui/components/controls/juce_Label.cpp +++ b/src/gui/components/controls/juce_Label.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/controls/juce_Label.h b/src/gui/components/controls/juce_Label.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_Label.h rename to src/gui/components/controls/juce_Label.h diff --git a/src/juce_appframework/gui/components/controls/juce_ListBox.cpp b/src/gui/components/controls/juce_ListBox.cpp similarity index 96% rename from src/juce_appframework/gui/components/controls/juce_ListBox.cpp rename to src/gui/components/controls/juce_ListBox.cpp index 55af581b92..9ce3881cd1 100644 --- a/src/juce_appframework/gui/components/controls/juce_ListBox.cpp +++ b/src/gui/components/controls/juce_ListBox.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/controls/juce_ListBox.h b/src/gui/components/controls/juce_ListBox.h similarity index 97% rename from src/juce_appframework/gui/components/controls/juce_ListBox.h rename to src/gui/components/controls/juce_ListBox.h index 610b78c3ca..9f04fe32de 100644 --- a/src/juce_appframework/gui/components/controls/juce_ListBox.h +++ b/src/gui/components/controls/juce_ListBox.h @@ -27,7 +27,7 @@ #define __JUCE_LISTBOX_JUCEHEADER__ #include "../layout/juce_Viewport.h" -#include "../../../../juce_core/containers/juce_SparseSet.h" +#include "../../../containers/juce_SparseSet.h" class ListViewport; diff --git a/src/juce_appframework/gui/components/controls/juce_ProgressBar.cpp b/src/gui/components/controls/juce_ProgressBar.cpp similarity index 94% rename from src/juce_appframework/gui/components/controls/juce_ProgressBar.cpp rename to src/gui/components/controls/juce_ProgressBar.cpp index 5b3cf639b3..fa01af0cb3 100644 --- a/src/juce_appframework/gui/components/controls/juce_ProgressBar.cpp +++ b/src/gui/components/controls/juce_ProgressBar.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/controls/juce_ProgressBar.h b/src/gui/components/controls/juce_ProgressBar.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_ProgressBar.h rename to src/gui/components/controls/juce_ProgressBar.h diff --git a/src/juce_appframework/gui/components/controls/juce_Slider.cpp b/src/gui/components/controls/juce_Slider.cpp similarity index 96% rename from src/juce_appframework/gui/components/controls/juce_Slider.cpp rename to src/gui/components/controls/juce_Slider.cpp index 4bf0b20695..e280469020 100644 --- a/src/juce_appframework/gui/components/controls/juce_Slider.cpp +++ b/src/gui/components/controls/juce_Slider.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -32,7 +32,7 @@ BEGIN_JUCE_NAMESPACE #include "../menus/juce_PopupMenu.h" #include "../juce_Desktop.h" #include "../special/juce_BubbleComponent.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/controls/juce_Slider.h b/src/gui/components/controls/juce_Slider.h similarity index 97% rename from src/juce_appframework/gui/components/controls/juce_Slider.h rename to src/gui/components/controls/juce_Slider.h index 0b1e371fab..c3e70d8f5d 100644 --- a/src/juce_appframework/gui/components/controls/juce_Slider.h +++ b/src/gui/components/controls/juce_Slider.h @@ -30,7 +30,7 @@ #include "juce_Label.h" #include "../buttons/juce_Button.h" #include "../../../events/juce_AsyncUpdater.h" -#include "../../../../juce_core/containers/juce_SortedSet.h" +#include "../../../containers/juce_SortedSet.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/controls/juce_SliderListener.h b/src/gui/components/controls/juce_SliderListener.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_SliderListener.h rename to src/gui/components/controls/juce_SliderListener.h diff --git a/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp b/src/gui/components/controls/juce_TableHeaderComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp rename to src/gui/components/controls/juce_TableHeaderComponent.cpp index c67ea00f9d..c7a31116e6 100644 --- a/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp +++ b/src/gui/components/controls/juce_TableHeaderComponent.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_TableHeaderComponent.h" #include "../../graphics/imaging/juce_Image.h" #include "../../graphics/brushes/juce_GradientBrush.h" -#include "../../../../juce_core/text/juce_XmlDocument.h" +#include "../../../text/juce_XmlDocument.h" #include "../lookandfeel/juce_LookAndFeel.h" #include "../layout/juce_StretchableObjectResizer.h" diff --git a/src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.h b/src/gui/components/controls/juce_TableHeaderComponent.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_TableHeaderComponent.h rename to src/gui/components/controls/juce_TableHeaderComponent.h diff --git a/src/juce_appframework/gui/components/controls/juce_TableListBox.cpp b/src/gui/components/controls/juce_TableListBox.cpp similarity index 95% rename from src/juce_appframework/gui/components/controls/juce_TableListBox.cpp rename to src/gui/components/controls/juce_TableListBox.cpp index b3cd2feb9a..732199f304 100644 --- a/src/juce_appframework/gui/components/controls/juce_TableListBox.cpp +++ b/src/gui/components/controls/juce_TableListBox.cpp @@ -23,16 +23,16 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_TableListBox.h" -#include "../../../../juce_core/containers/juce_BitArray.h" -#include "../../../../juce_core/basics/juce_Random.h" +#include "../../../containers/juce_BitArray.h" +#include "../../../core/juce_Random.h" #include "../mouse/juce_DragAndDropContainer.h" #include "../../graphics/imaging/juce_Image.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/controls/juce_TableListBox.h b/src/gui/components/controls/juce_TableListBox.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_TableListBox.h rename to src/gui/components/controls/juce_TableListBox.h diff --git a/src/juce_appframework/gui/components/controls/juce_TextEditor.cpp b/src/gui/components/controls/juce_TextEditor.cpp similarity index 96% rename from src/juce_appframework/gui/components/controls/juce_TextEditor.cpp rename to src/gui/components/controls/juce_TextEditor.cpp index e9929808e6..4cbbb98f3c 100644 --- a/src/juce_appframework/gui/components/controls/juce_TextEditor.cpp +++ b/src/gui/components/controls/juce_TextEditor.cpp @@ -23,15 +23,15 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_TextEditor.h" #include "../../graphics/fonts/juce_GlyphArrangement.h" -#include "../../../application/juce_SystemClipboard.h" -#include "../../../../juce_core/basics/juce_Time.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../utilities/juce_SystemClipboard.h" +#include "../../../core/juce_Time.h" +#include "../../../text/juce_LocalisedStrings.h" #include "../lookandfeel/juce_LookAndFeel.h" #define SHOULD_WRAP(x, wrapwidth) (((x) - 0.0001f) >= (wrapwidth)) diff --git a/src/juce_appframework/gui/components/controls/juce_TextEditor.h b/src/gui/components/controls/juce_TextEditor.h similarity index 97% rename from src/juce_appframework/gui/components/controls/juce_TextEditor.h rename to src/gui/components/controls/juce_TextEditor.h index 6fa34a9f67..50c0165617 100644 --- a/src/juce_appframework/gui/components/controls/juce_TextEditor.h +++ b/src/gui/components/controls/juce_TextEditor.h @@ -28,7 +28,7 @@ #include "../juce_Component.h" #include "../../../events/juce_Timer.h" -#include "../../../documents/juce_UndoManager.h" +#include "../../../utilities/juce_UndoManager.h" #include "../layout/juce_Viewport.h" #include "../menus/juce_PopupMenu.h" class TextEditor; diff --git a/src/juce_appframework/gui/components/controls/juce_Toolbar.cpp b/src/gui/components/controls/juce_Toolbar.cpp similarity index 96% rename from src/juce_appframework/gui/components/controls/juce_Toolbar.cpp rename to src/gui/components/controls/juce_Toolbar.cpp index ad91e451cb..574121d0bc 100644 --- a/src/juce_appframework/gui/components/controls/juce_Toolbar.cpp +++ b/src/gui/components/controls/juce_Toolbar.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -35,7 +35,7 @@ BEGIN_JUCE_NAMESPACE #include "../lookandfeel/juce_LookAndFeel.h" #include "../layout/juce_StretchableObjectResizer.h" #include "../windows/juce_DialogWindow.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" #include "juce_ComboBox.h" #include "../buttons/juce_TextButton.h" diff --git a/src/juce_appframework/gui/components/controls/juce_Toolbar.h b/src/gui/components/controls/juce_Toolbar.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_Toolbar.h rename to src/gui/components/controls/juce_Toolbar.h diff --git a/src/juce_appframework/gui/components/controls/juce_ToolbarItemComponent.cpp b/src/gui/components/controls/juce_ToolbarItemComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/controls/juce_ToolbarItemComponent.cpp rename to src/gui/components/controls/juce_ToolbarItemComponent.cpp index 59ba9e0570..75f2a85720 100644 --- a/src/juce_appframework/gui/components/controls/juce_ToolbarItemComponent.cpp +++ b/src/gui/components/controls/juce_ToolbarItemComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/controls/juce_ToolbarItemComponent.h b/src/gui/components/controls/juce_ToolbarItemComponent.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_ToolbarItemComponent.h rename to src/gui/components/controls/juce_ToolbarItemComponent.h diff --git a/src/juce_appframework/gui/components/controls/juce_ToolbarItemFactory.h b/src/gui/components/controls/juce_ToolbarItemFactory.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_ToolbarItemFactory.h rename to src/gui/components/controls/juce_ToolbarItemFactory.h diff --git a/src/juce_appframework/gui/components/controls/juce_ToolbarItemPalette.cpp b/src/gui/components/controls/juce_ToolbarItemPalette.cpp similarity index 95% rename from src/juce_appframework/gui/components/controls/juce_ToolbarItemPalette.cpp rename to src/gui/components/controls/juce_ToolbarItemPalette.cpp index 8606f2de9a..2656839785 100644 --- a/src/juce_appframework/gui/components/controls/juce_ToolbarItemPalette.cpp +++ b/src/gui/components/controls/juce_ToolbarItemPalette.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/controls/juce_ToolbarItemPalette.h b/src/gui/components/controls/juce_ToolbarItemPalette.h similarity index 100% rename from src/juce_appframework/gui/components/controls/juce_ToolbarItemPalette.h rename to src/gui/components/controls/juce_ToolbarItemPalette.h diff --git a/src/juce_appframework/gui/components/controls/juce_TreeView.cpp b/src/gui/components/controls/juce_TreeView.cpp similarity index 95% rename from src/juce_appframework/gui/components/controls/juce_TreeView.cpp rename to src/gui/components/controls/juce_TreeView.cpp index 79742c4f90..50978a3c62 100644 --- a/src/juce_appframework/gui/components/controls/juce_TreeView.cpp +++ b/src/gui/components/controls/juce_TreeView.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_TreeView.h" #include "../lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/containers/juce_BitArray.h" +#include "../../../containers/juce_BitArray.h" #include "../mouse/juce_DragAndDropContainer.h" #include "../../graphics/imaging/juce_Image.h" diff --git a/src/juce_appframework/gui/components/controls/juce_TreeView.h b/src/gui/components/controls/juce_TreeView.h similarity index 97% rename from src/juce_appframework/gui/components/controls/juce_TreeView.h rename to src/gui/components/controls/juce_TreeView.h index 1b5ee4a0ac..01ec12579c 100644 --- a/src/juce_appframework/gui/components/controls/juce_TreeView.h +++ b/src/gui/components/controls/juce_TreeView.h @@ -27,7 +27,7 @@ #define __JUCE_TREEVIEW_JUCEHEADER__ #include "../layout/juce_Viewport.h" -#include "../../../../juce_core/text/juce_XmlElement.h" +#include "../../../text/juce_XmlElement.h" #include "../../../events/juce_AsyncUpdater.h" class TreeView; diff --git a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp b/src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp rename to src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp index 4afbae3277..0a9cec8623 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp +++ b/src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h b/src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h rename to src/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp b/src/gui/components/filebrowser/juce_DirectoryContentsList.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp rename to src/gui/components/filebrowser/juce_DirectoryContentsList.cpp index 102953840c..e1df3f7a72 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp +++ b/src/gui/components/filebrowser/juce_DirectoryContentsList.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.h b/src/gui/components/filebrowser/juce_DirectoryContentsList.h similarity index 96% rename from src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.h rename to src/gui/components/filebrowser/juce_DirectoryContentsList.h index 28530b316c..78b485ba29 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.h +++ b/src/gui/components/filebrowser/juce_DirectoryContentsList.h @@ -28,7 +28,7 @@ #include "juce_FileFilter.h" #include "../../../events/juce_ChangeBroadcaster.h" -#include "../../../../juce_core/threads/juce_TimeSliceThread.h" +#include "../../../threads/juce_TimeSliceThread.h" #include "../../graphics/imaging/juce_Image.h" diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.cpp b/src/gui/components/filebrowser/juce_FileBrowserComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.cpp rename to src/gui/components/filebrowser/juce_FileBrowserComponent.cpp index c882331ec1..79669843cd 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.cpp +++ b/src/gui/components/filebrowser/juce_FileBrowserComponent.cpp @@ -23,15 +23,15 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_FileBrowserComponent.h" #include "../lookandfeel/juce_LookAndFeel.h" #include "../../graphics/drawables/juce_DrawablePath.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" -#include "../../../../juce_core/basics/juce_SystemStats.h" +#include "../../../text/juce_LocalisedStrings.h" +#include "../../../core/juce_SystemStats.h" #include "juce_FileListComponent.h" #include "juce_FileTreeComponent.h" diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.h b/src/gui/components/filebrowser/juce_FileBrowserComponent.h similarity index 96% rename from src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.h rename to src/gui/components/filebrowser/juce_FileBrowserComponent.h index 1c0c845399..afda6587b0 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.h +++ b/src/gui/components/filebrowser/juce_FileBrowserComponent.h @@ -28,8 +28,8 @@ #include "juce_DirectoryContentsDisplayComponent.h" #include "juce_FilePreviewComponent.h" -#include "../../../../juce_core/io/files/juce_File.h" -#include "../../../../juce_core/containers/juce_BitArray.h" +#include "../../../io/files/juce_File.h" +#include "../../../containers/juce_BitArray.h" #include "../controls/juce_TextEditor.h" #include "../controls/juce_ComboBox.h" #include "../buttons/juce_DrawableButton.h" diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileBrowserListener.h b/src/gui/components/filebrowser/juce_FileBrowserListener.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_FileBrowserListener.h rename to src/gui/components/filebrowser/juce_FileBrowserListener.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileChooser.cpp b/src/gui/components/filebrowser/juce_FileChooser.cpp similarity index 96% rename from src/juce_appframework/gui/components/filebrowser/juce_FileChooser.cpp rename to src/gui/components/filebrowser/juce_FileChooser.cpp index fc1ee6b374..ca318523d0 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileChooser.cpp +++ b/src/gui/components/filebrowser/juce_FileChooser.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h b/src/gui/components/filebrowser/juce_FileChooser.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h rename to src/gui/components/filebrowser/juce_FileChooser.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.cpp b/src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.cpp rename to src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp index 6b2a496fd6..7f01398829 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.cpp +++ b/src/gui/components/filebrowser/juce_FileChooserDialogBox.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_FileChooserDialogBox.h" #include "../lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" #include "../windows/juce_AlertWindow.h" diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.h b/src/gui/components/filebrowser/juce_FileChooserDialogBox.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.h rename to src/gui/components/filebrowser/juce_FileChooserDialogBox.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileFilter.cpp b/src/gui/components/filebrowser/juce_FileFilter.cpp similarity index 93% rename from src/juce_appframework/gui/components/filebrowser/juce_FileFilter.cpp rename to src/gui/components/filebrowser/juce_FileFilter.cpp index a558052e29..73a8054341 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileFilter.cpp +++ b/src/gui/components/filebrowser/juce_FileFilter.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileFilter.h b/src/gui/components/filebrowser/juce_FileFilter.h similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FileFilter.h rename to src/gui/components/filebrowser/juce_FileFilter.h index 48b98d1631..3c5c3e37bb 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileFilter.h +++ b/src/gui/components/filebrowser/juce_FileFilter.h @@ -26,7 +26,7 @@ #ifndef __JUCE_FILEFILTER_JUCEHEADER__ #define __JUCE_FILEFILTER_JUCEHEADER__ -#include "../../../../juce_core/io/files/juce_File.h" +#include "../../../io/files/juce_File.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileListComponent.cpp b/src/gui/components/filebrowser/juce_FileListComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FileListComponent.cpp rename to src/gui/components/filebrowser/juce_FileListComponent.cpp index 97f7de2600..5c53b139d3 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileListComponent.cpp +++ b/src/gui/components/filebrowser/juce_FileListComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileListComponent.h b/src/gui/components/filebrowser/juce_FileListComponent.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_FileListComponent.h rename to src/gui/components/filebrowser/juce_FileListComponent.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FilePreviewComponent.h b/src/gui/components/filebrowser/juce_FilePreviewComponent.h similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FilePreviewComponent.h rename to src/gui/components/filebrowser/juce_FilePreviewComponent.h index 0220f17f99..e1b3aaebb8 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FilePreviewComponent.h +++ b/src/gui/components/filebrowser/juce_FilePreviewComponent.h @@ -26,7 +26,7 @@ #ifndef __JUCE_FILEPREVIEWCOMPONENT_JUCEHEADER__ #define __JUCE_FILEPREVIEWCOMPONENT_JUCEHEADER__ -#include "../../../../juce_core/io/files/juce_File.h" +#include "../../../io/files/juce_File.h" #include "../juce_Component.h" diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp b/src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp rename to src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp index e504eb7a4c..99e22869a4 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp +++ b/src/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_FileSearchPathListComponent.h" #include "../lookandfeel/juce_LookAndFeel.h" #include "../filebrowser/juce_FileChooser.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" #include "../buttons/juce_TextButton.h" #include "../buttons/juce_DrawableButton.h" #include "../../graphics/drawables/juce_DrawablePath.h" diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.h b/src/gui/components/filebrowser/juce_FileSearchPathListComponent.h similarity index 96% rename from src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.h rename to src/gui/components/filebrowser/juce_FileSearchPathListComponent.h index dc94f3980c..220ec31ff4 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.h +++ b/src/gui/components/filebrowser/juce_FileSearchPathListComponent.h @@ -29,7 +29,7 @@ #include "../controls/juce_ListBox.h" #include "../buttons/juce_Button.h" #include "../mouse/juce_FileDragAndDropTarget.h" -#include "../../../../juce_core/io/files/juce_FileSearchPath.h" +#include "../../../io/files/juce_FileSearchPath.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.cpp b/src/gui/components/filebrowser/juce_FileTreeComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.cpp rename to src/gui/components/filebrowser/juce_FileTreeComponent.cpp index ca92c7a394..16dc423f31 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.cpp +++ b/src/gui/components/filebrowser/juce_FileTreeComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.h b/src/gui/components/filebrowser/juce_FileTreeComponent.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.h rename to src/gui/components/filebrowser/juce_FileTreeComponent.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.cpp b/src/gui/components/filebrowser/juce_FilenameComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.cpp rename to src/gui/components/filebrowser/juce_FilenameComponent.cpp index 10f9a99faa..5adab42db7 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.cpp +++ b/src/gui/components/filebrowser/juce_FilenameComponent.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_FilenameComponent.h" #include "../lookandfeel/juce_LookAndFeel.h" #include "../filebrowser/juce_FileChooser.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.h b/src/gui/components/filebrowser/juce_FilenameComponent.h similarity index 97% rename from src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.h rename to src/gui/components/filebrowser/juce_FilenameComponent.h index ecb41319fc..a2bb5d42d1 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_FilenameComponent.h +++ b/src/gui/components/filebrowser/juce_FilenameComponent.h @@ -29,7 +29,7 @@ #include "../controls/juce_ComboBox.h" #include "../../../events/juce_AsyncUpdater.h" #include "../buttons/juce_TextButton.h" -#include "../../../../juce_core/io/files/juce_File.h" +#include "../../../io/files/juce_File.h" #include "../mouse/juce_FileDragAndDropTarget.h" class FilenameComponent; diff --git a/src/juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.cpp b/src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp similarity index 93% rename from src/juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.cpp rename to src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp index db6f4ddd16..94d3436b1b 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.cpp +++ b/src/gui/components/filebrowser/juce_ImagePreviewComponent.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ImagePreviewComponent.h" #include "../../graphics/imaging/juce_ImageFileFormat.h" -#include "../../../../juce_core/io/files/juce_FileInputStream.h" +#include "../../../io/files/juce_FileInputStream.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.h b/src/gui/components/filebrowser/juce_ImagePreviewComponent.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.h rename to src/gui/components/filebrowser/juce_ImagePreviewComponent.h diff --git a/src/juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.cpp b/src/gui/components/filebrowser/juce_WildcardFileFilter.cpp similarity index 94% rename from src/juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.cpp rename to src/gui/components/filebrowser/juce_WildcardFileFilter.cpp index 7010c259d3..be0b2ef257 100644 --- a/src/juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.cpp +++ b/src/gui/components/filebrowser/juce_WildcardFileFilter.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.h b/src/gui/components/filebrowser/juce_WildcardFileFilter.h similarity index 100% rename from src/juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.h rename to src/gui/components/filebrowser/juce_WildcardFileFilter.h diff --git a/src/juce_appframework/gui/components/juce_Component.cpp b/src/gui/components/juce_Component.cpp similarity index 96% rename from src/juce_appframework/gui/components/juce_Component.cpp rename to src/gui/components/juce_Component.cpp index 1f3ed50c98..86c75a8ea8 100644 --- a/src/juce_appframework/gui/components/juce_Component.cpp +++ b/src/gui/components/juce_Component.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../juce_core/basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -38,8 +38,8 @@ BEGIN_JUCE_NAMESPACE #include "../graphics/contexts/juce_LowLevelGraphicsContext.h" #include "../../events/juce_MessageManager.h" #include "../../events/juce_Timer.h" -#include "../../../juce_core/basics/juce_Time.h" -#include "../../../juce_core/misc/juce_PlatformUtilities.h" +#include "../../core/juce_Time.h" +#include "../../core/juce_PlatformUtilities.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/juce_Component.h b/src/gui/components/juce_Component.h similarity index 97% rename from src/juce_appframework/gui/components/juce_Component.h rename to src/gui/components/juce_Component.h index d408219e98..1ce2ff68e0 100644 --- a/src/juce_appframework/gui/components/juce_Component.h +++ b/src/gui/components/juce_Component.h @@ -36,9 +36,9 @@ #include "../graphics/geometry/juce_BorderSize.h" #include "windows/juce_ComponentPeer.h" #include "../../events/juce_MessageListener.h" -#include "../../../juce_core/text/juce_StringArray.h" -#include "../../../juce_core/containers/juce_VoidArray.h" -#include "../../../juce_core/containers/juce_PropertySet.h" +#include "../../text/juce_StringArray.h" +#include "../../containers/juce_VoidArray.h" +#include "../../containers/juce_PropertySet.h" class LookAndFeel; diff --git a/src/juce_appframework/gui/components/juce_ComponentDeletionWatcher.h b/src/gui/components/juce_ComponentDeletionWatcher.h similarity index 100% rename from src/juce_appframework/gui/components/juce_ComponentDeletionWatcher.h rename to src/gui/components/juce_ComponentDeletionWatcher.h diff --git a/src/juce_appframework/gui/components/juce_ComponentListener.cpp b/src/gui/components/juce_ComponentListener.cpp similarity index 93% rename from src/juce_appframework/gui/components/juce_ComponentListener.cpp rename to src/gui/components/juce_ComponentListener.cpp index 334e471d83..bae53f5c5d 100644 --- a/src/juce_appframework/gui/components/juce_ComponentListener.cpp +++ b/src/gui/components/juce_ComponentListener.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../juce_core/basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/juce_ComponentListener.h b/src/gui/components/juce_ComponentListener.h similarity index 100% rename from src/juce_appframework/gui/components/juce_ComponentListener.h rename to src/gui/components/juce_ComponentListener.h diff --git a/src/juce_appframework/gui/components/juce_Desktop.cpp b/src/gui/components/juce_Desktop.cpp similarity index 96% rename from src/juce_appframework/gui/components/juce_Desktop.cpp rename to src/gui/components/juce_Desktop.cpp index 67a0043ae3..ce4f620d00 100644 --- a/src/juce_appframework/gui/components/juce_Desktop.cpp +++ b/src/gui/components/juce_Desktop.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../juce_core/basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/juce_Desktop.h b/src/gui/components/juce_Desktop.h similarity index 96% rename from src/juce_appframework/gui/components/juce_Desktop.h rename to src/gui/components/juce_Desktop.h index 2587fbb904..6855bc83fe 100644 --- a/src/juce_appframework/gui/components/juce_Desktop.h +++ b/src/gui/components/juce_Desktop.h @@ -27,10 +27,10 @@ #define __JUCE_DESKTOP_JUCEHEADER__ #include "juce_Component.h" -#include "../../application/juce_DeletedAtShutdown.h" +#include "../../utilities/juce_DeletedAtShutdown.h" #include "../../events/juce_Timer.h" #include "../../events/juce_AsyncUpdater.h" -#include "../../../juce_core/containers/juce_SortedSet.h" +#include "../../containers/juce_SortedSet.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyListener.cpp b/src/gui/components/keyboard/juce_KeyListener.cpp similarity index 93% rename from src/juce_appframework/gui/components/keyboard/juce_KeyListener.cpp rename to src/gui/components/keyboard/juce_KeyListener.cpp index 372535c6f7..5683fd9415 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyListener.cpp +++ b/src/gui/components/keyboard/juce_KeyListener.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyListener.h b/src/gui/components/keyboard/juce_KeyListener.h similarity index 100% rename from src/juce_appframework/gui/components/keyboard/juce_KeyListener.h rename to src/gui/components/keyboard/juce_KeyListener.h diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp b/src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp rename to src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp index 644964ad07..879355cd9c 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp +++ b/src/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp @@ -23,19 +23,19 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE // N.B. these two includes are put here deliberately to avoid problems with // old GCCs failing on long include paths -#include "../../../../juce_core/containers/juce_VoidArray.h" -#include "../../../../juce_core/containers/juce_OwnedArray.h" +#include "../../../containers/juce_VoidArray.h" +#include "../../../containers/juce_OwnedArray.h" #include "juce_KeyMappingEditorComponent.h" #include "../menus/juce_PopupMenu.h" #include "../windows/juce_AlertWindow.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" const int maxKeys = 3; diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.h b/src/gui/components/keyboard/juce_KeyMappingEditorComponent.h similarity index 100% rename from src/juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.h rename to src/gui/components/keyboard/juce_KeyMappingEditorComponent.h diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyPress.cpp b/src/gui/components/keyboard/juce_KeyPress.cpp similarity index 96% rename from src/juce_appframework/gui/components/keyboard/juce_KeyPress.cpp rename to src/gui/components/keyboard/juce_KeyPress.cpp index 0405f62fdf..5223c754ee 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyPress.cpp +++ b/src/gui/components/keyboard/juce_KeyPress.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyPress.h b/src/gui/components/keyboard/juce_KeyPress.h similarity index 97% rename from src/juce_appframework/gui/components/keyboard/juce_KeyPress.h rename to src/gui/components/keyboard/juce_KeyPress.h index 58f7c3087a..ce5e3782ba 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyPress.h +++ b/src/gui/components/keyboard/juce_KeyPress.h @@ -27,7 +27,7 @@ #define __JUCE_KEYPRESS_JUCEHEADER__ #include "juce_ModifierKeys.h" -#include "../../../../juce_core/text/juce_String.h" +#include "../../../text/juce_String.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp b/src/gui/components/keyboard/juce_KeyPressMappingSet.cpp similarity index 95% rename from src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp rename to src/gui/components/keyboard/juce_KeyPressMappingSet.cpp index 1f20f93079..b84ceb232b 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp +++ b/src/gui/components/keyboard/juce_KeyPressMappingSet.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_KeyPressMappingSet.h" -#include "../../../../juce_core/basics/juce_Time.h" -#include "../../../../juce_core/misc/juce_PlatformUtilities.h" +#include "../../../core/juce_Time.h" +#include "../../../core/juce_PlatformUtilities.h" #include "../lookandfeel/juce_LookAndFeel.h" diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h b/src/gui/components/keyboard/juce_KeyPressMappingSet.h similarity index 96% rename from src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h rename to src/gui/components/keyboard/juce_KeyPressMappingSet.h index 1f06f2bbf4..f7644a3715 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h +++ b/src/gui/components/keyboard/juce_KeyPressMappingSet.h @@ -29,9 +29,9 @@ #include "juce_KeyListener.h" #include "../../../application/juce_ApplicationCommandManager.h" #include "../../../events/juce_ChangeBroadcaster.h" -#include "../../../../juce_core/text/juce_StringArray.h" -#include "../../../../juce_core/text/juce_XmlElement.h" -#include "../../../../juce_core/containers/juce_OwnedArray.h" +#include "../../../text/juce_StringArray.h" +#include "../../../text/juce_XmlElement.h" +#include "../../../containers/juce_OwnedArray.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp b/src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp similarity index 95% rename from src/juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp rename to src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp index 80ebfec709..49ccfab316 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp +++ b/src/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.h b/src/gui/components/keyboard/juce_KeyboardFocusTraverser.h similarity index 100% rename from src/juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.h rename to src/gui/components/keyboard/juce_KeyboardFocusTraverser.h diff --git a/src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.cpp b/src/gui/components/keyboard/juce_ModifierKeys.cpp similarity index 93% rename from src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.cpp rename to src/gui/components/keyboard/juce_ModifierKeys.cpp index 645e4d89d4..8d302c3550 100644 --- a/src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.cpp +++ b/src/gui/components/keyboard/juce_ModifierKeys.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.h b/src/gui/components/keyboard/juce_ModifierKeys.h similarity index 100% rename from src/juce_appframework/gui/components/keyboard/juce_ModifierKeys.h rename to src/gui/components/keyboard/juce_ModifierKeys.h diff --git a/src/juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp b/src/gui/components/layout/juce_ComponentAnimator.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp rename to src/gui/components/layout/juce_ComponentAnimator.cpp index d86cb148fd..6b9f742057 100644 --- a/src/juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp +++ b/src/gui/components/layout/juce_ComponentAnimator.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_ComponentAnimator.h b/src/gui/components/layout/juce_ComponentAnimator.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_ComponentAnimator.h rename to src/gui/components/layout/juce_ComponentAnimator.h diff --git a/src/juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.cpp b/src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.cpp rename to src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp index d253d609f3..f86fabdecf 100644 --- a/src/juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.cpp +++ b/src/gui/components/layout/juce_ComponentBoundsConstrainer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.h b/src/gui/components/layout/juce_ComponentBoundsConstrainer.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.h rename to src/gui/components/layout/juce_ComponentBoundsConstrainer.h diff --git a/src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.cpp b/src/gui/components/layout/juce_ComponentMovementWatcher.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.cpp rename to src/gui/components/layout/juce_ComponentMovementWatcher.cpp index b82726d695..2b08341b4e 100644 --- a/src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.cpp +++ b/src/gui/components/layout/juce_ComponentMovementWatcher.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.h b/src/gui/components/layout/juce_ComponentMovementWatcher.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.h rename to src/gui/components/layout/juce_ComponentMovementWatcher.h diff --git a/src/juce_appframework/gui/components/layout/juce_GroupComponent.cpp b/src/gui/components/layout/juce_GroupComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/layout/juce_GroupComponent.cpp rename to src/gui/components/layout/juce_GroupComponent.cpp index 3180d43c12..62fbe2b8c7 100644 --- a/src/juce_appframework/gui/components/layout/juce_GroupComponent.cpp +++ b/src/gui/components/layout/juce_GroupComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_GroupComponent.h b/src/gui/components/layout/juce_GroupComponent.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_GroupComponent.h rename to src/gui/components/layout/juce_GroupComponent.h diff --git a/src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp b/src/gui/components/layout/juce_MultiDocumentPanel.cpp similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp rename to src/gui/components/layout/juce_MultiDocumentPanel.cpp index 41f7afca1e..d84a8916b9 100644 --- a/src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp +++ b/src/gui/components/layout/juce_MultiDocumentPanel.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.h b/src/gui/components/layout/juce_MultiDocumentPanel.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.h rename to src/gui/components/layout/juce_MultiDocumentPanel.h diff --git a/src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.cpp b/src/gui/components/layout/juce_ResizableBorderComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.cpp rename to src/gui/components/layout/juce_ResizableBorderComponent.cpp index a021af401d..e1af1e85c6 100644 --- a/src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.cpp +++ b/src/gui/components/layout/juce_ResizableBorderComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.h b/src/gui/components/layout/juce_ResizableBorderComponent.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_ResizableBorderComponent.h rename to src/gui/components/layout/juce_ResizableBorderComponent.h diff --git a/src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.cpp b/src/gui/components/layout/juce_ResizableCornerComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.cpp rename to src/gui/components/layout/juce_ResizableCornerComponent.cpp index e5fd6ddac9..b04e7d8846 100644 --- a/src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.cpp +++ b/src/gui/components/layout/juce_ResizableCornerComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.h b/src/gui/components/layout/juce_ResizableCornerComponent.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_ResizableCornerComponent.h rename to src/gui/components/layout/juce_ResizableCornerComponent.h diff --git a/src/juce_appframework/gui/components/layout/juce_ScrollBar.cpp b/src/gui/components/layout/juce_ScrollBar.cpp similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_ScrollBar.cpp rename to src/gui/components/layout/juce_ScrollBar.cpp index da1fe28a7e..c06fcb64b3 100644 --- a/src/juce_appframework/gui/components/layout/juce_ScrollBar.cpp +++ b/src/gui/components/layout/juce_ScrollBar.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_ScrollBar.h b/src/gui/components/layout/juce_ScrollBar.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_ScrollBar.h rename to src/gui/components/layout/juce_ScrollBar.h diff --git a/src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.cpp b/src/gui/components/layout/juce_StretchableLayoutManager.cpp similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.cpp rename to src/gui/components/layout/juce_StretchableLayoutManager.cpp index 334c1f7d4e..baf3cd93f7 100644 --- a/src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.cpp +++ b/src/gui/components/layout/juce_StretchableLayoutManager.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.h b/src/gui/components/layout/juce_StretchableLayoutManager.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_StretchableLayoutManager.h rename to src/gui/components/layout/juce_StretchableLayoutManager.h diff --git a/src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.cpp b/src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.cpp rename to src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp index fce1b0fb72..09bc618906 100644 --- a/src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.cpp +++ b/src/gui/components/layout/juce_StretchableLayoutResizerBar.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.h b/src/gui/components/layout/juce_StretchableLayoutResizerBar.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.h rename to src/gui/components/layout/juce_StretchableLayoutResizerBar.h diff --git a/src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.cpp b/src/gui/components/layout/juce_StretchableObjectResizer.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.cpp rename to src/gui/components/layout/juce_StretchableObjectResizer.cpp index 21e00fddf7..dd1340304d 100644 --- a/src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.cpp +++ b/src/gui/components/layout/juce_StretchableObjectResizer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.h b/src/gui/components/layout/juce_StretchableObjectResizer.h similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.h rename to src/gui/components/layout/juce_StretchableObjectResizer.h index 0b045a101e..ed559674dc 100644 --- a/src/juce_appframework/gui/components/layout/juce_StretchableObjectResizer.h +++ b/src/gui/components/layout/juce_StretchableObjectResizer.h @@ -26,7 +26,7 @@ #ifndef __JUCE_STRETCHABLEOBJECTRESIZER_JUCEHEADER__ #define __JUCE_STRETCHABLEOBJECTRESIZER_JUCEHEADER__ -#include "../../../../juce_core/containers/juce_OwnedArray.h" +#include "../../../containers/juce_OwnedArray.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp b/src/gui/components/layout/juce_TabbedButtonBar.cpp similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp rename to src/gui/components/layout/juce_TabbedButtonBar.cpp index 298046375f..9229af7a5a 100644 --- a/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp +++ b/src/gui/components/layout/juce_TabbedButtonBar.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.h b/src/gui/components/layout/juce_TabbedButtonBar.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_TabbedButtonBar.h rename to src/gui/components/layout/juce_TabbedButtonBar.h diff --git a/src/juce_appframework/gui/components/layout/juce_TabbedComponent.cpp b/src/gui/components/layout/juce_TabbedComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/layout/juce_TabbedComponent.cpp rename to src/gui/components/layout/juce_TabbedComponent.cpp index 886d0992bc..e8d131e132 100644 --- a/src/juce_appframework/gui/components/layout/juce_TabbedComponent.cpp +++ b/src/gui/components/layout/juce_TabbedComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_TabbedComponent.h b/src/gui/components/layout/juce_TabbedComponent.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_TabbedComponent.h rename to src/gui/components/layout/juce_TabbedComponent.h diff --git a/src/juce_appframework/gui/components/layout/juce_Viewport.cpp b/src/gui/components/layout/juce_Viewport.cpp similarity index 96% rename from src/juce_appframework/gui/components/layout/juce_Viewport.cpp rename to src/gui/components/layout/juce_Viewport.cpp index 225b709d66..e748865ed7 100644 --- a/src/juce_appframework/gui/components/layout/juce_Viewport.cpp +++ b/src/gui/components/layout/juce_Viewport.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/layout/juce_Viewport.h b/src/gui/components/layout/juce_Viewport.h similarity index 100% rename from src/juce_appframework/gui/components/layout/juce_Viewport.h rename to src/gui/components/layout/juce_Viewport.h diff --git a/src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.cpp b/src/gui/components/lookandfeel/juce_LookAndFeel.cpp similarity index 97% rename from src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.cpp rename to src/gui/components/lookandfeel/juce_LookAndFeel.cpp index ae03cfbf6b..536fa82fd1 100644 --- a/src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.cpp +++ b/src/gui/components/lookandfeel/juce_LookAndFeel.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -62,10 +62,10 @@ BEGIN_JUCE_NAMESPACE #include "../../graphics/fonts/juce_GlyphArrangement.h" #include "../../graphics/drawables/juce_DrawableComposite.h" #include "../../graphics/drawables/juce_DrawablePath.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" #include "../special/juce_MidiKeyboardComponent.h" #include "../special/juce_ColourSelector.h" -#include "../../../../juce_core/misc/juce_PlatformUtilities.h" +#include "../../../core/juce_PlatformUtilities.h" //============================================================================== @@ -2515,7 +2515,7 @@ void LookAndFeel::drawPropertyComponentLabel (Graphics& g, int, int height, g.setColour (Colours::black); if (! component.isEnabled()) - g.setOpacity (g.getCurrentColour().getAlpha() * 0.6f); + g.setOpacity (g.getCurrentColour().getFloatAlpha() * 0.6f); g.setFont (jmin (height, 24) * 0.65f); diff --git a/src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.h b/src/gui/components/lookandfeel/juce_LookAndFeel.h similarity index 100% rename from src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.h rename to src/gui/components/lookandfeel/juce_LookAndFeel.h diff --git a/src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp b/src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp similarity index 97% rename from src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp rename to src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp index 9a8679f950..08a6d39930 100644 --- a/src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp +++ b/src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h b/src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h similarity index 100% rename from src/juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h rename to src/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h diff --git a/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp b/src/gui/components/menus/juce_MenuBarComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp rename to src/gui/components/menus/juce_MenuBarComponent.cpp index 32acaa477c..fd54e2ddca 100644 --- a/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp +++ b/src/gui/components/menus/juce_MenuBarComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/menus/juce_MenuBarComponent.h b/src/gui/components/menus/juce_MenuBarComponent.h similarity index 100% rename from src/juce_appframework/gui/components/menus/juce_MenuBarComponent.h rename to src/gui/components/menus/juce_MenuBarComponent.h diff --git a/src/juce_appframework/gui/components/menus/juce_MenuBarModel.cpp b/src/gui/components/menus/juce_MenuBarModel.cpp similarity index 95% rename from src/juce_appframework/gui/components/menus/juce_MenuBarModel.cpp rename to src/gui/components/menus/juce_MenuBarModel.cpp index 2170eebf35..ac6563b01d 100644 --- a/src/juce_appframework/gui/components/menus/juce_MenuBarModel.cpp +++ b/src/gui/components/menus/juce_MenuBarModel.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/menus/juce_MenuBarModel.h b/src/gui/components/menus/juce_MenuBarModel.h similarity index 100% rename from src/juce_appframework/gui/components/menus/juce_MenuBarModel.h rename to src/gui/components/menus/juce_MenuBarModel.h diff --git a/src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp b/src/gui/components/menus/juce_PopupMenu.cpp similarity index 96% rename from src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp rename to src/gui/components/menus/juce_PopupMenu.cpp index 55de2669e7..5fc1984334 100644 --- a/src/juce_appframework/gui/components/menus/juce_PopupMenu.cpp +++ b/src/gui/components/menus/juce_PopupMenu.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -34,8 +34,8 @@ BEGIN_JUCE_NAMESPACE #include "../../graphics/imaging/juce_Image.h" #include "../keyboard/juce_KeyPressMappingSet.h" #include "../../../events/juce_Timer.h" -#include "../../../../juce_core/threads/juce_Process.h" -#include "../../../../juce_core/basics/juce_Time.h" +#include "../../../threads/juce_Process.h" +#include "../../../core/juce_Time.h" static VoidArray activeMenuWindows; diff --git a/src/juce_appframework/gui/components/menus/juce_PopupMenu.h b/src/gui/components/menus/juce_PopupMenu.h similarity index 100% rename from src/juce_appframework/gui/components/menus/juce_PopupMenu.h rename to src/gui/components/menus/juce_PopupMenu.h diff --git a/src/juce_appframework/gui/components/menus/juce_PopupMenuCustomComponent.h b/src/gui/components/menus/juce_PopupMenuCustomComponent.h similarity index 100% rename from src/juce_appframework/gui/components/menus/juce_PopupMenuCustomComponent.h rename to src/gui/components/menus/juce_PopupMenuCustomComponent.h diff --git a/src/juce_appframework/gui/components/mouse/juce_ComponentDragger.cpp b/src/gui/components/mouse/juce_ComponentDragger.cpp similarity index 95% rename from src/juce_appframework/gui/components/mouse/juce_ComponentDragger.cpp rename to src/gui/components/mouse/juce_ComponentDragger.cpp index 7e52374e56..deb1cb41ba 100644 --- a/src/juce_appframework/gui/components/mouse/juce_ComponentDragger.cpp +++ b/src/gui/components/mouse/juce_ComponentDragger.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/mouse/juce_ComponentDragger.h b/src/gui/components/mouse/juce_ComponentDragger.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_ComponentDragger.h rename to src/gui/components/mouse/juce_ComponentDragger.h diff --git a/src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.cpp b/src/gui/components/mouse/juce_DragAndDropContainer.cpp similarity index 95% rename from src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.cpp rename to src/gui/components/mouse/juce_DragAndDropContainer.cpp index bf123102fb..2e4634435d 100644 --- a/src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.cpp +++ b/src/gui/components/mouse/juce_DragAndDropContainer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -31,7 +31,7 @@ BEGIN_JUCE_NAMESPACE #include "../juce_ComponentDeletionWatcher.h" #include "../juce_Desktop.h" #include "../../../events/juce_Timer.h" -#include "../../../../juce_core/basics/juce_Random.h" +#include "../../../core/juce_Random.h" #include "../../graphics/imaging/juce_Image.h" #include "juce_FileDragAndDropTarget.h" @@ -224,6 +224,9 @@ public: // a modal loop and deletes this object before the method completes) const String dragDescLocal (dragDesc); + currentlyOver = 0; + deleteAndZero (currentlyOverWatcher); + ddt->itemDropped (dragDescLocal, source, relX, relY); } diff --git a/src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.h b/src/gui/components/mouse/juce_DragAndDropContainer.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.h rename to src/gui/components/mouse/juce_DragAndDropContainer.h diff --git a/src/juce_appframework/gui/components/mouse/juce_DragAndDropTarget.h b/src/gui/components/mouse/juce_DragAndDropTarget.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_DragAndDropTarget.h rename to src/gui/components/mouse/juce_DragAndDropTarget.h diff --git a/src/juce_appframework/gui/components/mouse/juce_FileDragAndDropTarget.h b/src/gui/components/mouse/juce_FileDragAndDropTarget.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_FileDragAndDropTarget.h rename to src/gui/components/mouse/juce_FileDragAndDropTarget.h diff --git a/src/juce_appframework/gui/components/mouse/juce_LassoComponent.h b/src/gui/components/mouse/juce_LassoComponent.h similarity index 96% rename from src/juce_appframework/gui/components/mouse/juce_LassoComponent.h rename to src/gui/components/mouse/juce_LassoComponent.h index 7823999d55..70d1af5767 100644 --- a/src/juce_appframework/gui/components/mouse/juce_LassoComponent.h +++ b/src/gui/components/mouse/juce_LassoComponent.h @@ -27,7 +27,7 @@ #define __JUCE_LASSOCOMPONENT_JUCEHEADER__ #include "../juce_Component.h" -#include "../../../documents/juce_SelectedItemSet.h" +#include "../../../utilities/juce_SelectedItemSet.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseCursor.cpp b/src/gui/components/mouse/juce_MouseCursor.cpp similarity index 94% rename from src/juce_appframework/gui/components/mouse/juce_MouseCursor.cpp rename to src/gui/components/mouse/juce_MouseCursor.cpp index d8d80c958e..6667010810 100644 --- a/src/juce_appframework/gui/components/mouse/juce_MouseCursor.cpp +++ b/src/gui/components/mouse/juce_MouseCursor.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_MouseCursor.h" #include "../juce_Component.h" -#include "../../../../juce_core/threads/juce_ScopedLock.h" +#include "../../../threads/juce_ScopedLock.h" void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hotspotY) throw(); void* juce_createStandardMouseCursor (MouseCursor::StandardCursorType type) throw(); diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseCursor.h b/src/gui/components/mouse/juce_MouseCursor.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_MouseCursor.h rename to src/gui/components/mouse/juce_MouseCursor.h diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseEvent.cpp b/src/gui/components/mouse/juce_MouseEvent.cpp similarity index 95% rename from src/juce_appframework/gui/components/mouse/juce_MouseEvent.cpp rename to src/gui/components/mouse/juce_MouseEvent.cpp index 1dfe27a08d..86ba1b72d1 100644 --- a/src/juce_appframework/gui/components/mouse/juce_MouseEvent.cpp +++ b/src/gui/components/mouse/juce_MouseEvent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseEvent.h b/src/gui/components/mouse/juce_MouseEvent.h similarity index 97% rename from src/juce_appframework/gui/components/mouse/juce_MouseEvent.h rename to src/gui/components/mouse/juce_MouseEvent.h index 69479f4e78..ff4d50b96e 100644 --- a/src/juce_appframework/gui/components/mouse/juce_MouseEvent.h +++ b/src/gui/components/mouse/juce_MouseEvent.h @@ -28,7 +28,7 @@ class Component; #include "../keyboard/juce_ModifierKeys.h" -#include "../../../../juce_core/basics/juce_Time.h" +#include "../../../core/juce_Time.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.cpp b/src/gui/components/mouse/juce_MouseHoverDetector.cpp similarity index 94% rename from src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.cpp rename to src/gui/components/mouse/juce_MouseHoverDetector.cpp index e119374113..f3d3be5138 100644 --- a/src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.cpp +++ b/src/gui/components/mouse/juce_MouseHoverDetector.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.h b/src/gui/components/mouse/juce_MouseHoverDetector.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_MouseHoverDetector.h rename to src/gui/components/mouse/juce_MouseHoverDetector.h diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseListener.cpp b/src/gui/components/mouse/juce_MouseListener.cpp similarity index 93% rename from src/juce_appframework/gui/components/mouse/juce_MouseListener.cpp rename to src/gui/components/mouse/juce_MouseListener.cpp index 81d3a8338f..5a09903df6 100644 --- a/src/juce_appframework/gui/components/mouse/juce_MouseListener.cpp +++ b/src/gui/components/mouse/juce_MouseListener.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/mouse/juce_MouseListener.h b/src/gui/components/mouse/juce_MouseListener.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_MouseListener.h rename to src/gui/components/mouse/juce_MouseListener.h diff --git a/src/juce_appframework/gui/components/mouse/juce_TooltipClient.h b/src/gui/components/mouse/juce_TooltipClient.h similarity index 100% rename from src/juce_appframework/gui/components/mouse/juce_TooltipClient.h rename to src/gui/components/mouse/juce_TooltipClient.h diff --git a/src/juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.cpp b/src/gui/components/properties/juce_BooleanPropertyComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.cpp rename to src/gui/components/properties/juce_BooleanPropertyComponent.cpp index abac6a67f9..7fea4b76d5 100644 --- a/src/juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.cpp +++ b/src/gui/components/properties/juce_BooleanPropertyComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.h b/src/gui/components/properties/juce_BooleanPropertyComponent.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.h rename to src/gui/components/properties/juce_BooleanPropertyComponent.h diff --git a/src/juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.cpp b/src/gui/components/properties/juce_ButtonPropertyComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.cpp rename to src/gui/components/properties/juce_ButtonPropertyComponent.cpp index 626f3c787a..928be645f2 100644 --- a/src/juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.cpp +++ b/src/gui/components/properties/juce_ButtonPropertyComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.h b/src/gui/components/properties/juce_ButtonPropertyComponent.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.h rename to src/gui/components/properties/juce_ButtonPropertyComponent.h diff --git a/src/juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.cpp b/src/gui/components/properties/juce_ChoicePropertyComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.cpp rename to src/gui/components/properties/juce_ChoicePropertyComponent.cpp index 5eb29b1a07..3fce3a9db7 100644 --- a/src/juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.cpp +++ b/src/gui/components/properties/juce_ChoicePropertyComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.h b/src/gui/components/properties/juce_ChoicePropertyComponent.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.h rename to src/gui/components/properties/juce_ChoicePropertyComponent.h diff --git a/src/juce_appframework/gui/components/properties/juce_PropertyComponent.cpp b/src/gui/components/properties/juce_PropertyComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/properties/juce_PropertyComponent.cpp rename to src/gui/components/properties/juce_PropertyComponent.cpp index 84d3b28abf..5efbd476e5 100644 --- a/src/juce_appframework/gui/components/properties/juce_PropertyComponent.cpp +++ b/src/gui/components/properties/juce_PropertyComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/properties/juce_PropertyComponent.h b/src/gui/components/properties/juce_PropertyComponent.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_PropertyComponent.h rename to src/gui/components/properties/juce_PropertyComponent.h diff --git a/src/juce_appframework/gui/components/properties/juce_PropertyPanel.cpp b/src/gui/components/properties/juce_PropertyPanel.cpp similarity index 95% rename from src/juce_appframework/gui/components/properties/juce_PropertyPanel.cpp rename to src/gui/components/properties/juce_PropertyPanel.cpp index 0dec6c201e..fe40793b55 100644 --- a/src/juce_appframework/gui/components/properties/juce_PropertyPanel.cpp +++ b/src/gui/components/properties/juce_PropertyPanel.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_PropertyPanel.h" #include "../lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/properties/juce_PropertyPanel.h b/src/gui/components/properties/juce_PropertyPanel.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_PropertyPanel.h rename to src/gui/components/properties/juce_PropertyPanel.h diff --git a/src/juce_appframework/gui/components/properties/juce_SliderPropertyComponent.cpp b/src/gui/components/properties/juce_SliderPropertyComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/properties/juce_SliderPropertyComponent.cpp rename to src/gui/components/properties/juce_SliderPropertyComponent.cpp index dce836db9d..3c6b67f0ef 100644 --- a/src/juce_appframework/gui/components/properties/juce_SliderPropertyComponent.cpp +++ b/src/gui/components/properties/juce_SliderPropertyComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/properties/juce_SliderPropertyComponent.h b/src/gui/components/properties/juce_SliderPropertyComponent.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_SliderPropertyComponent.h rename to src/gui/components/properties/juce_SliderPropertyComponent.h diff --git a/src/juce_appframework/gui/components/properties/juce_TextPropertyComponent.cpp b/src/gui/components/properties/juce_TextPropertyComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/properties/juce_TextPropertyComponent.cpp rename to src/gui/components/properties/juce_TextPropertyComponent.cpp index 4299efe816..7baf85a2e2 100644 --- a/src/juce_appframework/gui/components/properties/juce_TextPropertyComponent.cpp +++ b/src/gui/components/properties/juce_TextPropertyComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/properties/juce_TextPropertyComponent.h b/src/gui/components/properties/juce_TextPropertyComponent.h similarity index 100% rename from src/juce_appframework/gui/components/properties/juce_TextPropertyComponent.h rename to src/gui/components/properties/juce_TextPropertyComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_ActiveXControlComponent.h b/src/gui/components/special/juce_ActiveXControlComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_ActiveXControlComponent.h rename to src/gui/components/special/juce_ActiveXControlComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp b/src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp rename to src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp index edf334fcd3..57ba82c59e 100644 --- a/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp +++ b/src/gui/components/special/juce_AudioDeviceSelectorComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -32,7 +32,7 @@ BEGIN_JUCE_NAMESPACE #include "../menus/juce_PopupMenu.h" #include "../windows/juce_AlertWindow.h" #include "../lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.h b/src/gui/components/special/juce_AudioDeviceSelectorComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.h rename to src/gui/components/special/juce_AudioDeviceSelectorComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_BubbleComponent.cpp b/src/gui/components/special/juce_BubbleComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/special/juce_BubbleComponent.cpp rename to src/gui/components/special/juce_BubbleComponent.cpp index ffa303a4d1..81d40d01bf 100644 --- a/src/juce_appframework/gui/components/special/juce_BubbleComponent.cpp +++ b/src/gui/components/special/juce_BubbleComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/special/juce_BubbleComponent.h b/src/gui/components/special/juce_BubbleComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_BubbleComponent.h rename to src/gui/components/special/juce_BubbleComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.cpp b/src/gui/components/special/juce_BubbleMessageComponent.cpp similarity index 95% rename from src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.cpp rename to src/gui/components/special/juce_BubbleMessageComponent.cpp index 83b27ddd1c..8544eac370 100644 --- a/src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.cpp +++ b/src/gui/components/special/juce_BubbleMessageComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.h b/src/gui/components/special/juce_BubbleMessageComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_BubbleMessageComponent.h rename to src/gui/components/special/juce_BubbleMessageComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_ColourSelector.cpp b/src/gui/components/special/juce_ColourSelector.cpp similarity index 96% rename from src/juce_appframework/gui/components/special/juce_ColourSelector.cpp rename to src/gui/components/special/juce_ColourSelector.cpp index 632a9db0ab..d8fce68285 100644 --- a/src/juce_appframework/gui/components/special/juce_ColourSelector.cpp +++ b/src/gui/components/special/juce_ColourSelector.cpp @@ -23,12 +23,12 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ColourSelector.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" #include "../menus/juce_PopupMenu.h" diff --git a/src/juce_appframework/gui/components/special/juce_ColourSelector.h b/src/gui/components/special/juce_ColourSelector.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_ColourSelector.h rename to src/gui/components/special/juce_ColourSelector.h diff --git a/src/juce_appframework/gui/components/special/juce_DropShadower.cpp b/src/gui/components/special/juce_DropShadower.cpp similarity index 96% rename from src/juce_appframework/gui/components/special/juce_DropShadower.cpp rename to src/gui/components/special/juce_DropShadower.cpp index 0ece3fd90b..a6d057b2ff 100644 --- a/src/juce_appframework/gui/components/special/juce_DropShadower.cpp +++ b/src/gui/components/special/juce_DropShadower.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/special/juce_DropShadower.h b/src/gui/components/special/juce_DropShadower.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_DropShadower.h rename to src/gui/components/special/juce_DropShadower.h diff --git a/src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp b/src/gui/components/special/juce_MagnifierComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp rename to src/gui/components/special/juce_MagnifierComponent.cpp index 5be6beda2d..c097294bb6 100644 --- a/src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp +++ b/src/gui/components/special/juce_MagnifierComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/special/juce_MagnifierComponent.h b/src/gui/components/special/juce_MagnifierComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_MagnifierComponent.h rename to src/gui/components/special/juce_MagnifierComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp b/src/gui/components/special/juce_MidiKeyboardComponent.cpp similarity index 96% rename from src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp rename to src/gui/components/special/juce_MidiKeyboardComponent.cpp index d572513cf7..2d420a01a7 100644 --- a/src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp +++ b/src/gui/components/special/juce_MidiKeyboardComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.h b/src/gui/components/special/juce_MidiKeyboardComponent.h similarity index 97% rename from src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.h rename to src/gui/components/special/juce_MidiKeyboardComponent.h index 4f8e3de7d8..756d6d92c3 100644 --- a/src/juce_appframework/gui/components/special/juce_MidiKeyboardComponent.h +++ b/src/gui/components/special/juce_MidiKeyboardComponent.h @@ -30,7 +30,7 @@ #include "../../../events/juce_AsyncUpdater.h" #include "../../../events/juce_ChangeBroadcaster.h" #include "../../../audio/midi/juce_MidiKeyboardState.h" -#include "../../../../juce_core/containers/juce_BitArray.h" +#include "../../../containers/juce_BitArray.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/special/juce_NSViewComponent.h b/src/gui/components/special/juce_NSViewComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_NSViewComponent.h rename to src/gui/components/special/juce_NSViewComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_OpenGLComponent.cpp b/src/gui/components/special/juce_OpenGLComponent.cpp similarity index 94% rename from src/juce_appframework/gui/components/special/juce_OpenGLComponent.cpp rename to src/gui/components/special/juce_OpenGLComponent.cpp index 426f37b5a4..8370301f92 100644 --- a/src/juce_appframework/gui/components/special/juce_OpenGLComponent.cpp +++ b/src/gui/components/special/juce_OpenGLComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" #if JUCE_OPENGL @@ -31,7 +31,7 @@ BEGIN_JUCE_NAMESPACE #include "juce_OpenGLComponent.h" #include "../layout/juce_ComponentMovementWatcher.h" -#include "../../../../juce_core/threads/juce_ScopedLock.h" +#include "../../../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/special/juce_OpenGLComponent.h b/src/gui/components/special/juce_OpenGLComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_OpenGLComponent.h rename to src/gui/components/special/juce_OpenGLComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp b/src/gui/components/special/juce_PreferencesPanel.cpp similarity index 95% rename from src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp rename to src/gui/components/special/juce_PreferencesPanel.cpp index 7683f5635f..56b13c257d 100644 --- a/src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp +++ b/src/gui/components/special/juce_PreferencesPanel.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/special/juce_PreferencesPanel.h b/src/gui/components/special/juce_PreferencesPanel.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_PreferencesPanel.h rename to src/gui/components/special/juce_PreferencesPanel.h diff --git a/src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h b/src/gui/components/special/juce_QuickTimeMovieComponent.h similarity index 96% rename from src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h rename to src/gui/components/special/juce_QuickTimeMovieComponent.h index 99c74764d9..28dc7dacbe 100644 --- a/src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h +++ b/src/gui/components/special/juce_QuickTimeMovieComponent.h @@ -26,7 +26,7 @@ #ifndef __JUCE_QUICKTIMEMOVIECOMPONENT_JUCEHEADER__ #define __JUCE_QUICKTIMEMOVIECOMPONENT_JUCEHEADER__ -#include "../../../../juce_core/io/files/juce_File.h" +#include "../../../io/files/juce_File.h" // this is used to disable QuickTime, and is defined in juce_Config.h #if JUCE_QUICKTIME || DOXYGEN diff --git a/src/juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp b/src/gui/components/special/juce_SystemTrayIconComponent.cpp similarity index 93% rename from src/juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp rename to src/gui/components/special/juce_SystemTrayIconComponent.cpp index 119efbeb55..0b7a7d0943 100644 --- a/src/juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp +++ b/src/gui/components/special/juce_SystemTrayIconComponent.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" #if JUCE_WIN32 || JUCE_LINUX diff --git a/src/juce_appframework/gui/components/special/juce_SystemTrayIconComponent.h b/src/gui/components/special/juce_SystemTrayIconComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_SystemTrayIconComponent.h rename to src/gui/components/special/juce_SystemTrayIconComponent.h diff --git a/src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h b/src/gui/components/special/juce_WebBrowserComponent.h similarity index 100% rename from src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h rename to src/gui/components/special/juce_WebBrowserComponent.h diff --git a/src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp b/src/gui/components/windows/juce_AlertWindow.cpp similarity index 96% rename from src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp rename to src/gui/components/windows/juce_AlertWindow.cpp index 754314bac2..8f4167dcb8 100644 --- a/src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp +++ b/src/gui/components/windows/juce_AlertWindow.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -33,7 +33,7 @@ BEGIN_JUCE_NAMESPACE #include "../controls/juce_TextEditor.h" #include "../controls/juce_ProgressBar.h" #include "../juce_Desktop.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" #include "../../../events/juce_MessageManager.h" #include "../../../application/juce_Application.h" diff --git a/src/juce_appframework/gui/components/windows/juce_AlertWindow.h b/src/gui/components/windows/juce_AlertWindow.h similarity index 100% rename from src/juce_appframework/gui/components/windows/juce_AlertWindow.h rename to src/gui/components/windows/juce_AlertWindow.h diff --git a/src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp b/src/gui/components/windows/juce_ComponentPeer.cpp similarity index 96% rename from src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp rename to src/gui/components/windows/juce_ComponentPeer.cpp index d2b73f17a1..6b99c5efda 100644 --- a/src/juce_appframework/gui/components/windows/juce_ComponentPeer.cpp +++ b/src/gui/components/windows/juce_ComponentPeer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -32,8 +32,8 @@ BEGIN_JUCE_NAMESPACE #include "../juce_ComponentDeletionWatcher.h" #include "../juce_Desktop.h" #include "../../../events/juce_MessageManager.h" -#include "../../../../juce_core/basics/juce_Time.h" -#include "../../../../juce_core/basics/juce_Random.h" +#include "../../../core/juce_Time.h" +#include "../../../core/juce_Random.h" #include "../layout/juce_ComponentBoundsConstrainer.h" #include "../mouse/juce_FileDragAndDropTarget.h" diff --git a/src/juce_appframework/gui/components/windows/juce_ComponentPeer.h b/src/gui/components/windows/juce_ComponentPeer.h similarity index 97% rename from src/juce_appframework/gui/components/windows/juce_ComponentPeer.h rename to src/gui/components/windows/juce_ComponentPeer.h index 7d0f3a5b81..d74e677809 100644 --- a/src/juce_appframework/gui/components/windows/juce_ComponentPeer.h +++ b/src/gui/components/windows/juce_ComponentPeer.h @@ -30,7 +30,7 @@ class Component; class Graphics; #include "../mouse/juce_MouseCursor.h" #include "../../../events/juce_MessageListener.h" -#include "../../../../juce_core/text/juce_StringArray.h" +#include "../../../text/juce_StringArray.h" #include "../../graphics/geometry/juce_RectangleList.h" class ComponentBoundsConstrainer; class ComponentDeletionWatcher; diff --git a/src/juce_appframework/gui/components/windows/juce_DialogWindow.cpp b/src/gui/components/windows/juce_DialogWindow.cpp similarity index 95% rename from src/juce_appframework/gui/components/windows/juce_DialogWindow.cpp rename to src/gui/components/windows/juce_DialogWindow.cpp index 6b58f84fc5..3905d1e895 100644 --- a/src/juce_appframework/gui/components/windows/juce_DialogWindow.cpp +++ b/src/gui/components/windows/juce_DialogWindow.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/windows/juce_DialogWindow.h b/src/gui/components/windows/juce_DialogWindow.h similarity index 100% rename from src/juce_appframework/gui/components/windows/juce_DialogWindow.h rename to src/gui/components/windows/juce_DialogWindow.h diff --git a/src/juce_appframework/gui/components/windows/juce_DocumentWindow.cpp b/src/gui/components/windows/juce_DocumentWindow.cpp similarity index 96% rename from src/juce_appframework/gui/components/windows/juce_DocumentWindow.cpp rename to src/gui/components/windows/juce_DocumentWindow.cpp index e81d99a7c1..2a82569ed9 100644 --- a/src/juce_appframework/gui/components/windows/juce_DocumentWindow.cpp +++ b/src/gui/components/windows/juce_DocumentWindow.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/windows/juce_DocumentWindow.h b/src/gui/components/windows/juce_DocumentWindow.h similarity index 100% rename from src/juce_appframework/gui/components/windows/juce_DocumentWindow.h rename to src/gui/components/windows/juce_DocumentWindow.h diff --git a/src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp b/src/gui/components/windows/juce_ResizableWindow.cpp similarity index 96% rename from src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp rename to src/gui/components/windows/juce_ResizableWindow.cpp index a31b1e8a6a..2ee1694246 100644 --- a/src/juce_appframework/gui/components/windows/juce_ResizableWindow.cpp +++ b/src/gui/components/windows/juce_ResizableWindow.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/windows/juce_ResizableWindow.h b/src/gui/components/windows/juce_ResizableWindow.h similarity index 100% rename from src/juce_appframework/gui/components/windows/juce_ResizableWindow.h rename to src/gui/components/windows/juce_ResizableWindow.h diff --git a/src/juce_appframework/gui/components/windows/juce_SplashScreen.cpp b/src/gui/components/windows/juce_SplashScreen.cpp similarity index 95% rename from src/juce_appframework/gui/components/windows/juce_SplashScreen.cpp rename to src/gui/components/windows/juce_SplashScreen.cpp index 1f88222e2a..0144aed86f 100644 --- a/src/juce_appframework/gui/components/windows/juce_SplashScreen.cpp +++ b/src/gui/components/windows/juce_SplashScreen.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/components/windows/juce_SplashScreen.h b/src/gui/components/windows/juce_SplashScreen.h similarity index 96% rename from src/juce_appframework/gui/components/windows/juce_SplashScreen.h rename to src/gui/components/windows/juce_SplashScreen.h index 466e272e2b..fbe350e9a2 100644 --- a/src/juce_appframework/gui/components/windows/juce_SplashScreen.h +++ b/src/gui/components/windows/juce_SplashScreen.h @@ -28,7 +28,7 @@ #include "../juce_Component.h" #include "../../../events/juce_Timer.h" -#include "../../../application/juce_DeletedAtShutdown.h" +#include "../../../utilities/juce_DeletedAtShutdown.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.cpp b/src/gui/components/windows/juce_ThreadWithProgressWindow.cpp similarity index 93% rename from src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.cpp rename to src/gui/components/windows/juce_ThreadWithProgressWindow.cpp index ec88ac0080..78ec3a462e 100644 --- a/src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.cpp +++ b/src/gui/components/windows/juce_ThreadWithProgressWindow.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ThreadWithProgressWindow.h" #include "../lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/text/juce_LocalisedStrings.h" +#include "../../../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.h b/src/gui/components/windows/juce_ThreadWithProgressWindow.h similarity index 96% rename from src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.h rename to src/gui/components/windows/juce_ThreadWithProgressWindow.h index 94e705dc71..ecebb1544b 100644 --- a/src/juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.h +++ b/src/gui/components/windows/juce_ThreadWithProgressWindow.h @@ -28,7 +28,7 @@ #include "../windows/juce_AlertWindow.h" #include "../../../events/juce_Timer.h" -#include "../../../../juce_core/threads/juce_Thread.h" +#include "../../../threads/juce_Thread.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/windows/juce_TooltipWindow.cpp b/src/gui/components/windows/juce_TooltipWindow.cpp similarity index 93% rename from src/juce_appframework/gui/components/windows/juce_TooltipWindow.cpp rename to src/gui/components/windows/juce_TooltipWindow.cpp index e2ef3a1af7..d59fd39fee 100644 --- a/src/juce_appframework/gui/components/windows/juce_TooltipWindow.cpp +++ b/src/gui/components/windows/juce_TooltipWindow.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_TooltipWindow.h" -#include "../../../../juce_core/basics/juce_Time.h" -#include "../../../../juce_core/threads/juce_Process.h" +#include "../../../core/juce_Time.h" +#include "../../../threads/juce_Process.h" #include "../lookandfeel/juce_LookAndFeel.h" #include "../juce_Desktop.h" diff --git a/src/juce_appframework/gui/components/windows/juce_TooltipWindow.h b/src/gui/components/windows/juce_TooltipWindow.h similarity index 100% rename from src/juce_appframework/gui/components/windows/juce_TooltipWindow.h rename to src/gui/components/windows/juce_TooltipWindow.h diff --git a/src/juce_appframework/gui/components/windows/juce_TopLevelWindow.cpp b/src/gui/components/windows/juce_TopLevelWindow.cpp similarity index 94% rename from src/juce_appframework/gui/components/windows/juce_TopLevelWindow.cpp rename to src/gui/components/windows/juce_TopLevelWindow.cpp index cb99fa94e1..74103e184a 100644 --- a/src/juce_appframework/gui/components/windows/juce_TopLevelWindow.cpp +++ b/src/gui/components/windows/juce_TopLevelWindow.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -32,8 +32,8 @@ BEGIN_JUCE_NAMESPACE #include "../juce_Desktop.h" #include "../lookandfeel/juce_LookAndFeel.h" #include "../special/juce_DropShadower.h" -#include "../../../../juce_core/threads/juce_Process.h" -#include "../../../../juce_core/basics/juce_Singleton.h" +#include "../../../threads/juce_Process.h" +#include "../../../core/juce_Singleton.h" //============================================================================== diff --git a/src/juce_appframework/gui/components/windows/juce_TopLevelWindow.h b/src/gui/components/windows/juce_TopLevelWindow.h similarity index 100% rename from src/juce_appframework/gui/components/windows/juce_TopLevelWindow.h rename to src/gui/components/windows/juce_TopLevelWindow.h diff --git a/src/juce_appframework/gui/graphics/brushes/juce_Brush.cpp b/src/gui/graphics/brushes/juce_Brush.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/brushes/juce_Brush.cpp rename to src/gui/graphics/brushes/juce_Brush.cpp index 27a4bf0d4e..41d8d2f4d6 100644 --- a/src/juce_appframework/gui/graphics/brushes/juce_Brush.cpp +++ b/src/gui/graphics/brushes/juce_Brush.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/brushes/juce_Brush.h b/src/gui/graphics/brushes/juce_Brush.h similarity index 100% rename from src/juce_appframework/gui/graphics/brushes/juce_Brush.h rename to src/gui/graphics/brushes/juce_Brush.h diff --git a/src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.cpp b/src/gui/graphics/brushes/juce_GradientBrush.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.cpp rename to src/gui/graphics/brushes/juce_GradientBrush.cpp index ba3c6bff99..b9a003fa0f 100644 --- a/src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.cpp +++ b/src/gui/graphics/brushes/juce_GradientBrush.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.h b/src/gui/graphics/brushes/juce_GradientBrush.h similarity index 100% rename from src/juce_appframework/gui/graphics/brushes/juce_GradientBrush.h rename to src/gui/graphics/brushes/juce_GradientBrush.h diff --git a/src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.cpp b/src/gui/graphics/brushes/juce_ImageBrush.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.cpp rename to src/gui/graphics/brushes/juce_ImageBrush.cpp index 4a055fe44c..349939e3bb 100644 --- a/src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.cpp +++ b/src/gui/graphics/brushes/juce_ImageBrush.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.h b/src/gui/graphics/brushes/juce_ImageBrush.h similarity index 100% rename from src/juce_appframework/gui/graphics/brushes/juce_ImageBrush.h rename to src/gui/graphics/brushes/juce_ImageBrush.h diff --git a/src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.cpp b/src/gui/graphics/brushes/juce_SolidColourBrush.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.cpp rename to src/gui/graphics/brushes/juce_SolidColourBrush.cpp index 60160bdf8b..9eb809fa10 100644 --- a/src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.cpp +++ b/src/gui/graphics/brushes/juce_SolidColourBrush.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.h b/src/gui/graphics/brushes/juce_SolidColourBrush.h similarity index 100% rename from src/juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.h rename to src/gui/graphics/brushes/juce_SolidColourBrush.h diff --git a/src/juce_appframework/gui/graphics/colour/juce_Colour.cpp b/src/gui/graphics/colour/juce_Colour.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/colour/juce_Colour.cpp rename to src/gui/graphics/colour/juce_Colour.cpp index c0325ce051..0bc21d9191 100644 --- a/src/juce_appframework/gui/graphics/colour/juce_Colour.cpp +++ b/src/gui/graphics/colour/juce_Colour.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/colour/juce_Colour.h b/src/gui/graphics/colour/juce_Colour.h similarity index 96% rename from src/juce_appframework/gui/graphics/colour/juce_Colour.h rename to src/gui/graphics/colour/juce_Colour.h index 59d3049688..7f797b7312 100644 --- a/src/juce_appframework/gui/graphics/colour/juce_Colour.h +++ b/src/gui/graphics/colour/juce_Colour.h @@ -48,7 +48,7 @@ public: /** Creates a colour from a 32-bit ARGB value. The format of this number is: - ((alpha << 24) | (red << 16) | (green << 16) | blue). + ((alpha << 24) | (red << 16) | (green << 8) | blue). All components in the range 0x00 to 0xff. An alpha of 0x00 is completely transparent, alpha of 0xff is opaque. diff --git a/src/juce_appframework/gui/graphics/colour/juce_ColourGradient.cpp b/src/gui/graphics/colour/juce_ColourGradient.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/colour/juce_ColourGradient.cpp rename to src/gui/graphics/colour/juce_ColourGradient.cpp index ee61bb0e22..28131b6366 100644 --- a/src/juce_appframework/gui/graphics/colour/juce_ColourGradient.cpp +++ b/src/gui/graphics/colour/juce_ColourGradient.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/colour/juce_ColourGradient.h b/src/gui/graphics/colour/juce_ColourGradient.h similarity index 96% rename from src/juce_appframework/gui/graphics/colour/juce_ColourGradient.h rename to src/gui/graphics/colour/juce_ColourGradient.h index 2158804e09..348deb9f69 100644 --- a/src/juce_appframework/gui/graphics/colour/juce_ColourGradient.h +++ b/src/gui/graphics/colour/juce_ColourGradient.h @@ -28,7 +28,7 @@ #include "juce_Colour.h" #include "../geometry/juce_AffineTransform.h" -#include "../../../../juce_core/containers/juce_Array.h" +#include "../../../containers/juce_Array.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/colour/juce_Colours.cpp b/src/gui/graphics/colour/juce_Colours.cpp similarity index 97% rename from src/juce_appframework/gui/graphics/colour/juce_Colours.cpp rename to src/gui/graphics/colour/juce_Colours.cpp index 8404c851f7..ce73cb069d 100644 --- a/src/juce_appframework/gui/graphics/colour/juce_Colours.cpp +++ b/src/gui/graphics/colour/juce_Colours.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/colour/juce_Colours.h b/src/gui/graphics/colour/juce_Colours.h similarity index 97% rename from src/juce_appframework/gui/graphics/colour/juce_Colours.h rename to src/gui/graphics/colour/juce_Colours.h index 60a7744804..458bd06881 100644 --- a/src/juce_appframework/gui/graphics/colour/juce_Colours.h +++ b/src/gui/graphics/colour/juce_Colours.h @@ -27,7 +27,7 @@ #define __JUCE_COLOURS_JUCEHEADER__ #include "juce_Colour.h" -#include "../../../../juce_core/text/juce_String.h" +#include "../../../text/juce_String.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/colour/juce_PixelFormats.h b/src/gui/graphics/colour/juce_PixelFormats.h similarity index 100% rename from src/juce_appframework/gui/graphics/colour/juce_PixelFormats.h rename to src/gui/graphics/colour/juce_PixelFormats.h diff --git a/src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.cpp b/src/gui/graphics/contexts/juce_EdgeTable.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.cpp rename to src/gui/graphics/contexts/juce_EdgeTable.cpp index c49e31f4ad..0d2324d660 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.cpp +++ b/src/gui/graphics/contexts/juce_EdgeTable.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.h b/src/gui/graphics/contexts/juce_EdgeTable.h similarity index 97% rename from src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.h rename to src/gui/graphics/contexts/juce_EdgeTable.h index bd8c1f949e..3725e39e55 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_EdgeTable.h +++ b/src/gui/graphics/contexts/juce_EdgeTable.h @@ -27,7 +27,7 @@ #define __JUCE_EDGETABLE_JUCEHEADER__ #include "../geometry/juce_AffineTransform.h" -#include "../../../../juce_core/containers/juce_MemoryBlock.h" +#include "../../../containers/juce_MemoryBlock.h" class Path; static const int juce_edgeTableDefaultEdgesPerLine = 10; diff --git a/src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp b/src/gui/graphics/contexts/juce_Graphics.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp rename to src/gui/graphics/contexts/juce_Graphics.cpp index 4452405947..013d74d737 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_Graphics.cpp +++ b/src/gui/graphics/contexts/juce_Graphics.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/contexts/juce_Graphics.h b/src/gui/graphics/contexts/juce_Graphics.h similarity index 100% rename from src/juce_appframework/gui/graphics/contexts/juce_Graphics.h rename to src/gui/graphics/contexts/juce_Graphics.h diff --git a/src/juce_appframework/gui/graphics/contexts/juce_Justification.cpp b/src/gui/graphics/contexts/juce_Justification.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/contexts/juce_Justification.cpp rename to src/gui/graphics/contexts/juce_Justification.cpp index 56801231d3..1fc77234bb 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_Justification.cpp +++ b/src/gui/graphics/contexts/juce_Justification.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/contexts/juce_Justification.h b/src/gui/graphics/contexts/juce_Justification.h similarity index 100% rename from src/juce_appframework/gui/graphics/contexts/juce_Justification.h rename to src/gui/graphics/contexts/juce_Justification.h diff --git a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsContext.h b/src/gui/graphics/contexts/juce_LowLevelGraphicsContext.h similarity index 100% rename from src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsContext.h rename to src/gui/graphics/contexts/juce_LowLevelGraphicsContext.h diff --git a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp b/src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp rename to src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp index bee9688540..46ccae7ae3 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp +++ b/src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -33,7 +33,7 @@ BEGIN_JUCE_NAMESPACE #include "../colour/juce_PixelFormats.h" #include "../geometry/juce_PathStrokeType.h" #include "../geometry/juce_Rectangle.h" -#include "../../../../juce_core/containers/juce_SparseSet.h" +#include "../../../containers/juce_SparseSet.h" #if JUCE_MSVC #pragma warning (disable: 4996) // deprecated sprintf warning diff --git a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h b/src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h similarity index 100% rename from src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h rename to src/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h diff --git a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp b/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp rename to src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp index 6cb48be236..2166e33620 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp +++ b/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -33,7 +33,7 @@ BEGIN_JUCE_NAMESPACE #include "../colour/juce_PixelFormats.h" #include "../geometry/juce_PathStrokeType.h" #include "../geometry/juce_Rectangle.h" -#include "../../../../juce_core/basics/juce_SystemStats.h" +#include "../../../core/juce_SystemStats.h" #if ! (defined (JUCE_MAC) || (defined (JUCE_WIN32) && defined (JUCE_64BIT))) #define JUCE_USE_SSE_INSTRUCTIONS 1 diff --git a/src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h b/src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h similarity index 100% rename from src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h rename to src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h diff --git a/src/juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.cpp b/src/gui/graphics/contexts/juce_RectanglePlacement.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.cpp rename to src/gui/graphics/contexts/juce_RectanglePlacement.cpp index e6e54f4b82..5695883e92 100644 --- a/src/juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.cpp +++ b/src/gui/graphics/contexts/juce_RectanglePlacement.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.h b/src/gui/graphics/contexts/juce_RectanglePlacement.h similarity index 100% rename from src/juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.h rename to src/gui/graphics/contexts/juce_RectanglePlacement.h diff --git a/src/juce_appframework/gui/graphics/drawables/juce_Drawable.cpp b/src/gui/graphics/drawables/juce_Drawable.cpp similarity index 91% rename from src/juce_appframework/gui/graphics/drawables/juce_Drawable.cpp rename to src/gui/graphics/drawables/juce_Drawable.cpp index 3d36115e65..a392e62829 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_Drawable.cpp +++ b/src/gui/graphics/drawables/juce_Drawable.cpp @@ -23,15 +23,15 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_Drawable.h" #include "juce_DrawableImage.h" #include "../imaging/juce_ImageFileFormat.h" -#include "../../../../juce_core/text/juce_XmlDocument.h" -#include "../../../../juce_core/io/files/juce_FileInputStream.h" +#include "../../../text/juce_XmlDocument.h" +#include "../../../io/files/juce_FileInputStream.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/drawables/juce_Drawable.h b/src/gui/graphics/drawables/juce_Drawable.h similarity index 96% rename from src/juce_appframework/gui/graphics/drawables/juce_Drawable.h rename to src/gui/graphics/drawables/juce_Drawable.h index 9ccb2d9c4b..4a30476733 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_Drawable.h +++ b/src/gui/graphics/drawables/juce_Drawable.h @@ -27,7 +27,7 @@ #define __JUCE_DRAWABLE_JUCEHEADER__ #include "../contexts/juce_Graphics.h" -#include "../../../../juce_core/text/juce_XmlElement.h" +#include "../../../text/juce_XmlElement.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.cpp b/src/gui/graphics/drawables/juce_DrawableComposite.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.cpp rename to src/gui/graphics/drawables/juce_DrawableComposite.cpp index 580dd04b0e..fb64d8dc3a 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.cpp +++ b/src/gui/graphics/drawables/juce_DrawableComposite.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.h b/src/gui/graphics/drawables/juce_DrawableComposite.h similarity index 100% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawableComposite.h rename to src/gui/graphics/drawables/juce_DrawableComposite.h diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.cpp b/src/gui/graphics/drawables/juce_DrawableImage.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.cpp rename to src/gui/graphics/drawables/juce_DrawableImage.cpp index 404aa811f0..dcf91810d1 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.cpp +++ b/src/gui/graphics/drawables/juce_DrawableImage.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.h b/src/gui/graphics/drawables/juce_DrawableImage.h similarity index 100% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawableImage.h rename to src/gui/graphics/drawables/juce_DrawableImage.h diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.cpp b/src/gui/graphics/drawables/juce_DrawablePath.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.cpp rename to src/gui/graphics/drawables/juce_DrawablePath.cpp index 10f276e139..def3254094 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.cpp +++ b/src/gui/graphics/drawables/juce_DrawablePath.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.h b/src/gui/graphics/drawables/juce_DrawablePath.h similarity index 100% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawablePath.h rename to src/gui/graphics/drawables/juce_DrawablePath.h diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawableText.cpp b/src/gui/graphics/drawables/juce_DrawableText.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawableText.cpp rename to src/gui/graphics/drawables/juce_DrawableText.cpp index 38cdcd783a..15f49cc841 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_DrawableText.cpp +++ b/src/gui/graphics/drawables/juce_DrawableText.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/drawables/juce_DrawableText.h b/src/gui/graphics/drawables/juce_DrawableText.h similarity index 100% rename from src/juce_appframework/gui/graphics/drawables/juce_DrawableText.h rename to src/gui/graphics/drawables/juce_DrawableText.h diff --git a/src/juce_appframework/gui/graphics/drawables/juce_SVGParser.cpp b/src/gui/graphics/drawables/juce_SVGParser.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/drawables/juce_SVGParser.cpp rename to src/gui/graphics/drawables/juce_SVGParser.cpp index 7014df5dab..b0d5761144 100644 --- a/src/juce_appframework/gui/graphics/drawables/juce_SVGParser.cpp +++ b/src/gui/graphics/drawables/juce_SVGParser.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.cpp b/src/gui/graphics/effects/juce_DropShadowEffect.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.cpp rename to src/gui/graphics/effects/juce_DropShadowEffect.cpp index 86971bc73f..5fb65f2c23 100644 --- a/src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.cpp +++ b/src/gui/graphics/effects/juce_DropShadowEffect.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.h b/src/gui/graphics/effects/juce_DropShadowEffect.h similarity index 100% rename from src/juce_appframework/gui/graphics/effects/juce_DropShadowEffect.h rename to src/gui/graphics/effects/juce_DropShadowEffect.h diff --git a/src/juce_appframework/gui/graphics/effects/juce_GlowEffect.cpp b/src/gui/graphics/effects/juce_GlowEffect.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/effects/juce_GlowEffect.cpp rename to src/gui/graphics/effects/juce_GlowEffect.cpp index 096b8dc2e5..9ea0994c50 100644 --- a/src/juce_appframework/gui/graphics/effects/juce_GlowEffect.cpp +++ b/src/gui/graphics/effects/juce_GlowEffect.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/effects/juce_GlowEffect.h b/src/gui/graphics/effects/juce_GlowEffect.h similarity index 100% rename from src/juce_appframework/gui/graphics/effects/juce_GlowEffect.h rename to src/gui/graphics/effects/juce_GlowEffect.h diff --git a/src/juce_appframework/gui/graphics/effects/juce_ImageEffectFilter.h b/src/gui/graphics/effects/juce_ImageEffectFilter.h similarity index 100% rename from src/juce_appframework/gui/graphics/effects/juce_ImageEffectFilter.h rename to src/gui/graphics/effects/juce_ImageEffectFilter.h diff --git a/src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.cpp b/src/gui/graphics/effects/juce_ReduceOpacityEffect.cpp similarity index 93% rename from src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.cpp rename to src/gui/graphics/effects/juce_ReduceOpacityEffect.cpp index 1ae5754d36..1e363e9290 100644 --- a/src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.cpp +++ b/src/gui/graphics/effects/juce_ReduceOpacityEffect.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.h b/src/gui/graphics/effects/juce_ReduceOpacityEffect.h similarity index 100% rename from src/juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.h rename to src/gui/graphics/effects/juce_ReduceOpacityEffect.h diff --git a/src/juce_appframework/gui/graphics/fonts/juce_Font.cpp b/src/gui/graphics/fonts/juce_Font.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/fonts/juce_Font.cpp rename to src/gui/graphics/fonts/juce_Font.cpp index d6991b65f3..7ed9ac9cdd 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_Font.cpp +++ b/src/gui/graphics/fonts/juce_Font.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/fonts/juce_Font.h b/src/gui/graphics/fonts/juce_Font.h similarity index 96% rename from src/juce_appframework/gui/graphics/fonts/juce_Font.h rename to src/gui/graphics/fonts/juce_Font.h index 22162eafc3..1cff092d39 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_Font.h +++ b/src/gui/graphics/fonts/juce_Font.h @@ -27,9 +27,9 @@ #define __JUCE_FONT_JUCEHEADER__ #include "juce_Typeface.h" -#include "../../../../juce_core/text/juce_StringArray.h" -#include "../../../../juce_core/containers/juce_ReferenceCountedObject.h" -#include "../../../../juce_core/containers/juce_OwnedArray.h" +#include "../../../text/juce_StringArray.h" +#include "../../../containers/juce_ReferenceCountedObject.h" +#include "../../../containers/juce_OwnedArray.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp b/src/gui/graphics/fonts/juce_GlyphArrangement.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp rename to src/gui/graphics/fonts/juce_GlyphArrangement.cpp index 99d69e6816..ee546f3366 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp +++ b/src/gui/graphics/fonts/juce_GlyphArrangement.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_GlyphArrangement.h" #include "../contexts/juce_LowLevelGraphicsSoftwareRenderer.h" #include "../imaging/juce_Image.h" -#include "../../../application/juce_DeletedAtShutdown.h" +#include "../../../utilities/juce_DeletedAtShutdown.h" #define SHOULD_WRAP(x, wrapwidth) (((x) - 0.0001f) >= (wrapwidth)) diff --git a/src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.h b/src/gui/graphics/fonts/juce_GlyphArrangement.h similarity index 100% rename from src/juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.h rename to src/gui/graphics/fonts/juce_GlyphArrangement.h diff --git a/src/juce_appframework/gui/graphics/fonts/juce_TextLayout.cpp b/src/gui/graphics/fonts/juce_TextLayout.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/fonts/juce_TextLayout.cpp rename to src/gui/graphics/fonts/juce_TextLayout.cpp index 5eb9e1a00c..5cae8f1472 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_TextLayout.cpp +++ b/src/gui/graphics/fonts/juce_TextLayout.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/fonts/juce_TextLayout.h b/src/gui/graphics/fonts/juce_TextLayout.h similarity index 100% rename from src/juce_appframework/gui/graphics/fonts/juce_TextLayout.h rename to src/gui/graphics/fonts/juce_TextLayout.h diff --git a/src/juce_appframework/gui/graphics/fonts/juce_Typeface.cpp b/src/gui/graphics/fonts/juce_Typeface.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/fonts/juce_Typeface.cpp rename to src/gui/graphics/fonts/juce_Typeface.cpp index 33832b538a..e2a415120c 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_Typeface.cpp +++ b/src/gui/graphics/fonts/juce_Typeface.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -31,10 +31,10 @@ BEGIN_JUCE_NAMESPACE #include "juce_Typeface.h" #include "juce_Font.h" #include "../../components/lookandfeel/juce_LookAndFeel.h" -#include "../../../../juce_core/io/streams/juce_GZIPDecompressorInputStream.h" -#include "../../../../juce_core/io/streams/juce_GZIPCompressorOutputStream.h" -#include "../../../../juce_core/io/streams/juce_BufferedInputStream.h" -#include "../../../application/juce_DeletedAtShutdown.h" +#include "../../../io/streams/juce_GZIPDecompressorInputStream.h" +#include "../../../io/streams/juce_GZIPCompressorOutputStream.h" +#include "../../../io/streams/juce_BufferedInputStream.h" +#include "../../../utilities/juce_DeletedAtShutdown.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/fonts/juce_Typeface.h b/src/gui/graphics/fonts/juce_Typeface.h similarity index 95% rename from src/juce_appframework/gui/graphics/fonts/juce_Typeface.h rename to src/gui/graphics/fonts/juce_Typeface.h index fa6f080470..fe5db962be 100644 --- a/src/juce_appframework/gui/graphics/fonts/juce_Typeface.h +++ b/src/gui/graphics/fonts/juce_Typeface.h @@ -26,10 +26,10 @@ #ifndef __JUCE_TYPEFACE_JUCEHEADER__ #define __JUCE_TYPEFACE_JUCEHEADER__ -#include "../../../../juce_core/containers/juce_ReferenceCountedObject.h" -#include "../../../../juce_core/containers/juce_VoidArray.h" -#include "../../../../juce_core/io/juce_InputStream.h" -#include "../../../../juce_core/io/juce_OutputStream.h" +#include "../../../containers/juce_ReferenceCountedObject.h" +#include "../../../containers/juce_VoidArray.h" +#include "../../../io/streams/juce_InputStream.h" +#include "../../../io/streams/juce_OutputStream.h" #include "../geometry/juce_Path.h" class Font; class Typeface; diff --git a/src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.cpp b/src/gui/graphics/geometry/juce_AffineTransform.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.cpp rename to src/gui/graphics/geometry/juce_AffineTransform.cpp index d69289836d..711b89b118 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.cpp +++ b/src/gui/graphics/geometry/juce_AffineTransform.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.h b/src/gui/graphics/geometry/juce_AffineTransform.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_AffineTransform.h rename to src/gui/graphics/geometry/juce_AffineTransform.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_BorderSize.cpp b/src/gui/graphics/geometry/juce_BorderSize.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/geometry/juce_BorderSize.cpp rename to src/gui/graphics/geometry/juce_BorderSize.cpp index 54cd095d93..d7c121be36 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_BorderSize.cpp +++ b/src/gui/graphics/geometry/juce_BorderSize.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_BorderSize.h b/src/gui/graphics/geometry/juce_BorderSize.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_BorderSize.h rename to src/gui/graphics/geometry/juce_BorderSize.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Line.cpp b/src/gui/graphics/geometry/juce_Line.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/geometry/juce_Line.cpp rename to src/gui/graphics/geometry/juce_Line.cpp index 8d1dc46747..e86688cc4f 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_Line.cpp +++ b/src/gui/graphics/geometry/juce_Line.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Line.h b/src/gui/graphics/geometry/juce_Line.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_Line.h rename to src/gui/graphics/geometry/juce_Line.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Path.cpp b/src/gui/graphics/geometry/juce_Path.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/geometry/juce_Path.cpp rename to src/gui/graphics/geometry/juce_Path.cpp index d982ca9e7d..af10c2f7c1 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_Path.cpp +++ b/src/gui/graphics/geometry/juce_Path.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_PathIterator.h" #include "juce_Line.h" -#include "../../../../juce_core/io/streams/juce_MemoryInputStream.h" +#include "../../../io/streams/juce_MemoryInputStream.h" // tests that some co-ords aren't NaNs #define CHECK_COORDS_ARE_VALID(x, y) \ diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Path.h b/src/gui/graphics/geometry/juce_Path.h similarity index 97% rename from src/juce_appframework/gui/graphics/geometry/juce_Path.h rename to src/gui/graphics/geometry/juce_Path.h index a78a869c1f..8fa2ff0bdb 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_Path.h +++ b/src/gui/graphics/geometry/juce_Path.h @@ -29,9 +29,9 @@ #include "juce_AffineTransform.h" #include "juce_Point.h" #include "../contexts/juce_Justification.h" -#include "../../../../juce_core/containers/juce_Array.h" -#include "../../../../juce_core/io/juce_InputStream.h" -#include "../../../../juce_core/io/juce_OutputStream.h" +#include "../../../containers/juce_Array.h" +#include "../../../io/streams/juce_InputStream.h" +#include "../../../io/streams/juce_OutputStream.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/geometry/juce_PathIterator.cpp b/src/gui/graphics/geometry/juce_PathIterator.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/geometry/juce_PathIterator.cpp rename to src/gui/graphics/geometry/juce_PathIterator.cpp index 18e6c603d8..ef7e54b2f0 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_PathIterator.cpp +++ b/src/gui/graphics/geometry/juce_PathIterator.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_PathIterator.h b/src/gui/graphics/geometry/juce_PathIterator.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_PathIterator.h rename to src/gui/graphics/geometry/juce_PathIterator.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.cpp b/src/gui/graphics/geometry/juce_PathStrokeType.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.cpp rename to src/gui/graphics/geometry/juce_PathStrokeType.cpp index 0930a09a38..845ac9aa0a 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.cpp +++ b/src/gui/graphics/geometry/juce_PathStrokeType.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_PathStrokeType.h" #include "juce_PathIterator.h" -#include "../../../../juce_core/containers/juce_VoidArray.h" +#include "../../../containers/juce_VoidArray.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.h b/src/gui/graphics/geometry/juce_PathStrokeType.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_PathStrokeType.h rename to src/gui/graphics/geometry/juce_PathStrokeType.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Point.cpp b/src/gui/graphics/geometry/juce_Point.cpp similarity index 93% rename from src/juce_appframework/gui/graphics/geometry/juce_Point.cpp rename to src/gui/graphics/geometry/juce_Point.cpp index aa6ec564e3..0498324047 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_Point.cpp +++ b/src/gui/graphics/geometry/juce_Point.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Point.h b/src/gui/graphics/geometry/juce_Point.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_Point.h rename to src/gui/graphics/geometry/juce_Point.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp b/src/gui/graphics/geometry/juce_PositionedRectangle.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp rename to src/gui/graphics/geometry/juce_PositionedRectangle.cpp index bf6520a192..edb90779d0 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp +++ b/src/gui/graphics/geometry/juce_PositionedRectangle.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.h b/src/gui/graphics/geometry/juce_PositionedRectangle.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.h rename to src/gui/graphics/geometry/juce_PositionedRectangle.h diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Rectangle.cpp b/src/gui/graphics/geometry/juce_Rectangle.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/geometry/juce_Rectangle.cpp rename to src/gui/graphics/geometry/juce_Rectangle.cpp index dcfd5931fb..5c18eb0f39 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_Rectangle.cpp +++ b/src/gui/graphics/geometry/juce_Rectangle.cpp @@ -23,12 +23,12 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_Rectangle.h" -#include "../../../../juce_core/text/juce_StringArray.h" +#include "../../../text/juce_StringArray.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/geometry/juce_Rectangle.h b/src/gui/graphics/geometry/juce_Rectangle.h similarity index 97% rename from src/juce_appframework/gui/graphics/geometry/juce_Rectangle.h rename to src/gui/graphics/geometry/juce_Rectangle.h index 3bc968447b..03326d6e51 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_Rectangle.h +++ b/src/gui/graphics/geometry/juce_Rectangle.h @@ -26,7 +26,7 @@ #ifndef __JUCE_RECTANGLE_JUCEHEADER__ #define __JUCE_RECTANGLE_JUCEHEADER__ -#include "../../../../juce_core/text/juce_String.h" +#include "../../../text/juce_String.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp b/src/gui/graphics/geometry/juce_RectangleList.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp rename to src/gui/graphics/geometry/juce_RectangleList.cpp index 863f8fde3d..c75bb6281f 100644 --- a/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp +++ b/src/gui/graphics/geometry/juce_RectangleList.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/geometry/juce_RectangleList.h b/src/gui/graphics/geometry/juce_RectangleList.h similarity index 100% rename from src/juce_appframework/gui/graphics/geometry/juce_RectangleList.h rename to src/gui/graphics/geometry/juce_RectangleList.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/README b/src/gui/graphics/imaging/image_file_formats/jpglib/README similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/README rename to src/gui/graphics/imaging/image_file_formats/jpglib/README diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/cderror.h b/src/gui/graphics/imaging/image_file_formats/jpglib/cderror.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/cderror.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/cderror.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/changes to libjpeg for JUCE.txt b/src/gui/graphics/imaging/image_file_formats/jpglib/changes to libjpeg for JUCE.txt similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/changes to libjpeg for JUCE.txt rename to src/gui/graphics/imaging/image_file_formats/jpglib/changes to libjpeg for JUCE.txt diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcapimin.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcapimin.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcapimin.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcapimin.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcapistd.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcapistd.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcapistd.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcapistd.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jccoefct.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jccoefct.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jccoefct.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jccoefct.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jccolor.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jccolor.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jccolor.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jccolor.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcdctmgr.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcdctmgr.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcdctmgr.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcdctmgr.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jchuff.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jchuff.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jchuff.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jchuff.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jchuff.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jchuff.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jchuff.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jchuff.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcinit.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcinit.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcinit.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcinit.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcmainct.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcmainct.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcmainct.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcmainct.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcmarker.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcmarker.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcmarker.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcmarker.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcmaster.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcmaster.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcmaster.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcmaster.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcomapi.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcomapi.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcomapi.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcomapi.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jconfig.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jconfig.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jconfig.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jconfig.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcparam.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcparam.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcparam.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcparam.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcphuff.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcphuff.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcphuff.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcphuff.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcprepct.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcprepct.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcprepct.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcprepct.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcsample.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jcsample.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jcsample.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jcsample.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jctrans.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jctrans.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jctrans.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jctrans.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdapimin.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdapimin.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdapimin.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdapimin.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdapistd.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdapistd.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdapistd.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdapistd.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdatasrc.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdatasrc.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdatasrc.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdatasrc.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdcoefct.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdcoefct.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdcoefct.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdcoefct.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdcolor.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdcolor.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdcolor.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdcolor.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdct.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jdct.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdct.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdct.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jddctmgr.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jddctmgr.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jddctmgr.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jddctmgr.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdhuff.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdinput.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdinput.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdinput.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdinput.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmainct.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdmainct.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmainct.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdmainct.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmarker.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdmarker.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmarker.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdmarker.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmaster.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdmaster.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmaster.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdmaster.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmerge.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdmerge.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdmerge.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdmerge.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdphuff.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdphuff.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdphuff.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdphuff.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdpostct.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdpostct.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdpostct.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdpostct.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdsample.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdsample.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdsample.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdsample.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdtrans.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jdtrans.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jdtrans.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jdtrans.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jerror.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jerror.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jerror.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jerror.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jerror.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jerror.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jerror.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jerror.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jfdctflt.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jfdctflt.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jfdctflt.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jfdctflt.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jfdctfst.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jfdctfst.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jfdctfst.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jfdctfst.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jfdctint.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jfdctint.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jfdctint.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jfdctint.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctflt.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jidctflt.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctflt.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jidctflt.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctfst.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jidctfst.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctfst.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jidctfst.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctint.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jidctint.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctint.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jidctint.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctred.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jidctred.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jidctred.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jidctred.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jinclude.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jinclude.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jinclude.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jinclude.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmemmgr.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jmemmgr.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmemmgr.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jmemmgr.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmemnobs.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jmemnobs.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmemnobs.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jmemnobs.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmemsys.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jmemsys.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmemsys.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jmemsys.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmorecfg.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jmorecfg.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jmorecfg.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jmorecfg.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jpegint.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jpegint.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jpegint.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jpegint.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jpeglib.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jpeglib.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jpeglib.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jpeglib.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jquant1.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jquant1.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jquant1.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jquant1.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jquant2.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jquant2.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jquant2.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jquant2.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jutils.c b/src/gui/graphics/imaging/image_file_formats/jpglib/jutils.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jutils.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/jutils.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jversion.h b/src/gui/graphics/imaging/image_file_formats/jpglib/jversion.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/jversion.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/jversion.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/transupp.c b/src/gui/graphics/imaging/image_file_formats/jpglib/transupp.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/transupp.c rename to src/gui/graphics/imaging/image_file_formats/jpglib/transupp.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/transupp.h b/src/gui/graphics/imaging/image_file_formats/jpglib/transupp.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/jpglib/transupp.h rename to src/gui/graphics/imaging/image_file_formats/jpglib/transupp.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp b/src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp rename to src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp index 2c5b8b9f67..2e1378d21d 100644 --- a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp +++ b/src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h b/src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h similarity index 94% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h rename to src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h index 95dc54d35b..756f6b523b 100644 --- a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h +++ b/src/gui/graphics/imaging/image_file_formats/juce_GIFLoader.h @@ -28,7 +28,7 @@ #ifndef DOXYGEN -#include "../../../../../juce_core/io/juce_InputStream.h" +#include "../../../../io/streams/juce_InputStream.h" #include "../juce_Image.h" diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp b/src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp rename to src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp index 93908e30d5..2a19546df4 100644 --- a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp +++ b/src/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../../core/juce_StandardHeader.h" #if JUCE_MSVC #pragma warning (push) @@ -121,8 +121,8 @@ namespace jpeglibNamespace BEGIN_JUCE_NAMESPACE #include "../juce_Image.h" -#include "../../../../../juce_core/io/juce_InputStream.h" -#include "../../../../../juce_core/io/juce_OutputStream.h" +#include "../../../../io/streams/juce_InputStream.h" +#include "../../../../io/streams/juce_OutputStream.h" #include "../../colour/juce_PixelFormats.h" using namespace jpeglibNamespace; diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp b/src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp rename to src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp index a6cd6c9df8..96a623e00c 100644 --- a/src/juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp +++ b/src/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../../core/juce_StandardHeader.h" #ifdef _MSC_VER #pragma warning (push) @@ -35,7 +35,7 @@ namespace zlibNamespace #if JUCE_INCLUDE_ZLIB_CODE #undef OS_CODE #undef fdopen - #include "../../../../../juce_core/io/streams/zlib/zlib.h" + #include "../../../../io/streams/zlib/zlib.h" #undef OS_CODE #else #include @@ -98,8 +98,8 @@ BEGIN_JUCE_NAMESPACE #include "../juce_Image.h" -#include "../../../../../juce_core/io/juce_InputStream.h" -#include "../../../../../juce_core/io/juce_OutputStream.h" +#include "../../../../io/streams/juce_InputStream.h" +#include "../../../../io/streams/juce_OutputStream.h" #include "../../colour/juce_PixelFormats.h" using namespace pnglibNamespace; diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/LICENSE b/src/gui/graphics/imaging/image_file_formats/pnglib/LICENSE similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/LICENSE rename to src/gui/graphics/imaging/image_file_formats/pnglib/LICENSE diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/libpng_readme.txt b/src/gui/graphics/imaging/image_file_formats/pnglib/libpng_readme.txt similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/libpng_readme.txt rename to src/gui/graphics/imaging/image_file_formats/pnglib/libpng_readme.txt diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/png.c b/src/gui/graphics/imaging/image_file_formats/pnglib/png.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/png.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/png.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/png.h b/src/gui/graphics/imaging/image_file_formats/pnglib/png.h similarity index 97% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/png.h rename to src/gui/graphics/imaging/image_file_formats/pnglib/png.h index a25c358a50..367dfb47e5 100644 --- a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/png.h +++ b/src/gui/graphics/imaging/image_file_formats/pnglib/png.h @@ -409,7 +409,7 @@ #ifndef PNG_VERSION_INFO_ONLY /* include the compression library's header */ -#include "../../../../../../juce_core/io/streams/zlib/zlib.h" +#include "../../../../../io/streams/zlib/zlib.h" #endif /* include all user configurable info, including optional assembler routines */ diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngconf.h b/src/gui/graphics/imaging/image_file_formats/pnglib/pngconf.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngconf.h rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngconf.h diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngerror.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngerror.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngerror.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngerror.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngget.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngget.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngget.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngget.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngmem.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngmem.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngmem.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngmem.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngpread.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngpread.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngpread.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngpread.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngread.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngread.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngread.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngread.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngrio.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngrio.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngrio.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngrio.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngrtran.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngrtran.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngrtran.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngrtran.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngrutil.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngrutil.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngrutil.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngrutil.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngset.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngset.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngset.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngset.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngtrans.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngtrans.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngtrans.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngtrans.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwio.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngwio.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwio.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngwio.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwrite.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngwrite.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwrite.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngwrite.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwtran.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngwtran.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwtran.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngwtran.c diff --git a/src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwutil.c b/src/gui/graphics/imaging/image_file_formats/pnglib/pngwutil.c similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwutil.c rename to src/gui/graphics/imaging/image_file_formats/pnglib/pngwutil.c diff --git a/src/juce_appframework/gui/graphics/imaging/juce_CameraDevice.h b/src/gui/graphics/imaging/juce_CameraDevice.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/juce_CameraDevice.h rename to src/gui/graphics/imaging/juce_CameraDevice.h diff --git a/src/juce_appframework/gui/graphics/imaging/juce_Image.cpp b/src/gui/graphics/imaging/juce_Image.cpp similarity index 95% rename from src/juce_appframework/gui/graphics/imaging/juce_Image.cpp rename to src/gui/graphics/imaging/juce_Image.cpp index c20566d82d..82ad0acfb3 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_Image.cpp +++ b/src/gui/graphics/imaging/juce_Image.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -33,7 +33,7 @@ BEGIN_JUCE_NAMESPACE #include "../contexts/juce_LowLevelGraphicsSoftwareRenderer.h" #include "../brushes/juce_GradientBrush.h" #include "../colour/juce_PixelFormats.h" -#include "../../../../juce_core/containers/juce_SparseSet.h" +#include "../../../containers/juce_SparseSet.h" static const int fullAlphaThreshold = 253; diff --git a/src/juce_appframework/gui/graphics/imaging/juce_Image.h b/src/gui/graphics/imaging/juce_Image.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/juce_Image.h rename to src/gui/graphics/imaging/juce_Image.h diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageCache.cpp b/src/gui/graphics/imaging/juce_ImageCache.cpp similarity index 94% rename from src/juce_appframework/gui/graphics/imaging/juce_ImageCache.cpp rename to src/gui/graphics/imaging/juce_ImageCache.cpp index 9022557c04..6be062efa0 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_ImageCache.cpp +++ b/src/gui/graphics/imaging/juce_ImageCache.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ImageCache.h" #include "juce_ImageFileFormat.h" -#include "../../../../juce_core/threads/juce_ScopedLock.h" +#include "../../../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageCache.h b/src/gui/graphics/imaging/juce_ImageCache.h similarity index 95% rename from src/juce_appframework/gui/graphics/imaging/juce_ImageCache.h rename to src/gui/graphics/imaging/juce_ImageCache.h index 1565c887e6..a3c1e7a5b9 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_ImageCache.h +++ b/src/gui/graphics/imaging/juce_ImageCache.h @@ -27,9 +27,9 @@ #define __JUCE_IMAGECACHE_JUCEHEADER__ #include "juce_Image.h" -#include "../../../../juce_core/io/files/juce_File.h" +#include "../../../io/files/juce_File.h" #include "../../../events/juce_Timer.h" -#include "../../../application/juce_DeletedAtShutdown.h" +#include "../../../utilities/juce_DeletedAtShutdown.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp b/src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp similarity index 96% rename from src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp rename to src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp index 2772ad3c2b..0e9feeec35 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp +++ b/src/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.h b/src/gui/graphics/imaging/juce_ImageConvolutionKernel.h similarity index 100% rename from src/juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.h rename to src/gui/graphics/imaging/juce_ImageConvolutionKernel.h diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.cpp b/src/gui/graphics/imaging/juce_ImageFileFormat.cpp similarity index 92% rename from src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.cpp rename to src/gui/graphics/imaging/juce_ImageFileFormat.cpp index ca92a90cdc..e6d3b3910e 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.cpp +++ b/src/gui/graphics/imaging/juce_ImageFileFormat.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../../../juce_core/basics/juce_StandardHeader.h" +#include "../../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ImageFileFormat.h" -#include "../../../../juce_core/io/streams/juce_MemoryInputStream.h" -#include "../../../../juce_core/io/files/juce_FileInputStream.h" -#include "../../../../juce_core/io/streams/juce_BufferedInputStream.h" +#include "../../../io/streams/juce_MemoryInputStream.h" +#include "../../../io/files/juce_FileInputStream.h" +#include "../../../io/streams/juce_BufferedInputStream.h" #include "image_file_formats/juce_GIFLoader.h" //============================================================================== diff --git a/src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h b/src/gui/graphics/imaging/juce_ImageFileFormat.h similarity index 95% rename from src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h rename to src/gui/graphics/imaging/juce_ImageFileFormat.h index fdf48c8a82..8a289108af 100644 --- a/src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h +++ b/src/gui/graphics/imaging/juce_ImageFileFormat.h @@ -27,9 +27,9 @@ #define __JUCE_IMAGEFILEFORMAT_JUCEHEADER__ #include "juce_Image.h" -#include "../../../../juce_core/io/files/juce_File.h" -#include "../../../../juce_core/io/juce_InputStream.h" -#include "../../../../juce_core/io/juce_OutputStream.h" +#include "../../../io/files/juce_File.h" +#include "../../../io/streams/juce_InputStream.h" +#include "../../../io/streams/juce_OutputStream.h" //============================================================================== diff --git a/src/juce_core/io/files/juce_DirectoryIterator.cpp b/src/io/files/juce_DirectoryIterator.cpp similarity index 96% rename from src/juce_core/io/files/juce_DirectoryIterator.cpp rename to src/io/files/juce_DirectoryIterator.cpp index bfdf7b214d..76cf473303 100644 --- a/src/juce_core/io/files/juce_DirectoryIterator.cpp +++ b/src/io/files/juce_DirectoryIterator.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/files/juce_DirectoryIterator.h b/src/io/files/juce_DirectoryIterator.h similarity index 100% rename from src/juce_core/io/files/juce_DirectoryIterator.h rename to src/io/files/juce_DirectoryIterator.h diff --git a/src/juce_core/io/files/juce_File.cpp b/src/io/files/juce_File.cpp similarity index 96% rename from src/juce_core/io/files/juce_File.cpp rename to src/io/files/juce_File.cpp index 3f739b22f0..05a60910e4 100644 --- a/src/juce_core/io/files/juce_File.cpp +++ b/src/io/files/juce_File.cpp @@ -28,7 +28,7 @@ #pragma warning (push) #endif -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" #ifndef JUCE_WIN32 #include @@ -40,7 +40,7 @@ BEGIN_JUCE_NAMESPACE #include "juce_File.h" #include "juce_FileInputStream.h" #include "juce_FileOutputStream.h" -#include "../../basics/juce_SystemStats.h" +#include "../../core/juce_SystemStats.h" #ifdef _MSC_VER #pragma warning (pop) diff --git a/src/juce_core/io/files/juce_File.h b/src/io/files/juce_File.h similarity index 97% rename from src/juce_core/io/files/juce_File.h rename to src/io/files/juce_File.h index 71897982b9..64c9bdb4f7 100644 --- a/src/juce_core/io/files/juce_File.h +++ b/src/io/files/juce_File.h @@ -27,7 +27,7 @@ #define __JUCE_FILE_JUCEHEADER__ #include "../../containers/juce_OwnedArray.h" -#include "../../basics/juce_Time.h" +#include "../../core/juce_Time.h" #include "../../text/juce_StringArray.h" #include "../../containers/juce_MemoryBlock.h" class FileInputStream; diff --git a/src/juce_core/io/files/juce_FileInputStream.cpp b/src/io/files/juce_FileInputStream.cpp similarity index 94% rename from src/juce_core/io/files/juce_FileInputStream.cpp rename to src/io/files/juce_FileInputStream.cpp index cdda4b9c55..aea0e7b401 100644 --- a/src/juce_core/io/files/juce_FileInputStream.cpp +++ b/src/io/files/juce_FileInputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/files/juce_FileInputStream.h b/src/io/files/juce_FileInputStream.h similarity index 95% rename from src/juce_core/io/files/juce_FileInputStream.h rename to src/io/files/juce_FileInputStream.h index 54040aa364..334d1a44ed 100644 --- a/src/juce_core/io/files/juce_FileInputStream.h +++ b/src/io/files/juce_FileInputStream.h @@ -27,7 +27,7 @@ #define __JUCE_FILEINPUTSTREAM_JUCEHEADER__ #include "juce_File.h" -#include "../juce_InputStream.h" +#include "../streams/juce_InputStream.h" //============================================================================== diff --git a/src/juce_core/io/files/juce_FileOutputStream.cpp b/src/io/files/juce_FileOutputStream.cpp similarity index 95% rename from src/juce_core/io/files/juce_FileOutputStream.cpp rename to src/io/files/juce_FileOutputStream.cpp index 7b57eb2e2f..15d65a07ea 100644 --- a/src/juce_core/io/files/juce_FileOutputStream.cpp +++ b/src/io/files/juce_FileOutputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/files/juce_FileOutputStream.h b/src/io/files/juce_FileOutputStream.h similarity index 96% rename from src/juce_core/io/files/juce_FileOutputStream.h rename to src/io/files/juce_FileOutputStream.h index 847dd5fe24..fffa35b187 100644 --- a/src/juce_core/io/files/juce_FileOutputStream.h +++ b/src/io/files/juce_FileOutputStream.h @@ -27,7 +27,7 @@ #define __JUCE_FILEOUTPUTSTREAM_JUCEHEADER__ #include "juce_File.h" -#include "../juce_OutputStream.h" +#include "../streams/juce_OutputStream.h" //============================================================================== diff --git a/src/juce_core/io/files/juce_FileSearchPath.cpp b/src/io/files/juce_FileSearchPath.cpp similarity index 95% rename from src/juce_core/io/files/juce_FileSearchPath.cpp rename to src/io/files/juce_FileSearchPath.cpp index fcf7621997..877407fee0 100644 --- a/src/juce_core/io/files/juce_FileSearchPath.cpp +++ b/src/io/files/juce_FileSearchPath.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/files/juce_FileSearchPath.h b/src/io/files/juce_FileSearchPath.h similarity index 100% rename from src/juce_core/io/files/juce_FileSearchPath.h rename to src/io/files/juce_FileSearchPath.h diff --git a/src/juce_core/io/files/juce_NamedPipe.cpp b/src/io/files/juce_NamedPipe.cpp similarity index 94% rename from src/juce_core/io/files/juce_NamedPipe.cpp rename to src/io/files/juce_NamedPipe.cpp index 9a11eceab6..1003e6842d 100644 --- a/src/juce_core/io/files/juce_NamedPipe.cpp +++ b/src/io/files/juce_NamedPipe.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/files/juce_NamedPipe.h b/src/io/files/juce_NamedPipe.h similarity index 95% rename from src/juce_core/io/files/juce_NamedPipe.h rename to src/io/files/juce_NamedPipe.h index 1254fcc3f6..d35e701288 100644 --- a/src/juce_core/io/files/juce_NamedPipe.h +++ b/src/io/files/juce_NamedPipe.h @@ -26,7 +26,7 @@ #ifndef __JUCE_NAMEDPIPE_JUCEHEADER__ #define __JUCE_NAMEDPIPE_JUCEHEADER__ -#include "../juce_OutputStream.h" +#include "../streams/juce_OutputStream.h" //============================================================================== diff --git a/src/juce_core/misc/juce_ZipFile.cpp b/src/io/files/juce_ZipFile.cpp similarity index 93% rename from src/juce_core/misc/juce_ZipFile.cpp rename to src/io/files/juce_ZipFile.cpp index ea79980437..ab241bfb71 100644 --- a/src/juce_core/misc/juce_ZipFile.cpp +++ b/src/io/files/juce_ZipFile.cpp @@ -23,18 +23,18 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ZipFile.h" -#include "../io/streams/juce_GZIPDecompressorInputStream.h" -#include "../io/streams/juce_BufferedInputStream.h" -#include "../io/streams/juce_FileInputSource.h" -#include "../io/files/juce_FileInputStream.h" -#include "../io/files/juce_FileOutputStream.h" -#include "../threads/juce_ScopedLock.h" +#include "../streams/juce_GZIPDecompressorInputStream.h" +#include "../streams/juce_BufferedInputStream.h" +#include "../streams/juce_FileInputSource.h" +#include "juce_FileInputStream.h" +#include "juce_FileOutputStream.h" +#include "../../threads/juce_ScopedLock.h" //============================================================================== diff --git a/src/juce_core/misc/juce_ZipFile.h b/src/io/files/juce_ZipFile.h similarity index 94% rename from src/juce_core/misc/juce_ZipFile.h rename to src/io/files/juce_ZipFile.h index 094fb75b9a..f54b688bde 100644 --- a/src/juce_core/misc/juce_ZipFile.h +++ b/src/io/files/juce_ZipFile.h @@ -26,10 +26,10 @@ #ifndef __JUCE_ZIPFILE_JUCEHEADER__ #define __JUCE_ZIPFILE_JUCEHEADER__ -#include "../io/files/juce_File.h" -#include "../io/juce_InputStream.h" -#include "../io/streams/juce_InputSource.h" -#include "../threads/juce_CriticalSection.h" +#include "juce_File.h" +#include "../streams/juce_InputStream.h" +#include "../streams/juce_InputSource.h" +#include "../../threads/juce_CriticalSection.h" //============================================================================== diff --git a/src/juce_core/io/network/juce_Socket.cpp b/src/io/network/juce_Socket.cpp similarity index 96% rename from src/juce_core/io/network/juce_Socket.cpp rename to src/io/network/juce_Socket.cpp index ff901a794b..d5e11ab9b5 100644 --- a/src/juce_core/io/network/juce_Socket.cpp +++ b/src/io/network/juce_Socket.cpp @@ -49,7 +49,7 @@ #include #endif -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/network/juce_Socket.h b/src/io/network/juce_Socket.h similarity index 100% rename from src/juce_core/io/network/juce_Socket.h rename to src/io/network/juce_Socket.h diff --git a/src/juce_core/io/network/juce_URL.cpp b/src/io/network/juce_URL.cpp similarity index 96% rename from src/juce_core/io/network/juce_URL.cpp rename to src/io/network/juce_URL.cpp index d120683d89..88b97feeb9 100644 --- a/src/juce_core/io/network/juce_URL.cpp +++ b/src/io/network/juce_URL.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_URL.h" -#include "../../basics/juce_Random.h" +#include "../../core/juce_Random.h" #include "../../text/juce_XmlDocument.h" diff --git a/src/juce_core/io/network/juce_URL.h b/src/io/network/juce_URL.h similarity index 97% rename from src/juce_core/io/network/juce_URL.h rename to src/io/network/juce_URL.h index 71c4d1586f..33af4c726a 100644 --- a/src/juce_core/io/network/juce_URL.h +++ b/src/io/network/juce_URL.h @@ -28,7 +28,7 @@ #include "../../text/juce_StringPairArray.h" #include "../../text/juce_XmlElement.h" -#include "../juce_InputStream.h" +#include "../streams/juce_InputStream.h" //============================================================================== diff --git a/src/juce_core/io/streams/juce_BufferedInputStream.cpp b/src/io/streams/juce_BufferedInputStream.cpp similarity index 95% rename from src/juce_core/io/streams/juce_BufferedInputStream.cpp rename to src/io/streams/juce_BufferedInputStream.cpp index 6975c49a24..3d477cb338 100644 --- a/src/juce_core/io/streams/juce_BufferedInputStream.cpp +++ b/src/io/streams/juce_BufferedInputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/streams/juce_BufferedInputStream.h b/src/io/streams/juce_BufferedInputStream.h similarity index 96% rename from src/juce_core/io/streams/juce_BufferedInputStream.h rename to src/io/streams/juce_BufferedInputStream.h index 29620e8979..b0acde494c 100644 --- a/src/juce_core/io/streams/juce_BufferedInputStream.h +++ b/src/io/streams/juce_BufferedInputStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_BUFFEREDINPUTSTREAM_JUCEHEADER__ #define __JUCE_BUFFEREDINPUTSTREAM_JUCEHEADER__ -#include "../juce_InputStream.h" +#include "juce_InputStream.h" //============================================================================== diff --git a/src/juce_core/io/streams/juce_FileInputSource.cpp b/src/io/streams/juce_FileInputSource.cpp similarity index 94% rename from src/juce_core/io/streams/juce_FileInputSource.cpp rename to src/io/streams/juce_FileInputSource.cpp index 1709d15fdb..e6ae5624ab 100644 --- a/src/juce_core/io/streams/juce_FileInputSource.cpp +++ b/src/io/streams/juce_FileInputSource.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/streams/juce_FileInputSource.h b/src/io/streams/juce_FileInputSource.h similarity index 100% rename from src/juce_core/io/streams/juce_FileInputSource.h rename to src/io/streams/juce_FileInputSource.h diff --git a/src/juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp b/src/io/streams/juce_GZIPCompressorOutputStream.cpp similarity index 95% rename from src/juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp rename to src/io/streams/juce_GZIPCompressorOutputStream.cpp index 3e35952880..88c180f5f4 100644 --- a/src/juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp +++ b/src/io/streams/juce_GZIPCompressorOutputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" namespace zlibNamespace { diff --git a/src/juce_core/io/streams/juce_GZIPCompressorOutputStream.h b/src/io/streams/juce_GZIPCompressorOutputStream.h similarity index 96% rename from src/juce_core/io/streams/juce_GZIPCompressorOutputStream.h rename to src/io/streams/juce_GZIPCompressorOutputStream.h index 6235e5833b..50a3e62cb4 100644 --- a/src/juce_core/io/streams/juce_GZIPCompressorOutputStream.h +++ b/src/io/streams/juce_GZIPCompressorOutputStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_GZIPCOMPRESSOROUTPUTSTREAM_JUCEHEADER__ #define __JUCE_GZIPCOMPRESSOROUTPUTSTREAM_JUCEHEADER__ -#include "../juce_OutputStream.h" +#include "juce_OutputStream.h" //============================================================================== diff --git a/src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp b/src/io/streams/juce_GZIPDecompressorInputStream.cpp similarity index 95% rename from src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp rename to src/io/streams/juce_GZIPDecompressorInputStream.cpp index f8e7c3732a..1f1b159168 100644 --- a/src/juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp +++ b/src/io/streams/juce_GZIPDecompressorInputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" #if JUCE_MSVC #pragma warning (push) diff --git a/src/juce_core/io/streams/juce_GZIPDecompressorInputStream.h b/src/io/streams/juce_GZIPDecompressorInputStream.h similarity index 96% rename from src/juce_core/io/streams/juce_GZIPDecompressorInputStream.h rename to src/io/streams/juce_GZIPDecompressorInputStream.h index fa9be4199d..d2db5ff305 100644 --- a/src/juce_core/io/streams/juce_GZIPDecompressorInputStream.h +++ b/src/io/streams/juce_GZIPDecompressorInputStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_GZIPDECOMPRESSORINPUTSTREAM_JUCEHEADER__ #define __JUCE_GZIPDECOMPRESSORINPUTSTREAM_JUCEHEADER__ -#include "../juce_InputStream.h" +#include "juce_InputStream.h" //============================================================================== diff --git a/src/juce_core/io/streams/juce_InputSource.h b/src/io/streams/juce_InputSource.h similarity index 96% rename from src/juce_core/io/streams/juce_InputSource.h rename to src/io/streams/juce_InputSource.h index e16721b4c9..0ee6637500 100644 --- a/src/juce_core/io/streams/juce_InputSource.h +++ b/src/io/streams/juce_InputSource.h @@ -26,7 +26,7 @@ #ifndef __JUCE_INPUTSOURCE_JUCEHEADER__ #define __JUCE_INPUTSOURCE_JUCEHEADER__ -#include "../juce_InputStream.h" +#include "juce_InputStream.h" //============================================================================== /** diff --git a/src/juce_core/io/juce_InputStream.cpp b/src/io/streams/juce_InputStream.cpp similarity index 95% rename from src/juce_core/io/juce_InputStream.cpp rename to src/io/streams/juce_InputStream.cpp index d20c08c075..af8d84f79c 100644 --- a/src/juce_core/io/juce_InputStream.cpp +++ b/src/io/streams/juce_InputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/juce_InputStream.h b/src/io/streams/juce_InputStream.h similarity index 96% rename from src/juce_core/io/juce_InputStream.h rename to src/io/streams/juce_InputStream.h index 1ba11f7b20..5796619e4c 100644 --- a/src/juce_core/io/juce_InputStream.h +++ b/src/io/streams/juce_InputStream.h @@ -26,8 +26,8 @@ #ifndef __JUCE_INPUTSTREAM_JUCEHEADER__ #define __JUCE_INPUTSTREAM_JUCEHEADER__ -#include "../text/juce_String.h" -#include "../containers/juce_MemoryBlock.h" +#include "../../text/juce_String.h" +#include "../../containers/juce_MemoryBlock.h" //============================================================================== diff --git a/src/juce_core/io/streams/juce_MemoryInputStream.cpp b/src/io/streams/juce_MemoryInputStream.cpp similarity index 94% rename from src/juce_core/io/streams/juce_MemoryInputStream.cpp rename to src/io/streams/juce_MemoryInputStream.cpp index f0387925fc..1f5a4a3052 100644 --- a/src/juce_core/io/streams/juce_MemoryInputStream.cpp +++ b/src/io/streams/juce_MemoryInputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/streams/juce_MemoryInputStream.h b/src/io/streams/juce_MemoryInputStream.h similarity index 96% rename from src/juce_core/io/streams/juce_MemoryInputStream.h rename to src/io/streams/juce_MemoryInputStream.h index 31acfc699e..2592c2f14a 100644 --- a/src/juce_core/io/streams/juce_MemoryInputStream.h +++ b/src/io/streams/juce_MemoryInputStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_MEMORYINPUTSTREAM_JUCEHEADER__ #define __JUCE_MEMORYINPUTSTREAM_JUCEHEADER__ -#include "../juce_InputStream.h" +#include "juce_InputStream.h" //============================================================================== diff --git a/src/juce_core/io/streams/juce_MemoryOutputStream.cpp b/src/io/streams/juce_MemoryOutputStream.cpp similarity index 95% rename from src/juce_core/io/streams/juce_MemoryOutputStream.cpp rename to src/io/streams/juce_MemoryOutputStream.cpp index 89880c0ead..60920d305c 100644 --- a/src/juce_core/io/streams/juce_MemoryOutputStream.cpp +++ b/src/io/streams/juce_MemoryOutputStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/streams/juce_MemoryOutputStream.h b/src/io/streams/juce_MemoryOutputStream.h similarity index 96% rename from src/juce_core/io/streams/juce_MemoryOutputStream.h rename to src/io/streams/juce_MemoryOutputStream.h index 44c3a1689c..2f94f747a7 100644 --- a/src/juce_core/io/streams/juce_MemoryOutputStream.h +++ b/src/io/streams/juce_MemoryOutputStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_MEMORYOUTPUTSTREAM_JUCEHEADER__ #define __JUCE_MEMORYOUTPUTSTREAM_JUCEHEADER__ -#include "../juce_OutputStream.h" +#include "juce_OutputStream.h" #include "../../containers/juce_MemoryBlock.h" diff --git a/src/juce_core/io/juce_OutputStream.cpp b/src/io/streams/juce_OutputStream.cpp similarity index 94% rename from src/juce_core/io/juce_OutputStream.cpp rename to src/io/streams/juce_OutputStream.cpp index 629d6785fc..f638f31b60 100644 --- a/src/juce_core/io/juce_OutputStream.cpp +++ b/src/io/streams/juce_OutputStream.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_OutputStream.h" -#include "../threads/juce_CriticalSection.h" -#include "../containers/juce_VoidArray.h" +#include "../../threads/juce_CriticalSection.h" +#include "../../containers/juce_VoidArray.h" //============================================================================== diff --git a/src/juce_core/io/juce_OutputStream.h b/src/io/streams/juce_OutputStream.h similarity index 96% rename from src/juce_core/io/juce_OutputStream.h rename to src/io/streams/juce_OutputStream.h index b06f840127..bbbfb06468 100644 --- a/src/juce_core/io/juce_OutputStream.h +++ b/src/io/streams/juce_OutputStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_OUTPUTSTREAM_JUCEHEADER__ #define __JUCE_OUTPUTSTREAM_JUCEHEADER__ -#include "../text/juce_String.h" +#include "../../text/juce_String.h" #include "juce_InputStream.h" diff --git a/src/juce_core/io/streams/juce_SubregionStream.cpp b/src/io/streams/juce_SubregionStream.cpp similarity index 95% rename from src/juce_core/io/streams/juce_SubregionStream.cpp rename to src/io/streams/juce_SubregionStream.cpp index 6592c5f7a9..8900c8491e 100644 --- a/src/juce_core/io/streams/juce_SubregionStream.cpp +++ b/src/io/streams/juce_SubregionStream.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../basics/juce_StandardHeader.h" +#include "../../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/io/streams/juce_SubregionStream.h b/src/io/streams/juce_SubregionStream.h similarity index 97% rename from src/juce_core/io/streams/juce_SubregionStream.h rename to src/io/streams/juce_SubregionStream.h index 4b4ebac4e1..cc3e6a7a95 100644 --- a/src/juce_core/io/streams/juce_SubregionStream.h +++ b/src/io/streams/juce_SubregionStream.h @@ -26,7 +26,7 @@ #ifndef __JUCE_SUBREGIONSTREAM_JUCEHEADER__ #define __JUCE_SUBREGIONSTREAM_JUCEHEADER__ -#include "../juce_InputStream.h" +#include "juce_InputStream.h" //============================================================================== diff --git a/src/juce_core/io/streams/zlib/README b/src/io/streams/zlib/README similarity index 100% rename from src/juce_core/io/streams/zlib/README rename to src/io/streams/zlib/README diff --git a/src/juce_core/io/streams/zlib/adler32.c b/src/io/streams/zlib/adler32.c similarity index 100% rename from src/juce_core/io/streams/zlib/adler32.c rename to src/io/streams/zlib/adler32.c diff --git a/src/juce_core/io/streams/zlib/compress.c b/src/io/streams/zlib/compress.c similarity index 100% rename from src/juce_core/io/streams/zlib/compress.c rename to src/io/streams/zlib/compress.c diff --git a/src/juce_core/io/streams/zlib/crc32.c b/src/io/streams/zlib/crc32.c similarity index 100% rename from src/juce_core/io/streams/zlib/crc32.c rename to src/io/streams/zlib/crc32.c diff --git a/src/juce_core/io/streams/zlib/crc32.h b/src/io/streams/zlib/crc32.h similarity index 100% rename from src/juce_core/io/streams/zlib/crc32.h rename to src/io/streams/zlib/crc32.h diff --git a/src/juce_core/io/streams/zlib/deflate.c b/src/io/streams/zlib/deflate.c similarity index 100% rename from src/juce_core/io/streams/zlib/deflate.c rename to src/io/streams/zlib/deflate.c diff --git a/src/juce_core/io/streams/zlib/deflate.h b/src/io/streams/zlib/deflate.h similarity index 100% rename from src/juce_core/io/streams/zlib/deflate.h rename to src/io/streams/zlib/deflate.h diff --git a/src/juce_core/io/streams/zlib/infback.c b/src/io/streams/zlib/infback.c similarity index 100% rename from src/juce_core/io/streams/zlib/infback.c rename to src/io/streams/zlib/infback.c diff --git a/src/juce_core/io/streams/zlib/inffast.c b/src/io/streams/zlib/inffast.c similarity index 100% rename from src/juce_core/io/streams/zlib/inffast.c rename to src/io/streams/zlib/inffast.c diff --git a/src/juce_core/io/streams/zlib/inffast.h b/src/io/streams/zlib/inffast.h similarity index 100% rename from src/juce_core/io/streams/zlib/inffast.h rename to src/io/streams/zlib/inffast.h diff --git a/src/juce_core/io/streams/zlib/inffixed.h b/src/io/streams/zlib/inffixed.h similarity index 100% rename from src/juce_core/io/streams/zlib/inffixed.h rename to src/io/streams/zlib/inffixed.h diff --git a/src/juce_core/io/streams/zlib/inflate.c b/src/io/streams/zlib/inflate.c similarity index 100% rename from src/juce_core/io/streams/zlib/inflate.c rename to src/io/streams/zlib/inflate.c diff --git a/src/juce_core/io/streams/zlib/inflate.h b/src/io/streams/zlib/inflate.h similarity index 100% rename from src/juce_core/io/streams/zlib/inflate.h rename to src/io/streams/zlib/inflate.h diff --git a/src/juce_core/io/streams/zlib/inftrees.c b/src/io/streams/zlib/inftrees.c similarity index 100% rename from src/juce_core/io/streams/zlib/inftrees.c rename to src/io/streams/zlib/inftrees.c diff --git a/src/juce_core/io/streams/zlib/inftrees.h b/src/io/streams/zlib/inftrees.h similarity index 100% rename from src/juce_core/io/streams/zlib/inftrees.h rename to src/io/streams/zlib/inftrees.h diff --git a/src/juce_core/io/streams/zlib/trees.c b/src/io/streams/zlib/trees.c similarity index 100% rename from src/juce_core/io/streams/zlib/trees.c rename to src/io/streams/zlib/trees.c diff --git a/src/juce_core/io/streams/zlib/trees.h b/src/io/streams/zlib/trees.h similarity index 100% rename from src/juce_core/io/streams/zlib/trees.h rename to src/io/streams/zlib/trees.h diff --git a/src/juce_core/io/streams/zlib/uncompr.c b/src/io/streams/zlib/uncompr.c similarity index 100% rename from src/juce_core/io/streams/zlib/uncompr.c rename to src/io/streams/zlib/uncompr.c diff --git a/src/juce_core/io/streams/zlib/zconf.h b/src/io/streams/zlib/zconf.h similarity index 100% rename from src/juce_core/io/streams/zlib/zconf.h rename to src/io/streams/zlib/zconf.h diff --git a/src/juce_core/io/streams/zlib/zconf.in.h b/src/io/streams/zlib/zconf.in.h similarity index 100% rename from src/juce_core/io/streams/zlib/zconf.in.h rename to src/io/streams/zlib/zconf.in.h diff --git a/src/juce_core/io/streams/zlib/zlib.h b/src/io/streams/zlib/zlib.h similarity index 100% rename from src/juce_core/io/streams/zlib/zlib.h rename to src/io/streams/zlib/zlib.h diff --git a/src/juce_core/io/streams/zlib/zutil.c b/src/io/streams/zlib/zutil.c similarity index 100% rename from src/juce_core/io/streams/zlib/zutil.c rename to src/io/streams/zlib/zutil.c diff --git a/src/juce_core/io/streams/zlib/zutil.h b/src/io/streams/zlib/zutil.h similarity index 100% rename from src/juce_core/io/streams/zlib/zutil.h rename to src/io/streams/zlib/zutil.h diff --git a/src/juce_amalgamated_template.cpp b/src/juce_amalgamated_template.cpp index 4aa516c42a..e296826927 100644 --- a/src/juce_amalgamated_template.cpp +++ b/src/juce_amalgamated_template.cpp @@ -69,270 +69,270 @@ #define JUCE_AMALGAMATED_TEMPLATE 1 //============================================================================== -#include "juce_core/basics/juce_FileLogger.cpp" -#include "juce_core/basics/juce_Logger.cpp" -#include "juce_core/basics/juce_Random.cpp" -#include "juce_core/basics/juce_RelativeTime.cpp" -#include "juce_core/basics/juce_SystemStats.cpp" -#include "juce_core/basics/juce_Time.cpp" -#include "juce_core/containers/juce_BitArray.cpp" -#include "juce_core/containers/juce_MemoryBlock.cpp" -#include "juce_core/containers/juce_PropertySet.cpp" -#include "juce_core/containers/juce_Variant.cpp" -#include "juce_core/cryptography/juce_BlowFish.cpp" -#include "juce_core/cryptography/juce_MD5.cpp" -#include "juce_core/cryptography/juce_Primes.cpp" -#include "juce_core/cryptography/juce_RSAKey.cpp" -#include "juce_core/io/juce_InputStream.cpp" -#include "juce_core/io/juce_OutputStream.cpp" -#include "juce_core/io/files/juce_DirectoryIterator.cpp" -#include "juce_core/io/files/juce_File.cpp" -#include "juce_core/io/files/juce_FileInputStream.cpp" -#include "juce_core/io/files/juce_FileOutputStream.cpp" -#include "juce_core/io/files/juce_FileSearchPath.cpp" -#include "juce_core/io/files/juce_NamedPipe.cpp" -#include "juce_core/io/network/juce_Socket.cpp" -#include "juce_core/io/network/juce_URL.cpp" -#include "juce_core/io/streams/juce_BufferedInputStream.cpp" -#include "juce_core/io/streams/juce_FileInputSource.cpp" -#include "juce_core/io/streams/juce_MemoryInputStream.cpp" -#include "juce_core/io/streams/juce_MemoryOutputStream.cpp" -#include "juce_core/io/streams/juce_SubregionStream.cpp" -#include "juce_core/misc/juce_PerformanceCounter.cpp" -#include "juce_core/misc/juce_Uuid.cpp" -#include "juce_core/misc/juce_ZipFile.cpp" -#include "juce_core/text/juce_CharacterFunctions.cpp" -#include "juce_core/text/juce_LocalisedStrings.cpp" -#include "juce_core/text/juce_String.cpp" -#include "juce_core/text/juce_StringArray.cpp" -#include "juce_core/text/juce_StringPairArray.cpp" -#include "juce_core/text/juce_XmlDocument.cpp" -#include "juce_core/text/juce_XmlElement.cpp" -#include "juce_core/threads/juce_InterProcessLock.cpp" -#include "juce_core/threads/juce_ReadWriteLock.cpp" -#include "juce_core/threads/juce_Thread.cpp" -#include "juce_core/threads/juce_ThreadPool.cpp" -#include "juce_core/threads/juce_TimeSliceThread.cpp" +#include "core/juce_FileLogger.cpp" +#include "core/juce_Logger.cpp" +#include "core/juce_Random.cpp" +#include "core/juce_RelativeTime.cpp" +#include "core/juce_SystemStats.cpp" +#include "core/juce_Time.cpp" +#include "containers/juce_BitArray.cpp" +#include "containers/juce_MemoryBlock.cpp" +#include "containers/juce_PropertySet.cpp" +#include "containers/juce_Variant.cpp" +#include "cryptography/juce_BlowFish.cpp" +#include "cryptography/juce_MD5.cpp" +#include "cryptography/juce_Primes.cpp" +#include "cryptography/juce_RSAKey.cpp" +#include "io/streams/juce_InputStream.cpp" +#include "io/streams/juce_OutputStream.cpp" +#include "io/files/juce_DirectoryIterator.cpp" +#include "io/files/juce_File.cpp" +#include "io/files/juce_FileInputStream.cpp" +#include "io/files/juce_FileOutputStream.cpp" +#include "io/files/juce_FileSearchPath.cpp" +#include "io/files/juce_NamedPipe.cpp" +#include "io/network/juce_Socket.cpp" +#include "io/network/juce_URL.cpp" +#include "io/streams/juce_BufferedInputStream.cpp" +#include "io/streams/juce_FileInputSource.cpp" +#include "io/streams/juce_MemoryInputStream.cpp" +#include "io/streams/juce_MemoryOutputStream.cpp" +#include "io/streams/juce_SubregionStream.cpp" +#include "core/juce_PerformanceCounter.cpp" +#include "core/juce_Uuid.cpp" +#include "io/files/juce_ZipFile.cpp" +#include "text/juce_CharacterFunctions.cpp" +#include "text/juce_LocalisedStrings.cpp" +#include "text/juce_String.cpp" +#include "text/juce_StringArray.cpp" +#include "text/juce_StringPairArray.cpp" +#include "text/juce_XmlDocument.cpp" +#include "text/juce_XmlElement.cpp" +#include "threads/juce_InterProcessLock.cpp" +#include "threads/juce_ReadWriteLock.cpp" +#include "threads/juce_Thread.cpp" +#include "threads/juce_ThreadPool.cpp" +#include "threads/juce_TimeSliceThread.cpp" #if ! JUCE_ONLY_BUILD_CORE_LIBRARY -#include "juce_appframework/application/juce_Application.cpp" -#include "juce_appframework/application/juce_ApplicationCommandInfo.cpp" -#include "juce_appframework/application/juce_ApplicationCommandManager.cpp" -#include "juce_appframework/application/juce_ApplicationCommandTarget.cpp" -#include "juce_appframework/application/juce_ApplicationProperties.cpp" -#include "juce_appframework/application/juce_DeletedAtShutdown.cpp" -#include "juce_appframework/application/juce_PropertiesFile.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AudioCDReader.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AudioFormat.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp" -#include "juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.cpp" -#include "juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp" -#include "juce_appframework/audio/audio_sources/juce_AudioTransportSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_BufferingAudioSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_MixerAudioSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.cpp" -#include "juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp" -#include "juce_appframework/audio/devices/juce_AudioDeviceManager.cpp" -#include "juce_appframework/audio/devices/juce_AudioIODevice.cpp" -#include "juce_appframework/audio/devices/juce_AudioIODeviceType.cpp" -#include "juce_appframework/audio/devices/juce_MidiOutput.cpp" -#include "juce_appframework/audio/dsp/juce_AudioDataConverters.cpp" -#include "juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp" -#include "juce_appframework/audio/dsp/juce_IIRFilter.cpp" -#include "juce_appframework/audio/midi/juce_MidiBuffer.cpp" -#include "juce_appframework/audio/midi/juce_MidiFile.cpp" -#include "juce_appframework/audio/midi/juce_MidiKeyboardState.cpp" -#include "juce_appframework/audio/midi/juce_MidiMessage.cpp" -#include "juce_appframework/audio/midi/juce_MidiMessageCollector.cpp" -#include "juce_appframework/audio/midi/juce_MidiMessageSequence.cpp" -#include "juce_appframework/audio/plugins/juce_AudioPluginFormat.cpp" -#include "juce_appframework/audio/plugins/juce_AudioPluginFormatManager.cpp" -#include "juce_appframework/audio/plugins/juce_AudioPluginInstance.cpp" -#include "juce_appframework/audio/plugins/juce_KnownPluginList.cpp" -#include "juce_appframework/audio/plugins/juce_PluginDescription.cpp" -#include "juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp" -#include "juce_appframework/audio/plugins/juce_PluginListComponent.cpp" -#include "juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.mm" -#include "juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.mm" -#include "juce_appframework/audio/processors/juce_AudioProcessor.cpp" -#include "juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp" -#include "juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp" -#include "juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp" -#include "juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.cpp" -#include "juce_appframework/audio/synthesisers/juce_Sampler.cpp" -#include "juce_appframework/audio/synthesisers/juce_Synthesiser.cpp" -#include "juce_appframework/documents/juce_FileBasedDocument.cpp" -#include "juce_appframework/documents/juce_RecentlyOpenedFilesList.cpp" -#include "juce_appframework/documents/juce_UndoManager.cpp" -#include "juce_appframework/events/juce_ActionBroadcaster.cpp" -#include "juce_appframework/events/juce_ActionListenerList.cpp" -#include "juce_appframework/events/juce_AsyncUpdater.cpp" -#include "juce_appframework/events/juce_ChangeBroadcaster.cpp" -#include "juce_appframework/events/juce_ChangeListenerList.cpp" -#include "juce_appframework/events/juce_InterprocessConnection.cpp" -#include "juce_appframework/events/juce_InterprocessConnectionServer.cpp" -#include "juce_appframework/events/juce_Message.cpp" -#include "juce_appframework/events/juce_MessageListener.cpp" -#include "juce_appframework/events/juce_MessageManager.cpp" -#include "juce_appframework/events/juce_MultiTimer.cpp" -#include "juce_appframework/events/juce_Timer.cpp" -#include "juce_appframework/gui/components/juce_Component.cpp" -#include "juce_appframework/gui/components/juce_ComponentListener.cpp" -#include "juce_appframework/gui/components/juce_Desktop.cpp" -#include "juce_appframework/gui/components/buttons/juce_ArrowButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_Button.cpp" -#include "juce_appframework/gui/components/buttons/juce_DrawableButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_HyperlinkButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_ImageButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_ShapeButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_TextButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_ToggleButton.cpp" -#include "juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp" -#include "juce_appframework/gui/components/controls/juce_ComboBox.cpp" -#include "juce_appframework/gui/components/controls/juce_Label.cpp" -#include "juce_appframework/gui/components/controls/juce_ListBox.cpp" -#include "juce_appframework/gui/components/controls/juce_ProgressBar.cpp" -#include "juce_appframework/gui/components/controls/juce_Slider.cpp" -#include "juce_appframework/gui/components/controls/juce_TableHeaderComponent.cpp" -#include "juce_appframework/gui/components/controls/juce_TableListBox.cpp" -#include "juce_appframework/gui/components/controls/juce_TextEditor.cpp" -#include "juce_appframework/gui/components/controls/juce_Toolbar.cpp" -#include "juce_appframework/gui/components/controls/juce_ToolbarItemComponent.cpp" -#include "juce_appframework/gui/components/controls/juce_ToolbarItemPalette.cpp" -#include "juce_appframework/gui/components/controls/juce_TreeView.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileChooser.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileFilter.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileListComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FilenameComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.cpp" -#include "juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.cpp" -#include "juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.cpp" -#include "juce_appframework/gui/components/keyboard/juce_KeyListener.cpp" -#include "juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.cpp" -#include "juce_appframework/gui/components/keyboard/juce_KeyPress.cpp" -#include "juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.cpp" -#include "juce_appframework/gui/components/keyboard/juce_ModifierKeys.cpp" -#include "juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp" -#include "juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.cpp" -#include "juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.cpp" -#include "juce_appframework/gui/components/layout/juce_GroupComponent.cpp" -#include "juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp" -#include "juce_appframework/gui/components/layout/juce_ResizableBorderComponent.cpp" -#include "juce_appframework/gui/components/layout/juce_ResizableCornerComponent.cpp" -#include "juce_appframework/gui/components/layout/juce_ScrollBar.cpp" -#include "juce_appframework/gui/components/layout/juce_StretchableLayoutManager.cpp" -#include "juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.cpp" -#include "juce_appframework/gui/components/layout/juce_StretchableObjectResizer.cpp" -#include "juce_appframework/gui/components/layout/juce_TabbedButtonBar.cpp" -#include "juce_appframework/gui/components/layout/juce_TabbedComponent.cpp" -#include "juce_appframework/gui/components/layout/juce_Viewport.cpp" -#include "juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.cpp" -#include "juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp" -#include "juce_appframework/gui/components/menus/juce_MenuBarComponent.cpp" -#include "juce_appframework/gui/components/menus/juce_MenuBarModel.cpp" -#include "juce_appframework/gui/components/menus/juce_PopupMenu.cpp" -#include "juce_appframework/gui/components/mouse/juce_ComponentDragger.cpp" -#include "juce_appframework/gui/components/mouse/juce_DragAndDropContainer.cpp" -#include "juce_appframework/gui/components/mouse/juce_MouseCursor.cpp" -#include "juce_appframework/gui/components/mouse/juce_MouseEvent.cpp" -#include "juce_appframework/gui/components/mouse/juce_MouseHoverDetector.cpp" -#include "juce_appframework/gui/components/mouse/juce_MouseListener.cpp" -#include "juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.cpp" -#include "juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.cpp" -#include "juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.cpp" -#include "juce_appframework/gui/components/properties/juce_PropertyComponent.cpp" -#include "juce_appframework/gui/components/properties/juce_PropertyPanel.cpp" -#include "juce_appframework/gui/components/properties/juce_SliderPropertyComponent.cpp" -#include "juce_appframework/gui/components/properties/juce_TextPropertyComponent.cpp" -#include "juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.cpp" -#include "juce_appframework/gui/components/special/juce_BubbleComponent.cpp" -#include "juce_appframework/gui/components/special/juce_BubbleMessageComponent.cpp" -#include "juce_appframework/gui/components/special/juce_ColourSelector.cpp" -#include "juce_appframework/gui/components/special/juce_DropShadower.cpp" -#include "juce_appframework/gui/components/special/juce_MagnifierComponent.cpp" -#include "juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp" -#include "juce_appframework/gui/components/special/juce_OpenGLComponent.cpp" -#include "juce_appframework/gui/components/special/juce_PreferencesPanel.cpp" -#include "juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp" -#include "juce_appframework/gui/components/windows/juce_AlertWindow.cpp" -#include "juce_appframework/gui/components/windows/juce_ComponentPeer.cpp" -#include "juce_appframework/gui/components/windows/juce_DialogWindow.cpp" -#include "juce_appframework/gui/components/windows/juce_DocumentWindow.cpp" -#include "juce_appframework/gui/components/windows/juce_ResizableWindow.cpp" -#include "juce_appframework/gui/components/windows/juce_SplashScreen.cpp" -#include "juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.cpp" -#include "juce_appframework/gui/components/windows/juce_TooltipWindow.cpp" -#include "juce_appframework/gui/components/windows/juce_TopLevelWindow.cpp" -#include "juce_appframework/gui/graphics/brushes/juce_Brush.cpp" -#include "juce_appframework/gui/graphics/brushes/juce_GradientBrush.cpp" -#include "juce_appframework/gui/graphics/brushes/juce_ImageBrush.cpp" -#include "juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.cpp" -#include "juce_appframework/gui/graphics/colour/juce_Colour.cpp" -#include "juce_appframework/gui/graphics/colour/juce_ColourGradient.cpp" -#include "juce_appframework/gui/graphics/colour/juce_Colours.cpp" -#include "juce_appframework/gui/graphics/contexts/juce_EdgeTable.cpp" -#include "juce_appframework/gui/graphics/contexts/juce_Graphics.cpp" -#include "juce_appframework/gui/graphics/contexts/juce_Justification.cpp" -#include "juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp" -#include "juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp" -#include "juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.cpp" -#include "juce_appframework/gui/graphics/drawables/juce_Drawable.cpp" -#include "juce_appframework/gui/graphics/drawables/juce_DrawableComposite.cpp" -#include "juce_appframework/gui/graphics/drawables/juce_DrawableImage.cpp" -#include "juce_appframework/gui/graphics/drawables/juce_DrawablePath.cpp" -#include "juce_appframework/gui/graphics/drawables/juce_DrawableText.cpp" -#include "juce_appframework/gui/graphics/drawables/juce_SVGParser.cpp" -#include "juce_appframework/gui/graphics/effects/juce_DropShadowEffect.cpp" -#include "juce_appframework/gui/graphics/effects/juce_GlowEffect.cpp" -#include "juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.cpp" -#include "juce_appframework/gui/graphics/fonts/juce_Font.cpp" -#include "juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.cpp" -#include "juce_appframework/gui/graphics/fonts/juce_TextLayout.cpp" -#include "juce_appframework/gui/graphics/fonts/juce_Typeface.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_AffineTransform.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_BorderSize.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_Line.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_Path.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_PathIterator.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_PathStrokeType.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_Point.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_Rectangle.cpp" -#include "juce_appframework/gui/graphics/geometry/juce_RectangleList.cpp" -#include "juce_appframework/gui/graphics/imaging/juce_Image.cpp" -#include "juce_appframework/gui/graphics/imaging/juce_ImageCache.cpp" -#include "juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.cpp" -#include "juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.cpp" -#include "juce_appframework/gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp" +#include "application/juce_Application.cpp" +#include "application/juce_ApplicationCommandInfo.cpp" +#include "application/juce_ApplicationCommandManager.cpp" +#include "application/juce_ApplicationCommandTarget.cpp" +#include "application/juce_ApplicationProperties.cpp" +#include "utilities/juce_DeletedAtShutdown.cpp" +#include "utilities/juce_PropertiesFile.cpp" +#include "utilities/juce_FileBasedDocument.cpp" +#include "utilities/juce_RecentlyOpenedFilesList.cpp" +#include "utilities/juce_UndoManager.cpp" +#include "audio/audio_file_formats/juce_AiffAudioFormat.cpp" +#include "audio/audio_file_formats/juce_AudioCDReader.cpp" +#include "audio/audio_file_formats/juce_AudioFormat.cpp" +#include "audio/audio_file_formats/juce_AudioFormatManager.cpp" +#include "audio/audio_file_formats/juce_AudioSubsectionReader.cpp" +#include "audio/audio_file_formats/juce_AudioThumbnail.cpp" +#include "audio/audio_file_formats/juce_AudioThumbnailCache.cpp" +#include "audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp" +#include "audio/audio_file_formats/juce_WavAudioFormat.cpp" +#include "audio/audio_sources/juce_AudioFormatReaderSource.cpp" +#include "audio/audio_sources/juce_AudioSourcePlayer.cpp" +#include "audio/audio_sources/juce_AudioTransportSource.cpp" +#include "audio/audio_sources/juce_BufferingAudioSource.cpp" +#include "audio/audio_sources/juce_ChannelRemappingAudioSource.cpp" +#include "audio/audio_sources/juce_IIRFilterAudioSource.cpp" +#include "audio/audio_sources/juce_MixerAudioSource.cpp" +#include "audio/audio_sources/juce_ResamplingAudioSource.cpp" +#include "audio/audio_sources/juce_ToneGeneratorAudioSource.cpp" +#include "audio/devices/juce_AudioDeviceManager.cpp" +#include "audio/devices/juce_AudioIODevice.cpp" +#include "audio/devices/juce_AudioIODeviceType.cpp" +#include "audio/devices/juce_MidiOutput.cpp" +#include "audio/dsp/juce_AudioDataConverters.cpp" +#include "audio/dsp/juce_AudioSampleBuffer.cpp" +#include "audio/dsp/juce_IIRFilter.cpp" +#include "audio/midi/juce_MidiBuffer.cpp" +#include "audio/midi/juce_MidiFile.cpp" +#include "audio/midi/juce_MidiKeyboardState.cpp" +#include "audio/midi/juce_MidiMessage.cpp" +#include "audio/midi/juce_MidiMessageCollector.cpp" +#include "audio/midi/juce_MidiMessageSequence.cpp" +#include "audio/plugins/juce_AudioPluginFormat.cpp" +#include "audio/plugins/juce_AudioPluginFormatManager.cpp" +#include "audio/plugins/juce_AudioPluginInstance.cpp" +#include "audio/plugins/juce_KnownPluginList.cpp" +#include "audio/plugins/juce_PluginDescription.cpp" +#include "audio/plugins/juce_PluginDirectoryScanner.cpp" +#include "audio/plugins/juce_PluginListComponent.cpp" +#include "audio/plugins/formats/juce_AudioUnitPluginFormat.mm" +#include "audio/plugins/formats/juce_VSTPluginFormat.mm" +#include "audio/processors/juce_AudioProcessor.cpp" +#include "audio/processors/juce_AudioProcessorEditor.cpp" +#include "audio/processors/juce_AudioProcessorGraph.cpp" +#include "audio/processors/juce_AudioProcessorPlayer.cpp" +#include "audio/processors/juce_GenericAudioProcessorEditor.cpp" +#include "audio/synthesisers/juce_Sampler.cpp" +#include "audio/synthesisers/juce_Synthesiser.cpp" +#include "events/juce_ActionBroadcaster.cpp" +#include "events/juce_ActionListenerList.cpp" +#include "events/juce_AsyncUpdater.cpp" +#include "events/juce_ChangeBroadcaster.cpp" +#include "events/juce_ChangeListenerList.cpp" +#include "events/juce_InterprocessConnection.cpp" +#include "events/juce_InterprocessConnectionServer.cpp" +#include "events/juce_Message.cpp" +#include "events/juce_MessageListener.cpp" +#include "events/juce_MessageManager.cpp" +#include "events/juce_MultiTimer.cpp" +#include "events/juce_Timer.cpp" +#include "gui/components/juce_Component.cpp" +#include "gui/components/juce_ComponentListener.cpp" +#include "gui/components/juce_Desktop.cpp" +#include "gui/components/buttons/juce_ArrowButton.cpp" +#include "gui/components/buttons/juce_Button.cpp" +#include "gui/components/buttons/juce_DrawableButton.cpp" +#include "gui/components/buttons/juce_HyperlinkButton.cpp" +#include "gui/components/buttons/juce_ImageButton.cpp" +#include "gui/components/buttons/juce_ShapeButton.cpp" +#include "gui/components/buttons/juce_TextButton.cpp" +#include "gui/components/buttons/juce_ToggleButton.cpp" +#include "gui/components/buttons/juce_ToolbarButton.cpp" +#include "gui/components/controls/juce_ComboBox.cpp" +#include "gui/components/controls/juce_Label.cpp" +#include "gui/components/controls/juce_ListBox.cpp" +#include "gui/components/controls/juce_ProgressBar.cpp" +#include "gui/components/controls/juce_Slider.cpp" +#include "gui/components/controls/juce_TableHeaderComponent.cpp" +#include "gui/components/controls/juce_TableListBox.cpp" +#include "gui/components/controls/juce_TextEditor.cpp" +#include "gui/components/controls/juce_Toolbar.cpp" +#include "gui/components/controls/juce_ToolbarItemComponent.cpp" +#include "gui/components/controls/juce_ToolbarItemPalette.cpp" +#include "gui/components/controls/juce_TreeView.cpp" +#include "gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.cpp" +#include "gui/components/filebrowser/juce_DirectoryContentsList.cpp" +#include "gui/components/filebrowser/juce_FileBrowserComponent.cpp" +#include "gui/components/filebrowser/juce_FileChooser.cpp" +#include "gui/components/filebrowser/juce_FileChooserDialogBox.cpp" +#include "gui/components/filebrowser/juce_FileFilter.cpp" +#include "gui/components/filebrowser/juce_FileListComponent.cpp" +#include "gui/components/filebrowser/juce_FilenameComponent.cpp" +#include "gui/components/filebrowser/juce_FileSearchPathListComponent.cpp" +#include "gui/components/filebrowser/juce_FileTreeComponent.cpp" +#include "gui/components/filebrowser/juce_ImagePreviewComponent.cpp" +#include "gui/components/filebrowser/juce_WildcardFileFilter.cpp" +#include "gui/components/keyboard/juce_KeyboardFocusTraverser.cpp" +#include "gui/components/keyboard/juce_KeyListener.cpp" +#include "gui/components/keyboard/juce_KeyMappingEditorComponent.cpp" +#include "gui/components/keyboard/juce_KeyPress.cpp" +#include "gui/components/keyboard/juce_KeyPressMappingSet.cpp" +#include "gui/components/keyboard/juce_ModifierKeys.cpp" +#include "gui/components/layout/juce_ComponentAnimator.cpp" +#include "gui/components/layout/juce_ComponentBoundsConstrainer.cpp" +#include "gui/components/layout/juce_ComponentMovementWatcher.cpp" +#include "gui/components/layout/juce_GroupComponent.cpp" +#include "gui/components/layout/juce_MultiDocumentPanel.cpp" +#include "gui/components/layout/juce_ResizableBorderComponent.cpp" +#include "gui/components/layout/juce_ResizableCornerComponent.cpp" +#include "gui/components/layout/juce_ScrollBar.cpp" +#include "gui/components/layout/juce_StretchableLayoutManager.cpp" +#include "gui/components/layout/juce_StretchableLayoutResizerBar.cpp" +#include "gui/components/layout/juce_StretchableObjectResizer.cpp" +#include "gui/components/layout/juce_TabbedButtonBar.cpp" +#include "gui/components/layout/juce_TabbedComponent.cpp" +#include "gui/components/layout/juce_Viewport.cpp" +#include "gui/components/lookandfeel/juce_LookAndFeel.cpp" +#include "gui/components/lookandfeel/juce_OldSchoolLookAndFeel.cpp" +#include "gui/components/menus/juce_MenuBarComponent.cpp" +#include "gui/components/menus/juce_MenuBarModel.cpp" +#include "gui/components/menus/juce_PopupMenu.cpp" +#include "gui/components/mouse/juce_ComponentDragger.cpp" +#include "gui/components/mouse/juce_DragAndDropContainer.cpp" +#include "gui/components/mouse/juce_MouseCursor.cpp" +#include "gui/components/mouse/juce_MouseEvent.cpp" +#include "gui/components/mouse/juce_MouseHoverDetector.cpp" +#include "gui/components/mouse/juce_MouseListener.cpp" +#include "gui/components/properties/juce_BooleanPropertyComponent.cpp" +#include "gui/components/properties/juce_ButtonPropertyComponent.cpp" +#include "gui/components/properties/juce_ChoicePropertyComponent.cpp" +#include "gui/components/properties/juce_PropertyComponent.cpp" +#include "gui/components/properties/juce_PropertyPanel.cpp" +#include "gui/components/properties/juce_SliderPropertyComponent.cpp" +#include "gui/components/properties/juce_TextPropertyComponent.cpp" +#include "gui/components/special/juce_AudioDeviceSelectorComponent.cpp" +#include "gui/components/special/juce_BubbleComponent.cpp" +#include "gui/components/special/juce_BubbleMessageComponent.cpp" +#include "gui/components/special/juce_ColourSelector.cpp" +#include "gui/components/special/juce_DropShadower.cpp" +#include "gui/components/special/juce_MagnifierComponent.cpp" +#include "gui/components/special/juce_MidiKeyboardComponent.cpp" +#include "gui/components/special/juce_OpenGLComponent.cpp" +#include "gui/components/special/juce_PreferencesPanel.cpp" +#include "gui/components/special/juce_SystemTrayIconComponent.cpp" +#include "gui/components/windows/juce_AlertWindow.cpp" +#include "gui/components/windows/juce_ComponentPeer.cpp" +#include "gui/components/windows/juce_DialogWindow.cpp" +#include "gui/components/windows/juce_DocumentWindow.cpp" +#include "gui/components/windows/juce_ResizableWindow.cpp" +#include "gui/components/windows/juce_SplashScreen.cpp" +#include "gui/components/windows/juce_ThreadWithProgressWindow.cpp" +#include "gui/components/windows/juce_TooltipWindow.cpp" +#include "gui/components/windows/juce_TopLevelWindow.cpp" +#include "gui/graphics/brushes/juce_Brush.cpp" +#include "gui/graphics/brushes/juce_GradientBrush.cpp" +#include "gui/graphics/brushes/juce_ImageBrush.cpp" +#include "gui/graphics/brushes/juce_SolidColourBrush.cpp" +#include "gui/graphics/colour/juce_Colour.cpp" +#include "gui/graphics/colour/juce_ColourGradient.cpp" +#include "gui/graphics/colour/juce_Colours.cpp" +#include "gui/graphics/contexts/juce_EdgeTable.cpp" +#include "gui/graphics/contexts/juce_Graphics.cpp" +#include "gui/graphics/contexts/juce_Justification.cpp" +#include "gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp" +#include "gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp" +#include "gui/graphics/contexts/juce_RectanglePlacement.cpp" +#include "gui/graphics/drawables/juce_Drawable.cpp" +#include "gui/graphics/drawables/juce_DrawableComposite.cpp" +#include "gui/graphics/drawables/juce_DrawableImage.cpp" +#include "gui/graphics/drawables/juce_DrawablePath.cpp" +#include "gui/graphics/drawables/juce_DrawableText.cpp" +#include "gui/graphics/drawables/juce_SVGParser.cpp" +#include "gui/graphics/effects/juce_DropShadowEffect.cpp" +#include "gui/graphics/effects/juce_GlowEffect.cpp" +#include "gui/graphics/effects/juce_ReduceOpacityEffect.cpp" +#include "gui/graphics/fonts/juce_Font.cpp" +#include "gui/graphics/fonts/juce_GlyphArrangement.cpp" +#include "gui/graphics/fonts/juce_TextLayout.cpp" +#include "gui/graphics/fonts/juce_Typeface.cpp" +#include "gui/graphics/geometry/juce_AffineTransform.cpp" +#include "gui/graphics/geometry/juce_BorderSize.cpp" +#include "gui/graphics/geometry/juce_Line.cpp" +#include "gui/graphics/geometry/juce_Path.cpp" +#include "gui/graphics/geometry/juce_PathIterator.cpp" +#include "gui/graphics/geometry/juce_PathStrokeType.cpp" +#include "gui/graphics/geometry/juce_Point.cpp" +#include "gui/graphics/geometry/juce_PositionedRectangle.cpp" +#include "gui/graphics/geometry/juce_Rectangle.cpp" +#include "gui/graphics/geometry/juce_RectangleList.cpp" +#include "gui/graphics/imaging/juce_Image.cpp" +#include "gui/graphics/imaging/juce_ImageCache.cpp" +#include "gui/graphics/imaging/juce_ImageConvolutionKernel.cpp" +#include "gui/graphics/imaging/juce_ImageFileFormat.cpp" +#include "gui/graphics/imaging/image_file_formats/juce_GIFLoader.cpp" #endif //============================================================================== // some files include lots of library code, so leave them to the end to avoid cluttering // up the build for the clean files. -#include "juce_core/io/streams/juce_GZIPCompressorOutputStream.cpp" -#include "juce_core/io/streams/juce_GZIPDecompressorInputStream.cpp" +#include "io/streams/juce_GZIPCompressorOutputStream.cpp" +#include "io/streams/juce_GZIPDecompressorInputStream.cpp" #if ! JUCE_ONLY_BUILD_CORE_LIBRARY - #include "juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.cpp" - #include "juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp" - #include "juce_appframework/gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp" - #include "juce_appframework/gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp" + #include "audio/audio_file_formats/juce_FlacAudioFormat.cpp" + #include "audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp" + #include "gui/graphics/imaging/image_file_formats/juce_JPEGLoader.cpp" + #include "gui/graphics/imaging/image_file_formats/juce_PNGLoader.cpp" #endif //============================================================================== diff --git a/src/juce_app_includes.h b/src/juce_app_includes.h index eb40cf2359..dd4213f32b 100644 --- a/src/juce_app_includes.h +++ b/src/juce_app_includes.h @@ -27,721 +27,721 @@ #define __JUCE_JUCE_APP_INCLUDES_INCLUDEFILES__ #ifndef __JUCE_APPLICATION_JUCEHEADER__ - #include "juce_appframework/application/juce_Application.h" + #include "application/juce_Application.h" #endif #ifndef __JUCE_APPLICATIONCOMMANDID_JUCEHEADER__ - #include "juce_appframework/application/juce_ApplicationCommandID.h" + #include "application/juce_ApplicationCommandID.h" #endif #ifndef __JUCE_APPLICATIONCOMMANDINFO_JUCEHEADER__ - #include "juce_appframework/application/juce_ApplicationCommandInfo.h" + #include "application/juce_ApplicationCommandInfo.h" #endif #ifndef __JUCE_APPLICATIONCOMMANDMANAGER_JUCEHEADER__ - #include "juce_appframework/application/juce_ApplicationCommandManager.h" + #include "application/juce_ApplicationCommandManager.h" #endif #ifndef __JUCE_APPLICATIONCOMMANDTARGET_JUCEHEADER__ - #include "juce_appframework/application/juce_ApplicationCommandTarget.h" + #include "application/juce_ApplicationCommandTarget.h" #endif #ifndef __JUCE_APPLICATIONPROPERTIES_JUCEHEADER__ - #include "juce_appframework/application/juce_ApplicationProperties.h" -#endif -#ifndef __JUCE_DELETEDATSHUTDOWN_JUCEHEADER__ - #include "juce_appframework/application/juce_DeletedAtShutdown.h" -#endif -#ifndef __JUCE_PROPERTIESFILE_JUCEHEADER__ - #include "juce_appframework/application/juce_PropertiesFile.h" -#endif -#ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ - #include "juce_appframework/application/juce_SystemClipboard.h" + #include "application/juce_ApplicationProperties.h" #endif #ifndef __JUCE_MIDIBUFFER_JUCEHEADER__ - #include "juce_appframework/audio/midi/juce_MidiBuffer.h" + #include "audio/midi/juce_MidiBuffer.h" #endif #ifndef __JUCE_MIDIFILE_JUCEHEADER__ - #include "juce_appframework/audio/midi/juce_MidiFile.h" + #include "audio/midi/juce_MidiFile.h" #endif #ifndef __JUCE_MIDIKEYBOARDSTATE_JUCEHEADER__ - #include "juce_appframework/audio/midi/juce_MidiKeyboardState.h" + #include "audio/midi/juce_MidiKeyboardState.h" #endif #ifndef __JUCE_MIDIMESSAGE_JUCEHEADER__ - #include "juce_appframework/audio/midi/juce_MidiMessage.h" + #include "audio/midi/juce_MidiMessage.h" #endif #ifndef __JUCE_MIDIMESSAGECOLLECTOR_JUCEHEADER__ - #include "juce_appframework/audio/midi/juce_MidiMessageCollector.h" + #include "audio/midi/juce_MidiMessageCollector.h" #endif #ifndef __JUCE_MIDIMESSAGESEQUENCE_JUCEHEADER__ - #include "juce_appframework/audio/midi/juce_MidiMessageSequence.h" + #include "audio/midi/juce_MidiMessageSequence.h" #endif #ifndef __JUCE_AUDIODATACONVERTERS_JUCEHEADER__ - #include "juce_appframework/audio/dsp/juce_AudioDataConverters.h" + #include "audio/dsp/juce_AudioDataConverters.h" #endif #ifndef __JUCE_AUDIOSAMPLEBUFFER_JUCEHEADER__ - #include "juce_appframework/audio/dsp/juce_AudioSampleBuffer.h" + #include "audio/dsp/juce_AudioSampleBuffer.h" #endif #ifndef __JUCE_IIRFILTER_JUCEHEADER__ - #include "juce_appframework/audio/dsp/juce_IIRFilter.h" + #include "audio/dsp/juce_IIRFilter.h" #endif #ifndef __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_AudioPlayHead.h" + #include "audio/processors/juce_AudioPlayHead.h" #endif #ifndef __JUCE_AUDIOPROCESSOR_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_AudioProcessor.h" + #include "audio/processors/juce_AudioProcessor.h" #endif #ifndef __JUCE_AUDIOPROCESSOREDITOR_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_AudioProcessorEditor.h" + #include "audio/processors/juce_AudioProcessorEditor.h" #endif #ifndef __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_AudioProcessorGraph.h" + #include "audio/processors/juce_AudioProcessorGraph.h" #endif #ifndef __JUCE_AUDIOPROCESSORLISTENER_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_AudioProcessorListener.h" + #include "audio/processors/juce_AudioProcessorListener.h" #endif #ifndef __JUCE_AUDIOPROCESSORPLAYER_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_AudioProcessorPlayer.h" + #include "audio/processors/juce_AudioProcessorPlayer.h" #endif #ifndef __JUCE_GENERICAUDIOPROCESSOREDITOR_JUCEHEADER__ - #include "juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.h" + #include "audio/processors/juce_GenericAudioProcessorEditor.h" #endif #ifndef __JUCE_AUDIOFORMATREADERSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.h" + #include "audio/audio_sources/juce_AudioFormatReaderSource.h" #endif #ifndef __JUCE_AUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_AudioSource.h" + #include "audio/audio_sources/juce_AudioSource.h" #endif #ifndef __JUCE_AUDIOSOURCEPLAYER_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.h" + #include "audio/audio_sources/juce_AudioSourcePlayer.h" #endif #ifndef __JUCE_AUDIOTRANSPORTSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_AudioTransportSource.h" + #include "audio/audio_sources/juce_AudioTransportSource.h" #endif #ifndef __JUCE_BUFFERINGAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_BufferingAudioSource.h" + #include "audio/audio_sources/juce_BufferingAudioSource.h" #endif #ifndef __JUCE_CHANNELREMAPPINGAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.h" + #include "audio/audio_sources/juce_ChannelRemappingAudioSource.h" #endif #ifndef __JUCE_IIRFILTERAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h" + #include "audio/audio_sources/juce_IIRFilterAudioSource.h" #endif #ifndef __JUCE_MIXERAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_MixerAudioSource.h" + #include "audio/audio_sources/juce_MixerAudioSource.h" #endif #ifndef __JUCE_POSITIONABLEAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_PositionableAudioSource.h" + #include "audio/audio_sources/juce_PositionableAudioSource.h" #endif #ifndef __JUCE_RESAMPLINGAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.h" + #include "audio/audio_sources/juce_ResamplingAudioSource.h" #endif #ifndef __JUCE_TONEGENERATORAUDIOSOURCE_JUCEHEADER__ - #include "juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.h" + #include "audio/audio_sources/juce_ToneGeneratorAudioSource.h" #endif #ifndef __JUCE_AUDIODEVICEMANAGER_JUCEHEADER__ - #include "juce_appframework/audio/devices/juce_AudioDeviceManager.h" + #include "audio/devices/juce_AudioDeviceManager.h" #endif #ifndef __JUCE_AUDIOIODEVICE_JUCEHEADER__ - #include "juce_appframework/audio/devices/juce_AudioIODevice.h" + #include "audio/devices/juce_AudioIODevice.h" #endif #ifndef __JUCE_AUDIOIODEVICETYPE_JUCEHEADER__ - #include "juce_appframework/audio/devices/juce_AudioIODeviceType.h" + #include "audio/devices/juce_AudioIODeviceType.h" #endif #ifndef __JUCE_MIDIINPUT_JUCEHEADER__ - #include "juce_appframework/audio/devices/juce_MidiInput.h" + #include "audio/devices/juce_MidiInput.h" #endif #ifndef __JUCE_MIDIOUTPUT_JUCEHEADER__ - #include "juce_appframework/audio/devices/juce_MidiOutput.h" + #include "audio/devices/juce_MidiOutput.h" #endif #ifndef __JUCE_SAMPLER_JUCEHEADER__ - #include "juce_appframework/audio/synthesisers/juce_Sampler.h" + #include "audio/synthesisers/juce_Sampler.h" #endif #ifndef __JUCE_SYNTHESISER_JUCEHEADER__ - #include "juce_appframework/audio/synthesisers/juce_Synthesiser.h" + #include "audio/synthesisers/juce_Synthesiser.h" #endif #ifndef __JUCE_AUDIOUNITPLUGINFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.h" + #include "audio/plugins/formats/juce_AudioUnitPluginFormat.h" #endif #ifndef __JUCE_DIRECTXPLUGINFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/plugins/formats/juce_DirectXPluginFormat.h" + #include "audio/plugins/formats/juce_DirectXPluginFormat.h" #endif #ifndef __JUCE_LADSPAPLUGINFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/plugins/formats/juce_LADSPAPluginFormat.h" + #include "audio/plugins/formats/juce_LADSPAPluginFormat.h" #endif #ifndef __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ - #include "juce_appframework/audio/plugins/formats/juce_VSTMidiEventList.h" + #include "audio/plugins/formats/juce_VSTMidiEventList.h" #endif #ifndef __JUCE_VSTPLUGINFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.h" + #include "audio/plugins/formats/juce_VSTPluginFormat.h" #endif #ifndef __JUCE_AUDIOPLUGINFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_AudioPluginFormat.h" + #include "audio/plugins/juce_AudioPluginFormat.h" #endif #ifndef __JUCE_AUDIOPLUGINFORMATMANAGER_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_AudioPluginFormatManager.h" + #include "audio/plugins/juce_AudioPluginFormatManager.h" #endif #ifndef __JUCE_AUDIOPLUGININSTANCE_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_AudioPluginInstance.h" + #include "audio/plugins/juce_AudioPluginInstance.h" #endif #ifndef __JUCE_KNOWNPLUGINLIST_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_KnownPluginList.h" + #include "audio/plugins/juce_KnownPluginList.h" #endif #ifndef __JUCE_PLUGINDESCRIPTION_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_PluginDescription.h" + #include "audio/plugins/juce_PluginDescription.h" #endif #ifndef __JUCE_PLUGINDIRECTORYSCANNER_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_PluginDirectoryScanner.h" + #include "audio/plugins/juce_PluginDirectoryScanner.h" #endif #ifndef __JUCE_PLUGINLISTCOMPONENT_JUCEHEADER__ - #include "juce_appframework/audio/plugins/juce_PluginListComponent.h" + #include "audio/plugins/juce_PluginListComponent.h" #endif #ifndef __JUCE_AIFFAUDIOFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.h" + #include "audio/audio_file_formats/juce_AiffAudioFormat.h" #endif #ifndef __JUCE_AUDIOCDBURNER_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h" + #include "audio/audio_file_formats/juce_AudioCDBurner.h" #endif #ifndef __JUCE_AUDIOCDREADER_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h" + #include "audio/audio_file_formats/juce_AudioCDReader.h" #endif #ifndef __JUCE_AUDIOFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioFormat.h" + #include "audio/audio_file_formats/juce_AudioFormat.h" #endif #ifndef __JUCE_AUDIOFORMATMANAGER_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.h" + #include "audio/audio_file_formats/juce_AudioFormatManager.h" #endif #ifndef __JUCE_AUDIOFORMATREADER_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioFormatReader.h" + #include "audio/audio_file_formats/juce_AudioFormatReader.h" #endif #ifndef __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioFormatWriter.h" + #include "audio/audio_file_formats/juce_AudioFormatWriter.h" #endif #ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.h" + #include "audio/audio_file_formats/juce_AudioSubsectionReader.h" #endif #ifndef __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.h" + #include "audio/audio_file_formats/juce_AudioThumbnail.h" #endif #ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.h" + #include "audio/audio_file_formats/juce_AudioThumbnailCache.h" #endif #ifndef __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.h" + #include "audio/audio_file_formats/juce_FlacAudioFormat.h" #endif #ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.h" + #include "audio/audio_file_formats/juce_OggVorbisAudioFormat.h" #endif #ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h" + #include "audio/audio_file_formats/juce_QuickTimeAudioFormat.h" #endif #ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ - #include "juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h" + #include "audio/audio_file_formats/juce_WavAudioFormat.h" #endif #ifndef __JUCE_ACTIONBROADCASTER_JUCEHEADER__ - #include "juce_appframework/events/juce_ActionBroadcaster.h" + #include "events/juce_ActionBroadcaster.h" #endif #ifndef __JUCE_ACTIONLISTENER_JUCEHEADER__ - #include "juce_appframework/events/juce_ActionListener.h" + #include "events/juce_ActionListener.h" #endif #ifndef __JUCE_ACTIONLISTENERLIST_JUCEHEADER__ - #include "juce_appframework/events/juce_ActionListenerList.h" + #include "events/juce_ActionListenerList.h" #endif #ifndef __JUCE_ASYNCUPDATER_JUCEHEADER__ - #include "juce_appframework/events/juce_AsyncUpdater.h" + #include "events/juce_AsyncUpdater.h" #endif #ifndef __JUCE_CALLBACKMESSAGE_JUCEHEADER__ - #include "juce_appframework/events/juce_CallbackMessage.h" + #include "events/juce_CallbackMessage.h" #endif #ifndef __JUCE_CHANGEBROADCASTER_JUCEHEADER__ - #include "juce_appframework/events/juce_ChangeBroadcaster.h" + #include "events/juce_ChangeBroadcaster.h" #endif #ifndef __JUCE_CHANGELISTENER_JUCEHEADER__ - #include "juce_appframework/events/juce_ChangeListener.h" + #include "events/juce_ChangeListener.h" #endif #ifndef __JUCE_CHANGELISTENERLIST_JUCEHEADER__ - #include "juce_appframework/events/juce_ChangeListenerList.h" + #include "events/juce_ChangeListenerList.h" #endif #ifndef __JUCE_INTERPROCESSCONNECTION_JUCEHEADER__ - #include "juce_appframework/events/juce_InterprocessConnection.h" + #include "events/juce_InterprocessConnection.h" #endif #ifndef __JUCE_INTERPROCESSCONNECTIONSERVER_JUCEHEADER__ - #include "juce_appframework/events/juce_InterprocessConnectionServer.h" + #include "events/juce_InterprocessConnectionServer.h" #endif #ifndef __JUCE_MESSAGE_JUCEHEADER__ - #include "juce_appframework/events/juce_Message.h" + #include "events/juce_Message.h" #endif #ifndef __JUCE_MESSAGELISTENER_JUCEHEADER__ - #include "juce_appframework/events/juce_MessageListener.h" + #include "events/juce_MessageListener.h" #endif #ifndef __JUCE_MESSAGEMANAGER_JUCEHEADER__ - #include "juce_appframework/events/juce_MessageManager.h" + #include "events/juce_MessageManager.h" #endif #ifndef __JUCE_MULTITIMER_JUCEHEADER__ - #include "juce_appframework/events/juce_MultiTimer.h" + #include "events/juce_MultiTimer.h" #endif #ifndef __JUCE_TIMER_JUCEHEADER__ - #include "juce_appframework/events/juce_Timer.h" + #include "events/juce_Timer.h" #endif #ifndef __JUCE_BRUSH_JUCEHEADER__ - #include "juce_appframework/gui/graphics/brushes/juce_Brush.h" + #include "gui/graphics/brushes/juce_Brush.h" #endif #ifndef __JUCE_GRADIENTBRUSH_JUCEHEADER__ - #include "juce_appframework/gui/graphics/brushes/juce_GradientBrush.h" + #include "gui/graphics/brushes/juce_GradientBrush.h" #endif #ifndef __JUCE_IMAGEBRUSH_JUCEHEADER__ - #include "juce_appframework/gui/graphics/brushes/juce_ImageBrush.h" + #include "gui/graphics/brushes/juce_ImageBrush.h" #endif #ifndef __JUCE_SOLIDCOLOURBRUSH_JUCEHEADER__ - #include "juce_appframework/gui/graphics/brushes/juce_SolidColourBrush.h" -#endif -#ifndef __JUCE_COLOUR_JUCEHEADER__ - #include "juce_appframework/gui/graphics/colour/juce_Colour.h" + #include "gui/graphics/brushes/juce_SolidColourBrush.h" #endif #ifndef __JUCE_COLOURGRADIENT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/colour/juce_ColourGradient.h" + #include "gui/graphics/colour/juce_ColourGradient.h" #endif #ifndef __JUCE_COLOURS_JUCEHEADER__ - #include "juce_appframework/gui/graphics/colour/juce_Colours.h" + #include "gui/graphics/colour/juce_Colours.h" #endif #ifndef __JUCE_PIXELFORMATS_JUCEHEADER__ - #include "juce_appframework/gui/graphics/colour/juce_PixelFormats.h" + #include "gui/graphics/colour/juce_PixelFormats.h" +#endif +#ifndef __JUCE_COLOUR_JUCEHEADER__ + #include "gui/graphics/colour/juce_Colour.h" #endif #ifndef __JUCE_FONT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/fonts/juce_Font.h" + #include "gui/graphics/fonts/juce_Font.h" #endif #ifndef __JUCE_GLYPHARRANGEMENT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/fonts/juce_GlyphArrangement.h" + #include "gui/graphics/fonts/juce_GlyphArrangement.h" #endif #ifndef __JUCE_TEXTLAYOUT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/fonts/juce_TextLayout.h" + #include "gui/graphics/fonts/juce_TextLayout.h" #endif #ifndef __JUCE_TYPEFACE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/fonts/juce_Typeface.h" + #include "gui/graphics/fonts/juce_Typeface.h" #endif #ifndef __JUCE_EDGETABLE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_EdgeTable.h" + #include "gui/graphics/contexts/juce_EdgeTable.h" #endif #ifndef __JUCE_GRAPHICS_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_Graphics.h" + #include "gui/graphics/contexts/juce_Graphics.h" #endif #ifndef __JUCE_JUSTIFICATION_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_Justification.h" + #include "gui/graphics/contexts/juce_Justification.h" #endif #ifndef __JUCE_LOWLEVELGRAPHICSCONTEXT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsContext.h" + #include "gui/graphics/contexts/juce_LowLevelGraphicsContext.h" #endif #ifndef __JUCE_LOWLEVELGRAPHICSPOSTSCRIPTRENDERER_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h" + #include "gui/graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h" #endif #ifndef __JUCE_LOWLEVELGRAPHICSSOFTWARERENDERER_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h" + #include "gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h" #endif #ifndef __JUCE_RECTANGLEPLACEMENT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/contexts/juce_RectanglePlacement.h" + #include "gui/graphics/contexts/juce_RectanglePlacement.h" #endif #ifndef __JUCE_AFFINETRANSFORM_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_AffineTransform.h" + #include "gui/graphics/geometry/juce_AffineTransform.h" #endif #ifndef __JUCE_BORDERSIZE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_BorderSize.h" + #include "gui/graphics/geometry/juce_BorderSize.h" #endif #ifndef __JUCE_LINE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_Line.h" + #include "gui/graphics/geometry/juce_Line.h" #endif #ifndef __JUCE_PATH_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_Path.h" + #include "gui/graphics/geometry/juce_Path.h" #endif #ifndef __JUCE_PATHITERATOR_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_PathIterator.h" + #include "gui/graphics/geometry/juce_PathIterator.h" #endif #ifndef __JUCE_PATHSTROKETYPE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_PathStrokeType.h" + #include "gui/graphics/geometry/juce_PathStrokeType.h" #endif #ifndef __JUCE_POINT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_Point.h" + #include "gui/graphics/geometry/juce_Point.h" #endif #ifndef __JUCE_POSITIONEDRECTANGLE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.h" + #include "gui/graphics/geometry/juce_PositionedRectangle.h" #endif #ifndef __JUCE_RECTANGLE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_Rectangle.h" + #include "gui/graphics/geometry/juce_Rectangle.h" #endif #ifndef __JUCE_RECTANGLELIST_JUCEHEADER__ - #include "juce_appframework/gui/graphics/geometry/juce_RectangleList.h" + #include "gui/graphics/geometry/juce_RectangleList.h" #endif #ifndef __JUCE_CAMERADEVICE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/imaging/juce_CameraDevice.h" + #include "gui/graphics/imaging/juce_CameraDevice.h" #endif #ifndef __JUCE_IMAGE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/imaging/juce_Image.h" + #include "gui/graphics/imaging/juce_Image.h" #endif #ifndef __JUCE_IMAGECACHE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/imaging/juce_ImageCache.h" + #include "gui/graphics/imaging/juce_ImageCache.h" #endif #ifndef __JUCE_IMAGECONVOLUTIONKERNEL_JUCEHEADER__ - #include "juce_appframework/gui/graphics/imaging/juce_ImageConvolutionKernel.h" + #include "gui/graphics/imaging/juce_ImageConvolutionKernel.h" #endif #ifndef __JUCE_IMAGEFILEFORMAT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h" + #include "gui/graphics/imaging/juce_ImageFileFormat.h" #endif #ifndef __JUCE_DRAWABLE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/drawables/juce_Drawable.h" + #include "gui/graphics/drawables/juce_Drawable.h" #endif #ifndef __JUCE_DRAWABLECOMPOSITE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/drawables/juce_DrawableComposite.h" + #include "gui/graphics/drawables/juce_DrawableComposite.h" #endif #ifndef __JUCE_DRAWABLEIMAGE_JUCEHEADER__ - #include "juce_appframework/gui/graphics/drawables/juce_DrawableImage.h" + #include "gui/graphics/drawables/juce_DrawableImage.h" #endif #ifndef __JUCE_DRAWABLEPATH_JUCEHEADER__ - #include "juce_appframework/gui/graphics/drawables/juce_DrawablePath.h" + #include "gui/graphics/drawables/juce_DrawablePath.h" #endif #ifndef __JUCE_DRAWABLETEXT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/drawables/juce_DrawableText.h" + #include "gui/graphics/drawables/juce_DrawableText.h" #endif #ifndef __JUCE_COMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/juce_Component.h" + #include "gui/components/juce_Component.h" #endif #ifndef __JUCE_COMPONENTDELETIONWATCHER_JUCEHEADER__ - #include "juce_appframework/gui/components/juce_ComponentDeletionWatcher.h" + #include "gui/components/juce_ComponentDeletionWatcher.h" #endif #ifndef __JUCE_COMPONENTLISTENER_JUCEHEADER__ - #include "juce_appframework/gui/components/juce_ComponentListener.h" + #include "gui/components/juce_ComponentListener.h" #endif #ifndef __JUCE_DESKTOP_JUCEHEADER__ - #include "juce_appframework/gui/components/juce_Desktop.h" + #include "gui/components/juce_Desktop.h" #endif #ifndef __JUCE_ARROWBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_ArrowButton.h" + #include "gui/components/buttons/juce_ArrowButton.h" #endif #ifndef __JUCE_BUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_Button.h" + #include "gui/components/buttons/juce_Button.h" #endif #ifndef __JUCE_DRAWABLEBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_DrawableButton.h" + #include "gui/components/buttons/juce_DrawableButton.h" #endif #ifndef __JUCE_HYPERLINKBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_HyperlinkButton.h" + #include "gui/components/buttons/juce_HyperlinkButton.h" #endif #ifndef __JUCE_IMAGEBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_ImageButton.h" + #include "gui/components/buttons/juce_ImageButton.h" #endif #ifndef __JUCE_SHAPEBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_ShapeButton.h" + #include "gui/components/buttons/juce_ShapeButton.h" #endif #ifndef __JUCE_TEXTBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_TextButton.h" + #include "gui/components/buttons/juce_TextButton.h" #endif #ifndef __JUCE_TOGGLEBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_ToggleButton.h" + #include "gui/components/buttons/juce_ToggleButton.h" #endif #ifndef __JUCE_TOOLBARBUTTON_JUCEHEADER__ - #include "juce_appframework/gui/components/buttons/juce_ToolbarButton.h" + #include "gui/components/buttons/juce_ToolbarButton.h" #endif #ifndef __JUCE_DROPSHADOWEFFECT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/effects/juce_DropShadowEffect.h" + #include "gui/graphics/effects/juce_DropShadowEffect.h" #endif #ifndef __JUCE_GLOWEFFECT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/effects/juce_GlowEffect.h" + #include "gui/graphics/effects/juce_GlowEffect.h" #endif #ifndef __JUCE_IMAGEEFFECTFILTER_JUCEHEADER__ - #include "juce_appframework/gui/graphics/effects/juce_ImageEffectFilter.h" + #include "gui/graphics/effects/juce_ImageEffectFilter.h" #endif #ifndef __JUCE_REDUCEOPACITYEFFECT_JUCEHEADER__ - #include "juce_appframework/gui/graphics/effects/juce_ReduceOpacityEffect.h" + #include "gui/graphics/effects/juce_ReduceOpacityEffect.h" #endif #ifndef __JUCE_KEYBOARDFOCUSTRAVERSER_JUCEHEADER__ - #include "juce_appframework/gui/components/keyboard/juce_KeyboardFocusTraverser.h" + #include "gui/components/keyboard/juce_KeyboardFocusTraverser.h" #endif #ifndef __JUCE_KEYLISTENER_JUCEHEADER__ - #include "juce_appframework/gui/components/keyboard/juce_KeyListener.h" + #include "gui/components/keyboard/juce_KeyListener.h" #endif #ifndef __JUCE_KEYMAPPINGEDITORCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/keyboard/juce_KeyMappingEditorComponent.h" + #include "gui/components/keyboard/juce_KeyMappingEditorComponent.h" #endif #ifndef __JUCE_KEYPRESS_JUCEHEADER__ - #include "juce_appframework/gui/components/keyboard/juce_KeyPress.h" + #include "gui/components/keyboard/juce_KeyPress.h" #endif #ifndef __JUCE_KEYPRESSMAPPINGSET_JUCEHEADER__ - #include "juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h" + #include "gui/components/keyboard/juce_KeyPressMappingSet.h" #endif #ifndef __JUCE_MODIFIERKEYS_JUCEHEADER__ - #include "juce_appframework/gui/components/keyboard/juce_ModifierKeys.h" + #include "gui/components/keyboard/juce_ModifierKeys.h" #endif #ifndef __JUCE_MENUBARCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/menus/juce_MenuBarComponent.h" + #include "gui/components/menus/juce_MenuBarComponent.h" #endif #ifndef __JUCE_MENUBARMODEL_JUCEHEADER__ - #include "juce_appframework/gui/components/menus/juce_MenuBarModel.h" + #include "gui/components/menus/juce_MenuBarModel.h" #endif #ifndef __JUCE_POPUPMENU_JUCEHEADER__ - #include "juce_appframework/gui/components/menus/juce_PopupMenu.h" + #include "gui/components/menus/juce_PopupMenu.h" #endif #ifndef __JUCE_POPUPMENUCUSTOMCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/menus/juce_PopupMenuCustomComponent.h" + #include "gui/components/menus/juce_PopupMenuCustomComponent.h" #endif #ifndef __JUCE_COMPONENTDRAGGER_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_ComponentDragger.h" + #include "gui/components/mouse/juce_ComponentDragger.h" #endif #ifndef __JUCE_DRAGANDDROPCONTAINER_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_DragAndDropContainer.h" + #include "gui/components/mouse/juce_DragAndDropContainer.h" #endif #ifndef __JUCE_DRAGANDDROPTARGET_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_DragAndDropTarget.h" + #include "gui/components/mouse/juce_DragAndDropTarget.h" #endif #ifndef __JUCE_FILEDRAGANDDROPTARGET_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_FileDragAndDropTarget.h" + #include "gui/components/mouse/juce_FileDragAndDropTarget.h" #endif #ifndef __JUCE_LASSOCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_LassoComponent.h" + #include "gui/components/mouse/juce_LassoComponent.h" #endif #ifndef __JUCE_MOUSECURSOR_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_MouseCursor.h" + #include "gui/components/mouse/juce_MouseCursor.h" #endif #ifndef __JUCE_MOUSEEVENT_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_MouseEvent.h" + #include "gui/components/mouse/juce_MouseEvent.h" #endif #ifndef __JUCE_MOUSEHOVERDETECTOR_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_MouseHoverDetector.h" + #include "gui/components/mouse/juce_MouseHoverDetector.h" #endif #ifndef __JUCE_MOUSELISTENER_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_MouseListener.h" + #include "gui/components/mouse/juce_MouseListener.h" #endif #ifndef __JUCE_TOOLTIPCLIENT_JUCEHEADER__ - #include "juce_appframework/gui/components/mouse/juce_TooltipClient.h" + #include "gui/components/mouse/juce_TooltipClient.h" #endif #ifndef __JUCE_COMBOBOX_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_ComboBox.h" + #include "gui/components/controls/juce_ComboBox.h" #endif #ifndef __JUCE_LABEL_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_Label.h" + #include "gui/components/controls/juce_Label.h" #endif #ifndef __JUCE_LISTBOX_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_ListBox.h" + #include "gui/components/controls/juce_ListBox.h" #endif #ifndef __JUCE_PROGRESSBAR_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_ProgressBar.h" + #include "gui/components/controls/juce_ProgressBar.h" #endif #ifndef __JUCE_SLIDER_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_Slider.h" + #include "gui/components/controls/juce_Slider.h" #endif #ifndef __JUCE_SLIDERLISTENER_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_SliderListener.h" + #include "gui/components/controls/juce_SliderListener.h" #endif #ifndef __JUCE_TABLEHEADERCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_TableHeaderComponent.h" + #include "gui/components/controls/juce_TableHeaderComponent.h" #endif #ifndef __JUCE_TABLELISTBOX_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_TableListBox.h" + #include "gui/components/controls/juce_TableListBox.h" #endif #ifndef __JUCE_TEXTEDITOR_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_TextEditor.h" + #include "gui/components/controls/juce_TextEditor.h" #endif #ifndef __JUCE_TOOLBAR_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_Toolbar.h" + #include "gui/components/controls/juce_Toolbar.h" #endif #ifndef __JUCE_TOOLBARITEMCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_ToolbarItemComponent.h" + #include "gui/components/controls/juce_ToolbarItemComponent.h" #endif #ifndef __JUCE_TOOLBARITEMFACTORY_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_ToolbarItemFactory.h" + #include "gui/components/controls/juce_ToolbarItemFactory.h" #endif #ifndef __JUCE_TOOLBARITEMPALETTE_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_ToolbarItemPalette.h" + #include "gui/components/controls/juce_ToolbarItemPalette.h" #endif #ifndef __JUCE_TREEVIEW_JUCEHEADER__ - #include "juce_appframework/gui/components/controls/juce_TreeView.h" + #include "gui/components/controls/juce_TreeView.h" #endif #ifndef __JUCE_BOOLEANPROPERTYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_BooleanPropertyComponent.h" + #include "gui/components/properties/juce_BooleanPropertyComponent.h" #endif #ifndef __JUCE_BUTTONPROPERTYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_ButtonPropertyComponent.h" + #include "gui/components/properties/juce_ButtonPropertyComponent.h" #endif #ifndef __JUCE_CHOICEPROPERTYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_ChoicePropertyComponent.h" + #include "gui/components/properties/juce_ChoicePropertyComponent.h" #endif #ifndef __JUCE_PROPERTYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_PropertyComponent.h" + #include "gui/components/properties/juce_PropertyComponent.h" #endif #ifndef __JUCE_PROPERTYPANEL_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_PropertyPanel.h" + #include "gui/components/properties/juce_PropertyPanel.h" #endif #ifndef __JUCE_SLIDERPROPERTYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_SliderPropertyComponent.h" + #include "gui/components/properties/juce_SliderPropertyComponent.h" #endif #ifndef __JUCE_TEXTPROPERTYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/properties/juce_TextPropertyComponent.h" + #include "gui/components/properties/juce_TextPropertyComponent.h" #endif #ifndef __JUCE_COMPONENTANIMATOR_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_ComponentAnimator.h" + #include "gui/components/layout/juce_ComponentAnimator.h" #endif #ifndef __JUCE_COMPONENTBOUNDSCONSTRAINER_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_ComponentBoundsConstrainer.h" + #include "gui/components/layout/juce_ComponentBoundsConstrainer.h" #endif #ifndef __JUCE_COMPONENTMOVEMENTWATCHER_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.h" + #include "gui/components/layout/juce_ComponentMovementWatcher.h" #endif #ifndef __JUCE_GROUPCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_GroupComponent.h" + #include "gui/components/layout/juce_GroupComponent.h" #endif #ifndef __JUCE_MULTIDOCUMENTPANEL_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_MultiDocumentPanel.h" + #include "gui/components/layout/juce_MultiDocumentPanel.h" #endif #ifndef __JUCE_RESIZABLEBORDERCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_ResizableBorderComponent.h" + #include "gui/components/layout/juce_ResizableBorderComponent.h" #endif #ifndef __JUCE_RESIZABLECORNERCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_ResizableCornerComponent.h" + #include "gui/components/layout/juce_ResizableCornerComponent.h" #endif #ifndef __JUCE_SCROLLBAR_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_ScrollBar.h" + #include "gui/components/layout/juce_ScrollBar.h" #endif #ifndef __JUCE_STRETCHABLELAYOUTMANAGER_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_StretchableLayoutManager.h" + #include "gui/components/layout/juce_StretchableLayoutManager.h" #endif #ifndef __JUCE_STRETCHABLELAYOUTRESIZERBAR_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_StretchableLayoutResizerBar.h" + #include "gui/components/layout/juce_StretchableLayoutResizerBar.h" #endif #ifndef __JUCE_STRETCHABLEOBJECTRESIZER_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_StretchableObjectResizer.h" + #include "gui/components/layout/juce_StretchableObjectResizer.h" #endif #ifndef __JUCE_TABBEDBUTTONBAR_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_TabbedButtonBar.h" + #include "gui/components/layout/juce_TabbedButtonBar.h" #endif #ifndef __JUCE_TABBEDCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_TabbedComponent.h" + #include "gui/components/layout/juce_TabbedComponent.h" #endif #ifndef __JUCE_VIEWPORT_JUCEHEADER__ - #include "juce_appframework/gui/components/layout/juce_Viewport.h" + #include "gui/components/layout/juce_Viewport.h" #endif #ifndef __JUCE_DIRECTORYCONTENTSDISPLAYCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h" + #include "gui/components/filebrowser/juce_DirectoryContentsDisplayComponent.h" #endif #ifndef __JUCE_DIRECTORYCONTENTSLIST_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_DirectoryContentsList.h" + #include "gui/components/filebrowser/juce_DirectoryContentsList.h" #endif #ifndef __JUCE_FILEBROWSERCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileBrowserComponent.h" + #include "gui/components/filebrowser/juce_FileBrowserComponent.h" #endif #ifndef __JUCE_FILEBROWSERLISTENER_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileBrowserListener.h" + #include "gui/components/filebrowser/juce_FileBrowserListener.h" #endif #ifndef __JUCE_FILECHOOSER_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileChooser.h" + #include "gui/components/filebrowser/juce_FileChooser.h" #endif #ifndef __JUCE_FILECHOOSERDIALOGBOX_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileChooserDialogBox.h" + #include "gui/components/filebrowser/juce_FileChooserDialogBox.h" #endif #ifndef __JUCE_FILEFILTER_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileFilter.h" + #include "gui/components/filebrowser/juce_FileFilter.h" #endif #ifndef __JUCE_FILELISTCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileListComponent.h" + #include "gui/components/filebrowser/juce_FileListComponent.h" #endif #ifndef __JUCE_FILENAMECOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FilenameComponent.h" + #include "gui/components/filebrowser/juce_FilenameComponent.h" #endif #ifndef __JUCE_FILEPREVIEWCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FilePreviewComponent.h" + #include "gui/components/filebrowser/juce_FilePreviewComponent.h" #endif #ifndef __JUCE_FILESEARCHPATHLISTCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileSearchPathListComponent.h" + #include "gui/components/filebrowser/juce_FileSearchPathListComponent.h" #endif #ifndef __JUCE_FILETREECOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_FileTreeComponent.h" + #include "gui/components/filebrowser/juce_FileTreeComponent.h" #endif #ifndef __JUCE_IMAGEPREVIEWCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_ImagePreviewComponent.h" + #include "gui/components/filebrowser/juce_ImagePreviewComponent.h" #endif #ifndef __JUCE_WILDCARDFILEFILTER_JUCEHEADER__ - #include "juce_appframework/gui/components/filebrowser/juce_WildcardFileFilter.h" + #include "gui/components/filebrowser/juce_WildcardFileFilter.h" #endif #ifndef __JUCE_ALERTWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_AlertWindow.h" + #include "gui/components/windows/juce_AlertWindow.h" #endif #ifndef __JUCE_COMPONENTPEER_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_ComponentPeer.h" + #include "gui/components/windows/juce_ComponentPeer.h" #endif #ifndef __JUCE_DIALOGWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_DialogWindow.h" + #include "gui/components/windows/juce_DialogWindow.h" #endif #ifndef __JUCE_DOCUMENTWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_DocumentWindow.h" + #include "gui/components/windows/juce_DocumentWindow.h" #endif #ifndef __JUCE_RESIZABLEWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_ResizableWindow.h" + #include "gui/components/windows/juce_ResizableWindow.h" #endif #ifndef __JUCE_SPLASHSCREEN_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_SplashScreen.h" + #include "gui/components/windows/juce_SplashScreen.h" #endif #ifndef __JUCE_THREADWITHPROGRESSWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_ThreadWithProgressWindow.h" + #include "gui/components/windows/juce_ThreadWithProgressWindow.h" #endif #ifndef __JUCE_TOOLTIPWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_TooltipWindow.h" + #include "gui/components/windows/juce_TooltipWindow.h" #endif #ifndef __JUCE_TOPLEVELWINDOW_JUCEHEADER__ - #include "juce_appframework/gui/components/windows/juce_TopLevelWindow.h" + #include "gui/components/windows/juce_TopLevelWindow.h" #endif #ifndef __JUCE_ACTIVEXCONTROLCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_ActiveXControlComponent.h" + #include "gui/components/special/juce_ActiveXControlComponent.h" #endif #ifndef __JUCE_AUDIODEVICESELECTORCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_AudioDeviceSelectorComponent.h" + #include "gui/components/special/juce_AudioDeviceSelectorComponent.h" #endif #ifndef __JUCE_BUBBLECOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_BubbleComponent.h" + #include "gui/components/special/juce_BubbleComponent.h" #endif #ifndef __JUCE_BUBBLEMESSAGECOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_BubbleMessageComponent.h" + #include "gui/components/special/juce_BubbleMessageComponent.h" #endif #ifndef __JUCE_COLOURSELECTOR_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_ColourSelector.h" + #include "gui/components/special/juce_ColourSelector.h" #endif #ifndef __JUCE_DROPSHADOWER_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_DropShadower.h" + #include "gui/components/special/juce_DropShadower.h" #endif #ifndef __JUCE_MAGNIFIERCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_MagnifierComponent.h" + #include "gui/components/special/juce_MagnifierComponent.h" #endif #ifndef __JUCE_MIDIKEYBOARDCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_MidiKeyboardComponent.h" + #include "gui/components/special/juce_MidiKeyboardComponent.h" #endif #ifndef __JUCE_NSVIEWCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_NSViewComponent.h" + #include "gui/components/special/juce_NSViewComponent.h" #endif #ifndef __JUCE_OPENGLCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_OpenGLComponent.h" + #include "gui/components/special/juce_OpenGLComponent.h" #endif #ifndef __JUCE_PREFERENCESPANEL_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_PreferencesPanel.h" + #include "gui/components/special/juce_PreferencesPanel.h" #endif #ifndef __JUCE_QUICKTIMEMOVIECOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h" + #include "gui/components/special/juce_QuickTimeMovieComponent.h" #endif #ifndef __JUCE_SYSTEMTRAYICONCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_SystemTrayIconComponent.h" + #include "gui/components/special/juce_SystemTrayIconComponent.h" #endif #ifndef __JUCE_WEBBROWSERCOMPONENT_JUCEHEADER__ - #include "juce_appframework/gui/components/special/juce_WebBrowserComponent.h" + #include "gui/components/special/juce_WebBrowserComponent.h" #endif #ifndef __JUCE_LOOKANDFEEL_JUCEHEADER__ - #include "juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.h" + #include "gui/components/lookandfeel/juce_LookAndFeel.h" #endif #ifndef __JUCE_OLDSCHOOLLOOKANDFEEL_JUCEHEADER__ - #include "juce_appframework/gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h" -#endif -#ifndef __JUCE_FILEBASEDDOCUMENT_JUCEHEADER__ - #include "juce_appframework/documents/juce_FileBasedDocument.h" -#endif -#ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ - #include "juce_appframework/documents/juce_RecentlyOpenedFilesList.h" -#endif -#ifndef __JUCE_SELECTEDITEMSET_JUCEHEADER__ - #include "juce_appframework/documents/juce_SelectedItemSet.h" -#endif -#ifndef __JUCE_UNDOABLEACTION_JUCEHEADER__ - #include "juce_appframework/documents/juce_UndoableAction.h" + #include "gui/components/lookandfeel/juce_OldSchoolLookAndFeel.h" #endif #ifndef __JUCE_UNDOMANAGER_JUCEHEADER__ - #include "juce_appframework/documents/juce_UndoManager.h" + #include "utilities/juce_UndoManager.h" +#endif +#ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ + #include "utilities/juce_SystemClipboard.h" +#endif +#ifndef __JUCE_PROPERTIESFILE_JUCEHEADER__ + #include "utilities/juce_PropertiesFile.h" +#endif +#ifndef __JUCE_UNDOABLEACTION_JUCEHEADER__ + #include "utilities/juce_UndoableAction.h" +#endif +#ifndef __JUCE_SELECTEDITEMSET_JUCEHEADER__ + #include "utilities/juce_SelectedItemSet.h" +#endif +#ifndef __JUCE_DELETEDATSHUTDOWN_JUCEHEADER__ + #include "utilities/juce_DeletedAtShutdown.h" +#endif +#ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ + #include "utilities/juce_RecentlyOpenedFilesList.h" +#endif +#ifndef __JUCE_FILEBASEDDOCUMENT_JUCEHEADER__ + #include "utilities/juce_FileBasedDocument.h" #endif #endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/Flac Licence.txt b/src/juce_appframework/audio/audio_file_formats/flac/Flac Licence.txt deleted file mode 100644 index 39992bdfbe..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/Flac Licence.txt +++ /dev/null @@ -1,49 +0,0 @@ - -===================================================================== - -I've incorporated FLAC directly into the Juce codebase because it makes -things much easier than having to make all your builds link correctly to -the appropriate libraries on every different platform. - -I've made minimal changes to the FLAC code - just tweaked a few include paths -to make it build smoothly, added some headers to allow you to turn off FLAC -compilation, and commented-out a couple of unused bits of code. - -===================================================================== - - -The following license is the BSD-style license that comes with the -Flac distribution, and which applies just to the files I've -included in this directory. For more info, and to get the rest of the -distribution, visit the Flac homepage: flac.sourceforge.net - -===================================================================== - -Copyright (C) 2000,2001,2002,2003,2004,2005,2006 Josh Coalson - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -- Neither the name of the Xiph.org Foundation nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/juce_appframework/audio/audio_file_formats/flac/all.h b/src/juce_appframework/audio/audio_file_formats/flac/all.h deleted file mode 100644 index 98026b2e16..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/all.h +++ /dev/null @@ -1,402 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__ALL_H -#define FLAC__ALL_H - -#include "export.h" - -#include "assert.h" -#include "callback.h" -#include "format.h" -#include "metadata.h" -#include "ordinals.h" -#include "stream_decoder.h" -#include "stream_encoder.h" - - -#ifdef _MSC_VER -/* OPT: an MSVC built-in would be better */ -static _inline FLAC__uint32 local_swap32_(FLAC__uint32 x) -{ - x = ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF); - return (x>>16) | (x<<16); -} -#endif - -#if defined(_MSC_VER) && defined(_X86_) -/* OPT: an MSVC built-in would be better */ -static void local_swap32_block_(FLAC__uint32 *start, FLAC__uint32 len) -{ - __asm { - mov edx, start - mov ecx, len - test ecx, ecx -loop1: - jz done1 - mov eax, [edx] - bswap eax - mov [edx], eax - add edx, 4 - dec ecx - jmp short loop1 -done1: - } -} -#endif - - -/** \mainpage - * - * \section intro Introduction - * - * This is the documentation for the FLAC C and C++ APIs. It is - * highly interconnected; this introduction should give you a top - * level idea of the structure and how to find the information you - * need. As a prerequisite you should have at least a basic - * knowledge of the FLAC format, documented - * here. - * - * \section c_api FLAC C API - * - * The FLAC C API is the interface to libFLAC, a set of structures - * describing the components of FLAC streams, and functions for - * encoding and decoding streams, as well as manipulating FLAC - * metadata in files. The public include files will be installed - * in your include area (for example /usr/include/FLAC/...). - * - * By writing a little code and linking against libFLAC, it is - * relatively easy to add FLAC support to another program. The - * library is licensed under Xiph's BSD license. - * Complete source code of libFLAC as well as the command-line - * encoder and plugins is available and is a useful source of - * examples. - * - * Aside from encoders and decoders, libFLAC provides a powerful - * metadata interface for manipulating metadata in FLAC files. It - * allows the user to add, delete, and modify FLAC metadata blocks - * and it can automatically take advantage of PADDING blocks to avoid - * rewriting the entire FLAC file when changing the size of the - * metadata. - * - * libFLAC usually only requires the standard C library and C math - * library. In particular, threading is not used so there is no - * dependency on a thread library. However, libFLAC does not use - * global variables and should be thread-safe. - * - * libFLAC also supports encoding to and decoding from Ogg FLAC. - * However the metadata editing interfaces currently have limited - * read-only support for Ogg FLAC files. - * - * \section cpp_api FLAC C++ API - * - * The FLAC C++ API is a set of classes that encapsulate the - * structures and functions in libFLAC. They provide slightly more - * functionality with respect to metadata but are otherwise - * equivalent. For the most part, they share the same usage as - * their counterparts in libFLAC, and the FLAC C API documentation - * can be used as a supplement. The public include files - * for the C++ API will be installed in your include area (for - * example /usr/include/FLAC++/...). - * - * libFLAC++ is also licensed under - * Xiph's BSD license. - * - * \section getting_started Getting Started - * - * A good starting point for learning the API is to browse through - * the modules. Modules are logical - * groupings of related functions or classes, which correspond roughly - * to header files or sections of header files. Each module includes a - * detailed description of the general usage of its functions or - * classes. - * - * From there you can go on to look at the documentation of - * individual functions. You can see different views of the individual - * functions through the links in top bar across this page. - * - * If you prefer a more hands-on approach, you can jump right to some - * example code. - * - * \section porting_guide Porting Guide - * - * Starting with FLAC 1.1.3 a \link porting Porting Guide \endlink - * has been introduced which gives detailed instructions on how to - * port your code to newer versions of FLAC. - * - * \section embedded_developers Embedded Developers - * - * libFLAC has grown larger over time as more functionality has been - * included, but much of it may be unnecessary for a particular embedded - * implementation. Unused parts may be pruned by some simple editing of - * src/libFLAC/Makefile.am. In general, the decoders, encoders, and - * metadata interface are all independent from each other. - * - * It is easiest to just describe the dependencies: - * - * - All modules depend on the \link flac_format Format \endlink module. - * - The decoders and encoders depend on the bitbuffer. - * - The decoder is independent of the encoder. The encoder uses the - * decoder because of the verify feature, but this can be removed if - * not needed. - * - Parts of the metadata interface require the stream decoder (but not - * the encoder). - * - Ogg support is selectable through the compile time macro - * \c FLAC__HAS_OGG. - * - * For example, if your application only requires the stream decoder, no - * encoder, and no metadata interface, you can remove the stream encoder - * and the metadata interface, which will greatly reduce the size of the - * library. - * - * Also, there are several places in the libFLAC code with comments marked - * with "OPT:" where a #define can be changed to enable code that might be - * faster on a specific platform. Experimenting with these can yield faster - * binaries. - */ - -/** \defgroup porting Porting Guide for New Versions - * - * This module describes differences in the library interfaces from - * version to version. It assists in the porting of code that uses - * the libraries to newer versions of FLAC. - * - * One simple facility for making porting easier that has been added - * in FLAC 1.1.3 is a set of \c #defines in \c export.h of each - * library's includes (e.g. \c include/FLAC/export.h). The - * \c #defines mirror the libraries' - * libtool version numbers, - * e.g. in libFLAC there are \c FLAC_API_VERSION_CURRENT, - * \c FLAC_API_VERSION_REVISION, and \c FLAC_API_VERSION_AGE. - * These can be used to support multiple versions of an API during the - * transition phase, e.g. - * - * \code - * #if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7 - * legacy code - * #else - * new code - * #endif - * \endcode - * - * The the source will work for multiple versions and the legacy code can - * easily be removed when the transition is complete. - * - * Another available symbol is FLAC_API_SUPPORTS_OGG_FLAC (defined in - * include/FLAC/export.h), which can be used to determine whether or not - * the library has been compiled with support for Ogg FLAC. This is - * simpler than trying to call an Ogg init function and catching the - * error. - */ - -/** \defgroup porting_1_1_2_to_1_1_3 Porting from FLAC 1.1.2 to 1.1.3 - * \ingroup porting - * - * \brief - * This module describes porting from FLAC 1.1.2 to FLAC 1.1.3. - * - * The main change between the APIs in 1.1.2 and 1.1.3 is that they have - * been simplified. First, libOggFLAC has been merged into libFLAC and - * libOggFLAC++ has been merged into libFLAC++. Second, both the three - * decoding layers and three encoding layers have been merged into a - * single stream decoder and stream encoder. That is, the functionality - * of FLAC__SeekableStreamDecoder and FLAC__FileDecoder has been merged - * into FLAC__StreamDecoder, and FLAC__SeekableStreamEncoder and - * FLAC__FileEncoder into FLAC__StreamEncoder. Only the - * FLAC__StreamDecoder and FLAC__StreamEncoder remain. What this means - * is there is now a single API that can be used to encode or decode - * streams to/from native FLAC or Ogg FLAC and the single API can work - * on both seekable and non-seekable streams. - * - * Instead of creating an encoder or decoder of a certain layer, now the - * client will always create a FLAC__StreamEncoder or - * FLAC__StreamDecoder. The old layers are now differentiated by the - * initialization function. For example, for the decoder, - * FLAC__stream_decoder_init() has been replaced by - * FLAC__stream_decoder_init_stream(). This init function takes - * callbacks for the I/O, and the seeking callbacks are optional. This - * allows the client to use the same object for seekable and - * non-seekable streams. For decoding a FLAC file directly, the client - * can use FLAC__stream_decoder_init_file() and pass just a filename - * and fewer callbacks; most of the other callbacks are supplied - * internally. For situations where fopen()ing by filename is not - * possible (e.g. Unicode filenames on Windows) the client can instead - * open the file itself and supply the FILE* to - * FLAC__stream_decoder_init_FILE(). The init functions now returns a - * FLAC__StreamDecoderInitStatus instead of FLAC__StreamDecoderState. - * Since the callbacks and client data are now passed to the init - * function, the FLAC__stream_decoder_set_*_callback() functions and - * FLAC__stream_decoder_set_client_data() are no longer needed. The - * rest of the calls to the decoder are the same as before. - * - * There are counterpart init functions for Ogg FLAC, e.g. - * FLAC__stream_decoder_init_ogg_stream(). All the rest of the calls - * and callbacks are the same as for native FLAC. - * - * As an example, in FLAC 1.1.2 a seekable stream decoder would have - * been set up like so: - * - * \code - * FLAC__SeekableStreamDecoder *decoder = FLAC__seekable_stream_decoder_new(); - * if(decoder == NULL) do_something; - * FLAC__seekable_stream_decoder_set_md5_checking(decoder, true); - * [... other settings ...] - * FLAC__seekable_stream_decoder_set_read_callback(decoder, my_read_callback); - * FLAC__seekable_stream_decoder_set_seek_callback(decoder, my_seek_callback); - * FLAC__seekable_stream_decoder_set_tell_callback(decoder, my_tell_callback); - * FLAC__seekable_stream_decoder_set_length_callback(decoder, my_length_callback); - * FLAC__seekable_stream_decoder_set_eof_callback(decoder, my_eof_callback); - * FLAC__seekable_stream_decoder_set_write_callback(decoder, my_write_callback); - * FLAC__seekable_stream_decoder_set_metadata_callback(decoder, my_metadata_callback); - * FLAC__seekable_stream_decoder_set_error_callback(decoder, my_error_callback); - * FLAC__seekable_stream_decoder_set_client_data(decoder, my_client_data); - * if(FLAC__seekable_stream_decoder_init(decoder) != FLAC__SEEKABLE_STREAM_DECODER_OK) do_something; - * \endcode - * - * In FLAC 1.1.3 it is like this: - * - * \code - * FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new(); - * if(decoder == NULL) do_something; - * FLAC__stream_decoder_set_md5_checking(decoder, true); - * [... other settings ...] - * if(FLAC__stream_decoder_init_stream( - * decoder, - * my_read_callback, - * my_seek_callback, // or NULL - * my_tell_callback, // or NULL - * my_length_callback, // or NULL - * my_eof_callback, // or NULL - * my_write_callback, - * my_metadata_callback, // or NULL - * my_error_callback, - * my_client_data - * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; - * \endcode - * - * or you could do; - * - * \code - * [...] - * FILE *file = fopen("somefile.flac","rb"); - * if(file == NULL) do_somthing; - * if(FLAC__stream_decoder_init_FILE( - * decoder, - * file, - * my_write_callback, - * my_metadata_callback, // or NULL - * my_error_callback, - * my_client_data - * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; - * \endcode - * - * or just: - * - * \code - * [...] - * if(FLAC__stream_decoder_init_file( - * decoder, - * "somefile.flac", - * my_write_callback, - * my_metadata_callback, // or NULL - * my_error_callback, - * my_client_data - * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; - * \endcode - * - * Another small change to the decoder is in how it handles unparseable - * streams. Before, when the decoder found an unparseable stream - * (reserved for when the decoder encounters a stream from a future - * encoder that it can't parse), it changed the state to - * \c FLAC__STREAM_DECODER_UNPARSEABLE_STREAM. Now the decoder instead - * drops sync and calls the error callback with a new error code - * \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM. This is - * more robust. If your error callback does not discriminate on the the - * error state, your code does not need to be changed. - * - * The encoder now has a new setting: - * FLAC__stream_encoder_set_apodization(). This is for setting the - * method used to window the data before LPC analysis. You only need to - * add a call to this function if the default is not suitable. There - * are also two new convenience functions that may be useful: - * FLAC__metadata_object_cuesheet_calculate_cddb_id() and - * FLAC__metadata_get_cuesheet(). - * - * The \a bytes parameter to FLAC__StreamDecoderReadCallback, - * FLAC__StreamEncoderReadCallback, and FLAC__StreamEncoderWriteCallback - * is now \c size_t instead of \c unsigned. - */ - -/** \defgroup porting_1_1_3_to_1_1_4 Porting from FLAC 1.1.3 to 1.1.4 - * \ingroup porting - * - * \brief - * This module describes porting from FLAC 1.1.3 to FLAC 1.1.4. - * - * There were no changes to any of the interfaces from 1.1.3 to 1.1.4. - * There was a slight change in the implementation of - * FLAC__stream_encoder_set_metadata(); the function now makes a copy - * of the \a metadata array of pointers so the client no longer needs - * to maintain it after the call. The objects themselves that are - * pointed to by the array are still not copied though and must be - * maintained until the call to FLAC__stream_encoder_finish(). - */ - -/** \defgroup porting_1_1_4_to_1_2_0 Porting from FLAC 1.1.4 to 1.2.0 - * \ingroup porting - * - * \brief - * This module describes porting from FLAC 1.1.4 to FLAC 1.2.0. - * - * There were only very minor changes to the interfaces from 1.1.4 to 1.2.0. - * In libFLAC, \c FLAC__format_sample_rate_is_subset() was added. - * In libFLAC++, \c FLAC::Decoder::Stream::get_decode_position() was added. - * - * Finally, value of the constant \c FLAC__FRAME_HEADER_RESERVED_LEN - * has changed to reflect the conversion of one of the reserved bits - * into active use. It used to be \c 2 and now is \c 1. However the - * FLAC frame header length has not changed, so to skip the proper - * number of bits, use \c FLAC__FRAME_HEADER_RESERVED_LEN + - * \c FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN - */ - -/** \defgroup flac FLAC C API - * - * The FLAC C API is the interface to libFLAC, a set of structures - * describing the components of FLAC streams, and functions for - * encoding and decoding streams, as well as manipulating FLAC - * metadata in files. - * - * You should start with the format components as all other modules - * are dependent on it. - */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/alloc.h b/src/juce_appframework/audio/audio_file_formats/flac/alloc.h deleted file mode 100644 index 270fde0178..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/alloc.h +++ /dev/null @@ -1,212 +0,0 @@ -/* alloc - Convenience routines for safely allocating memory - * Copyright (C) 2007 Josh Coalson - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef FLAC__SHARE__ALLOC_H -#define FLAC__SHARE__ALLOC_H - -#if HAVE_CONFIG_H -# include -#endif - -/* WATCHOUT: for c++ you may have to #define __STDC_LIMIT_MACROS 1 real early - * before #including this file, otherwise SIZE_MAX might not be defined - */ - -#include /* for SIZE_MAX */ -#if !defined _MSC_VER && !defined __MINGW32__ && !defined __EMX__ -#include /* for SIZE_MAX in case limits.h didn't get it */ -#endif -#include /* for size_t, malloc(), etc */ - -#ifndef SIZE_MAX -# ifndef SIZE_T_MAX -# ifdef _MSC_VER -# define SIZE_T_MAX UINT_MAX -# else -# error -# endif -# endif -# define SIZE_MAX SIZE_T_MAX -#endif - -#ifndef FLaC__INLINE -#define FLaC__INLINE -#endif - -/* avoid malloc()ing 0 bytes, see: - * https://www.securecoding.cert.org/confluence/display/seccode/MEM04-A.+Do+not+make+assumptions+about+the+result+of+allocating+0+bytes?focusedCommentId=5407003 -*/ -static FLaC__INLINE void *safe_malloc_(size_t size) -{ - /* malloc(0) is undefined; FLAC src convention is to always allocate */ - if(!size) - size++; - return malloc(size); -} - -static FLaC__INLINE void *safe_calloc_(size_t nmemb, size_t size) -{ - if(!nmemb || !size) - return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ - return calloc(nmemb, size); -} - -/*@@@@ there's probably a better way to prevent overflows when allocating untrusted sums but this works for now */ - -static FLaC__INLINE void *safe_malloc_add_2op_(size_t size1, size_t size2) -{ - size2 += size1; - if(size2 < size1) - return 0; - return safe_malloc_(size2); -} - -static FLaC__INLINE void *safe_malloc_add_3op_(size_t size1, size_t size2, size_t size3) -{ - size2 += size1; - if(size2 < size1) - return 0; - size3 += size2; - if(size3 < size2) - return 0; - return safe_malloc_(size3); -} - -static FLaC__INLINE void *safe_malloc_add_4op_(size_t size1, size_t size2, size_t size3, size_t size4) -{ - size2 += size1; - if(size2 < size1) - return 0; - size3 += size2; - if(size3 < size2) - return 0; - size4 += size3; - if(size4 < size3) - return 0; - return safe_malloc_(size4); -} - -static FLaC__INLINE void *safe_malloc_mul_2op_(size_t size1, size_t size2) -#if 0 -needs support for cases where sizeof(size_t) != 4 -{ - /* could be faster #ifdef'ing off SIZEOF_SIZE_T */ - if(sizeof(size_t) == 4) { - if ((double)size1 * (double)size2 < 4294967296.0) - return malloc(size1*size2); - } - return 0; -} -#else -/* better? */ -{ - if(!size1 || !size2) - return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ - if(size1 > SIZE_MAX / size2) - return 0; - return malloc(size1*size2); -} -#endif - -static FLaC__INLINE void *safe_malloc_mul_3op_(size_t size1, size_t size2, size_t size3) -{ - if(!size1 || !size2 || !size3) - return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ - if(size1 > SIZE_MAX / size2) - return 0; - size1 *= size2; - if(size1 > SIZE_MAX / size3) - return 0; - return malloc(size1*size3); -} - -/* size1*size2 + size3 */ -static FLaC__INLINE void *safe_malloc_mul2add_(size_t size1, size_t size2, size_t size3) -{ - if(!size1 || !size2) - return safe_malloc_(size3); - if(size1 > SIZE_MAX / size2) - return 0; - return safe_malloc_add_2op_(size1*size2, size3); -} - -/* size1 * (size2 + size3) */ -static FLaC__INLINE void *safe_malloc_muladd2_(size_t size1, size_t size2, size_t size3) -{ - if(!size1 || (!size2 && !size3)) - return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */ - size2 += size3; - if(size2 < size3) - return 0; - return safe_malloc_mul_2op_(size1, size2); -} - -static FLaC__INLINE void *safe_realloc_add_2op_(void *ptr, size_t size1, size_t size2) -{ - size2 += size1; - if(size2 < size1) - return 0; - return realloc(ptr, size2); -} - -static FLaC__INLINE void *safe_realloc_add_3op_(void *ptr, size_t size1, size_t size2, size_t size3) -{ - size2 += size1; - if(size2 < size1) - return 0; - size3 += size2; - if(size3 < size2) - return 0; - return realloc(ptr, size3); -} - -static FLaC__INLINE void *safe_realloc_add_4op_(void *ptr, size_t size1, size_t size2, size_t size3, size_t size4) -{ - size2 += size1; - if(size2 < size1) - return 0; - size3 += size2; - if(size3 < size2) - return 0; - size4 += size3; - if(size4 < size3) - return 0; - return realloc(ptr, size4); -} - -static FLaC__INLINE void *safe_realloc_mul_2op_(void *ptr, size_t size1, size_t size2) -{ - if(!size1 || !size2) - return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ - if(size1 > SIZE_MAX / size2) - return 0; - return realloc(ptr, size1*size2); -} - -/* size1 * (size2 + size3) */ -static FLaC__INLINE void *safe_realloc_muladd2_(void *ptr, size_t size1, size_t size2, size_t size3) -{ - if(!size1 || (!size2 && !size3)) - return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */ - size2 += size3; - if(size2 < size3) - return 0; - return safe_realloc_mul_2op_(ptr, size1, size2); -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/assert.h b/src/juce_appframework/audio/audio_file_formats/flac/assert.h deleted file mode 100644 index 5c2d5048b8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/assert.h +++ /dev/null @@ -1,45 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__ASSERT_H -#define FLAC__ASSERT_H - -/* we need this since some compilers (like MSVC) leave assert()s on release code (and we don't want to use their ASSERT) */ -#ifdef DEBUG -#include -#define FLAC__ASSERT(x) assert(x) -#define FLAC__ASSERT_DECLARATION(x) x -#else -#define FLAC__ASSERT(x) -#define FLAC__ASSERT_DECLARATION(x) -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/callback.h b/src/juce_appframework/audio/audio_file_formats/flac/callback.h deleted file mode 100644 index c951305022..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/callback.h +++ /dev/null @@ -1,184 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__CALLBACK_H -#define FLAC__CALLBACK_H - -#include "ordinals.h" -#include /* for size_t */ - -/** \file include/FLAC/callback.h - * - * \brief - * This module defines the structures for describing I/O callbacks - * to the other FLAC interfaces. - * - * See the detailed documentation for callbacks in the - * \link flac_callbacks callbacks \endlink module. - */ - -/** \defgroup flac_callbacks FLAC/callback.h: I/O callback structures - * \ingroup flac - * - * \brief - * This module defines the structures for describing I/O callbacks - * to the other FLAC interfaces. - * - * The purpose of the I/O callback functions is to create a common way - * for the metadata interfaces to handle I/O. - * - * Originally the metadata interfaces required filenames as the way of - * specifying FLAC files to operate on. This is problematic in some - * environments so there is an additional option to specify a set of - * callbacks for doing I/O on the FLAC file, instead of the filename. - * - * In addition to the callbacks, a FLAC__IOHandle type is defined as an - * opaque structure for a data source. - * - * The callback function prototypes are similar (but not identical) to the - * stdio functions fread, fwrite, fseek, ftell, feof, and fclose. If you use - * stdio streams to implement the callbacks, you can pass fread, fwrite, and - * fclose anywhere a FLAC__IOCallback_Read, FLAC__IOCallback_Write, or - * FLAC__IOCallback_Close is required, and a FILE* anywhere a FLAC__IOHandle - * is required. \warning You generally CANNOT directly use fseek or ftell - * for FLAC__IOCallback_Seek or FLAC__IOCallback_Tell since on most systems - * these use 32-bit offsets and FLAC requires 64-bit offsets to deal with - * large files. You will have to find an equivalent function (e.g. ftello), - * or write a wrapper. The same is true for feof() since this is usually - * implemented as a macro, not as a function whose address can be taken. - * - * \{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** This is the opaque handle type used by the callbacks. Typically - * this is a \c FILE* or address of a file descriptor. - */ -typedef void* FLAC__IOHandle; - -/** Signature for the read callback. - * The signature and semantics match POSIX fread() implementations - * and can generally be used interchangeably. - * - * \param ptr The address of the read buffer. - * \param size The size of the records to be read. - * \param nmemb The number of records to be read. - * \param handle The handle to the data source. - * \retval size_t - * The number of records read. - */ -typedef size_t (*FLAC__IOCallback_Read) (void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle); - -/** Signature for the write callback. - * The signature and semantics match POSIX fwrite() implementations - * and can generally be used interchangeably. - * - * \param ptr The address of the write buffer. - * \param size The size of the records to be written. - * \param nmemb The number of records to be written. - * \param handle The handle to the data source. - * \retval size_t - * The number of records written. - */ -typedef size_t (*FLAC__IOCallback_Write) (const void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle); - -/** Signature for the seek callback. - * The signature and semantics mostly match POSIX fseek() WITH ONE IMPORTANT - * EXCEPTION: the offset is a 64-bit type whereas fseek() is generally 'long' - * and 32-bits wide. - * - * \param handle The handle to the data source. - * \param offset The new position, relative to \a whence - * \param whence \c SEEK_SET, \c SEEK_CUR, or \c SEEK_END - * \retval int - * \c 0 on success, \c -1 on error. - */ -typedef int (*FLAC__IOCallback_Seek) (FLAC__IOHandle handle, FLAC__int64 offset, int whence); - -/** Signature for the tell callback. - * The signature and semantics mostly match POSIX ftell() WITH ONE IMPORTANT - * EXCEPTION: the offset is a 64-bit type whereas ftell() is generally 'long' - * and 32-bits wide. - * - * \param handle The handle to the data source. - * \retval FLAC__int64 - * The current position on success, \c -1 on error. - */ -typedef FLAC__int64 (*FLAC__IOCallback_Tell) (FLAC__IOHandle handle); - -/** Signature for the EOF callback. - * The signature and semantics mostly match POSIX feof() but WATCHOUT: - * on many systems, feof() is a macro, so in this case a wrapper function - * must be provided instead. - * - * \param handle The handle to the data source. - * \retval int - * \c 0 if not at end of file, nonzero if at end of file. - */ -typedef int (*FLAC__IOCallback_Eof) (FLAC__IOHandle handle); - -/** Signature for the close callback. - * The signature and semantics match POSIX fclose() implementations - * and can generally be used interchangeably. - * - * \param handle The handle to the data source. - * \retval int - * \c 0 on success, \c EOF on error. - */ -typedef int (*FLAC__IOCallback_Close) (FLAC__IOHandle handle); - -/** A structure for holding a set of callbacks. - * Each FLAC interface that requires a FLAC__IOCallbacks structure will - * describe which of the callbacks are required. The ones that are not - * required may be set to NULL. - * - * If the seek requirement for an interface is optional, you can signify that - * a data sorce is not seekable by setting the \a seek field to \c NULL. - */ -typedef struct { - FLAC__IOCallback_Read read; - FLAC__IOCallback_Write write; - FLAC__IOCallback_Seek seek; - FLAC__IOCallback_Tell tell; - FLAC__IOCallback_Eof eof; - FLAC__IOCallback_Close close; -} FLAC__IOCallbacks; - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/export.h b/src/juce_appframework/audio/audio_file_formats/flac/export.h deleted file mode 100644 index 5a5654c0fd..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/export.h +++ /dev/null @@ -1,91 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__EXPORT_H -#define FLAC__EXPORT_H - -/** \file include/FLAC/export.h - * - * \brief - * This module contains #defines and symbols for exporting function - * calls, and providing version information and compiled-in features. - * - * See the \link flac_export export \endlink module. - */ - -/** \defgroup flac_export FLAC/export.h: export symbols - * \ingroup flac - * - * \brief - * This module contains #defines and symbols for exporting function - * calls, and providing version information and compiled-in features. - * - * If you are compiling with MSVC and will link to the static library - * (libFLAC.lib) you should define FLAC__NO_DLL in your project to - * make sure the symbols are exported properly. - * - * \{ - */ - -#if defined(FLAC__NO_DLL) || !defined(_MSC_VER) -#define FLAC_API - -#else - -#ifdef FLAC_API_EXPORTS -#define FLAC_API _declspec(dllexport) -#else -#define FLAC_API _declspec(dllimport) - -#endif -#endif - -/** These #defines will mirror the libtool-based library version number, see - * http://www.gnu.org/software/libtool/manual.html#Libtool-versioning - */ -#define FLAC_API_VERSION_CURRENT 10 -#define FLAC_API_VERSION_REVISION 0 /**< see above */ -#define FLAC_API_VERSION_AGE 2 /**< see above */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \c 1 if the library has been compiled with support for Ogg FLAC, else \c 0. */ -extern FLAC_API int FLAC_API_SUPPORTS_OGG_FLAC; - -#ifdef __cplusplus -} -#endif - -/* \} */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/format.h b/src/juce_appframework/audio/audio_file_formats/flac/format.h deleted file mode 100644 index 75c06c1bb0..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/format.h +++ /dev/null @@ -1,1010 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__FORMAT_H -#define FLAC__FORMAT_H - -#include "export.h" -#include "ordinals.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** \file include/FLAC/format.h - * - * \brief - * This module contains structure definitions for the representation - * of FLAC format components in memory. These are the basic - * structures used by the rest of the interfaces. - * - * See the detailed documentation in the - * \link flac_format format \endlink module. - */ - -/** \defgroup flac_format FLAC/format.h: format components - * \ingroup flac - * - * \brief - * This module contains structure definitions for the representation - * of FLAC format components in memory. These are the basic - * structures used by the rest of the interfaces. - * - * First, you should be familiar with the - * FLAC format. Many of the values here - * follow directly from the specification. As a user of libFLAC, the - * interesting parts really are the structures that describe the frame - * header and metadata blocks. - * - * The format structures here are very primitive, designed to store - * information in an efficient way. Reading information from the - * structures is easy but creating or modifying them directly is - * more complex. For the most part, as a user of a library, editing - * is not necessary; however, for metadata blocks it is, so there are - * convenience functions provided in the \link flac_metadata metadata - * module \endlink to simplify the manipulation of metadata blocks. - * - * \note - * It's not the best convention, but symbols ending in _LEN are in bits - * and _LENGTH are in bytes. _LENGTH symbols are \#defines instead of - * global variables because they are usually used when declaring byte - * arrays and some compilers require compile-time knowledge of array - * sizes when declared on the stack. - * - * \{ - */ - - -/* - Most of the values described in this file are defined by the FLAC - format specification. There is nothing to tune here. -*/ - -/** The largest legal metadata type code. */ -#define FLAC__MAX_METADATA_TYPE_CODE (126u) - -/** The minimum block size, in samples, permitted by the format. */ -#define FLAC__MIN_BLOCK_SIZE (16u) - -/** The maximum block size, in samples, permitted by the format. */ -#define FLAC__MAX_BLOCK_SIZE (65535u) - -/** The maximum block size, in samples, permitted by the FLAC subset for - * sample rates up to 48kHz. */ -#define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u) - -/** The maximum number of channels permitted by the format. */ -#define FLAC__MAX_CHANNELS (8u) - -/** The minimum sample resolution permitted by the format. */ -#define FLAC__MIN_BITS_PER_SAMPLE (4u) - -/** The maximum sample resolution permitted by the format. */ -#define FLAC__MAX_BITS_PER_SAMPLE (32u) - -/** The maximum sample resolution permitted by libFLAC. - * - * \warning - * FLAC__MAX_BITS_PER_SAMPLE is the limit of the FLAC format. However, - * the reference encoder/decoder is currently limited to 24 bits because - * of prevalent 32-bit math, so make sure and use this value when - * appropriate. - */ -#define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u) - -/** The maximum sample rate permitted by the format. The value is - * ((2 ^ 16) - 1) * 10; see FLAC format - * as to why. - */ -#define FLAC__MAX_SAMPLE_RATE (655350u) - -/** The maximum LPC order permitted by the format. */ -#define FLAC__MAX_LPC_ORDER (32u) - -/** The maximum LPC order permitted by the FLAC subset for sample rates - * up to 48kHz. */ -#define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u) - -/** The minimum quantized linear predictor coefficient precision - * permitted by the format. - */ -#define FLAC__MIN_QLP_COEFF_PRECISION (5u) - -/** The maximum quantized linear predictor coefficient precision - * permitted by the format. - */ -#define FLAC__MAX_QLP_COEFF_PRECISION (15u) - -/** The maximum order of the fixed predictors permitted by the format. */ -#define FLAC__MAX_FIXED_ORDER (4u) - -/** The maximum Rice partition order permitted by the format. */ -#define FLAC__MAX_RICE_PARTITION_ORDER (15u) - -/** The maximum Rice partition order permitted by the FLAC Subset. */ -#define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u) - -/** The version string of the release, stamped onto the libraries and binaries. - * - * \note - * This does not correspond to the shared library version number, which - * is used to determine binary compatibility. - */ -extern FLAC_API const char *FLAC__VERSION_STRING; - -/** The vendor string inserted by the encoder into the VORBIS_COMMENT block. - * This is a NUL-terminated ASCII string; when inserted into the - * VORBIS_COMMENT the trailing null is stripped. - */ -extern FLAC_API const char *FLAC__VENDOR_STRING; - -/** The byte string representation of the beginning of a FLAC stream. */ -extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4]; /* = "fLaC" */ - -/** The 32-bit integer big-endian representation of the beginning of - * a FLAC stream. - */ -extern FLAC_API const unsigned FLAC__STREAM_SYNC; /* = 0x664C6143 */ - -/** The length of the FLAC signature in bits. */ -extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN; /* = 32 bits */ - -/** The length of the FLAC signature in bytes. */ -#define FLAC__STREAM_SYNC_LENGTH (4u) - - -/***************************************************************************** - * - * Subframe structures - * - *****************************************************************************/ - -/*****************************************************************************/ - -/** An enumeration of the available entropy coding methods. */ -typedef enum { - FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0, - /**< Residual is coded by partitioning into contexts, each with it's own - * 4-bit Rice parameter. */ - - FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1 - /**< Residual is coded by partitioning into contexts, each with it's own - * 5-bit Rice parameter. */ -} FLAC__EntropyCodingMethodType; - -/** Maps a FLAC__EntropyCodingMethodType to a C string. - * - * Using a FLAC__EntropyCodingMethodType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[]; - - -/** Contents of a Rice partitioned residual - */ -typedef struct { - - unsigned *parameters; - /**< The Rice parameters for each context. */ - - unsigned *raw_bits; - /**< Widths for escape-coded partitions. Will be non-zero for escaped - * partitions and zero for unescaped partitions. - */ - - unsigned capacity_by_order; - /**< The capacity of the \a parameters and \a raw_bits arrays - * specified as an order, i.e. the number of array elements - * allocated is 2 ^ \a capacity_by_order. - */ -} FLAC__EntropyCodingMethod_PartitionedRiceContents; - -/** Header for a Rice partitioned residual. (c.f. format specification) - */ -typedef struct { - - unsigned order; - /**< The partition order, i.e. # of contexts = 2 ^ \a order. */ - - const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents; - /**< The context's Rice parameters and/or raw bits. */ - -} FLAC__EntropyCodingMethod_PartitionedRice; - -extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; /**< == 4 (bits) */ -extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; /**< == 4 (bits) */ -extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN; /**< == 5 (bits) */ -extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN; /**< == 5 (bits) */ - -extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; -/**< == (1<format specification) - */ -typedef struct { - FLAC__EntropyCodingMethodType type; - union { - FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice; - } data; -} FLAC__EntropyCodingMethod; - -extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN; /**< == 2 (bits) */ - -/*****************************************************************************/ - -/** An enumeration of the available subframe types. */ -typedef enum { - FLAC__SUBFRAME_TYPE_CONSTANT = 0, /**< constant signal */ - FLAC__SUBFRAME_TYPE_VERBATIM = 1, /**< uncompressed signal */ - FLAC__SUBFRAME_TYPE_FIXED = 2, /**< fixed polynomial prediction */ - FLAC__SUBFRAME_TYPE_LPC = 3 /**< linear prediction */ -} FLAC__SubframeType; - -/** Maps a FLAC__SubframeType to a C string. - * - * Using a FLAC__SubframeType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__SubframeTypeString[]; - - -/** CONSTANT subframe. (c.f. format specification) - */ -typedef struct { - FLAC__int32 value; /**< The constant signal value. */ -} FLAC__Subframe_Constant; - - -/** VERBATIM subframe. (c.f. format specification) - */ -typedef struct { - const FLAC__int32 *data; /**< A pointer to verbatim signal. */ -} FLAC__Subframe_Verbatim; - - -/** FIXED subframe. (c.f. format specification) - */ -typedef struct { - FLAC__EntropyCodingMethod entropy_coding_method; - /**< The residual coding method. */ - - unsigned order; - /**< The polynomial order. */ - - FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER]; - /**< Warmup samples to prime the predictor, length == order. */ - - const FLAC__int32 *residual; - /**< The residual signal, length == (blocksize minus order) samples. */ -} FLAC__Subframe_Fixed; - - -/** LPC subframe. (c.f. format specification) - */ -typedef struct { - FLAC__EntropyCodingMethod entropy_coding_method; - /**< The residual coding method. */ - - unsigned order; - /**< The FIR order. */ - - unsigned qlp_coeff_precision; - /**< Quantized FIR filter coefficient precision in bits. */ - - int quantization_level; - /**< The qlp coeff shift needed. */ - - FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER]; - /**< FIR filter coefficients. */ - - FLAC__int32 warmup[FLAC__MAX_LPC_ORDER]; - /**< Warmup samples to prime the predictor, length == order. */ - - const FLAC__int32 *residual; - /**< The residual signal, length == (blocksize minus order) samples. */ -} FLAC__Subframe_LPC; - -extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN; /**< == 4 (bits) */ -extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN; /**< == 5 (bits) */ - - -/** FLAC subframe structure. (c.f. format specification) - */ -typedef struct { - FLAC__SubframeType type; - union { - FLAC__Subframe_Constant constant; - FLAC__Subframe_Fixed fixed; - FLAC__Subframe_LPC lpc; - FLAC__Subframe_Verbatim verbatim; - } data; - unsigned wasted_bits; -} FLAC__Subframe; - -/** == 1 (bit) - * - * This used to be a zero-padding bit (hence the name - * FLAC__SUBFRAME_ZERO_PAD_LEN) but is now a reserved bit. It still has a - * mandatory value of \c 0 but in the future may take on the value \c 0 or \c 1 - * to mean something else. - */ -extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN; -extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN; /**< == 6 (bits) */ -extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN; /**< == 1 (bit) */ - -extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK; /**< = 0x00 */ -extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK; /**< = 0x02 */ -extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK; /**< = 0x10 */ -extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK; /**< = 0x40 */ - -/*****************************************************************************/ - - -/***************************************************************************** - * - * Frame structures - * - *****************************************************************************/ - -/** An enumeration of the available channel assignments. */ -typedef enum { - FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, /**< independent channels */ - FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, /**< left+side stereo */ - FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, /**< right+side stereo */ - FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 /**< mid+side stereo */ -} FLAC__ChannelAssignment; - -/** Maps a FLAC__ChannelAssignment to a C string. - * - * Using a FLAC__ChannelAssignment as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__ChannelAssignmentString[]; - -/** An enumeration of the possible frame numbering methods. */ -typedef enum { - FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER, /**< number contains the frame number */ - FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER /**< number contains the sample number of first sample in frame */ -} FLAC__FrameNumberType; - -/** Maps a FLAC__FrameNumberType to a C string. - * - * Using a FLAC__FrameNumberType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__FrameNumberTypeString[]; - - -/** FLAC frame header structure. (c.f. format specification) - */ -typedef struct { - unsigned blocksize; - /**< The number of samples per subframe. */ - - unsigned sample_rate; - /**< The sample rate in Hz. */ - - unsigned channels; - /**< The number of channels (== number of subframes). */ - - FLAC__ChannelAssignment channel_assignment; - /**< The channel assignment for the frame. */ - - unsigned bits_per_sample; - /**< The sample resolution. */ - - FLAC__FrameNumberType number_type; - /**< The numbering scheme used for the frame. As a convenience, the - * decoder will always convert a frame number to a sample number because - * the rules are complex. */ - - union { - FLAC__uint32 frame_number; - FLAC__uint64 sample_number; - } number; - /**< The frame number or sample number of first sample in frame; - * use the \a number_type value to determine which to use. */ - - FLAC__uint8 crc; - /**< CRC-8 (polynomial = x^8 + x^2 + x^1 + x^0, initialized with 0) - * of the raw frame header bytes, meaning everything before the CRC byte - * including the sync code. - */ -} FLAC__FrameHeader; - -extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC; /**< == 0x3ffe; the frame header sync code */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN; /**< == 14 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN; /**< == 1 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN; /**< == 1 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN; /**< == 4 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN; /**< == 4 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN; /**< == 4 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN; /**< == 3 (bits) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN; /**< == 1 (bit) */ -extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN; /**< == 8 (bits) */ - - -/** FLAC frame footer structure. (c.f. format specification) - */ -typedef struct { - FLAC__uint16 crc; - /**< CRC-16 (polynomial = x^16 + x^15 + x^2 + x^0, initialized with - * 0) of the bytes before the crc, back to and including the frame header - * sync code. - */ -} FLAC__FrameFooter; - -extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN; /**< == 16 (bits) */ - - -/** FLAC frame structure. (c.f. format specification) - */ -typedef struct { - FLAC__FrameHeader header; - FLAC__Subframe subframes[FLAC__MAX_CHANNELS]; - FLAC__FrameFooter footer; -} FLAC__Frame; - -/*****************************************************************************/ - - -/***************************************************************************** - * - * Meta-data structures - * - *****************************************************************************/ - -/** An enumeration of the available metadata block types. */ -typedef enum { - - FLAC__METADATA_TYPE_STREAMINFO = 0, - /**< STREAMINFO block */ - - FLAC__METADATA_TYPE_PADDING = 1, - /**< PADDING block */ - - FLAC__METADATA_TYPE_APPLICATION = 2, - /**< APPLICATION block */ - - FLAC__METADATA_TYPE_SEEKTABLE = 3, - /**< SEEKTABLE block */ - - FLAC__METADATA_TYPE_VORBIS_COMMENT = 4, - /**< VORBISCOMMENT block (a.k.a. FLAC tags) */ - - FLAC__METADATA_TYPE_CUESHEET = 5, - /**< CUESHEET block */ - - FLAC__METADATA_TYPE_PICTURE = 6, - /**< PICTURE block */ - - FLAC__METADATA_TYPE_UNDEFINED = 7 - /**< marker to denote beginning of undefined type range; this number will increase as new metadata types are added */ - -} FLAC__MetadataType; - -/** Maps a FLAC__MetadataType to a C string. - * - * Using a FLAC__MetadataType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__MetadataTypeString[]; - - -/** FLAC STREAMINFO structure. (c.f. format specification) - */ -typedef struct { - unsigned min_blocksize, max_blocksize; - unsigned min_framesize, max_framesize; - unsigned sample_rate; - unsigned channels; - unsigned bits_per_sample; - FLAC__uint64 total_samples; - FLAC__byte md5sum[16]; -} FLAC__StreamMetadata_StreamInfo; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; /**< == 16 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; /**< == 16 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; /**< == 24 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; /**< == 24 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; /**< == 20 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; /**< == 3 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; /**< == 5 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; /**< == 36 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN; /**< == 128 (bits) */ - -/** The total stream length of the STREAMINFO block in bytes. */ -#define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u) - -/** FLAC PADDING structure. (c.f. format specification) - */ -typedef struct { - int dummy; - /**< Conceptually this is an empty struct since we don't store the - * padding bytes. Empty structs are not allowed by some C compilers, - * hence the dummy. - */ -} FLAC__StreamMetadata_Padding; - - -/** FLAC APPLICATION structure. (c.f. format specification) - */ -typedef struct { - FLAC__byte id[4]; - FLAC__byte *data; -} FLAC__StreamMetadata_Application; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN; /**< == 32 (bits) */ - -/** SeekPoint structure used in SEEKTABLE blocks. (c.f. format specification) - */ -typedef struct { - FLAC__uint64 sample_number; - /**< The sample number of the target frame. */ - - FLAC__uint64 stream_offset; - /**< The offset, in bytes, of the target frame with respect to - * beginning of the first frame. */ - - unsigned frame_samples; - /**< The number of samples in the target frame. */ -} FLAC__StreamMetadata_SeekPoint; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN; /**< == 64 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN; /**< == 64 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN; /**< == 16 (bits) */ - -/** The total stream length of a seek point in bytes. */ -#define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u) - -/** The value used in the \a sample_number field of - * FLAC__StreamMetadataSeekPoint used to indicate a placeholder - * point (== 0xffffffffffffffff). - */ -extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER; - - -/** FLAC SEEKTABLE structure. (c.f. format specification) - * - * \note From the format specification: - * - The seek points must be sorted by ascending sample number. - * - Each seek point's sample number must be the first sample of the - * target frame. - * - Each seek point's sample number must be unique within the table. - * - Existence of a SEEKTABLE block implies a correct setting of - * total_samples in the stream_info block. - * - Behavior is undefined when more than one SEEKTABLE block is - * present in a stream. - */ -typedef struct { - unsigned num_points; - FLAC__StreamMetadata_SeekPoint *points; -} FLAC__StreamMetadata_SeekTable; - - -/** Vorbis comment entry structure used in VORBIS_COMMENT blocks. (c.f. format specification) - * - * For convenience, the APIs maintain a trailing NUL character at the end of - * \a entry which is not counted toward \a length, i.e. - * \code strlen(entry) == length \endcode - */ -typedef struct { - FLAC__uint32 length; - FLAC__byte *entry; -} FLAC__StreamMetadata_VorbisComment_Entry; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN; /**< == 32 (bits) */ - - -/** FLAC VORBIS_COMMENT structure. (c.f. format specification) - */ -typedef struct { - FLAC__StreamMetadata_VorbisComment_Entry vendor_string; - FLAC__uint32 num_comments; - FLAC__StreamMetadata_VorbisComment_Entry *comments; -} FLAC__StreamMetadata_VorbisComment; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN; /**< == 32 (bits) */ - - -/** FLAC CUESHEET track index structure. (See the - * format specification for - * the full description of each field.) - */ -typedef struct { - FLAC__uint64 offset; - /**< Offset in samples, relative to the track offset, of the index - * point. - */ - - FLAC__byte number; - /**< The index point number. */ -} FLAC__StreamMetadata_CueSheet_Index; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN; /**< == 64 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN; /**< == 8 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN; /**< == 3*8 (bits) */ - - -/** FLAC CUESHEET track structure. (See the - * format specification for - * the full description of each field.) - */ -typedef struct { - FLAC__uint64 offset; - /**< Track offset in samples, relative to the beginning of the FLAC audio stream. */ - - FLAC__byte number; - /**< The track number. */ - - char isrc[13]; - /**< Track ISRC. This is a 12-digit alphanumeric code plus a trailing \c NUL byte */ - - unsigned type:1; - /**< The track type: 0 for audio, 1 for non-audio. */ - - unsigned pre_emphasis:1; - /**< The pre-emphasis flag: 0 for no pre-emphasis, 1 for pre-emphasis. */ - - FLAC__byte num_indices; - /**< The number of track index points. */ - - FLAC__StreamMetadata_CueSheet_Index *indices; - /**< NULL if num_indices == 0, else pointer to array of index points. */ - -} FLAC__StreamMetadata_CueSheet_Track; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN; /**< == 64 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN; /**< == 8 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN; /**< == 12*8 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN; /**< == 1 (bit) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN; /**< == 1 (bit) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN; /**< == 6+13*8 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN; /**< == 8 (bits) */ - - -/** FLAC CUESHEET structure. (See the - * format specification - * for the full description of each field.) - */ -typedef struct { - char media_catalog_number[129]; - /**< Media catalog number, in ASCII printable characters 0x20-0x7e. In - * general, the media catalog number may be 0 to 128 bytes long; any - * unused characters should be right-padded with NUL characters. - */ - - FLAC__uint64 lead_in; - /**< The number of lead-in samples. */ - - FLAC__bool is_cd; - /**< \c true if CUESHEET corresponds to a Compact Disc, else \c false. */ - - unsigned num_tracks; - /**< The number of tracks. */ - - FLAC__StreamMetadata_CueSheet_Track *tracks; - /**< NULL if num_tracks == 0, else pointer to array of tracks. */ - -} FLAC__StreamMetadata_CueSheet; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; /**< == 128*8 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; /**< == 64 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN; /**< == 1 (bit) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; /**< == 7+258*8 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; /**< == 8 (bits) */ - - -/** An enumeration of the PICTURE types (see FLAC__StreamMetadataPicture and id3 v2.4 APIC tag). */ -typedef enum { - FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0, /**< Other */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1, /**< 32x32 pixels 'file icon' (PNG only) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2, /**< Other file icon */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3, /**< Cover (front) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4, /**< Cover (back) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5, /**< Leaflet page */ - FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6, /**< Media (e.g. label side of CD) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7, /**< Lead artist/lead performer/soloist */ - FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8, /**< Artist/performer */ - FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9, /**< Conductor */ - FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10, /**< Band/Orchestra */ - FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11, /**< Composer */ - FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12, /**< Lyricist/text writer */ - FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13, /**< Recording Location */ - FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14, /**< During recording */ - FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15, /**< During performance */ - FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16, /**< Movie/video screen capture */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17, /**< A bright coloured fish */ - FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18, /**< Illustration */ - FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19, /**< Band/artist logotype */ - FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20, /**< Publisher/Studio logotype */ - FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED -} FLAC__StreamMetadata_Picture_Type; - -/** Maps a FLAC__StreamMetadata_Picture_Type to a C string. - * - * Using a FLAC__StreamMetadata_Picture_Type as the index to this array - * will give the string equivalent. The contents should not be - * modified. - */ -extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[]; - -/** FLAC PICTURE structure. (See the - * format specification - * for the full description of each field.) - */ -typedef struct { - FLAC__StreamMetadata_Picture_Type type; - /**< The kind of picture stored. */ - - char *mime_type; - /**< Picture data's MIME type, in ASCII printable characters - * 0x20-0x7e, NUL terminated. For best compatibility with players, - * use picture data of MIME type \c image/jpeg or \c image/png. A - * MIME type of '-->' is also allowed, in which case the picture - * data should be a complete URL. In file storage, the MIME type is - * stored as a 32-bit length followed by the ASCII string with no NUL - * terminator, but is converted to a plain C string in this structure - * for convenience. - */ - - FLAC__byte *description; - /**< Picture's description in UTF-8, NUL terminated. In file storage, - * the description is stored as a 32-bit length followed by the UTF-8 - * string with no NUL terminator, but is converted to a plain C string - * in this structure for convenience. - */ - - FLAC__uint32 width; - /**< Picture's width in pixels. */ - - FLAC__uint32 height; - /**< Picture's height in pixels. */ - - FLAC__uint32 depth; - /**< Picture's color depth in bits-per-pixel. */ - - FLAC__uint32 colors; - /**< For indexed palettes (like GIF), picture's number of colors (the - * number of palette entries), or \c 0 for non-indexed (i.e. 2^depth). - */ - - FLAC__uint32 data_length; - /**< Length of binary picture data in bytes. */ - - FLAC__byte *data; - /**< Binary picture data. */ - -} FLAC__StreamMetadata_Picture; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN; /**< == 32 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN; /**< == 32 (bits) */ - - -/** Structure that is used when a metadata block of unknown type is loaded. - * The contents are opaque. The structure is used only internally to - * correctly handle unknown metadata. - */ -typedef struct { - FLAC__byte *data; -} FLAC__StreamMetadata_Unknown; - - -/** FLAC metadata block structure. (c.f. format specification) - */ -typedef struct { - FLAC__MetadataType type; - /**< The type of the metadata block; used determine which member of the - * \a data union to dereference. If type >= FLAC__METADATA_TYPE_UNDEFINED - * then \a data.unknown must be used. */ - - FLAC__bool is_last; - /**< \c true if this metadata block is the last, else \a false */ - - unsigned length; - /**< Length, in bytes, of the block data as it appears in the stream. */ - - union { - FLAC__StreamMetadata_StreamInfo stream_info; - FLAC__StreamMetadata_Padding padding; - FLAC__StreamMetadata_Application application; - FLAC__StreamMetadata_SeekTable seek_table; - FLAC__StreamMetadata_VorbisComment vorbis_comment; - FLAC__StreamMetadata_CueSheet cue_sheet; - FLAC__StreamMetadata_Picture picture; - FLAC__StreamMetadata_Unknown unknown; - } data; - /**< Polymorphic block data; use the \a type value to determine which - * to use. */ -} FLAC__StreamMetadata; - -extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN; /**< == 1 (bit) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN; /**< == 7 (bits) */ -extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN; /**< == 24 (bits) */ - -/** The total stream length of a metadata block header in bytes. */ -#define FLAC__STREAM_METADATA_HEADER_LENGTH (4u) - -/*****************************************************************************/ - - -/***************************************************************************** - * - * Utility functions - * - *****************************************************************************/ - -/** Tests that a sample rate is valid for FLAC. - * - * \param sample_rate The sample rate to test for compliance. - * \retval FLAC__bool - * \c true if the given sample rate conforms to the specification, else - * \c false. - */ -FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate); - -/** Tests that a sample rate is valid for the FLAC subset. The subset rules - * for valid sample rates are slightly more complex since the rate has to - * be expressible completely in the frame header. - * - * \param sample_rate The sample rate to test for compliance. - * \retval FLAC__bool - * \c true if the given sample rate conforms to the specification for the - * subset, else \c false. - */ -FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate); - -/** Check a Vorbis comment entry name to see if it conforms to the Vorbis - * comment specification. - * - * Vorbis comment names must be composed only of characters from - * [0x20-0x3C,0x3E-0x7D]. - * - * \param name A NUL-terminated string to be checked. - * \assert - * \code name != NULL \endcode - * \retval FLAC__bool - * \c false if entry name is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name); - -/** Check a Vorbis comment entry value to see if it conforms to the Vorbis - * comment specification. - * - * Vorbis comment values must be valid UTF-8 sequences. - * - * \param value A string to be checked. - * \param length A the length of \a value in bytes. May be - * \c (unsigned)(-1) to indicate that \a value is a plain - * UTF-8 NUL-terminated string. - * \assert - * \code value != NULL \endcode - * \retval FLAC__bool - * \c false if entry name is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length); - -/** Check a Vorbis comment entry to see if it conforms to the Vorbis - * comment specification. - * - * Vorbis comment entries must be of the form 'name=value', and 'name' and - * 'value' must be legal according to - * FLAC__format_vorbiscomment_entry_name_is_legal() and - * FLAC__format_vorbiscomment_entry_value_is_legal() respectively. - * - * \param entry An entry to be checked. - * \param length The length of \a entry in bytes. - * \assert - * \code value != NULL \endcode - * \retval FLAC__bool - * \c false if entry name is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length); - -/** Check a seek table to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * seek table. - * - * \param seek_table A pointer to a seek table to be checked. - * \assert - * \code seek_table != NULL \endcode - * \retval FLAC__bool - * \c false if seek table is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table); - -/** Sort a seek table's seek points according to the format specification. - * This includes a "unique-ification" step to remove duplicates, i.e. - * seek points with identical \a sample_number values. Duplicate seek - * points are converted into placeholder points and sorted to the end of - * the table. - * - * \param seek_table A pointer to a seek table to be sorted. - * \assert - * \code seek_table != NULL \endcode - * \retval unsigned - * The number of duplicate seek points converted into placeholders. - */ -FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table); - -/** Check a cue sheet to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * cue sheet. - * - * \param cue_sheet A pointer to an existing cue sheet to be checked. - * \param check_cd_da_subset If \c true, check CUESHEET against more - * stringent requirements for a CD-DA (audio) disc. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code cue_sheet != NULL \endcode - * \retval FLAC__bool - * \c false if cue sheet is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation); - -/** Check picture data to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * PICTURE block. - * - * \param picture A pointer to existing picture data to be checked. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code picture != NULL \endcode - * \retval FLAC__bool - * \c false if picture data is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitmath.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitmath.c deleted file mode 100644 index 4895212454..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitmath.c +++ /dev/null @@ -1,155 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include "include/private/bitmath.h" -#include "../assert.h" - -/* An example of what FLAC__bitmath_ilog2() computes: - * - * ilog2( 0) = assertion failure - * ilog2( 1) = 0 - * ilog2( 2) = 1 - * ilog2( 3) = 1 - * ilog2( 4) = 2 - * ilog2( 5) = 2 - * ilog2( 6) = 2 - * ilog2( 7) = 2 - * ilog2( 8) = 3 - * ilog2( 9) = 3 - * ilog2(10) = 3 - * ilog2(11) = 3 - * ilog2(12) = 3 - * ilog2(13) = 3 - * ilog2(14) = 3 - * ilog2(15) = 3 - * ilog2(16) = 4 - * ilog2(17) = 4 - * ilog2(18) = 4 - */ -unsigned FLAC__bitmath_ilog2(FLAC__uint32 v) -{ - unsigned l = 0; - FLAC__ASSERT(v > 0); - while(v >>= 1) - l++; - return l; -} - -unsigned FLAC__bitmath_ilog2_wide(FLAC__uint64 v) -{ - unsigned l = 0; - FLAC__ASSERT(v > 0); - while(v >>= 1) - l++; - return l; -} - -/* An example of what FLAC__bitmath_silog2() computes: - * - * silog2(-10) = 5 - * silog2(- 9) = 5 - * silog2(- 8) = 4 - * silog2(- 7) = 4 - * silog2(- 6) = 4 - * silog2(- 5) = 4 - * silog2(- 4) = 3 - * silog2(- 3) = 3 - * silog2(- 2) = 2 - * silog2(- 1) = 2 - * silog2( 0) = 0 - * silog2( 1) = 2 - * silog2( 2) = 3 - * silog2( 3) = 3 - * silog2( 4) = 4 - * silog2( 5) = 4 - * silog2( 6) = 4 - * silog2( 7) = 4 - * silog2( 8) = 5 - * silog2( 9) = 5 - * silog2( 10) = 5 - */ -unsigned FLAC__bitmath_silog2(int v) -{ - while(1) { - if(v == 0) { - return 0; - } - else if(v > 0) { - unsigned l = 0; - while(v) { - l++; - v >>= 1; - } - return l+1; - } - else if(v == -1) { - return 2; - } - else { - v++; - v = -v; - } - } -} - -unsigned FLAC__bitmath_silog2_wide(FLAC__int64 v) -{ - while(1) { - if(v == 0) { - return 0; - } - else if(v > 0) { - unsigned l = 0; - while(v) { - l++; - v >>= 1; - } - return l+1; - } - else if(v == -1) { - return 2; - } - else { - v++; - v = -v; - } - } -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitreader.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitreader.c deleted file mode 100644 index cbb57d5e0b..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitreader.c +++ /dev/null @@ -1,1355 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - -#if HAVE_CONFIG_H -# include -#endif - -#include /* for malloc() */ -#include /* for memcpy(), memset() */ -#ifdef _MSC_VER -#include /* for ntohl() */ -#elif defined FLAC__SYS_DARWIN -#include /* for ntohl() */ -#elif defined __MINGW32__ -#include /* for ntohl() */ -#else -#include /* for ntohl() */ -#endif -#include "include/private/bitmath.h" -#include "include/private/bitreader.h" -#include "include/private/crc.h" -#include "../assert.h" - -/* Things should be fastest when this matches the machine word size */ -/* WATCHOUT: if you change this you must also change the following #defines down to COUNT_ZERO_MSBS below to match */ -/* WATCHOUT: there are a few places where the code will not work unless brword is >= 32 bits wide */ -/* also, some sections currently only have fast versions for 4 or 8 bytes per word */ -typedef FLAC__uint32 brword; -#define FLAC__BYTES_PER_WORD 4 -#define FLAC__BITS_PER_WORD 32 -#define FLAC__WORD_ALL_ONES ((FLAC__uint32)0xffffffff) -/* SWAP_BE_WORD_TO_HOST swaps bytes in a brword (which is always big-endian) if necessary to match host byte order */ -#if WORDS_BIGENDIAN -#define SWAP_BE_WORD_TO_HOST(x) (x) -#else -#if defined (_MSC_VER) && defined (_X86_) -#define SWAP_BE_WORD_TO_HOST(x) local_swap32_(x) -#else -#define SWAP_BE_WORD_TO_HOST(x) ntohl(x) -#endif -#endif -/* counts the # of zero MSBs in a word */ -#define COUNT_ZERO_MSBS(word) ( \ - (word) <= 0xffff ? \ - ( (word) <= 0xff? byte_to_unary_table[word] + 24 : byte_to_unary_table[(word) >> 8] + 16 ) : \ - ( (word) <= 0xffffff? byte_to_unary_table[word >> 16] + 8 : byte_to_unary_table[(word) >> 24] ) \ -) -/* this alternate might be slightly faster on some systems/compilers: */ -#define COUNT_ZERO_MSBS2(word) ( (word) <= 0xff ? byte_to_unary_table[word] + 24 : ((word) <= 0xffff ? byte_to_unary_table[(word) >> 8] + 16 : ((word) <= 0xffffff ? byte_to_unary_table[(word) >> 16] + 8 : byte_to_unary_table[(word) >> 24])) ) - - -/* - * This should be at least twice as large as the largest number of words - * required to represent any 'number' (in any encoding) you are going to - * read. With FLAC this is on the order of maybe a few hundred bits. - * If the buffer is smaller than that, the decoder won't be able to read - * in a whole number that is in a variable length encoding (e.g. Rice). - * But to be practical it should be at least 1K bytes. - * - * Increase this number to decrease the number of read callbacks, at the - * expense of using more memory. Or decrease for the reverse effect, - * keeping in mind the limit from the first paragraph. The optimal size - * also depends on the CPU cache size and other factors; some twiddling - * may be necessary to squeeze out the best performance. - */ -static const unsigned FLAC__BITREADER_DEFAULT_CAPACITY = 65536u / FLAC__BITS_PER_WORD; /* in words */ - -static const unsigned char byte_to_unary_table[] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -#ifdef min -#undef min -#endif -#define min(x,y) ((x)<(y)?(x):(y)) -#ifdef max -#undef max -#endif -#define max(x,y) ((x)>(y)?(x):(y)) - -/* adjust for compilers that can't understand using LLU suffix for uint64_t literals */ -#ifdef _MSC_VER -#define FLAC__U64L(x) x -#else -#define FLAC__U64L(x) x##LLU -#endif - -#ifndef FLaC__INLINE -#define FLaC__INLINE -#endif - -/* WATCHOUT: assembly routines rely on the order in which these fields are declared */ -struct FLAC__BitReader { - /* any partially-consumed word at the head will stay right-justified as bits are consumed from the left */ - /* any incomplete word at the tail will be left-justified, and bytes from the read callback are added on the right */ - brword *buffer; - unsigned capacity; /* in words */ - unsigned words; /* # of completed words in buffer */ - unsigned bytes; /* # of bytes in incomplete word at buffer[words] */ - unsigned consumed_words; /* #words ... */ - unsigned consumed_bits; /* ... + (#bits of head word) already consumed from the front of buffer */ - unsigned read_crc16; /* the running frame CRC */ - unsigned crc16_align; /* the number of bits in the current consumed word that should not be CRC'd */ - FLAC__BitReaderReadCallback read_callback; - void *client_data; - FLAC__CPUInfo cpu_info; -}; - -static FLaC__INLINE void crc16_update_word_(FLAC__BitReader *br, brword word) -{ - register unsigned crc = br->read_crc16; -#if FLAC__BYTES_PER_WORD == 4 - switch(br->crc16_align) { - case 0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 24), crc); - case 8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc); - case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc); - case 24: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); - } -#elif FLAC__BYTES_PER_WORD == 8 - switch(br->crc16_align) { - case 0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 56), crc); - case 8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 48) & 0xff), crc); - case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 40) & 0xff), crc); - case 24: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 32) & 0xff), crc); - case 32: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 24) & 0xff), crc); - case 40: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc); - case 48: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc); - case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc); - } -#else - for( ; br->crc16_align < FLAC__BITS_PER_WORD; br->crc16_align += 8) - crc = FLAC__CRC16_UPDATE((unsigned)((word >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), crc); - br->read_crc16 = crc; -#endif - br->crc16_align = 0; -} - -/* would be static except it needs to be called by asm routines */ -FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br) -{ - unsigned start, end; - size_t bytes; - FLAC__byte *target; - - /* first shift the unconsumed buffer data toward the front as much as possible */ - if(br->consumed_words > 0) { - start = br->consumed_words; - end = br->words + (br->bytes? 1:0); - memmove(br->buffer, br->buffer+start, FLAC__BYTES_PER_WORD * (end - start)); - - br->words -= start; - br->consumed_words = 0; - } - - /* - * set the target for reading, taking into account word alignment and endianness - */ - bytes = (br->capacity - br->words) * FLAC__BYTES_PER_WORD - br->bytes; - if(bytes == 0) - return false; /* no space left, buffer is too small; see note for FLAC__BITREADER_DEFAULT_CAPACITY */ - target = ((FLAC__byte*)(br->buffer+br->words)) + br->bytes; - - /* before reading, if the existing reader looks like this (say brword is 32 bits wide) - * bitstream : 11 22 33 44 55 br->words=1 br->bytes=1 (partial tail word is left-justified) - * buffer[BE]: 11 22 33 44 55 ?? ?? ?? (shown layed out as bytes sequentially in memory) - * buffer[LE]: 44 33 22 11 ?? ?? ?? 55 (?? being don't-care) - * ^^-------target, bytes=3 - * on LE machines, have to byteswap the odd tail word so nothing is - * overwritten: - */ -#if WORDS_BIGENDIAN -#else - if(br->bytes) - br->buffer[br->words] = SWAP_BE_WORD_TO_HOST(br->buffer[br->words]); -#endif - - /* now it looks like: - * bitstream : 11 22 33 44 55 br->words=1 br->bytes=1 - * buffer[BE]: 11 22 33 44 55 ?? ?? ?? - * buffer[LE]: 44 33 22 11 55 ?? ?? ?? - * ^^-------target, bytes=3 - */ - - /* read in the data; note that the callback may return a smaller number of bytes */ - if(!br->read_callback(target, &bytes, br->client_data)) - return false; - - /* after reading bytes 66 77 88 99 AA BB CC DD EE FF from the client: - * bitstream : 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF - * buffer[BE]: 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ?? - * buffer[LE]: 44 33 22 11 55 66 77 88 99 AA BB CC DD EE FF ?? - * now have to byteswap on LE machines: - */ -#if WORDS_BIGENDIAN -#else - end = (br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes + (FLAC__BYTES_PER_WORD-1)) / FLAC__BYTES_PER_WORD; -# if defined(_MSC_VER) && defined (_X86_) && (FLAC__BYTES_PER_WORD == 4) - if(br->cpu_info.type == FLAC__CPUINFO_TYPE_IA32 && br->cpu_info.data.ia32.bswap) { - start = br->words; - local_swap32_block_(br->buffer + start, end - start); - } - else -# endif - for(start = br->words; start < end; start++) - br->buffer[start] = SWAP_BE_WORD_TO_HOST(br->buffer[start]); -#endif - - /* now it looks like: - * bitstream : 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF - * buffer[BE]: 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ?? - * buffer[LE]: 44 33 22 11 88 77 66 55 CC BB AA 99 ?? FF EE DD - * finally we'll update the reader values: - */ - end = br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes; - br->words = end / FLAC__BYTES_PER_WORD; - br->bytes = end % FLAC__BYTES_PER_WORD; - - return true; -} - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ - -FLAC__BitReader *FLAC__bitreader_new(void) -{ - FLAC__BitReader *br = (FLAC__BitReader*)calloc(1, sizeof(FLAC__BitReader)); - - /* calloc() implies: - memset(br, 0, sizeof(FLAC__BitReader)); - br->buffer = 0; - br->capacity = 0; - br->words = br->bytes = 0; - br->consumed_words = br->consumed_bits = 0; - br->read_callback = 0; - br->client_data = 0; - */ - return br; -} - -void FLAC__bitreader_delete(FLAC__BitReader *br) -{ - FLAC__ASSERT(0 != br); - - FLAC__bitreader_free(br); - free(br); -} - -/*********************************************************************** - * - * Public class methods - * - ***********************************************************************/ - -FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__CPUInfo cpu, FLAC__BitReaderReadCallback rcb, void *cd) -{ - FLAC__ASSERT(0 != br); - - br->words = br->bytes = 0; - br->consumed_words = br->consumed_bits = 0; - br->capacity = FLAC__BITREADER_DEFAULT_CAPACITY; - br->buffer = (brword*)malloc(sizeof(brword) * br->capacity); - if(br->buffer == 0) - return false; - br->read_callback = rcb; - br->client_data = cd; - br->cpu_info = cpu; - - return true; -} - -void FLAC__bitreader_free(FLAC__BitReader *br) -{ - FLAC__ASSERT(0 != br); - - if(0 != br->buffer) - free(br->buffer); - br->buffer = 0; - br->capacity = 0; - br->words = br->bytes = 0; - br->consumed_words = br->consumed_bits = 0; - br->read_callback = 0; - br->client_data = 0; -} - -FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br) -{ - br->words = br->bytes = 0; - br->consumed_words = br->consumed_bits = 0; - return true; -} - -void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out) -{ - unsigned i, j; - if(br == 0) { - fprintf(out, "bitreader is NULL\n"); - } - else { - fprintf(out, "bitreader: capacity=%u words=%u bytes=%u consumed: words=%u, bits=%u\n", br->capacity, br->words, br->bytes, br->consumed_words, br->consumed_bits); - - for(i = 0; i < br->words; i++) { - fprintf(out, "%08X: ", i); - for(j = 0; j < FLAC__BITS_PER_WORD; j++) - if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits)) - fprintf(out, "."); - else - fprintf(out, "%01u", br->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0); - fprintf(out, "\n"); - } - if(br->bytes > 0) { - fprintf(out, "%08X: ", i); - for(j = 0; j < br->bytes*8; j++) - if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits)) - fprintf(out, "."); - else - fprintf(out, "%01u", br->buffer[i] & (1 << (br->bytes*8-j-1)) ? 1:0); - fprintf(out, "\n"); - } - } -} - -void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed) -{ - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - FLAC__ASSERT((br->consumed_bits & 7) == 0); - - br->read_crc16 = (unsigned)seed; - br->crc16_align = br->consumed_bits; -} - -FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br) -{ - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - FLAC__ASSERT((br->consumed_bits & 7) == 0); - FLAC__ASSERT(br->crc16_align <= br->consumed_bits); - - /* CRC any tail bytes in a partially-consumed word */ - if(br->consumed_bits) { - const brword tail = br->buffer[br->consumed_words]; - for( ; br->crc16_align < br->consumed_bits; br->crc16_align += 8) - br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)((tail >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), br->read_crc16); - } - return br->read_crc16; -} - -FLaC__INLINE FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br) -{ - return ((br->consumed_bits & 7) == 0); -} - -FLaC__INLINE unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br) -{ - return 8 - (br->consumed_bits & 7); -} - -FLaC__INLINE unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br) -{ - return (br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits; -} - -FLaC__INLINE FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits) -{ - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - - FLAC__ASSERT(bits <= 32); - FLAC__ASSERT((br->capacity*FLAC__BITS_PER_WORD) * 2 >= bits); - FLAC__ASSERT(br->consumed_words <= br->words); - - /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */ - FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32); - - if(bits == 0) { /* OPT: investigate if this can ever happen, maybe change to assertion */ - *val = 0; - return true; - } - - while((br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits < bits) { - if(!bitreader_read_from_client_(br)) - return false; - } - if(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */ - /* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */ - if(br->consumed_bits) { - /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */ - const unsigned n = FLAC__BITS_PER_WORD - br->consumed_bits; - const brword word = br->buffer[br->consumed_words]; - if(bits < n) { - *val = (word & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (n-bits); - br->consumed_bits += bits; - return true; - } - *val = word & (FLAC__WORD_ALL_ONES >> br->consumed_bits); - bits -= n; - crc16_update_word_(br, word); - br->consumed_words++; - br->consumed_bits = 0; - if(bits) { /* if there are still bits left to read, there have to be less than 32 so they will all be in the next word */ - *val <<= bits; - *val |= (br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits)); - br->consumed_bits = bits; - } - return true; - } - else { - const brword word = br->buffer[br->consumed_words]; - if(bits < FLAC__BITS_PER_WORD) { - *val = word >> (FLAC__BITS_PER_WORD-bits); - br->consumed_bits = bits; - return true; - } - /* at this point 'bits' must be == FLAC__BITS_PER_WORD; because of previous assertions, it can't be larger */ - *val = word; - crc16_update_word_(br, word); - br->consumed_words++; - return true; - } - } - else { - /* in this case we're starting our read at a partial tail word; - * the reader has guaranteed that we have at least 'bits' bits - * available to read, which makes this case simpler. - */ - /* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */ - if(br->consumed_bits) { - /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */ - FLAC__ASSERT(br->consumed_bits + bits <= br->bytes*8); - *val = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (FLAC__BITS_PER_WORD-br->consumed_bits-bits); - br->consumed_bits += bits; - return true; - } - else { - *val = br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits); - br->consumed_bits += bits; - return true; - } - } -} - -FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits) -{ - /* OPT: inline raw uint32 code here, or make into a macro if possible in the .h file */ - if(!FLAC__bitreader_read_raw_uint32(br, (FLAC__uint32*)val, bits)) - return false; - /* sign-extend: */ - *val <<= (32-bits); - *val >>= (32-bits); - return true; -} - -FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits) -{ - FLAC__uint32 hi, lo; - - if(bits > 32) { - if(!FLAC__bitreader_read_raw_uint32(br, &hi, bits-32)) - return false; - if(!FLAC__bitreader_read_raw_uint32(br, &lo, 32)) - return false; - *val = hi; - *val <<= 32; - *val |= lo; - } - else { - if(!FLAC__bitreader_read_raw_uint32(br, &lo, bits)) - return false; - *val = lo; - } - return true; -} - -FLaC__INLINE FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val) -{ - FLAC__uint32 x8, x32 = 0; - - /* this doesn't need to be that fast as currently it is only used for vorbis comments */ - - if(!FLAC__bitreader_read_raw_uint32(br, &x32, 8)) - return false; - - if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8)) - return false; - x32 |= (x8 << 8); - - if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8)) - return false; - x32 |= (x8 << 16); - - if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8)) - return false; - x32 |= (x8 << 24); - - *val = x32; - return true; -} - -FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits) -{ - /* - * OPT: a faster implementation is possible but probably not that useful - * since this is only called a couple of times in the metadata readers. - */ - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - - if(bits > 0) { - const unsigned n = br->consumed_bits & 7; - unsigned m; - FLAC__uint32 x; - - if(n != 0) { - m = min(8-n, bits); - if(!FLAC__bitreader_read_raw_uint32(br, &x, m)) - return false; - bits -= m; - } - m = bits / 8; - if(m > 0) { - if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(br, m)) - return false; - bits %= 8; - } - if(bits > 0) { - if(!FLAC__bitreader_read_raw_uint32(br, &x, bits)) - return false; - } - } - - return true; -} - -FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals) -{ - FLAC__uint32 x; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br)); - - /* step 1: skip over partial head word to get word aligned */ - while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */ - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - nvals--; - } - if(0 == nvals) - return true; - /* step 2: skip whole words in chunks */ - while(nvals >= FLAC__BYTES_PER_WORD) { - if(br->consumed_words < br->words) { - br->consumed_words++; - nvals -= FLAC__BYTES_PER_WORD; - } - else if(!bitreader_read_from_client_(br)) - return false; - } - /* step 3: skip any remainder from partial tail bytes */ - while(nvals) { - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - nvals--; - } - - return true; -} - -FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals) -{ - FLAC__uint32 x; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br)); - - /* step 1: read from partial head word to get word aligned */ - while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */ - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - *val++ = (FLAC__byte)x; - nvals--; - } - if(0 == nvals) - return true; - /* step 2: read whole words in chunks */ - while(nvals >= FLAC__BYTES_PER_WORD) { - if(br->consumed_words < br->words) { - const brword word = br->buffer[br->consumed_words++]; -#if FLAC__BYTES_PER_WORD == 4 - val[0] = (FLAC__byte)(word >> 24); - val[1] = (FLAC__byte)(word >> 16); - val[2] = (FLAC__byte)(word >> 8); - val[3] = (FLAC__byte)word; -#elif FLAC__BYTES_PER_WORD == 8 - val[0] = (FLAC__byte)(word >> 56); - val[1] = (FLAC__byte)(word >> 48); - val[2] = (FLAC__byte)(word >> 40); - val[3] = (FLAC__byte)(word >> 32); - val[4] = (FLAC__byte)(word >> 24); - val[5] = (FLAC__byte)(word >> 16); - val[6] = (FLAC__byte)(word >> 8); - val[7] = (FLAC__byte)word; -#else - for(x = 0; x < FLAC__BYTES_PER_WORD; x++) - val[x] = (FLAC__byte)(word >> (8*(FLAC__BYTES_PER_WORD-x-1))); -#endif - val += FLAC__BYTES_PER_WORD; - nvals -= FLAC__BYTES_PER_WORD; - } - else if(!bitreader_read_from_client_(br)) - return false; - } - /* step 3: read any remainder from partial tail bytes */ - while(nvals) { - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - *val++ = (FLAC__byte)x; - nvals--; - } - - return true; -} - -FLaC__INLINE FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val) -#if 0 /* slow but readable version */ -{ - unsigned bit; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - - *val = 0; - while(1) { - if(!FLAC__bitreader_read_bit(br, &bit)) - return false; - if(bit) - break; - else - *val++; - } - return true; -} -#else -{ - unsigned i; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - - *val = 0; - while(1) { - while(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */ - brword b = br->buffer[br->consumed_words] << br->consumed_bits; - if(b) { - i = COUNT_ZERO_MSBS(b); - *val += i; - i++; - br->consumed_bits += i; - if(br->consumed_bits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(br->consumed_bits == FLAC__BITS_PER_WORD) */ - crc16_update_word_(br, br->buffer[br->consumed_words]); - br->consumed_words++; - br->consumed_bits = 0; - } - return true; - } - else { - *val += FLAC__BITS_PER_WORD - br->consumed_bits; - crc16_update_word_(br, br->buffer[br->consumed_words]); - br->consumed_words++; - br->consumed_bits = 0; - /* didn't find stop bit yet, have to keep going... */ - } - } - /* at this point we've eaten up all the whole words; have to try - * reading through any tail bytes before calling the read callback. - * this is a repeat of the above logic adjusted for the fact we - * don't have a whole word. note though if the client is feeding - * us data a byte at a time (unlikely), br->consumed_bits may not - * be zero. - */ - if(br->bytes) { - const unsigned end = br->bytes * 8; - brword b = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << br->consumed_bits; - if(b) { - i = COUNT_ZERO_MSBS(b); - *val += i; - i++; - br->consumed_bits += i; - FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD); - return true; - } - else { - *val += end - br->consumed_bits; - br->consumed_bits += end; - FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD); - /* didn't find stop bit yet, have to keep going... */ - } - } - if(!bitreader_read_from_client_(br)) - return false; - } -} -#endif - -FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter) -{ - FLAC__uint32 lsbs = 0, msbs = 0; - unsigned uval; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - FLAC__ASSERT(parameter <= 31); - - /* read the unary MSBs and end bit */ - if(!FLAC__bitreader_read_unary_unsigned(br, (unsigned int*) &msbs)) - return false; - - /* read the binary LSBs */ - if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter)) - return false; - - /* compose the value */ - uval = (msbs << parameter) | lsbs; - if(uval & 1) - *val = -((int)(uval >> 1)) - 1; - else - *val = (int)(uval >> 1); - - return true; -} - -/* this is by far the most heavily used reader call. it ain't pretty but it's fast */ -/* a lot of the logic is copied, then adapted, from FLAC__bitreader_read_unary_unsigned() and FLAC__bitreader_read_raw_uint32() */ -FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter) -/* OPT: possibly faster version for use with MSVC */ -#ifdef _MSC_VER -{ - unsigned i; - unsigned uval = 0; - unsigned bits; /* the # of binary LSBs left to read to finish a rice codeword */ - - /* try and get br->consumed_words and br->consumed_bits into register; - * must remember to flush them back to *br before calling other - * bitwriter functions that use them, and before returning */ - register unsigned cwords; - register unsigned cbits; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */ - FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32); - FLAC__ASSERT(parameter < 32); - /* the above two asserts also guarantee that the binary part never straddles more that 2 words, so we don't have to loop to read it */ - - if(nvals == 0) - return true; - - cbits = br->consumed_bits; - cwords = br->consumed_words; - - while(1) { - - /* read unary part */ - while(1) { - while(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ - brword b = br->buffer[cwords] << cbits; - if(b) { -#if 0 /* slower, probably due to bad register allocation... */ && defined FLAC__CPU_IA32 && !defined FLAC__NO_ASM && FLAC__BITS_PER_WORD == 32 - __asm { - bsr eax, b - not eax - and eax, 31 - mov i, eax - } -#else - i = COUNT_ZERO_MSBS(b); -#endif - uval += i; - bits = parameter; - i++; - cbits += i; - if(cbits == FLAC__BITS_PER_WORD) { - crc16_update_word_(br, br->buffer[cwords]); - cwords++; - cbits = 0; - } - goto break1; - } - else { - uval += FLAC__BITS_PER_WORD - cbits; - crc16_update_word_(br, br->buffer[cwords]); - cwords++; - cbits = 0; - /* didn't find stop bit yet, have to keep going... */ - } - } - /* at this point we've eaten up all the whole words; have to try - * reading through any tail bytes before calling the read callback. - * this is a repeat of the above logic adjusted for the fact we - * don't have a whole word. note though if the client is feeding - * us data a byte at a time (unlikely), br->consumed_bits may not - * be zero. - */ - if(br->bytes) { - const unsigned end = br->bytes * 8; - brword b = (br->buffer[cwords] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << cbits; - if(b) { - i = COUNT_ZERO_MSBS(b); - uval += i; - bits = parameter; - i++; - cbits += i; - FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); - goto break1; - } - else { - uval += end - cbits; - cbits += end; - FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); - /* didn't find stop bit yet, have to keep going... */ - } - } - /* flush registers and read; bitreader_read_from_client_() does - * not touch br->consumed_bits at all but we still need to set - * it in case it fails and we have to return false. - */ - br->consumed_bits = cbits; - br->consumed_words = cwords; - if(!bitreader_read_from_client_(br)) - return false; - cwords = br->consumed_words; - } -break1: - /* read binary part */ - FLAC__ASSERT(cwords <= br->words); - - if(bits) { - while((br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits < bits) { - /* flush registers and read; bitreader_read_from_client_() does - * not touch br->consumed_bits at all but we still need to set - * it in case it fails and we have to return false. - */ - br->consumed_bits = cbits; - br->consumed_words = cwords; - if(!bitreader_read_from_client_(br)) - return false; - cwords = br->consumed_words; - } - if(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ - if(cbits) { - /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */ - const unsigned n = FLAC__BITS_PER_WORD - cbits; - const brword word = br->buffer[cwords]; - if(bits < n) { - uval <<= bits; - uval |= (word & (FLAC__WORD_ALL_ONES >> cbits)) >> (n-bits); - cbits += bits; - goto break2; - } - uval <<= n; - uval |= word & (FLAC__WORD_ALL_ONES >> cbits); - bits -= n; - crc16_update_word_(br, word); - cwords++; - cbits = 0; - if(bits) { /* if there are still bits left to read, there have to be less than 32 so they will all be in the next word */ - uval <<= bits; - uval |= (br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits)); - cbits = bits; - } - goto break2; - } - else { - FLAC__ASSERT(bits < FLAC__BITS_PER_WORD); - uval <<= bits; - uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits); - cbits = bits; - goto break2; - } - } - else { - /* in this case we're starting our read at a partial tail word; - * the reader has guaranteed that we have at least 'bits' bits - * available to read, which makes this case simpler. - */ - uval <<= bits; - if(cbits) { - /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */ - FLAC__ASSERT(cbits + bits <= br->bytes*8); - uval |= (br->buffer[cwords] & (FLAC__WORD_ALL_ONES >> cbits)) >> (FLAC__BITS_PER_WORD-cbits-bits); - cbits += bits; - goto break2; - } - else { - uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-bits); - cbits += bits; - goto break2; - } - } - } -break2: - /* compose the value */ - *vals = (int)(uval >> 1 ^ -(int)(uval & 1)); - - /* are we done? */ - --nvals; - if(nvals == 0) { - br->consumed_bits = cbits; - br->consumed_words = cwords; - return true; - } - - uval = 0; - ++vals; - - } -} -#else -{ - unsigned i; - unsigned uval = 0; - - /* try and get br->consumed_words and br->consumed_bits into register; - * must remember to flush them back to *br before calling other - * bitwriter functions that use them, and before returning */ - register unsigned cwords; - register unsigned cbits; - unsigned ucbits; /* keep track of the number of unconsumed bits in the buffer */ - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */ - FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32); - FLAC__ASSERT(parameter < 32); - /* the above two asserts also guarantee that the binary part never straddles more than 2 words, so we don't have to loop to read it */ - - if(nvals == 0) - return true; - - cbits = br->consumed_bits; - cwords = br->consumed_words; - ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits; - - while(1) { - - /* read unary part */ - while(1) { - while(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ - brword b = br->buffer[cwords] << cbits; - if(b) { -#if 0 /* is not discernably faster... */ && defined FLAC__CPU_IA32 && !defined FLAC__NO_ASM && FLAC__BITS_PER_WORD == 32 && defined __GNUC__ - asm volatile ( - "bsrl %1, %0;" - "notl %0;" - "andl $31, %0;" - : "=r"(i) - : "r"(b) - ); -#else - i = COUNT_ZERO_MSBS(b); -#endif - uval += i; - cbits += i; - cbits++; /* skip over stop bit */ - if(cbits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(cbits == FLAC__BITS_PER_WORD) */ - crc16_update_word_(br, br->buffer[cwords]); - cwords++; - cbits = 0; - } - goto break1; - } - else { - uval += FLAC__BITS_PER_WORD - cbits; - crc16_update_word_(br, br->buffer[cwords]); - cwords++; - cbits = 0; - /* didn't find stop bit yet, have to keep going... */ - } - } - /* at this point we've eaten up all the whole words; have to try - * reading through any tail bytes before calling the read callback. - * this is a repeat of the above logic adjusted for the fact we - * don't have a whole word. note though if the client is feeding - * us data a byte at a time (unlikely), br->consumed_bits may not - * be zero. - */ - if(br->bytes) { - const unsigned end = br->bytes * 8; - brword b = (br->buffer[cwords] & ~(FLAC__WORD_ALL_ONES >> end)) << cbits; - if(b) { - i = COUNT_ZERO_MSBS(b); - uval += i; - cbits += i; - cbits++; /* skip over stop bit */ - FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); - goto break1; - } - else { - uval += end - cbits; - cbits += end; - FLAC__ASSERT(cbits < FLAC__BITS_PER_WORD); - /* didn't find stop bit yet, have to keep going... */ - } - } - /* flush registers and read; bitreader_read_from_client_() does - * not touch br->consumed_bits at all but we still need to set - * it in case it fails and we have to return false. - */ - br->consumed_bits = cbits; - br->consumed_words = cwords; - if(!bitreader_read_from_client_(br)) - return false; - cwords = br->consumed_words; - ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits + uval; - /* + uval to offset our count by the # of unary bits already - * consumed before the read, because we will add these back - * in all at once at break1 - */ - } -break1: - ucbits -= uval; - ucbits--; /* account for stop bit */ - - /* read binary part */ - FLAC__ASSERT(cwords <= br->words); - - if(parameter) { - while(ucbits < parameter) { - /* flush registers and read; bitreader_read_from_client_() does - * not touch br->consumed_bits at all but we still need to set - * it in case it fails and we have to return false. - */ - br->consumed_bits = cbits; - br->consumed_words = cwords; - if(!bitreader_read_from_client_(br)) - return false; - cwords = br->consumed_words; - ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits; - } - if(cwords < br->words) { /* if we've not consumed up to a partial tail word... */ - if(cbits) { - /* this also works when consumed_bits==0, it's just slower than necessary for that case */ - const unsigned n = FLAC__BITS_PER_WORD - cbits; - const brword word = br->buffer[cwords]; - if(parameter < n) { - uval <<= parameter; - uval |= (word & (FLAC__WORD_ALL_ONES >> cbits)) >> (n-parameter); - cbits += parameter; - } - else { - uval <<= n; - uval |= word & (FLAC__WORD_ALL_ONES >> cbits); - crc16_update_word_(br, word); - cwords++; - cbits = parameter - n; - if(cbits) { /* parameter > n, i.e. if there are still bits left to read, there have to be less than 32 so they will all be in the next word */ - uval <<= cbits; - uval |= (br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits)); - } - } - } - else { - cbits = parameter; - uval <<= parameter; - uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits); - } - } - else { - /* in this case we're starting our read at a partial tail word; - * the reader has guaranteed that we have at least 'parameter' - * bits available to read, which makes this case simpler. - */ - uval <<= parameter; - if(cbits) { - /* this also works when consumed_bits==0, it's just a little slower than necessary for that case */ - FLAC__ASSERT(cbits + parameter <= br->bytes*8); - uval |= (br->buffer[cwords] & (FLAC__WORD_ALL_ONES >> cbits)) >> (FLAC__BITS_PER_WORD-cbits-parameter); - cbits += parameter; - } - else { - cbits = parameter; - uval |= br->buffer[cwords] >> (FLAC__BITS_PER_WORD-cbits); - } - } - } - - ucbits -= parameter; - - /* compose the value */ - *vals = (int)(uval >> 1 ^ -(int)(uval & 1)); - - /* are we done? */ - --nvals; - if(nvals == 0) { - br->consumed_bits = cbits; - br->consumed_words = cwords; - return true; - } - - uval = 0; - ++vals; - - } -} -#endif - -#if 0 /* UNUSED */ -FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter) -{ - FLAC__uint32 lsbs = 0, msbs = 0; - unsigned bit, uval, k; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - - k = FLAC__bitmath_ilog2(parameter); - - /* read the unary MSBs and end bit */ - if(!FLAC__bitreader_read_unary_unsigned(br, &msbs)) - return false; - - /* read the binary LSBs */ - if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k)) - return false; - - if(parameter == 1u<= d) { - if(!FLAC__bitreader_read_bit(br, &bit)) - return false; - lsbs <<= 1; - lsbs |= bit; - lsbs -= d; - } - /* compose the value */ - uval = msbs * parameter + lsbs; - } - - /* unfold unsigned to signed */ - if(uval & 1) - *val = -((int)(uval >> 1)) - 1; - else - *val = (int)(uval >> 1); - - return true; -} - -FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter) -{ - FLAC__uint32 lsbs, msbs = 0; - unsigned bit, k; - - FLAC__ASSERT(0 != br); - FLAC__ASSERT(0 != br->buffer); - - k = FLAC__bitmath_ilog2(parameter); - - /* read the unary MSBs and end bit */ - if(!FLAC__bitreader_read_unary_unsigned(br, &msbs)) - return false; - - /* read the binary LSBs */ - if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k)) - return false; - - if(parameter == 1u<= d) { - if(!FLAC__bitreader_read_bit(br, &bit)) - return false; - lsbs <<= 1; - lsbs |= bit; - lsbs -= d; - } - /* compose the value */ - *val = msbs * parameter + lsbs; - } - - return true; -} -#endif /* UNUSED */ - -/* on return, if *val == 0xffffffff then the utf-8 sequence was invalid, but the return value will be true */ -FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen) -{ - FLAC__uint32 v = 0; - FLAC__uint32 x; - unsigned i; - - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - if(raw) - raw[(*rawlen)++] = (FLAC__byte)x; - if(!(x & 0x80)) { /* 0xxxxxxx */ - v = x; - i = 0; - } - else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */ - v = x & 0x1F; - i = 1; - } - else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */ - v = x & 0x0F; - i = 2; - } - else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */ - v = x & 0x07; - i = 3; - } - else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */ - v = x & 0x03; - i = 4; - } - else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */ - v = x & 0x01; - i = 5; - } - else { - *val = 0xffffffff; - return true; - } - for( ; i; i--) { - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - if(raw) - raw[(*rawlen)++] = (FLAC__byte)x; - if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */ - *val = 0xffffffff; - return true; - } - v <<= 6; - v |= (x & 0x3F); - } - *val = v; - return true; -} - -/* on return, if *val == 0xffffffffffffffff then the utf-8 sequence was invalid, but the return value will be true */ -FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen) -{ - FLAC__uint64 v = 0; - FLAC__uint32 x; - unsigned i; - - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - if(raw) - raw[(*rawlen)++] = (FLAC__byte)x; - if(!(x & 0x80)) { /* 0xxxxxxx */ - v = x; - i = 0; - } - else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */ - v = x & 0x1F; - i = 1; - } - else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */ - v = x & 0x0F; - i = 2; - } - else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */ - v = x & 0x07; - i = 3; - } - else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */ - v = x & 0x03; - i = 4; - } - else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */ - v = x & 0x01; - i = 5; - } - else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */ - v = 0; - i = 6; - } - else { - *val = FLAC__U64L(0xffffffffffffffff); - return true; - } - for( ; i; i--) { - if(!FLAC__bitreader_read_raw_uint32(br, &x, 8)) - return false; - if(raw) - raw[(*rawlen)++] = (FLAC__byte)x; - if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */ - *val = FLAC__U64L(0xffffffffffffffff); - return true; - } - v <<= 6; - v |= (x & 0x3F); - } - *val = v; - return true; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitwriter.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitwriter.c deleted file mode 100644 index 0d4d68d746..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/bitwriter.c +++ /dev/null @@ -1,885 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - -#if HAVE_CONFIG_H -# include -#endif - -#include /* for malloc() */ -#include /* for memcpy(), memset() */ -#ifdef _MSC_VER -#include /* for ntohl() */ -#elif defined FLAC__SYS_DARWIN -#include /* for ntohl() */ -#elif defined __MINGW32__ -#include /* for ntohl() */ -#else -#include /* for ntohl() */ -#endif -#if 0 /* UNUSED */ -#include "include/private/bitmath.h" -#endif -#include "include/private/bitwriter.h" -#include "include/private/crc.h" -#include "../assert.h" -#include "../alloc.h" - -/* Things should be fastest when this matches the machine word size */ -/* WATCHOUT: if you change this you must also change the following #defines down to SWAP_BE_WORD_TO_HOST below to match */ -/* WATCHOUT: there are a few places where the code will not work unless bwword is >= 32 bits wide */ -typedef FLAC__uint32 bwword; -#define FLAC__BYTES_PER_WORD 4 -#define FLAC__BITS_PER_WORD 32 -#define FLAC__WORD_ALL_ONES ((FLAC__uint32)0xffffffff) -/* SWAP_BE_WORD_TO_HOST swaps bytes in a bwword (which is always big-endian) if necessary to match host byte order */ -#if WORDS_BIGENDIAN -#define SWAP_BE_WORD_TO_HOST(x) (x) -#else -#ifdef _MSC_VER -#define SWAP_BE_WORD_TO_HOST(x) local_swap32_(x) -#else -#define SWAP_BE_WORD_TO_HOST(x) ntohl(x) -#endif -#endif - -/* - * The default capacity here doesn't matter too much. The buffer always grows - * to hold whatever is written to it. Usually the encoder will stop adding at - * a frame or metadata block, then write that out and clear the buffer for the - * next one. - */ -static const unsigned FLAC__BITWRITER_DEFAULT_CAPACITY = 32768u / sizeof(bwword); /* size in words */ -/* When growing, increment 4K at a time */ -static const unsigned FLAC__BITWRITER_DEFAULT_INCREMENT = 4096u / sizeof(bwword); /* size in words */ - -#define FLAC__WORDS_TO_BITS(words) ((words) * FLAC__BITS_PER_WORD) -#define FLAC__TOTAL_BITS(bw) (FLAC__WORDS_TO_BITS((bw)->words) + (bw)->bits) - -#ifdef min -#undef min -#endif -#define min(x,y) ((x)<(y)?(x):(y)) - -/* adjust for compilers that can't understand using LLU suffix for uint64_t literals */ -#ifdef _MSC_VER -#define FLAC__U64L(x) x -#else -#define FLAC__U64L(x) x##LLU -#endif - -#ifndef FLaC__INLINE -#define FLaC__INLINE -#endif - -struct FLAC__BitWriter { - bwword *buffer; - bwword accum; /* accumulator; bits are right-justified; when full, accum is appended to buffer */ - unsigned capacity; /* capacity of buffer in words */ - unsigned words; /* # of complete words in buffer */ - unsigned bits; /* # of used bits in accum */ -}; - -/* * WATCHOUT: The current implementation only grows the buffer. */ -static FLAC__bool bitwriter_grow_(FLAC__BitWriter *bw, unsigned bits_to_add) -{ - unsigned new_capacity; - bwword *new_buffer; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - - /* calculate total words needed to store 'bits_to_add' additional bits */ - new_capacity = bw->words + ((bw->bits + bits_to_add + FLAC__BITS_PER_WORD - 1) / FLAC__BITS_PER_WORD); - - /* it's possible (due to pessimism in the growth estimation that - * leads to this call) that we don't actually need to grow - */ - if(bw->capacity >= new_capacity) - return true; - - /* round up capacity increase to the nearest FLAC__BITWRITER_DEFAULT_INCREMENT */ - if((new_capacity - bw->capacity) % FLAC__BITWRITER_DEFAULT_INCREMENT) - new_capacity += FLAC__BITWRITER_DEFAULT_INCREMENT - ((new_capacity - bw->capacity) % FLAC__BITWRITER_DEFAULT_INCREMENT); - /* make sure we got everything right */ - FLAC__ASSERT(0 == (new_capacity - bw->capacity) % FLAC__BITWRITER_DEFAULT_INCREMENT); - FLAC__ASSERT(new_capacity > bw->capacity); - FLAC__ASSERT(new_capacity >= bw->words + ((bw->bits + bits_to_add + FLAC__BITS_PER_WORD - 1) / FLAC__BITS_PER_WORD)); - - new_buffer = (bwword*)safe_realloc_mul_2op_(bw->buffer, sizeof(bwword), /*times*/new_capacity); - if(new_buffer == 0) - return false; - bw->buffer = new_buffer; - bw->capacity = new_capacity; - return true; -} - - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ - -FLAC__BitWriter *FLAC__bitwriter_new(void) -{ - FLAC__BitWriter *bw = (FLAC__BitWriter*)calloc(1, sizeof(FLAC__BitWriter)); - /* note that calloc() sets all members to 0 for us */ - return bw; -} - -void FLAC__bitwriter_delete(FLAC__BitWriter *bw) -{ - FLAC__ASSERT(0 != bw); - - FLAC__bitwriter_free(bw); - free(bw); -} - -/*********************************************************************** - * - * Public class methods - * - ***********************************************************************/ - -FLAC__bool FLAC__bitwriter_init(FLAC__BitWriter *bw) -{ - FLAC__ASSERT(0 != bw); - - bw->words = bw->bits = 0; - bw->capacity = FLAC__BITWRITER_DEFAULT_CAPACITY; - bw->buffer = (bwword*)malloc(sizeof(bwword) * bw->capacity); - if(bw->buffer == 0) - return false; - - return true; -} - -void FLAC__bitwriter_free(FLAC__BitWriter *bw) -{ - FLAC__ASSERT(0 != bw); - - if(0 != bw->buffer) - free(bw->buffer); - bw->buffer = 0; - bw->capacity = 0; - bw->words = bw->bits = 0; -} - -void FLAC__bitwriter_clear(FLAC__BitWriter *bw) -{ - bw->words = bw->bits = 0; -} - -void FLAC__bitwriter_dump(const FLAC__BitWriter *bw, FILE *out) -{ - unsigned i, j; - if(bw == 0) { - fprintf(out, "bitwriter is NULL\n"); - } - else { - fprintf(out, "bitwriter: capacity=%u words=%u bits=%u total_bits=%u\n", bw->capacity, bw->words, bw->bits, FLAC__TOTAL_BITS(bw)); - - for(i = 0; i < bw->words; i++) { - fprintf(out, "%08X: ", i); - for(j = 0; j < FLAC__BITS_PER_WORD; j++) - fprintf(out, "%01u", bw->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0); - fprintf(out, "\n"); - } - if(bw->bits > 0) { - fprintf(out, "%08X: ", i); - for(j = 0; j < bw->bits; j++) - fprintf(out, "%01u", bw->accum & (1 << (bw->bits-j-1)) ? 1:0); - fprintf(out, "\n"); - } - } -} - -FLAC__bool FLAC__bitwriter_get_write_crc16(FLAC__BitWriter *bw, FLAC__uint16 *crc) -{ - const FLAC__byte *buffer; - size_t bytes; - - FLAC__ASSERT((bw->bits & 7) == 0); /* assert that we're byte-aligned */ - - if(!FLAC__bitwriter_get_buffer(bw, &buffer, &bytes)) - return false; - - *crc = (FLAC__uint16)FLAC__crc16(buffer, bytes); - FLAC__bitwriter_release_buffer(bw); - return true; -} - -FLAC__bool FLAC__bitwriter_get_write_crc8(FLAC__BitWriter *bw, FLAC__byte *crc) -{ - const FLAC__byte *buffer; - size_t bytes; - - FLAC__ASSERT((bw->bits & 7) == 0); /* assert that we're byte-aligned */ - - if(!FLAC__bitwriter_get_buffer(bw, &buffer, &bytes)) - return false; - - *crc = FLAC__crc8(buffer, bytes); - FLAC__bitwriter_release_buffer(bw); - return true; -} - -FLAC__bool FLAC__bitwriter_is_byte_aligned(const FLAC__BitWriter *bw) -{ - return ((bw->bits & 7) == 0); -} - -unsigned FLAC__bitwriter_get_input_bits_unconsumed(const FLAC__BitWriter *bw) -{ - return FLAC__TOTAL_BITS(bw); -} - -FLAC__bool FLAC__bitwriter_get_buffer(FLAC__BitWriter *bw, const FLAC__byte **buffer, size_t *bytes) -{ - FLAC__ASSERT((bw->bits & 7) == 0); - /* double protection */ - if(bw->bits & 7) - return false; - /* if we have bits in the accumulator we have to flush those to the buffer first */ - if(bw->bits) { - FLAC__ASSERT(bw->words <= bw->capacity); - if(bw->words == bw->capacity && !bitwriter_grow_(bw, FLAC__BITS_PER_WORD)) - return false; - /* append bits as complete word to buffer, but don't change bw->accum or bw->bits */ - bw->buffer[bw->words] = SWAP_BE_WORD_TO_HOST(bw->accum << (FLAC__BITS_PER_WORD-bw->bits)); - } - /* now we can just return what we have */ - *buffer = (FLAC__byte*)bw->buffer; - *bytes = (FLAC__BYTES_PER_WORD * bw->words) + (bw->bits >> 3); - return true; -} - -void FLAC__bitwriter_release_buffer(FLAC__BitWriter *bw) -{ - /* nothing to do. in the future, strict checking of a 'writer-is-in- - * get-mode' flag could be added everywhere and then cleared here - */ - (void)bw; -} - -FLaC__INLINE FLAC__bool FLAC__bitwriter_write_zeroes(FLAC__BitWriter *bw, unsigned bits) -{ - unsigned n; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - - if(bits == 0) - return true; - /* slightly pessimistic size check but faster than "<= bw->words + (bw->bits+bits+FLAC__BITS_PER_WORD-1)/FLAC__BITS_PER_WORD" */ - if(bw->capacity <= bw->words + bits && !bitwriter_grow_(bw, bits)) - return false; - /* first part gets to word alignment */ - if(bw->bits) { - n = min(FLAC__BITS_PER_WORD - bw->bits, bits); - bw->accum <<= n; - bits -= n; - bw->bits += n; - if(bw->bits == FLAC__BITS_PER_WORD) { - bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum); - bw->bits = 0; - } - else - return true; - } - /* do whole words */ - while(bits >= FLAC__BITS_PER_WORD) { - bw->buffer[bw->words++] = 0; - bits -= FLAC__BITS_PER_WORD; - } - /* do any leftovers */ - if(bits > 0) { - bw->accum = 0; - bw->bits = bits; - } - return true; -} - -FLaC__INLINE FLAC__bool FLAC__bitwriter_write_raw_uint32(FLAC__BitWriter *bw, FLAC__uint32 val, unsigned bits) -{ - register unsigned left; - - /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */ - FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32); - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - - FLAC__ASSERT(bits <= 32); - if(bits == 0) - return true; - - /* slightly pessimistic size check but faster than "<= bw->words + (bw->bits+bits+FLAC__BITS_PER_WORD-1)/FLAC__BITS_PER_WORD" */ - if(bw->capacity <= bw->words + bits && !bitwriter_grow_(bw, bits)) - return false; - - left = FLAC__BITS_PER_WORD - bw->bits; - if(bits < left) { - bw->accum <<= bits; - bw->accum |= val; - bw->bits += bits; - } - else if(bw->bits) { /* WATCHOUT: if bw->bits == 0, left==FLAC__BITS_PER_WORD and bw->accum<<=left is a NOP instead of setting to 0 */ - bw->accum <<= left; - bw->accum |= val >> (bw->bits = bits - left); - bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum); - bw->accum = val; - } - else { - bw->accum = val; - bw->bits = 0; - bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(val); - } - - return true; -} - -FLaC__INLINE FLAC__bool FLAC__bitwriter_write_raw_int32(FLAC__BitWriter *bw, FLAC__int32 val, unsigned bits) -{ - /* zero-out unused bits */ - if(bits < 32) - val &= (~(0xffffffff << bits)); - - return FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, bits); -} - -FLaC__INLINE FLAC__bool FLAC__bitwriter_write_raw_uint64(FLAC__BitWriter *bw, FLAC__uint64 val, unsigned bits) -{ - /* this could be a little faster but it's not used for much */ - if(bits > 32) { - return - FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)(val>>32), bits-32) && - FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, 32); - } - else - return FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, bits); -} - -FLaC__INLINE FLAC__bool FLAC__bitwriter_write_raw_uint32_little_endian(FLAC__BitWriter *bw, FLAC__uint32 val) -{ - /* this doesn't need to be that fast as currently it is only used for vorbis comments */ - - if(!FLAC__bitwriter_write_raw_uint32(bw, val & 0xff, 8)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, (val>>8) & 0xff, 8)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, (val>>16) & 0xff, 8)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, val>>24, 8)) - return false; - - return true; -} - -FLaC__INLINE FLAC__bool FLAC__bitwriter_write_byte_block(FLAC__BitWriter *bw, const FLAC__byte vals[], unsigned nvals) -{ - unsigned i; - - /* this could be faster but currently we don't need it to be since it's only used for writing metadata */ - for(i = 0; i < nvals; i++) { - if(!FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)(vals[i]), 8)) - return false; - } - - return true; -} - -FLAC__bool FLAC__bitwriter_write_unary_unsigned(FLAC__BitWriter *bw, unsigned val) -{ - if(val < 32) - return FLAC__bitwriter_write_raw_uint32(bw, 1, ++val); - else - return - FLAC__bitwriter_write_zeroes(bw, val) && - FLAC__bitwriter_write_raw_uint32(bw, 1, 1); -} - -unsigned FLAC__bitwriter_rice_bits(FLAC__int32 val, unsigned parameter) -{ - FLAC__uint32 uval; - - FLAC__ASSERT(parameter < sizeof(unsigned)*8); - - /* fold signed to unsigned; actual formula is: negative(v)? -2v-1 : 2v */ - uval = (val<<1) ^ (val>>31); - - return 1 + parameter + (uval >> parameter); -} - -#if 0 /* UNUSED */ -unsigned FLAC__bitwriter_golomb_bits_signed(int val, unsigned parameter) -{ - unsigned bits, msbs, uval; - unsigned k; - - FLAC__ASSERT(parameter > 0); - - /* fold signed to unsigned */ - if(val < 0) - uval = (unsigned)(((-(++val)) << 1) + 1); - else - uval = (unsigned)(val << 1); - - k = FLAC__bitmath_ilog2(parameter); - if(parameter == 1u<> k; - bits = 1 + k + msbs; - } - else { - unsigned q, r, d; - - d = (1 << (k+1)) - parameter; - q = uval / parameter; - r = uval - (q * parameter); - - bits = 1 + q + k; - if(r >= d) - bits++; - } - return bits; -} - -unsigned FLAC__bitwriter_golomb_bits_unsigned(unsigned uval, unsigned parameter) -{ - unsigned bits, msbs; - unsigned k; - - FLAC__ASSERT(parameter > 0); - - k = FLAC__bitmath_ilog2(parameter); - if(parameter == 1u<> k; - bits = 1 + k + msbs; - } - else { - unsigned q, r, d; - - d = (1 << (k+1)) - parameter; - q = uval / parameter; - r = uval - (q * parameter); - - bits = 1 + q + k; - if(r >= d) - bits++; - } - return bits; -} -#endif /* UNUSED */ - -FLAC__bool FLAC__bitwriter_write_rice_signed(FLAC__BitWriter *bw, FLAC__int32 val, unsigned parameter) -{ - unsigned total_bits, interesting_bits, msbs; - FLAC__uint32 uval, pattern; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - FLAC__ASSERT(parameter < 8*sizeof(uval)); - - /* fold signed to unsigned; actual formula is: negative(v)? -2v-1 : 2v */ - uval = (val<<1) ^ (val>>31); - - msbs = uval >> parameter; - interesting_bits = 1 + parameter; - total_bits = interesting_bits + msbs; - pattern = 1 << parameter; /* the unary end bit */ - pattern |= (uval & ((1<> (31-parameter); /* ...then mask off the bits above the stop bit with val&=mask2*/ - FLAC__uint32 uval; - unsigned left; - const unsigned lsbits = 1 + parameter; - unsigned msbits; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - FLAC__ASSERT(parameter < 8*sizeof(bwword)-1); - /* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */ - FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32); - - while(nvals) { - /* fold signed to unsigned; actual formula is: negative(v)? -2v-1 : 2v */ - uval = (*vals<<1) ^ (*vals>>31); - - msbits = uval >> parameter; - -#if 0 /* OPT: can remove this special case if it doesn't make up for the extra compare (doesn't make a statistically significant difference with msvc or gcc/x86) */ - if(bw->bits && bw->bits + msbits + lsbits <= FLAC__BITS_PER_WORD) { /* i.e. if the whole thing fits in the current bwword */ - /* ^^^ if bw->bits is 0 then we may have filled the buffer and have no free bwword to work in */ - bw->bits = bw->bits + msbits + lsbits; - uval |= mask1; /* set stop bit */ - uval &= mask2; /* mask off unused top bits */ - /* NOT: bw->accum <<= msbits + lsbits because msbits+lsbits could be 32, then the shift would be a NOP */ - bw->accum <<= msbits; - bw->accum <<= lsbits; - bw->accum |= uval; - if(bw->bits == FLAC__BITS_PER_WORD) { - bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum); - bw->bits = 0; - /* burying the capacity check down here means we have to grow the buffer a little if there are more vals to do */ - if(bw->capacity <= bw->words && nvals > 1 && !bitwriter_grow_(bw, 1)) { - FLAC__ASSERT(bw->capacity == bw->words); - return false; - } - } - } - else { -#elif 1 /*@@@@@@ OPT: try this version with MSVC6 to see if better, not much difference for gcc-4 */ - if(bw->bits && bw->bits + msbits + lsbits < FLAC__BITS_PER_WORD) { /* i.e. if the whole thing fits in the current bwword */ - /* ^^^ if bw->bits is 0 then we may have filled the buffer and have no free bwword to work in */ - bw->bits = bw->bits + msbits + lsbits; - uval |= mask1; /* set stop bit */ - uval &= mask2; /* mask off unused top bits */ - bw->accum <<= msbits + lsbits; - bw->accum |= uval; - } - else { -#endif - /* slightly pessimistic size check but faster than "<= bw->words + (bw->bits+msbits+lsbits+FLAC__BITS_PER_WORD-1)/FLAC__BITS_PER_WORD" */ - /* OPT: pessimism may cause flurry of false calls to grow_ which eat up all savings before it */ - if(bw->capacity <= bw->words + bw->bits + msbits + 1/*lsbits always fit in 1 bwword*/ && !bitwriter_grow_(bw, msbits+lsbits)) - return false; - - if(msbits) { - /* first part gets to word alignment */ - if(bw->bits) { - left = FLAC__BITS_PER_WORD - bw->bits; - if(msbits < left) { - bw->accum <<= msbits; - bw->bits += msbits; - goto break1; - } - else { - bw->accum <<= left; - msbits -= left; - bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum); - bw->bits = 0; - } - } - /* do whole words */ - while(msbits >= FLAC__BITS_PER_WORD) { - bw->buffer[bw->words++] = 0; - msbits -= FLAC__BITS_PER_WORD; - } - /* do any leftovers */ - if(msbits > 0) { - bw->accum = 0; - bw->bits = msbits; - } - } -break1: - uval |= mask1; /* set stop bit */ - uval &= mask2; /* mask off unused top bits */ - - left = FLAC__BITS_PER_WORD - bw->bits; - if(lsbits < left) { - bw->accum <<= lsbits; - bw->accum |= uval; - bw->bits += lsbits; - } - else { - /* if bw->bits == 0, left==FLAC__BITS_PER_WORD which will always - * be > lsbits (because of previous assertions) so it would have - * triggered the (lsbitsbits); - FLAC__ASSERT(left < FLAC__BITS_PER_WORD); - bw->accum <<= left; - bw->accum |= uval >> (bw->bits = lsbits - left); - bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum); - bw->accum = uval; - } -#if 1 - } -#endif - vals++; - nvals--; - } - return true; -} - -#if 0 /* UNUSED */ -FLAC__bool FLAC__bitwriter_write_golomb_signed(FLAC__BitWriter *bw, int val, unsigned parameter) -{ - unsigned total_bits, msbs, uval; - unsigned k; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - FLAC__ASSERT(parameter > 0); - - /* fold signed to unsigned */ - if(val < 0) - uval = (unsigned)(((-(++val)) << 1) + 1); - else - uval = (unsigned)(val << 1); - - k = FLAC__bitmath_ilog2(parameter); - if(parameter == 1u<> k; - total_bits = 1 + k + msbs; - pattern = 1 << k; /* the unary end bit */ - pattern |= (uval & ((1u<= d) { - if(!FLAC__bitwriter_write_raw_uint32(bw, r+d, k+1)) - return false; - } - else { - if(!FLAC__bitwriter_write_raw_uint32(bw, r, k)) - return false; - } - } - return true; -} - -FLAC__bool FLAC__bitwriter_write_golomb_unsigned(FLAC__BitWriter *bw, unsigned uval, unsigned parameter) -{ - unsigned total_bits, msbs; - unsigned k; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - FLAC__ASSERT(parameter > 0); - - k = FLAC__bitmath_ilog2(parameter); - if(parameter == 1u<> k; - total_bits = 1 + k + msbs; - pattern = 1 << k; /* the unary end bit */ - pattern |= (uval & ((1u<= d) { - if(!FLAC__bitwriter_write_raw_uint32(bw, r+d, k+1)) - return false; - } - else { - if(!FLAC__bitwriter_write_raw_uint32(bw, r, k)) - return false; - } - } - return true; -} -#endif /* UNUSED */ - -FLAC__bool FLAC__bitwriter_write_utf8_uint32(FLAC__BitWriter *bw, FLAC__uint32 val) -{ - FLAC__bool ok = 1; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - - FLAC__ASSERT(!(val & 0x80000000)); /* this version only handles 31 bits */ - - if(val < 0x80) { - return FLAC__bitwriter_write_raw_uint32(bw, val, 8); - } - else if(val < 0x800) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xC0 | (val>>6), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8); - } - else if(val < 0x10000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xE0 | (val>>12), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8); - } - else if(val < 0x200000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF0 | (val>>18), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8); - } - else if(val < 0x4000000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF8 | (val>>24), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>18)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8); - } - else { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xFC | (val>>30), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>24)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>18)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8); - } - - return ok; -} - -FLAC__bool FLAC__bitwriter_write_utf8_uint64(FLAC__BitWriter *bw, FLAC__uint64 val) -{ - FLAC__bool ok = 1; - - FLAC__ASSERT(0 != bw); - FLAC__ASSERT(0 != bw->buffer); - - FLAC__ASSERT(!(val & FLAC__U64L(0xFFFFFFF000000000))); /* this version only handles 36 bits */ - - if(val < 0x80) { - return FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, 8); - } - else if(val < 0x800) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xC0 | (FLAC__uint32)(val>>6), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8); - } - else if(val < 0x10000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xE0 | (FLAC__uint32)(val>>12), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8); - } - else if(val < 0x200000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF0 | (FLAC__uint32)(val>>18), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8); - } - else if(val < 0x4000000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF8 | (FLAC__uint32)(val>>24), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>18)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8); - } - else if(val < 0x80000000) { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xFC | (FLAC__uint32)(val>>30), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>24)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>18)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8); - } - else { - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xFE, 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>30)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>24)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>18)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8); - ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8); - } - - return ok; -} - -FLAC__bool FLAC__bitwriter_zero_pad_to_byte_boundary(FLAC__BitWriter *bw) -{ - /* 0-pad to byte boundary */ - if(bw->bits & 7u) - return FLAC__bitwriter_write_zeroes(bw, 8 - (bw->bits & 7u)); - else - return true; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/cpu.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/cpu.c deleted file mode 100644 index bf44e59055..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/cpu.c +++ /dev/null @@ -1,423 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - -#if HAVE_CONFIG_H -# include -#endif - -#include "include/private/cpu.h" -#include -#include - -#if defined FLAC__CPU_IA32 -# include -#elif defined FLAC__CPU_PPC -# if !defined FLAC__NO_ASM -# if defined FLAC__SYS_DARWIN -# include -# include -# include -# include -# include -# ifndef CPU_SUBTYPE_POWERPC_970 -# define CPU_SUBTYPE_POWERPC_970 ((cpu_subtype_t) 100) -# endif -# else /* FLAC__SYS_DARWIN */ - -# include -# include - -static sigjmp_buf jmpbuf; -static volatile sig_atomic_t canjump = 0; - -static void sigill_handler (int sig) -{ - if (!canjump) { - signal (sig, SIG_DFL); - raise (sig); - } - canjump = 0; - siglongjmp (jmpbuf, 1); -} -# endif /* FLAC__SYS_DARWIN */ -# endif /* FLAC__NO_ASM */ -#endif /* FLAC__CPU_PPC */ - -#if defined (__NetBSD__) || defined(__OpenBSD__) -#include -#include -#include -#endif - -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) -#include -#include -#endif - -#if defined(__APPLE__) -/* how to get sysctlbyname()? */ -#endif - -/* these are flags in EDX of CPUID AX=00000001 */ -static const unsigned FLAC__CPUINFO_IA32_CPUID_CMOV = 0x00008000; -static const unsigned FLAC__CPUINFO_IA32_CPUID_MMX = 0x00800000; -static const unsigned FLAC__CPUINFO_IA32_CPUID_FXSR = 0x01000000; -static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE = 0x02000000; -static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE2 = 0x04000000; -/* these are flags in ECX of CPUID AX=00000001 */ -static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE3 = 0x00000001; -static const unsigned FLAC__CPUINFO_IA32_CPUID_SSSE3 = 0x00000200; -/* these are flags in EDX of CPUID AX=80000001 */ -static const unsigned FLAC__CPUINFO_IA32_CPUID_EXTENDED_AMD_3DNOW = 0x80000000; -static const unsigned FLAC__CPUINFO_IA32_CPUID_EXTENDED_AMD_EXT3DNOW = 0x40000000; -static const unsigned FLAC__CPUINFO_IA32_CPUID_EXTENDED_AMD_EXTMMX = 0x00400000; - - -/* - * Extra stuff needed for detection of OS support for SSE on IA-32 - */ -#if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && defined FLAC__HAS_NASM && !defined FLAC__NO_SSE_OS && !defined FLAC__SSE_OS -# if defined(__linux__) -/* - * If the OS doesn't support SSE, we will get here with a SIGILL. We - * modify the return address to jump over the offending SSE instruction - * and also the operation following it that indicates the instruction - * executed successfully. In this way we use no global variables and - * stay thread-safe. - * - * 3 + 3 + 6: - * 3 bytes for "xorps xmm0,xmm0" - * 3 bytes for estimate of how long the follwing "inc var" instruction is - * 6 bytes extra in case our estimate is wrong - * 12 bytes puts us in the NOP "landing zone" - */ -# undef USE_OBSOLETE_SIGCONTEXT_FLAVOR /* #define this to use the older signal handler method */ -# ifdef USE_OBSOLETE_SIGCONTEXT_FLAVOR - static void sigill_handler_sse_os(int signal, struct sigcontext sc) - { - (void)signal; - sc.eip += 3 + 3 + 6; - } -# else -# include - static void sigill_handler_sse_os(int signal, siginfo_t *si, void *uc) - { - (void)signal, (void)si; - ((ucontext_t*)uc)->uc_mcontext.gregs[14/*REG_EIP*/] += 3 + 3 + 6; - } -# endif -# elif defined(_MSC_VER) -# include -# undef USE_TRY_CATCH_FLAVOR /* #define this to use the try/catch method for catching illegal opcode exception */ -# ifdef USE_TRY_CATCH_FLAVOR -# else - LONG CALLBACK sigill_handler_sse_os(EXCEPTION_POINTERS *ep) - { - if(ep->ExceptionRecord->ExceptionCode == EXCEPTION_ILLEGAL_INSTRUCTION) { - ep->ContextRecord->Eip += 3 + 3 + 6; - return EXCEPTION_CONTINUE_EXECUTION; - } - return EXCEPTION_CONTINUE_SEARCH; - } -# endif -# endif -#endif - - -void FLAC__cpu_info(FLAC__CPUInfo *info) -{ -/* - * IA32-specific - */ -#ifdef FLAC__CPU_IA32 - info->type = FLAC__CPUINFO_TYPE_IA32; -#if !defined FLAC__NO_ASM && defined FLAC__HAS_NASM - info->use_asm = true; /* we assume a minimum of 80386 with FLAC__CPU_IA32 */ - info->data.ia32.cpuid = FLAC__cpu_have_cpuid_asm_ia32()? true : false; - info->data.ia32.bswap = info->data.ia32.cpuid; /* CPUID => BSWAP since it came after */ - info->data.ia32.cmov = false; - info->data.ia32.mmx = false; - info->data.ia32.fxsr = false; - info->data.ia32.sse = false; - info->data.ia32.sse2 = false; - info->data.ia32.sse3 = false; - info->data.ia32.ssse3 = false; - info->data.ia32._3dnow = false; - info->data.ia32.ext3dnow = false; - info->data.ia32.extmmx = false; - if(info->data.ia32.cpuid) { - /* http://www.sandpile.org/ia32/cpuid.htm */ - FLAC__uint32 flags_edx, flags_ecx; - FLAC__cpu_info_asm_ia32(&flags_edx, &flags_ecx); - info->data.ia32.cmov = (flags_edx & FLAC__CPUINFO_IA32_CPUID_CMOV )? true : false; - info->data.ia32.mmx = (flags_edx & FLAC__CPUINFO_IA32_CPUID_MMX )? true : false; - info->data.ia32.fxsr = (flags_edx & FLAC__CPUINFO_IA32_CPUID_FXSR )? true : false; - info->data.ia32.sse = (flags_edx & FLAC__CPUINFO_IA32_CPUID_SSE )? true : false; - info->data.ia32.sse2 = (flags_edx & FLAC__CPUINFO_IA32_CPUID_SSE2 )? true : false; - info->data.ia32.sse3 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE3 )? true : false; - info->data.ia32.ssse3 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSSE3)? true : false; - -#ifdef FLAC__USE_3DNOW - flags_edx = FLAC__cpu_info_extended_amd_asm_ia32(); - info->data.ia32._3dnow = (flags_edx & FLAC__CPUINFO_IA32_CPUID_EXTENDED_AMD_3DNOW )? true : false; - info->data.ia32.ext3dnow = (flags_edx & FLAC__CPUINFO_IA32_CPUID_EXTENDED_AMD_EXT3DNOW)? true : false; - info->data.ia32.extmmx = (flags_edx & FLAC__CPUINFO_IA32_CPUID_EXTENDED_AMD_EXTMMX )? true : false; -#else - info->data.ia32._3dnow = info->data.ia32.ext3dnow = info->data.ia32.extmmx = false; -#endif - -#ifdef DEBUG - fprintf(stderr, "CPU info (IA-32):\n"); - fprintf(stderr, " CPUID ...... %c\n", info->data.ia32.cpuid ? 'Y' : 'n'); - fprintf(stderr, " BSWAP ...... %c\n", info->data.ia32.bswap ? 'Y' : 'n'); - fprintf(stderr, " CMOV ....... %c\n", info->data.ia32.cmov ? 'Y' : 'n'); - fprintf(stderr, " MMX ........ %c\n", info->data.ia32.mmx ? 'Y' : 'n'); - fprintf(stderr, " FXSR ....... %c\n", info->data.ia32.fxsr ? 'Y' : 'n'); - fprintf(stderr, " SSE ........ %c\n", info->data.ia32.sse ? 'Y' : 'n'); - fprintf(stderr, " SSE2 ....... %c\n", info->data.ia32.sse2 ? 'Y' : 'n'); - fprintf(stderr, " SSE3 ....... %c\n", info->data.ia32.sse3 ? 'Y' : 'n'); - fprintf(stderr, " SSSE3 ...... %c\n", info->data.ia32.ssse3 ? 'Y' : 'n'); - fprintf(stderr, " 3DNow! ..... %c\n", info->data.ia32._3dnow ? 'Y' : 'n'); - fprintf(stderr, " 3DNow!-ext . %c\n", info->data.ia32.ext3dnow? 'Y' : 'n'); - fprintf(stderr, " 3DNow!-MMX . %c\n", info->data.ia32.extmmx ? 'Y' : 'n'); -#endif - - /* - * now have to check for OS support of SSE/SSE2 - */ - if(info->data.ia32.fxsr || info->data.ia32.sse || info->data.ia32.sse2) { -#if defined FLAC__NO_SSE_OS - /* assume user knows better than us; turn it off */ - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; -#elif defined FLAC__SSE_OS - /* assume user knows better than us; leave as detected above */ -#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__) - int sse = 0; - size_t len; - /* at least one of these must work: */ - len = sizeof(sse); sse = sse || (sysctlbyname("hw.instruction_sse", &sse, &len, NULL, 0) == 0 && sse); - len = sizeof(sse); sse = sse || (sysctlbyname("hw.optional.sse" , &sse, &len, NULL, 0) == 0 && sse); /* __APPLE__ ? */ - if(!sse) - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; -#elif defined(__NetBSD__) || defined (__OpenBSD__) -# if __NetBSD_Version__ >= 105250000 || (defined __OpenBSD__) - int val = 0, mib[2] = { CTL_MACHDEP, CPU_SSE }; - size_t len = sizeof(val); - if(sysctl(mib, 2, &val, &len, NULL, 0) < 0 || !val) - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; - else { /* double-check SSE2 */ - mib[1] = CPU_SSE2; - len = sizeof(val); - if(sysctl(mib, 2, &val, &len, NULL, 0) < 0 || !val) - info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; - } -# else - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; -# endif -#elif defined(__linux__) - int sse = 0; - struct sigaction sigill_save; -#ifdef USE_OBSOLETE_SIGCONTEXT_FLAVOR - if(0 == sigaction(SIGILL, NULL, &sigill_save) && signal(SIGILL, (void (*)(int))sigill_handler_sse_os) != SIG_ERR) -#else - struct sigaction sigill_sse; - sigill_sse.sa_sigaction = sigill_handler_sse_os; - __sigemptyset(&sigill_sse.sa_mask); - sigill_sse.sa_flags = SA_SIGINFO | SA_RESETHAND; /* SA_RESETHAND just in case our SIGILL return jump breaks, so we don't get stuck in a loop */ - if(0 == sigaction(SIGILL, &sigill_sse, &sigill_save)) -#endif - { - /* http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html */ - /* see sigill_handler_sse_os() for an explanation of the following: */ - asm volatile ( - "xorl %0,%0\n\t" /* for some reason, still need to do this to clear 'sse' var */ - "xorps %%xmm0,%%xmm0\n\t" /* will cause SIGILL if unsupported by OS */ - "incl %0\n\t" /* SIGILL handler will jump over this */ - /* landing zone */ - "nop\n\t" /* SIGILL jump lands here if "inc" is 9 bytes */ - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" /* SIGILL jump lands here if "inc" is 3 bytes (expected) */ - "nop\n\t" - "nop" /* SIGILL jump lands here if "inc" is 1 byte */ - : "=r"(sse) - : "r"(sse) - ); - - sigaction(SIGILL, &sigill_save, NULL); - } - - if(!sse) - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; -#elif defined(_MSC_VER) -# ifdef USE_TRY_CATCH_FLAVOR - _try { - __asm { -# if _MSC_VER <= 1200 - /* VC6 assembler doesn't know SSE, have to emit bytecode instead */ - _emit 0x0F - _emit 0x57 - _emit 0xC0 -# else - xorps xmm0,xmm0 -# endif - } - } - _except(EXCEPTION_EXECUTE_HANDLER) { - if (_exception_code() == STATUS_ILLEGAL_INSTRUCTION) - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; - } -# else - int sse = 0; - LPTOP_LEVEL_EXCEPTION_FILTER save = SetUnhandledExceptionFilter(sigill_handler_sse_os); - /* see GCC version above for explanation */ - /* http://msdn2.microsoft.com/en-us/library/4ks26t93.aspx */ - /* http://www.codeproject.com/cpp/gccasm.asp */ - /* http://www.hick.org/~mmiller/msvc_inline_asm.html */ - __asm { -# if _MSC_VER <= 1200 - /* VC6 assembler doesn't know SSE, have to emit bytecode instead */ - _emit 0x0F - _emit 0x57 - _emit 0xC0 -# else - xorps xmm0,xmm0 -# endif - inc sse - nop - nop - nop - nop - nop - nop - nop - nop - nop - } - SetUnhandledExceptionFilter(save); - if(!sse) - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; -# endif -#else - /* no way to test, disable to be safe */ - info->data.ia32.fxsr = info->data.ia32.sse = info->data.ia32.sse2 = info->data.ia32.sse3 = info->data.ia32.ssse3 = false; -#endif -#ifdef DEBUG - fprintf(stderr, " SSE OS sup . %c\n", info->data.ia32.sse ? 'Y' : 'n'); -#endif - - } - } -#else - info->use_asm = false; -#endif - -/* - * PPC-specific - */ -#elif defined FLAC__CPU_PPC - info->type = FLAC__CPUINFO_TYPE_PPC; -# if !defined FLAC__NO_ASM - info->use_asm = true; -# ifdef FLAC__USE_ALTIVEC -# if defined FLAC__SYS_DARWIN - { - int val = 0, mib[2] = { CTL_HW, HW_VECTORUNIT }; - size_t len = sizeof(val); - info->data.ppc.altivec = !(sysctl(mib, 2, &val, &len, NULL, 0) || !val); - } - { - host_basic_info_data_t hostInfo; - mach_msg_type_number_t infoCount; - - infoCount = HOST_BASIC_INFO_COUNT; - host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount); - - info->data.ppc.ppc64 = (hostInfo.cpu_type == CPU_TYPE_POWERPC) && (hostInfo.cpu_subtype == CPU_SUBTYPE_POWERPC_970); - } -# else /* FLAC__USE_ALTIVEC && !FLAC__SYS_DARWIN */ - { - /* no Darwin, do it the brute-force way */ - /* @@@@@@ this is not thread-safe; replace with SSE OS method above or remove */ - info->data.ppc.altivec = 0; - info->data.ppc.ppc64 = 0; - - signal (SIGILL, sigill_handler); - canjump = 0; - if (!sigsetjmp (jmpbuf, 1)) { - canjump = 1; - - asm volatile ( - "mtspr 256, %0\n\t" - "vand %%v0, %%v0, %%v0" - : - : "r" (-1) - ); - - info->data.ppc.altivec = 1; - } - canjump = 0; - if (!sigsetjmp (jmpbuf, 1)) { - int x = 0; - canjump = 1; - - /* PPC64 hardware implements the cntlzd instruction */ - asm volatile ("cntlzd %0, %1" : "=r" (x) : "r" (x) ); - - info->data.ppc.ppc64 = 1; - } - signal (SIGILL, SIG_DFL); /*@@@@@@ should save and restore old signal */ - } -# endif -# else /* !FLAC__USE_ALTIVEC */ - info->data.ppc.altivec = 0; - info->data.ppc.ppc64 = 0; -# endif -# else - info->use_asm = false; -# endif - -/* - * unknown CPI - */ -#else - info->type = FLAC__CPUINFO_TYPE_UNKNOWN; - info->use_asm = false; -#endif -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/crc.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/crc.c deleted file mode 100644 index 25721a299f..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/crc.c +++ /dev/null @@ -1,148 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include "include/private/crc.h" - -/* CRC-8, poly = x^8 + x^2 + x^1 + x^0, init = 0 */ - -FLAC__byte const FLAC__crc8_table[256] = { - 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, - 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, - 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, - 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D, - 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, - 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD, - 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, - 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD, - 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, - 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA, - 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, - 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A, - 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, - 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A, - 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, - 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A, - 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, - 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4, - 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, - 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4, - 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, - 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44, - 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, - 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34, - 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, - 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63, - 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, - 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13, - 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, - 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83, - 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, - 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3 -}; - -/* CRC-16, poly = x^16 + x^15 + x^2 + x^0, init = 0 */ - -unsigned FLAC__crc16_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 -}; - - -void FLAC__crc8_update(const FLAC__byte data, FLAC__uint8 *crc) -{ - *crc = FLAC__crc8_table[*crc ^ data]; -} - -void FLAC__crc8_update_block(const FLAC__byte *data, unsigned len, FLAC__uint8 *crc) -{ - while(len--) - *crc = FLAC__crc8_table[*crc ^ *data++]; -} - -FLAC__uint8 FLAC__crc8(const FLAC__byte *data, unsigned len) -{ - FLAC__uint8 crc = 0; - - while(len--) - crc = FLAC__crc8_table[crc ^ *data++]; - - return crc; -} - -unsigned FLAC__crc16(const FLAC__byte *data, unsigned len) -{ - unsigned crc = 0; - - while(len--) - crc = ((crc<<8) ^ FLAC__crc16_table[(crc>>8) ^ *data++]) & 0xffff; - - return crc; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/fixed.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/fixed.c deleted file mode 100644 index 59aca3f6a5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/fixed.c +++ /dev/null @@ -1,441 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include -#include "include/private/bitmath.h" -#include "include/private/fixed.h" -#include "../assert.h" - -#ifndef M_LN2 -/* math.h in VC++ doesn't seem to have this (how Microsoft is that?) */ -#define M_LN2 0.69314718055994530942 -#endif - -#ifdef min -#undef min -#endif -#define min(x,y) ((x) < (y)? (x) : (y)) - -#ifdef local_abs -#undef local_abs -#endif -#define local_abs(x) ((unsigned)((x)<0? -(x) : (x))) - -#ifdef FLAC__INTEGER_ONLY_LIBRARY -/* rbps stands for residual bits per sample - * - * (ln(2) * err) - * rbps = log (-----------) - * 2 ( n ) - */ -static FLAC__fixedpoint local__compute_rbps_integerized(FLAC__uint32 err, FLAC__uint32 n) -{ - FLAC__uint32 rbps; - unsigned bits; /* the number of bits required to represent a number */ - int fracbits; /* the number of bits of rbps that comprise the fractional part */ - - FLAC__ASSERT(sizeof(rbps) == sizeof(FLAC__fixedpoint)); - FLAC__ASSERT(err > 0); - FLAC__ASSERT(n > 0); - - FLAC__ASSERT(n <= FLAC__MAX_BLOCK_SIZE); - if(err <= n) - return 0; - /* - * The above two things tell us 1) n fits in 16 bits; 2) err/n > 1. - * These allow us later to know we won't lose too much precision in the - * fixed-point division (err< 0); - bits = FLAC__bitmath_ilog2(err)+1; - if(bits > 16) { - err >>= (bits-16); - fracbits -= (bits-16); - } - rbps = (FLAC__uint32)err; - - /* Multiply by fixed-point version of ln(2), with 16 fractional bits */ - rbps *= FLAC__FP_LN2; - fracbits += 16; - FLAC__ASSERT(fracbits >= 0); - - /* FLAC__fixedpoint_log2 requires fracbits%4 to be 0 */ - { - const int f = fracbits & 3; - if(f) { - rbps >>= f; - fracbits -= f; - } - } - - rbps = FLAC__fixedpoint_log2(rbps, fracbits, (unsigned)(-1)); - - if(rbps == 0) - return 0; - - /* - * The return value must have 16 fractional bits. Since the whole part - * of the base-2 log of a 32 bit number must fit in 5 bits, and fracbits - * must be >= -3, these assertion allows us to be able to shift rbps - * left if necessary to get 16 fracbits without losing any bits of the - * whole part of rbps. - * - * There is a slight chance due to accumulated error that the whole part - * will require 6 bits, so we use 6 in the assertion. Really though as - * long as it fits in 13 bits (32 - (16 - (-3))) we are fine. - */ - FLAC__ASSERT((int)FLAC__bitmath_ilog2(rbps)+1 <= fracbits + 6); - FLAC__ASSERT(fracbits >= -3); - - /* now shift the decimal point into place */ - if(fracbits < 16) - return rbps << (16-fracbits); - else if(fracbits > 16) - return rbps >> (fracbits-16); - else - return rbps; -} - -static FLAC__fixedpoint local__compute_rbps_wide_integerized(FLAC__uint64 err, FLAC__uint32 n) -{ - FLAC__uint32 rbps; - unsigned bits; /* the number of bits required to represent a number */ - int fracbits; /* the number of bits of rbps that comprise the fractional part */ - - FLAC__ASSERT(sizeof(rbps) == sizeof(FLAC__fixedpoint)); - FLAC__ASSERT(err > 0); - FLAC__ASSERT(n > 0); - - FLAC__ASSERT(n <= FLAC__MAX_BLOCK_SIZE); - if(err <= n) - return 0; - /* - * The above two things tell us 1) n fits in 16 bits; 2) err/n > 1. - * These allow us later to know we won't lose too much precision in the - * fixed-point division (err< 0); - bits = FLAC__bitmath_ilog2_wide(err)+1; - if(bits > 16) { - err >>= (bits-16); - fracbits -= (bits-16); - } - rbps = (FLAC__uint32)err; - - /* Multiply by fixed-point version of ln(2), with 16 fractional bits */ - rbps *= FLAC__FP_LN2; - fracbits += 16; - FLAC__ASSERT(fracbits >= 0); - - /* FLAC__fixedpoint_log2 requires fracbits%4 to be 0 */ - { - const int f = fracbits & 3; - if(f) { - rbps >>= f; - fracbits -= f; - } - } - - rbps = FLAC__fixedpoint_log2(rbps, fracbits, (unsigned)(-1)); - - if(rbps == 0) - return 0; - - /* - * The return value must have 16 fractional bits. Since the whole part - * of the base-2 log of a 32 bit number must fit in 5 bits, and fracbits - * must be >= -3, these assertion allows us to be able to shift rbps - * left if necessary to get 16 fracbits without losing any bits of the - * whole part of rbps. - * - * There is a slight chance due to accumulated error that the whole part - * will require 6 bits, so we use 6 in the assertion. Really though as - * long as it fits in 13 bits (32 - (16 - (-3))) we are fine. - */ - FLAC__ASSERT((int)FLAC__bitmath_ilog2(rbps)+1 <= fracbits + 6); - FLAC__ASSERT(fracbits >= -3); - - /* now shift the decimal point into place */ - if(fracbits < 16) - return rbps << (16-fracbits); - else if(fracbits > 16) - return rbps >> (fracbits-16); - else - return rbps; -} -#endif - -#ifndef FLAC__INTEGER_ONLY_LIBRARY -unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) -#else -unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) -#endif -{ - FLAC__int32 last_error_0 = data[-1]; - FLAC__int32 last_error_1 = data[-1] - data[-2]; - FLAC__int32 last_error_2 = last_error_1 - (data[-2] - data[-3]); - FLAC__int32 last_error_3 = last_error_2 - (data[-2] - 2*data[-3] + data[-4]); - FLAC__int32 error, save; - FLAC__uint32 total_error_0 = 0, total_error_1 = 0, total_error_2 = 0, total_error_3 = 0, total_error_4 = 0; - unsigned i, order; - - for(i = 0; i < data_len; i++) { - error = data[i] ; total_error_0 += local_abs(error); save = error; - error -= last_error_0; total_error_1 += local_abs(error); last_error_0 = save; save = error; - error -= last_error_1; total_error_2 += local_abs(error); last_error_1 = save; save = error; - error -= last_error_2; total_error_3 += local_abs(error); last_error_2 = save; save = error; - error -= last_error_3; total_error_4 += local_abs(error); last_error_3 = save; - } - - if(total_error_0 < min(min(min(total_error_1, total_error_2), total_error_3), total_error_4)) - order = 0; - else if(total_error_1 < min(min(total_error_2, total_error_3), total_error_4)) - order = 1; - else if(total_error_2 < min(total_error_3, total_error_4)) - order = 2; - else if(total_error_3 < total_error_4) - order = 3; - else - order = 4; - - /* Estimate the expected number of bits per residual signal sample. */ - /* 'total_error*' is linearly related to the variance of the residual */ - /* signal, so we use it directly to compute E(|x|) */ - FLAC__ASSERT(data_len > 0 || total_error_0 == 0); - FLAC__ASSERT(data_len > 0 || total_error_1 == 0); - FLAC__ASSERT(data_len > 0 || total_error_2 == 0); - FLAC__ASSERT(data_len > 0 || total_error_3 == 0); - FLAC__ASSERT(data_len > 0 || total_error_4 == 0); -#ifndef FLAC__INTEGER_ONLY_LIBRARY - residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0); -#else - residual_bits_per_sample[0] = (total_error_0 > 0) ? local__compute_rbps_integerized(total_error_0, data_len) : 0; - residual_bits_per_sample[1] = (total_error_1 > 0) ? local__compute_rbps_integerized(total_error_1, data_len) : 0; - residual_bits_per_sample[2] = (total_error_2 > 0) ? local__compute_rbps_integerized(total_error_2, data_len) : 0; - residual_bits_per_sample[3] = (total_error_3 > 0) ? local__compute_rbps_integerized(total_error_3, data_len) : 0; - residual_bits_per_sample[4] = (total_error_4 > 0) ? local__compute_rbps_integerized(total_error_4, data_len) : 0; -#endif - - return order; -} - -#ifndef FLAC__INTEGER_ONLY_LIBRARY -unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) -#else -unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]) -#endif -{ - FLAC__int32 last_error_0 = data[-1]; - FLAC__int32 last_error_1 = data[-1] - data[-2]; - FLAC__int32 last_error_2 = last_error_1 - (data[-2] - data[-3]); - FLAC__int32 last_error_3 = last_error_2 - (data[-2] - 2*data[-3] + data[-4]); - FLAC__int32 error, save; - /* total_error_* are 64-bits to avoid overflow when encoding - * erratic signals when the bits-per-sample and blocksize are - * large. - */ - FLAC__uint64 total_error_0 = 0, total_error_1 = 0, total_error_2 = 0, total_error_3 = 0, total_error_4 = 0; - unsigned i, order; - - for(i = 0; i < data_len; i++) { - error = data[i] ; total_error_0 += local_abs(error); save = error; - error -= last_error_0; total_error_1 += local_abs(error); last_error_0 = save; save = error; - error -= last_error_1; total_error_2 += local_abs(error); last_error_1 = save; save = error; - error -= last_error_2; total_error_3 += local_abs(error); last_error_2 = save; save = error; - error -= last_error_3; total_error_4 += local_abs(error); last_error_3 = save; - } - - if(total_error_0 < min(min(min(total_error_1, total_error_2), total_error_3), total_error_4)) - order = 0; - else if(total_error_1 < min(min(total_error_2, total_error_3), total_error_4)) - order = 1; - else if(total_error_2 < min(total_error_3, total_error_4)) - order = 2; - else if(total_error_3 < total_error_4) - order = 3; - else - order = 4; - - /* Estimate the expected number of bits per residual signal sample. */ - /* 'total_error*' is linearly related to the variance of the residual */ - /* signal, so we use it directly to compute E(|x|) */ - FLAC__ASSERT(data_len > 0 || total_error_0 == 0); - FLAC__ASSERT(data_len > 0 || total_error_1 == 0); - FLAC__ASSERT(data_len > 0 || total_error_2 == 0); - FLAC__ASSERT(data_len > 0 || total_error_3 == 0); - FLAC__ASSERT(data_len > 0 || total_error_4 == 0); -#ifndef FLAC__INTEGER_ONLY_LIBRARY -#if defined _MSC_VER || defined __MINGW32__ - /* with MSVC you have to spoon feed it the casting */ - residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)(FLAC__int64)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0); -#else - residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0); - residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0); -#endif -#else - residual_bits_per_sample[0] = (total_error_0 > 0) ? local__compute_rbps_wide_integerized(total_error_0, data_len) : 0; - residual_bits_per_sample[1] = (total_error_1 > 0) ? local__compute_rbps_wide_integerized(total_error_1, data_len) : 0; - residual_bits_per_sample[2] = (total_error_2 > 0) ? local__compute_rbps_wide_integerized(total_error_2, data_len) : 0; - residual_bits_per_sample[3] = (total_error_3 > 0) ? local__compute_rbps_wide_integerized(total_error_3, data_len) : 0; - residual_bits_per_sample[4] = (total_error_4 > 0) ? local__compute_rbps_wide_integerized(total_error_4, data_len) : 0; -#endif - - return order; -} - -void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]) -{ - const int idata_len = (int)data_len; - int i; - - switch(order) { - case 0: - FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0])); - memcpy(residual, data, sizeof(residual[0])*data_len); - break; - case 1: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - data[i-1]; - break; - case 2: - for(i = 0; i < idata_len; i++) -#if 1 /* OPT: may be faster with some compilers on some systems */ - residual[i] = data[i] - (data[i-1] << 1) + data[i-2]; -#else - residual[i] = data[i] - 2*data[i-1] + data[i-2]; -#endif - break; - case 3: - for(i = 0; i < idata_len; i++) -#if 1 /* OPT: may be faster with some compilers on some systems */ - residual[i] = data[i] - (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) - data[i-3]; -#else - residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3]; -#endif - break; - case 4: - for(i = 0; i < idata_len; i++) -#if 1 /* OPT: may be faster with some compilers on some systems */ - residual[i] = data[i] - ((data[i-1]+data[i-3])<<2) + ((data[i-2]<<2) + (data[i-2]<<1)) + data[i-4]; -#else - residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4]; -#endif - break; - default: - FLAC__ASSERT(0); - } -} - -void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len, unsigned order, FLAC__int32 data[]) -{ - int i, idata_len = (int)data_len; - - switch(order) { - case 0: - FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0])); - memcpy(data, residual, sizeof(residual[0])*data_len); - break; - case 1: - for(i = 0; i < idata_len; i++) - data[i] = residual[i] + data[i-1]; - break; - case 2: - for(i = 0; i < idata_len; i++) -#if 1 /* OPT: may be faster with some compilers on some systems */ - data[i] = residual[i] + (data[i-1]<<1) - data[i-2]; -#else - data[i] = residual[i] + 2*data[i-1] - data[i-2]; -#endif - break; - case 3: - for(i = 0; i < idata_len; i++) -#if 1 /* OPT: may be faster with some compilers on some systems */ - data[i] = residual[i] + (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) + data[i-3]; -#else - data[i] = residual[i] + 3*data[i-1] - 3*data[i-2] + data[i-3]; -#endif - break; - case 4: - for(i = 0; i < idata_len; i++) -#if 1 /* OPT: may be faster with some compilers on some systems */ - data[i] = residual[i] + ((data[i-1]+data[i-3])<<2) - ((data[i-2]<<2) + (data[i-2]<<1)) - data[i-4]; -#else - data[i] = residual[i] + 4*data[i-1] - 6*data[i-2] + 4*data[i-3] - data[i-4]; -#endif - break; - default: - FLAC__ASSERT(0); - } -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/float.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/float.c deleted file mode 100644 index d0bb1d66ad..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/float.c +++ /dev/null @@ -1,314 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include "../assert.h" - -#include "include/private/float.h" - -#ifdef FLAC__INTEGER_ONLY_LIBRARY - -/* adjust for compilers that can't understand using LLU suffix for uint64_t literals */ -#ifdef _MSC_VER -#define FLAC__U64L(x) x -#else -#define FLAC__U64L(x) x##LLU -#endif - -const FLAC__fixedpoint FLAC__FP_ZERO = 0; -const FLAC__fixedpoint FLAC__FP_ONE_HALF = 0x00008000; -const FLAC__fixedpoint FLAC__FP_ONE = 0x00010000; -const FLAC__fixedpoint FLAC__FP_LN2 = 45426; -const FLAC__fixedpoint FLAC__FP_E = 178145; - -/* Lookup tables for Knuth's logarithm algorithm */ -#define LOG2_LOOKUP_PRECISION 16 -static const FLAC__uint32 log2_lookup[][LOG2_LOOKUP_PRECISION] = { - { - /* - * 0 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x00000001, - /* lg(4/3) = */ 0x00000000, - /* lg(8/7) = */ 0x00000000, - /* lg(16/15) = */ 0x00000000, - /* lg(32/31) = */ 0x00000000, - /* lg(64/63) = */ 0x00000000, - /* lg(128/127) = */ 0x00000000, - /* lg(256/255) = */ 0x00000000, - /* lg(512/511) = */ 0x00000000, - /* lg(1024/1023) = */ 0x00000000, - /* lg(2048/2047) = */ 0x00000000, - /* lg(4096/4095) = */ 0x00000000, - /* lg(8192/8191) = */ 0x00000000, - /* lg(16384/16383) = */ 0x00000000, - /* lg(32768/32767) = */ 0x00000000 - }, - { - /* - * 4 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x00000010, - /* lg(4/3) = */ 0x00000007, - /* lg(8/7) = */ 0x00000003, - /* lg(16/15) = */ 0x00000001, - /* lg(32/31) = */ 0x00000001, - /* lg(64/63) = */ 0x00000000, - /* lg(128/127) = */ 0x00000000, - /* lg(256/255) = */ 0x00000000, - /* lg(512/511) = */ 0x00000000, - /* lg(1024/1023) = */ 0x00000000, - /* lg(2048/2047) = */ 0x00000000, - /* lg(4096/4095) = */ 0x00000000, - /* lg(8192/8191) = */ 0x00000000, - /* lg(16384/16383) = */ 0x00000000, - /* lg(32768/32767) = */ 0x00000000 - }, - { - /* - * 8 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x00000100, - /* lg(4/3) = */ 0x0000006a, - /* lg(8/7) = */ 0x00000031, - /* lg(16/15) = */ 0x00000018, - /* lg(32/31) = */ 0x0000000c, - /* lg(64/63) = */ 0x00000006, - /* lg(128/127) = */ 0x00000003, - /* lg(256/255) = */ 0x00000001, - /* lg(512/511) = */ 0x00000001, - /* lg(1024/1023) = */ 0x00000000, - /* lg(2048/2047) = */ 0x00000000, - /* lg(4096/4095) = */ 0x00000000, - /* lg(8192/8191) = */ 0x00000000, - /* lg(16384/16383) = */ 0x00000000, - /* lg(32768/32767) = */ 0x00000000 - }, - { - /* - * 12 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x00001000, - /* lg(4/3) = */ 0x000006a4, - /* lg(8/7) = */ 0x00000315, - /* lg(16/15) = */ 0x0000017d, - /* lg(32/31) = */ 0x000000bc, - /* lg(64/63) = */ 0x0000005d, - /* lg(128/127) = */ 0x0000002e, - /* lg(256/255) = */ 0x00000017, - /* lg(512/511) = */ 0x0000000c, - /* lg(1024/1023) = */ 0x00000006, - /* lg(2048/2047) = */ 0x00000003, - /* lg(4096/4095) = */ 0x00000001, - /* lg(8192/8191) = */ 0x00000001, - /* lg(16384/16383) = */ 0x00000000, - /* lg(32768/32767) = */ 0x00000000 - }, - { - /* - * 16 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x00010000, - /* lg(4/3) = */ 0x00006a40, - /* lg(8/7) = */ 0x00003151, - /* lg(16/15) = */ 0x000017d6, - /* lg(32/31) = */ 0x00000bba, - /* lg(64/63) = */ 0x000005d1, - /* lg(128/127) = */ 0x000002e6, - /* lg(256/255) = */ 0x00000172, - /* lg(512/511) = */ 0x000000b9, - /* lg(1024/1023) = */ 0x0000005c, - /* lg(2048/2047) = */ 0x0000002e, - /* lg(4096/4095) = */ 0x00000017, - /* lg(8192/8191) = */ 0x0000000c, - /* lg(16384/16383) = */ 0x00000006, - /* lg(32768/32767) = */ 0x00000003 - }, - { - /* - * 20 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x00100000, - /* lg(4/3) = */ 0x0006a3fe, - /* lg(8/7) = */ 0x00031513, - /* lg(16/15) = */ 0x00017d60, - /* lg(32/31) = */ 0x0000bb9d, - /* lg(64/63) = */ 0x00005d10, - /* lg(128/127) = */ 0x00002e59, - /* lg(256/255) = */ 0x00001721, - /* lg(512/511) = */ 0x00000b8e, - /* lg(1024/1023) = */ 0x000005c6, - /* lg(2048/2047) = */ 0x000002e3, - /* lg(4096/4095) = */ 0x00000171, - /* lg(8192/8191) = */ 0x000000b9, - /* lg(16384/16383) = */ 0x0000005c, - /* lg(32768/32767) = */ 0x0000002e - }, - { - /* - * 24 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x01000000, - /* lg(4/3) = */ 0x006a3fe6, - /* lg(8/7) = */ 0x00315130, - /* lg(16/15) = */ 0x0017d605, - /* lg(32/31) = */ 0x000bb9ca, - /* lg(64/63) = */ 0x0005d0fc, - /* lg(128/127) = */ 0x0002e58f, - /* lg(256/255) = */ 0x0001720e, - /* lg(512/511) = */ 0x0000b8d8, - /* lg(1024/1023) = */ 0x00005c61, - /* lg(2048/2047) = */ 0x00002e2d, - /* lg(4096/4095) = */ 0x00001716, - /* lg(8192/8191) = */ 0x00000b8b, - /* lg(16384/16383) = */ 0x000005c5, - /* lg(32768/32767) = */ 0x000002e3 - }, - { - /* - * 28 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ 0x10000000, - /* lg(4/3) = */ 0x06a3fe5c, - /* lg(8/7) = */ 0x03151301, - /* lg(16/15) = */ 0x017d6049, - /* lg(32/31) = */ 0x00bb9ca6, - /* lg(64/63) = */ 0x005d0fba, - /* lg(128/127) = */ 0x002e58f7, - /* lg(256/255) = */ 0x001720da, - /* lg(512/511) = */ 0x000b8d87, - /* lg(1024/1023) = */ 0x0005c60b, - /* lg(2048/2047) = */ 0x0002e2d7, - /* lg(4096/4095) = */ 0x00017160, - /* lg(8192/8191) = */ 0x0000b8ad, - /* lg(16384/16383) = */ 0x00005c56, - /* lg(32768/32767) = */ 0x00002e2b - } -}; - -#if 0 -static const FLAC__uint64 log2_lookup_wide[] = { - { - /* - * 32 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ FLAC__U64L(0x100000000), - /* lg(4/3) = */ FLAC__U64L(0x6a3fe5c6), - /* lg(8/7) = */ FLAC__U64L(0x31513015), - /* lg(16/15) = */ FLAC__U64L(0x17d60497), - /* lg(32/31) = */ FLAC__U64L(0x0bb9ca65), - /* lg(64/63) = */ FLAC__U64L(0x05d0fba2), - /* lg(128/127) = */ FLAC__U64L(0x02e58f74), - /* lg(256/255) = */ FLAC__U64L(0x01720d9c), - /* lg(512/511) = */ FLAC__U64L(0x00b8d875), - /* lg(1024/1023) = */ FLAC__U64L(0x005c60aa), - /* lg(2048/2047) = */ FLAC__U64L(0x002e2d72), - /* lg(4096/4095) = */ FLAC__U64L(0x00171600), - /* lg(8192/8191) = */ FLAC__U64L(0x000b8ad2), - /* lg(16384/16383) = */ FLAC__U64L(0x0005c55d), - /* lg(32768/32767) = */ FLAC__U64L(0x0002e2ac) - }, - { - /* - * 48 fraction bits - */ - /* undefined */ 0x00000000, - /* lg(2/1) = */ FLAC__U64L(0x1000000000000), - /* lg(4/3) = */ FLAC__U64L(0x6a3fe5c60429), - /* lg(8/7) = */ FLAC__U64L(0x315130157f7a), - /* lg(16/15) = */ FLAC__U64L(0x17d60496cfbb), - /* lg(32/31) = */ FLAC__U64L(0xbb9ca64ecac), - /* lg(64/63) = */ FLAC__U64L(0x5d0fba187cd), - /* lg(128/127) = */ FLAC__U64L(0x2e58f7441ee), - /* lg(256/255) = */ FLAC__U64L(0x1720d9c06a8), - /* lg(512/511) = */ FLAC__U64L(0xb8d8752173), - /* lg(1024/1023) = */ FLAC__U64L(0x5c60aa252e), - /* lg(2048/2047) = */ FLAC__U64L(0x2e2d71b0d8), - /* lg(4096/4095) = */ FLAC__U64L(0x1716001719), - /* lg(8192/8191) = */ FLAC__U64L(0xb8ad1de1b), - /* lg(16384/16383) = */ FLAC__U64L(0x5c55d640d), - /* lg(32768/32767) = */ FLAC__U64L(0x2e2abcf52) - } -}; -#endif - -FLAC__uint32 FLAC__fixedpoint_log2(FLAC__uint32 x, unsigned fracbits, unsigned precision) -{ - const FLAC__uint32 ONE = (1u << fracbits); - const FLAC__uint32 *table = log2_lookup[fracbits >> 2]; - - FLAC__ASSERT(fracbits < 32); - FLAC__ASSERT((fracbits & 0x3) == 0); - - if(x < ONE) - return 0; - - if(precision > LOG2_LOOKUP_PRECISION) - precision = LOG2_LOOKUP_PRECISION; - - /* Knuth's algorithm for computing logarithms, optimized for base-2 with lookup tables */ - { - FLAC__uint32 y = 0; - FLAC__uint32 z = x >> 1, k = 1; - while (x > ONE && k < precision) { - if (x - z >= ONE) { - x -= z; - z = x >> k; - y += table[k]; - } - else { - z >>= 1; - k++; - } - } - return y; - } -} - -#endif /* defined FLAC__INTEGER_ONLY_LIBRARY */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/format.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/format.c deleted file mode 100644 index cdec857e49..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/format.c +++ /dev/null @@ -1,604 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include /* for qsort() */ -#include /* for memset() */ -#include "../assert.h" -#include "../format.h" -#include "include/private/format.h" - -#ifndef FLaC__INLINE -#define FLaC__INLINE -#endif - -#ifdef min -#undef min -#endif -#define min(a,b) ((a)<(b)?(a):(b)) - -/* adjust for compilers that can't understand using LLU suffix for uint64_t literals */ -#ifdef _MSC_VER -#define FLAC__U64L(x) x -#else -#define FLAC__U64L(x) x##LLU -#endif - -/* VERSION should come from configure */ -FLAC_API const char *FLAC__VERSION_STRING = VERSION - - - - -; - -#if defined _MSC_VER || defined __BORLANDC__ || defined __MINW32__ -/* yet one more hack because of MSVC6: */ -FLAC_API const char *FLAC__VENDOR_STRING = "reference libFLAC 1.2.1 20070917"; -#else -FLAC_API const char *FLAC__VENDOR_STRING = "reference libFLAC " VERSION " 20070917"; -#endif - -FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4] = { 'f','L','a','C' }; -FLAC_API const unsigned FLAC__STREAM_SYNC = 0x664C6143; -FLAC_API const unsigned FLAC__STREAM_SYNC_LEN = 32; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN = 16; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN = 16; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN = 24; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN = 24; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN = 20; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN = 3; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN = 5; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN = 36; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN = 128; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN = 32; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN = 64; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN = 64; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN = 16; /* bits */ - -FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER = FLAC__U64L(0xffffffffffffffff); - -FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN = 32; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN = 64; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN = 8; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN = 3*8; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN = 64; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN = 8; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN = 12*8; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN = 1; /* bit */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN = 1; /* bit */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN = 6+13*8; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN = 8; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN = 128*8; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN = 64; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN = 1; /* bit */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN = 7+258*8; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN = 8; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN = 32; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN = 32; /* bits */ - -FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN = 1; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN = 7; /* bits */ -FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN = 24; /* bits */ - -FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC = 0x3ffe; -FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN = 14; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN = 1; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN = 1; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN = 4; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN = 4; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN = 4; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN = 3; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN = 1; /* bits */ -FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN = 8; /* bits */ - -FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN = 16; /* bits */ - -FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN = 2; /* bits */ -FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN = 4; /* bits */ -FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN = 4; /* bits */ -FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN = 5; /* bits */ -FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN = 5; /* bits */ - -FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER = 15; /* == (1< FLAC__MAX_SAMPLE_RATE) { - return false; - } - else - return true; -} - -FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate) -{ - if( - !FLAC__format_sample_rate_is_valid(sample_rate) || - ( - sample_rate >= (1u << 16) && - !(sample_rate % 1000 == 0 || sample_rate % 10 == 0) - ) - ) { - return false; - } - else - return true; -} - -/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */ -FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table) -{ - unsigned i; - FLAC__uint64 prev_sample_number = 0; - FLAC__bool got_prev = false; - - FLAC__ASSERT(0 != seek_table); - - for(i = 0; i < seek_table->num_points; i++) { - if(got_prev) { - if( - seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER && - seek_table->points[i].sample_number <= prev_sample_number - ) - return false; - } - prev_sample_number = seek_table->points[i].sample_number; - got_prev = true; - } - - return true; -} - -/* used as the sort predicate for qsort() */ -static int seekpoint_compare_(const FLAC__StreamMetadata_SeekPoint *l, const FLAC__StreamMetadata_SeekPoint *r) -{ - /* we don't just 'return l->sample_number - r->sample_number' since the result (FLAC__int64) might overflow an 'int' */ - if(l->sample_number == r->sample_number) - return 0; - else if(l->sample_number < r->sample_number) - return -1; - else - return 1; -} - -/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */ -FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table) -{ - unsigned i, j; - FLAC__bool first; - - FLAC__ASSERT(0 != seek_table); - - /* sort the seekpoints */ - qsort(seek_table->points, seek_table->num_points, sizeof(FLAC__StreamMetadata_SeekPoint), (int (*)(const void *, const void *))seekpoint_compare_); - - /* uniquify the seekpoints */ - first = true; - for(i = j = 0; i < seek_table->num_points; i++) { - if(seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER) { - if(!first) { - if(seek_table->points[i].sample_number == seek_table->points[j-1].sample_number) - continue; - } - } - first = false; - seek_table->points[j++] = seek_table->points[i]; - } - - for(i = j; i < seek_table->num_points; i++) { - seek_table->points[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER; - seek_table->points[i].stream_offset = 0; - seek_table->points[i].frame_samples = 0; - } - - return j; -} - -/* - * also disallows non-shortest-form encodings, c.f. - * http://www.unicode.org/versions/corrigendum1.html - * and a more clear explanation at the end of this section: - * http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 - */ -static FLaC__INLINE unsigned utf8len_(const FLAC__byte *utf8) -{ - FLAC__ASSERT(0 != utf8); - if ((utf8[0] & 0x80) == 0) { - return 1; - } - else if ((utf8[0] & 0xE0) == 0xC0 && (utf8[1] & 0xC0) == 0x80) { - if ((utf8[0] & 0xFE) == 0xC0) /* overlong sequence check */ - return 0; - return 2; - } - else if ((utf8[0] & 0xF0) == 0xE0 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80) { - if (utf8[0] == 0xE0 && (utf8[1] & 0xE0) == 0x80) /* overlong sequence check */ - return 0; - /* illegal surrogates check (U+D800...U+DFFF and U+FFFE...U+FFFF) */ - if (utf8[0] == 0xED && (utf8[1] & 0xE0) == 0xA0) /* D800-DFFF */ - return 0; - if (utf8[0] == 0xEF && utf8[1] == 0xBF && (utf8[2] & 0xFE) == 0xBE) /* FFFE-FFFF */ - return 0; - return 3; - } - else if ((utf8[0] & 0xF8) == 0xF0 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80) { - if (utf8[0] == 0xF0 && (utf8[1] & 0xF0) == 0x80) /* overlong sequence check */ - return 0; - return 4; - } - else if ((utf8[0] & 0xFC) == 0xF8 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80) { - if (utf8[0] == 0xF8 && (utf8[1] & 0xF8) == 0x80) /* overlong sequence check */ - return 0; - return 5; - } - else if ((utf8[0] & 0xFE) == 0xFC && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80 && (utf8[5] & 0xC0) == 0x80) { - if (utf8[0] == 0xFC && (utf8[1] & 0xFC) == 0x80) /* overlong sequence check */ - return 0; - return 6; - } - else { - return 0; - } -} - -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name) -{ - char c; - for(c = *name; c; c = *(++name)) - if(c < 0x20 || c == 0x3d || c > 0x7d) - return false; - return true; -} - -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length) -{ - if(length == (unsigned)(-1)) { - while(*value) { - unsigned n = utf8len_(value); - if(n == 0) - return false; - value += n; - } - } - else { - const FLAC__byte *end = value + length; - while(value < end) { - unsigned n = utf8len_(value); - if(n == 0) - return false; - value += n; - } - if(value != end) - return false; - } - return true; -} - -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length) -{ - const FLAC__byte *s, *end; - - for(s = entry, end = s + length; s < end && *s != '='; s++) { - if(*s < 0x20 || *s > 0x7D) - return false; - } - if(s == end) - return false; - - s++; /* skip '=' */ - - while(s < end) { - unsigned n = utf8len_(s); - if(n == 0) - return false; - s += n; - } - if(s != end) - return false; - - return true; -} - -/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */ -FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation) -{ - unsigned i, j; - - if(check_cd_da_subset) { - if(cue_sheet->lead_in < 2 * 44100) { - if(violation) *violation = "CD-DA cue sheet must have a lead-in length of at least 2 seconds"; - return false; - } - if(cue_sheet->lead_in % 588 != 0) { - if(violation) *violation = "CD-DA cue sheet lead-in length must be evenly divisible by 588 samples"; - return false; - } - } - - if(cue_sheet->num_tracks == 0) { - if(violation) *violation = "cue sheet must have at least one track (the lead-out)"; - return false; - } - - if(check_cd_da_subset && cue_sheet->tracks[cue_sheet->num_tracks-1].number != 170) { - if(violation) *violation = "CD-DA cue sheet must have a lead-out track number 170 (0xAA)"; - return false; - } - - for(i = 0; i < cue_sheet->num_tracks; i++) { - if(cue_sheet->tracks[i].number == 0) { - if(violation) *violation = "cue sheet may not have a track number 0"; - return false; - } - - if(check_cd_da_subset) { - if(!((cue_sheet->tracks[i].number >= 1 && cue_sheet->tracks[i].number <= 99) || cue_sheet->tracks[i].number == 170)) { - if(violation) *violation = "CD-DA cue sheet track number must be 1-99 or 170"; - return false; - } - } - - if(check_cd_da_subset && cue_sheet->tracks[i].offset % 588 != 0) { - if(violation) { - if(i == cue_sheet->num_tracks-1) /* the lead-out track... */ - *violation = "CD-DA cue sheet lead-out offset must be evenly divisible by 588 samples"; - else - *violation = "CD-DA cue sheet track offset must be evenly divisible by 588 samples"; - } - return false; - } - - if(i < cue_sheet->num_tracks - 1) { - if(cue_sheet->tracks[i].num_indices == 0) { - if(violation) *violation = "cue sheet track must have at least one index point"; - return false; - } - - if(cue_sheet->tracks[i].indices[0].number > 1) { - if(violation) *violation = "cue sheet track's first index number must be 0 or 1"; - return false; - } - } - - for(j = 0; j < cue_sheet->tracks[i].num_indices; j++) { - if(check_cd_da_subset && cue_sheet->tracks[i].indices[j].offset % 588 != 0) { - if(violation) *violation = "CD-DA cue sheet track index offset must be evenly divisible by 588 samples"; - return false; - } - - if(j > 0) { - if(cue_sheet->tracks[i].indices[j].number != cue_sheet->tracks[i].indices[j-1].number + 1) { - if(violation) *violation = "cue sheet track index numbers must increase by 1"; - return false; - } - } - } - } - - return true; -} - -/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */ -FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation) -{ - char *p; - FLAC__byte *b; - - for(p = picture->mime_type; *p; p++) { - if(*p < 0x20 || *p > 0x7e) { - if(violation) *violation = "MIME type string must contain only printable ASCII characters (0x20-0x7e)"; - return false; - } - } - - for(b = picture->description; *b; ) { - unsigned n = utf8len_(b); - if(n == 0) { - if(violation) *violation = "description string must be valid UTF-8"; - return false; - } - b += n; - } - - return true; -} - -/* - * These routines are private to libFLAC - */ -unsigned FLAC__format_get_max_rice_partition_order(unsigned blocksize, unsigned predictor_order) -{ - return - FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order( - FLAC__format_get_max_rice_partition_order_from_blocksize(blocksize), - blocksize, - predictor_order - ); -} - -unsigned FLAC__format_get_max_rice_partition_order_from_blocksize(unsigned blocksize) -{ - unsigned max_rice_partition_order = 0; - while(!(blocksize & 1)) { - max_rice_partition_order++; - blocksize >>= 1; - } - return min(FLAC__MAX_RICE_PARTITION_ORDER, max_rice_partition_order); -} - -unsigned FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(unsigned limit, unsigned blocksize, unsigned predictor_order) -{ - unsigned max_rice_partition_order = limit; - - while(max_rice_partition_order > 0 && (blocksize >> max_rice_partition_order) <= predictor_order) - max_rice_partition_order--; - - FLAC__ASSERT( - (max_rice_partition_order == 0 && blocksize >= predictor_order) || - (max_rice_partition_order > 0 && blocksize >> max_rice_partition_order > predictor_order) - ); - - return max_rice_partition_order; -} - -void FLAC__format_entropy_coding_method_partitioned_rice_contents_init(FLAC__EntropyCodingMethod_PartitionedRiceContents *object) -{ - FLAC__ASSERT(0 != object); - - object->parameters = 0; - object->raw_bits = 0; - object->capacity_by_order = 0; -} - -void FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(FLAC__EntropyCodingMethod_PartitionedRiceContents *object) -{ - FLAC__ASSERT(0 != object); - - if(0 != object->parameters) - free(object->parameters); - if(0 != object->raw_bits) - free(object->raw_bits); - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(object); -} - -FLAC__bool FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(FLAC__EntropyCodingMethod_PartitionedRiceContents *object, unsigned max_partition_order) -{ - FLAC__ASSERT(0 != object); - - FLAC__ASSERT(object->capacity_by_order > 0 || (0 == object->parameters && 0 == object->raw_bits)); - - if(object->capacity_by_order < max_partition_order) { - if(0 == (object->parameters = (unsigned*)realloc(object->parameters, sizeof(unsigned)*(1 << max_partition_order)))) - return false; - if(0 == (object->raw_bits = (unsigned*)realloc(object->raw_bits, sizeof(unsigned)*(1 << max_partition_order)))) - return false; - memset(object->raw_bits, 0, sizeof(unsigned)*(1 << max_partition_order)); - object->capacity_by_order = max_partition_order; - } - - return true; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/all.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/all.h deleted file mode 100644 index 389cdb29f5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/all.h +++ /dev/null @@ -1,49 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__ALL_H -#define FLAC__PRIVATE__ALL_H - -#include "bitmath.h" -#include "bitreader.h" -#include "bitwriter.h" -#include "cpu.h" -#include "crc.h" -#include "fixed.h" -#include "float.h" -#include "format.h" -#include "lpc.h" -#include "md5.h" -#include "memory.h" -#include "metadata.h" -#include "stream_encoder_framing.h" - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitmath.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitmath.h deleted file mode 100644 index 12771020ba..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitmath.h +++ /dev/null @@ -1,42 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__BITMATH_H -#define FLAC__PRIVATE__BITMATH_H - -#include "../../../ordinals.h" - -unsigned FLAC__bitmath_ilog2(FLAC__uint32 v); -unsigned FLAC__bitmath_ilog2_wide(FLAC__uint64 v); -unsigned FLAC__bitmath_silog2(int v); -unsigned FLAC__bitmath_silog2_wide(FLAC__int64 v); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitreader.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitreader.h deleted file mode 100644 index 634453214a..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitreader.h +++ /dev/null @@ -1,99 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__BITREADER_H -#define FLAC__PRIVATE__BITREADER_H - -#include /* for FILE */ -#include "../../../ordinals.h" -#include "cpu.h" - -/* - * opaque structure definition - */ -struct FLAC__BitReader; -typedef struct FLAC__BitReader FLAC__BitReader; - -typedef FLAC__bool (*FLAC__BitReaderReadCallback)(FLAC__byte buffer[], size_t *bytes, void *client_data); - -/* - * construction, deletion, initialization, etc functions - */ -FLAC__BitReader *FLAC__bitreader_new(void); -void FLAC__bitreader_delete(FLAC__BitReader *br); -FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__CPUInfo cpu, FLAC__BitReaderReadCallback rcb, void *cd); -void FLAC__bitreader_free(FLAC__BitReader *br); /* does not 'free(br)' */ -FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br); -void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out); - -/* - * CRC functions - */ -void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed); -FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br); - -/* - * info functions - */ -FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br); -unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br); -unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br); - -/* - * read functions - */ - -FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits); -FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits); -FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits); -FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val); /*only for bits=32*/ -FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits); /* WATCHOUT: does not CRC the skipped data! */ /*@@@@ add to unit tests */ -FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals); /* WATCHOUT: does not CRC the read data! */ -FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals); /* WATCHOUT: does not CRC the read data! */ -FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val); -FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter); -FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter); -#ifndef FLAC__NO_ASM -# ifdef FLAC__CPU_IA32 -# ifdef FLAC__HAS_NASM -FLAC__bool FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter); -# endif -# endif -#endif -#if 0 /* UNUSED */ -FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter); -FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter); -#endif -FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen); -FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen); - -FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br); -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitwriter.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitwriter.h deleted file mode 100644 index 461b8e23f8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/bitwriter.h +++ /dev/null @@ -1,103 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__BITWRITER_H -#define FLAC__PRIVATE__BITWRITER_H - -#include /* for FILE */ -#include "../../../ordinals.h" - -/* - * opaque structure definition - */ -struct FLAC__BitWriter; -typedef struct FLAC__BitWriter FLAC__BitWriter; - -/* - * construction, deletion, initialization, etc functions - */ -FLAC__BitWriter *FLAC__bitwriter_new(void); -void FLAC__bitwriter_delete(FLAC__BitWriter *bw); -FLAC__bool FLAC__bitwriter_init(FLAC__BitWriter *bw); -void FLAC__bitwriter_free(FLAC__BitWriter *bw); /* does not 'free(buffer)' */ -void FLAC__bitwriter_clear(FLAC__BitWriter *bw); -void FLAC__bitwriter_dump(const FLAC__BitWriter *bw, FILE *out); - -/* - * CRC functions - * - * non-const *bw because they have to cal FLAC__bitwriter_get_buffer() - */ -FLAC__bool FLAC__bitwriter_get_write_crc16(FLAC__BitWriter *bw, FLAC__uint16 *crc); -FLAC__bool FLAC__bitwriter_get_write_crc8(FLAC__BitWriter *bw, FLAC__byte *crc); - -/* - * info functions - */ -FLAC__bool FLAC__bitwriter_is_byte_aligned(const FLAC__BitWriter *bw); -unsigned FLAC__bitwriter_get_input_bits_unconsumed(const FLAC__BitWriter *bw); /* can be called anytime, returns total # of bits unconsumed */ - -/* - * direct buffer access - * - * there may be no calls on the bitwriter between get and release. - * the bitwriter continues to own the returned buffer. - * before get, bitwriter MUST be byte aligned: check with FLAC__bitwriter_is_byte_aligned() - */ -FLAC__bool FLAC__bitwriter_get_buffer(FLAC__BitWriter *bw, const FLAC__byte **buffer, size_t *bytes); -void FLAC__bitwriter_release_buffer(FLAC__BitWriter *bw); - -/* - * write functions - */ -FLAC__bool FLAC__bitwriter_write_zeroes(FLAC__BitWriter *bw, unsigned bits); -FLAC__bool FLAC__bitwriter_write_raw_uint32(FLAC__BitWriter *bw, FLAC__uint32 val, unsigned bits); -FLAC__bool FLAC__bitwriter_write_raw_int32(FLAC__BitWriter *bw, FLAC__int32 val, unsigned bits); -FLAC__bool FLAC__bitwriter_write_raw_uint64(FLAC__BitWriter *bw, FLAC__uint64 val, unsigned bits); -FLAC__bool FLAC__bitwriter_write_raw_uint32_little_endian(FLAC__BitWriter *bw, FLAC__uint32 val); /*only for bits=32*/ -FLAC__bool FLAC__bitwriter_write_byte_block(FLAC__BitWriter *bw, const FLAC__byte vals[], unsigned nvals); -FLAC__bool FLAC__bitwriter_write_unary_unsigned(FLAC__BitWriter *bw, unsigned val); -unsigned FLAC__bitwriter_rice_bits(FLAC__int32 val, unsigned parameter); -#if 0 /* UNUSED */ -unsigned FLAC__bitwriter_golomb_bits_signed(int val, unsigned parameter); -unsigned FLAC__bitwriter_golomb_bits_unsigned(unsigned val, unsigned parameter); -#endif -FLAC__bool FLAC__bitwriter_write_rice_signed(FLAC__BitWriter *bw, FLAC__int32 val, unsigned parameter); -FLAC__bool FLAC__bitwriter_write_rice_signed_block(FLAC__BitWriter *bw, const FLAC__int32 *vals, unsigned nvals, unsigned parameter); -#if 0 /* UNUSED */ -FLAC__bool FLAC__bitwriter_write_golomb_signed(FLAC__BitWriter *bw, int val, unsigned parameter); -FLAC__bool FLAC__bitwriter_write_golomb_unsigned(FLAC__BitWriter *bw, unsigned val, unsigned parameter); -#endif -FLAC__bool FLAC__bitwriter_write_utf8_uint32(FLAC__BitWriter *bw, FLAC__uint32 val); -FLAC__bool FLAC__bitwriter_write_utf8_uint64(FLAC__BitWriter *bw, FLAC__uint64 val); -FLAC__bool FLAC__bitwriter_zero_pad_to_byte_boundary(FLAC__BitWriter *bw); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/cpu.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/cpu.h deleted file mode 100644 index 0b8a66ad62..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/cpu.h +++ /dev/null @@ -1,88 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__CPU_H -#define FLAC__PRIVATE__CPU_H - -#include "../../../ordinals.h" - -#ifdef HAVE_CONFIG_H -#include -#endif - -typedef enum { - FLAC__CPUINFO_TYPE_IA32, - FLAC__CPUINFO_TYPE_PPC, - FLAC__CPUINFO_TYPE_UNKNOWN -} FLAC__CPUInfo_Type; - -typedef struct { - FLAC__bool cpuid; - FLAC__bool bswap; - FLAC__bool cmov; - FLAC__bool mmx; - FLAC__bool fxsr; - FLAC__bool sse; - FLAC__bool sse2; - FLAC__bool sse3; - FLAC__bool ssse3; - FLAC__bool _3dnow; - FLAC__bool ext3dnow; - FLAC__bool extmmx; -} FLAC__CPUInfo_IA32; - -typedef struct { - FLAC__bool altivec; - FLAC__bool ppc64; -} FLAC__CPUInfo_PPC; - -typedef struct { - FLAC__bool use_asm; - FLAC__CPUInfo_Type type; - union { - FLAC__CPUInfo_IA32 ia32; - FLAC__CPUInfo_PPC ppc; - } data; -} FLAC__CPUInfo; - -void FLAC__cpu_info(FLAC__CPUInfo *info); - -#ifndef FLAC__NO_ASM -#ifdef FLAC__CPU_IA32 -#ifdef FLAC__HAS_NASM -FLAC__uint32 FLAC__cpu_have_cpuid_asm_ia32(void); -void FLAC__cpu_info_asm_ia32(FLAC__uint32 *flags_edx, FLAC__uint32 *flags_ecx); -FLAC__uint32 FLAC__cpu_info_extended_amd_asm_ia32(void); -#endif -#endif -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/crc.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/crc.h deleted file mode 100644 index c9b82d4ffe..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/crc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__CRC_H -#define FLAC__PRIVATE__CRC_H - -#include "../../../ordinals.h" - -/* 8 bit CRC generator, MSB shifted first -** polynomial = x^8 + x^2 + x^1 + x^0 -** init = 0 -*/ -extern FLAC__byte const FLAC__crc8_table[256]; -#define FLAC__CRC8_UPDATE(data, crc) (crc) = FLAC__crc8_table[(crc) ^ (data)]; -void FLAC__crc8_update(const FLAC__byte data, FLAC__uint8 *crc); -void FLAC__crc8_update_block(const FLAC__byte *data, unsigned len, FLAC__uint8 *crc); -FLAC__uint8 FLAC__crc8(const FLAC__byte *data, unsigned len); - -/* 16 bit CRC generator, MSB shifted first -** polynomial = x^16 + x^15 + x^2 + x^0 -** init = 0 -*/ -extern unsigned FLAC__crc16_table[256]; - -#define FLAC__CRC16_UPDATE(data, crc) (((((crc)<<8) & 0xffff) ^ FLAC__crc16_table[((crc)>>8) ^ (data)])) -/* this alternate may be faster on some systems/compilers */ -#if 0 -#define FLAC__CRC16_UPDATE(data, crc) ((((crc)<<8) ^ FLAC__crc16_table[((crc)>>8) ^ (data)]) & 0xffff) -#endif - -unsigned FLAC__crc16(const FLAC__byte *data, unsigned len); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/fixed.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/fixed.h deleted file mode 100644 index 220273e929..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/fixed.h +++ /dev/null @@ -1,97 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__FIXED_H -#define FLAC__PRIVATE__FIXED_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "float.h" -#include "format.h" - -/* - * FLAC__fixed_compute_best_predictor() - * -------------------------------------------------------------------- - * Compute the best fixed predictor and the expected bits-per-sample - * of the residual signal for each order. The _wide() version uses - * 64-bit integers which is statistically necessary when bits-per- - * sample + log2(blocksize) > 30 - * - * IN data[0,data_len-1] - * IN data_len - * OUT residual_bits_per_sample[0,FLAC__MAX_FIXED_ORDER] - */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY -unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -# ifndef FLAC__NO_ASM -# ifdef FLAC__CPU_IA32 -# ifdef FLAC__HAS_NASM -unsigned FLAC__fixed_compute_best_predictor_asm_ia32_mmx_cmov(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -# endif -# endif -# endif -unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -#else -unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -#endif - -/* - * FLAC__fixed_compute_residual() - * -------------------------------------------------------------------- - * Compute the residual signal obtained from sutracting the predicted - * signal from the original. - * - * IN data[-order,data_len-1] original signal (NOTE THE INDICES!) - * IN data_len length of original signal - * IN order <= FLAC__MAX_FIXED_ORDER fixed-predictor order - * OUT residual[0,data_len-1] residual signal - */ -void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]); - -/* - * FLAC__fixed_restore_signal() - * -------------------------------------------------------------------- - * Restore the original signal by summing the residual and the - * predictor. - * - * IN residual[0,data_len-1] residual signal - * IN data_len length of original signal - * IN order <= FLAC__MAX_FIXED_ORDER fixed-predictor order - * *** IMPORTANT: the caller must pass in the historical samples: - * IN data[-order,-1] previously-reconstructed historical samples - * OUT data[0,data_len-1] original signal - */ -void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len, unsigned order, FLAC__int32 data[]); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/float.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/float.h deleted file mode 100644 index 13e6d5790b..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/float.h +++ /dev/null @@ -1,97 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__FLOAT_H -#define FLAC__PRIVATE__FLOAT_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "../../../ordinals.h" - -/* - * These typedefs make it easier to ensure that integer versions of - * the library really only contain integer operations. All the code - * in libFLAC should use FLAC__float and FLAC__double in place of - * float and double, and be protected by checks of the macro - * FLAC__INTEGER_ONLY_LIBRARY. - * - * FLAC__real is the basic floating point type used in LPC analysis. - */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY -typedef double FLAC__double; -typedef float FLAC__float; -/* - * WATCHOUT: changing FLAC__real will change the signatures of many - * functions that have assembly language equivalents and break them. - */ -typedef float FLAC__real; -#else -/* - * The convention for FLAC__fixedpoint is to use the upper 16 bits - * for the integer part and lower 16 bits for the fractional part. - */ -typedef FLAC__int32 FLAC__fixedpoint; -extern const FLAC__fixedpoint FLAC__FP_ZERO; -extern const FLAC__fixedpoint FLAC__FP_ONE_HALF; -extern const FLAC__fixedpoint FLAC__FP_ONE; -extern const FLAC__fixedpoint FLAC__FP_LN2; -extern const FLAC__fixedpoint FLAC__FP_E; - -#define FLAC__fixedpoint_trunc(x) ((x)>>16) - -#define FLAC__fixedpoint_mul(x, y) ( (FLAC__fixedpoint) ( ((FLAC__int64)(x)*(FLAC__int64)(y)) >> 16 ) ) - -#define FLAC__fixedpoint_div(x, y) ( (FLAC__fixedpoint) ( ( ((FLAC__int64)(x)<<32) / (FLAC__int64)(y) ) >> 16 ) ) - -/* - * FLAC__fixedpoint_log2() - * -------------------------------------------------------------------- - * Returns the base-2 logarithm of the fixed-point number 'x' using an - * algorithm by Knuth for x >= 1.0 - * - * 'fracbits' is the number of fractional bits of 'x'. 'fracbits' must - * be < 32 and evenly divisible by 4 (0 is OK but not very precise). - * - * 'precision' roughly limits the number of iterations that are done; - * use (unsigned)(-1) for maximum precision. - * - * If 'x' is less than one -- that is, x < (1< -#endif - -#include "float.h" -#include "../../../format.h" - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -/* - * FLAC__lpc_window_data() - * -------------------------------------------------------------------- - * Applies the given window to the data. - * OPT: asm implementation - * - * IN in[0,data_len-1] - * IN window[0,data_len-1] - * OUT out[0,lag-1] - * IN data_len - */ -void FLAC__lpc_window_data(const FLAC__int32 in[], const FLAC__real window[], FLAC__real out[], unsigned data_len); - -/* - * FLAC__lpc_compute_autocorrelation() - * -------------------------------------------------------------------- - * Compute the autocorrelation for lags between 0 and lag-1. - * Assumes data[] outside of [0,data_len-1] == 0. - * Asserts that lag > 0. - * - * IN data[0,data_len-1] - * IN data_len - * IN 0 < lag <= data_len - * OUT autoc[0,lag-1] - */ -void FLAC__lpc_compute_autocorrelation(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); -#ifndef FLAC__NO_ASM -# ifdef FLAC__CPU_IA32 -# ifdef FLAC__HAS_NASM -void FLAC__lpc_compute_autocorrelation_asm_ia32(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); -void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_4(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); -void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_8(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); -void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_12(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); -void FLAC__lpc_compute_autocorrelation_asm_ia32_3dnow(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); -# endif -# endif -#endif - -/* - * FLAC__lpc_compute_lp_coefficients() - * -------------------------------------------------------------------- - * Computes LP coefficients for orders 1..max_order. - * Do not call if autoc[0] == 0.0. This means the signal is zero - * and there is no point in calculating a predictor. - * - * IN autoc[0,max_order] autocorrelation values - * IN 0 < max_order <= FLAC__MAX_LPC_ORDER max LP order to compute - * OUT lp_coeff[0,max_order-1][0,max_order-1] LP coefficients for each order - * *** IMPORTANT: - * *** lp_coeff[0,max_order-1][max_order,FLAC__MAX_LPC_ORDER-1] are untouched - * OUT error[0,max_order-1] error for each order (more - * specifically, the variance of - * the error signal times # of - * samples in the signal) - * - * Example: if max_order is 9, the LP coefficients for order 9 will be - * in lp_coeff[8][0,8], the LP coefficients for order 8 will be - * in lp_coeff[7][0,7], etc. - */ -void FLAC__lpc_compute_lp_coefficients(const FLAC__real autoc[], unsigned *max_order, FLAC__real lp_coeff[][FLAC__MAX_LPC_ORDER], FLAC__double error[]); - -/* - * FLAC__lpc_quantize_coefficients() - * -------------------------------------------------------------------- - * Quantizes the LP coefficients. NOTE: precision + bits_per_sample - * must be less than 32 (sizeof(FLAC__int32)*8). - * - * IN lp_coeff[0,order-1] LP coefficients - * IN order LP order - * IN FLAC__MIN_QLP_COEFF_PRECISION < precision - * desired precision (in bits, including sign - * bit) of largest coefficient - * OUT qlp_coeff[0,order-1] quantized coefficients - * OUT shift # of bits to shift right to get approximated - * LP coefficients. NOTE: could be negative. - * RETURN 0 => quantization OK - * 1 => coefficients require too much shifting for *shift to - * fit in the LPC subframe header. 'shift' is unset. - * 2 => coefficients are all zero, which is bad. 'shift' is - * unset. - */ -int FLAC__lpc_quantize_coefficients(const FLAC__real lp_coeff[], unsigned order, unsigned precision, FLAC__int32 qlp_coeff[], int *shift); - -/* - * FLAC__lpc_compute_residual_from_qlp_coefficients() - * -------------------------------------------------------------------- - * Compute the residual signal obtained from sutracting the predicted - * signal from the original. - * - * IN data[-order,data_len-1] original signal (NOTE THE INDICES!) - * IN data_len length of original signal - * IN qlp_coeff[0,order-1] quantized LP coefficients - * IN order > 0 LP order - * IN lp_quantization quantization of LP coefficients in bits - * OUT residual[0,data_len-1] residual signal - */ -void FLAC__lpc_compute_residual_from_qlp_coefficients(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); -void FLAC__lpc_compute_residual_from_qlp_coefficients_wide(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); -#ifndef FLAC__NO_ASM -# ifdef FLAC__CPU_IA32 -# ifdef FLAC__HAS_NASM -void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); -void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); -# endif -# endif -#endif - -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - -/* - * FLAC__lpc_restore_signal() - * -------------------------------------------------------------------- - * Restore the original signal by summing the residual and the - * predictor. - * - * IN residual[0,data_len-1] residual signal - * IN data_len length of original signal - * IN qlp_coeff[0,order-1] quantized LP coefficients - * IN order > 0 LP order - * IN lp_quantization quantization of LP coefficients in bits - * *** IMPORTANT: the caller must pass in the historical samples: - * IN data[-order,-1] previously-reconstructed historical samples - * OUT data[0,data_len-1] original signal - */ -void FLAC__lpc_restore_signal(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); -void FLAC__lpc_restore_signal_wide(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); -#ifndef FLAC__NO_ASM -# ifdef FLAC__CPU_IA32 -# ifdef FLAC__HAS_NASM -void FLAC__lpc_restore_signal_asm_ia32(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); -void FLAC__lpc_restore_signal_asm_ia32_mmx(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); -# endif /* FLAC__HAS_NASM */ -# elif defined FLAC__CPU_PPC -void FLAC__lpc_restore_signal_asm_ppc_altivec_16(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); -void FLAC__lpc_restore_signal_asm_ppc_altivec_16_order8(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); -# endif/* FLAC__CPU_IA32 || FLAC__CPU_PPC */ -#endif /* FLAC__NO_ASM */ - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -/* - * FLAC__lpc_compute_expected_bits_per_residual_sample() - * -------------------------------------------------------------------- - * Compute the expected number of bits per residual signal sample - * based on the LP error (which is related to the residual variance). - * - * IN lpc_error >= 0.0 error returned from calculating LP coefficients - * IN total_samples > 0 # of samples in residual signal - * RETURN expected bits per sample - */ -FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample(FLAC__double lpc_error, unsigned total_samples); -FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(FLAC__double lpc_error, FLAC__double error_scale); - -/* - * FLAC__lpc_compute_best_order() - * -------------------------------------------------------------------- - * Compute the best order from the array of signal errors returned - * during coefficient computation. - * - * IN lpc_error[0,max_order-1] >= 0.0 error returned from calculating LP coefficients - * IN max_order > 0 max LP order - * IN total_samples > 0 # of samples in residual signal - * IN overhead_bits_per_order # of bits overhead for each increased LP order - * (includes warmup sample size and quantized LP coefficient) - * RETURN [1,max_order] best order - */ -unsigned FLAC__lpc_compute_best_order(const FLAC__double lpc_error[], unsigned max_order, unsigned total_samples, unsigned overhead_bits_per_order); - -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/md5.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/md5.h deleted file mode 100644 index 2cf5c5dad0..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/md5.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef FLAC__PRIVATE__MD5_H -#define FLAC__PRIVATE__MD5_H - -/* - * This is the header file for the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - * - * Changed so as no longer to depend on Colin Plumb's `usual.h' - * header definitions; now uses stuff from dpkg's config.h - * - Ian Jackson . - * Still in the public domain. - * - * Josh Coalson: made some changes to integrate with libFLAC. - * Still in the public domain, with no warranty. - */ - -#include "../../../ordinals.h" - -typedef struct { - FLAC__uint32 in[16]; - FLAC__uint32 buf[4]; - FLAC__uint32 bytes[2]; - FLAC__byte *internal_buf; - size_t capacity; -} FLAC__MD5Context; - -void FLAC__MD5Init(FLAC__MD5Context *context); -void FLAC__MD5Final(FLAC__byte digest[16], FLAC__MD5Context *context); - -FLAC__bool FLAC__MD5Accumulate(FLAC__MD5Context *ctx, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/memory.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/memory.h deleted file mode 100644 index aa3e256bfe..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/memory.h +++ /dev/null @@ -1,56 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__MEMORY_H -#define FLAC__PRIVATE__MEMORY_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include /* for size_t */ - -#include "float.h" -#include "../../../ordinals.h" /* for FLAC__bool */ - -/* Returns the unaligned address returned by malloc. - * Use free() on this address to deallocate. - */ -void *FLAC__memory_alloc_aligned(size_t bytes, void **aligned_address); -FLAC__bool FLAC__memory_alloc_aligned_int32_array(unsigned elements, FLAC__int32 **unaligned_pointer, FLAC__int32 **aligned_pointer); -FLAC__bool FLAC__memory_alloc_aligned_uint32_array(unsigned elements, FLAC__uint32 **unaligned_pointer, FLAC__uint32 **aligned_pointer); -FLAC__bool FLAC__memory_alloc_aligned_uint64_array(unsigned elements, FLAC__uint64 **unaligned_pointer, FLAC__uint64 **aligned_pointer); -FLAC__bool FLAC__memory_alloc_aligned_unsigned_array(unsigned elements, unsigned **unaligned_pointer, unsigned **aligned_pointer); -#ifndef FLAC__INTEGER_ONLY_LIBRARY -FLAC__bool FLAC__memory_alloc_aligned_real_array(unsigned elements, FLAC__real **unaligned_pointer, FLAC__real **aligned_pointer); -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/metadata.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/metadata.h deleted file mode 100644 index 87f78db73e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/metadata.h +++ /dev/null @@ -1,45 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__METADATA_H -#define FLAC__PRIVATE__METADATA_H - -#include "metadata.h" - -/* WATCHOUT: all malloc()ed data in the block is free()ed; this may not - * be a consistent state (e.g. PICTURE) or equivalent to the initial - * state after FLAC__metadata_object_new() - */ -void FLAC__metadata_object_delete_data(FLAC__StreamMetadata *object); - -void FLAC__metadata_object_cuesheet_track_delete_data(FLAC__StreamMetadata_CueSheet_Track *object); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/stream_encoder_framing.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/stream_encoder_framing.h deleted file mode 100644 index a37dbf458a..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/stream_encoder_framing.h +++ /dev/null @@ -1,45 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__STREAM_ENCODER_FRAMING_H -#define FLAC__PRIVATE__STREAM_ENCODER_FRAMING_H - -#include "../../../format.h" -#include "bitwriter.h" - -FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitWriter *bw); -FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__BitWriter *bw); -FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw); -FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw); -FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw); -FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/window.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/window.h deleted file mode 100644 index 9313451aff..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/private/window.h +++ /dev/null @@ -1,71 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PRIVATE__WINDOW_H -#define FLAC__PRIVATE__WINDOW_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "float.h" -#include "../../../format.h" - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -/* - * FLAC__window_*() - * -------------------------------------------------------------------- - * Calculates window coefficients according to different apodization - * functions. - * - * OUT window[0,L-1] - * IN L (number of points in window) - */ -void FLAC__window_bartlett(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_bartlett_hann(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_blackman(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_blackman_harris_4term_92db_sidelobe(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_connes(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_flattop(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_gauss(FLAC__real *window, const FLAC__int32 L, const FLAC__real stddev); /* 0.0 < stddev <= 0.5 */ -void FLAC__window_hamming(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_hann(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_kaiser_bessel(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_nuttall(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_rectangle(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_triangle(FLAC__real *window, const FLAC__int32 L); -void FLAC__window_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p); -void FLAC__window_welch(FLAC__real *window, const FLAC__int32 L); - -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/all.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/all.h deleted file mode 100644 index 83efdfc567..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/all.h +++ /dev/null @@ -1,38 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PROTECTED__ALL_H -#define FLAC__PROTECTED__ALL_H - -#include "stream_decoder.h" -#include "stream_encoder.h" - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/stream_decoder.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/stream_decoder.h deleted file mode 100644 index 81c3692029..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/stream_decoder.h +++ /dev/null @@ -1,58 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PROTECTED__STREAM_DECODER_H -#define FLAC__PROTECTED__STREAM_DECODER_H - -#include "../../../stream_decoder.h" -#if FLAC__HAS_OGG -#include "include/private/ogg_decoder_aspect.h" -#endif - -typedef struct FLAC__StreamDecoderProtected { - FLAC__StreamDecoderState state; - unsigned channels; - FLAC__ChannelAssignment channel_assignment; - unsigned bits_per_sample; - unsigned sample_rate; /* in Hz */ - unsigned blocksize; /* in samples (per channel) */ - FLAC__bool md5_checking; /* if true, generate MD5 signature of decoded data and compare against signature in the STREAMINFO metadata block */ -#if FLAC__HAS_OGG - FLAC__OggDecoderAspect ogg_decoder_aspect; -#endif -} FLAC__StreamDecoderProtected; - -/* - * return the number of input bytes consumed - */ -unsigned FLAC__stream_decoder_get_input_bytes_unconsumed(const FLAC__StreamDecoder *decoder); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/stream_encoder.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/stream_encoder.h deleted file mode 100644 index 64dd457ae1..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/include/protected/stream_encoder.h +++ /dev/null @@ -1,110 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__PROTECTED__STREAM_ENCODER_H -#define FLAC__PROTECTED__STREAM_ENCODER_H - -#include "../../../stream_encoder.h" -#if FLAC__HAS_OGG -#include "private/ogg_encoder_aspect.h" -#endif - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -#include "../private/float.h" - -#define FLAC__MAX_APODIZATION_FUNCTIONS 32 - -typedef enum { - FLAC__APODIZATION_BARTLETT, - FLAC__APODIZATION_BARTLETT_HANN, - FLAC__APODIZATION_BLACKMAN, - FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE, - FLAC__APODIZATION_CONNES, - FLAC__APODIZATION_FLATTOP, - FLAC__APODIZATION_GAUSS, - FLAC__APODIZATION_HAMMING, - FLAC__APODIZATION_HANN, - FLAC__APODIZATION_KAISER_BESSEL, - FLAC__APODIZATION_NUTTALL, - FLAC__APODIZATION_RECTANGLE, - FLAC__APODIZATION_TRIANGLE, - FLAC__APODIZATION_TUKEY, - FLAC__APODIZATION_WELCH -} FLAC__ApodizationFunction; - -typedef struct { - FLAC__ApodizationFunction type; - union { - struct { - FLAC__real stddev; - } gauss; - struct { - FLAC__real p; - } tukey; - } parameters; -} FLAC__ApodizationSpecification; - -#endif // #ifndef FLAC__INTEGER_ONLY_LIBRARY - -typedef struct FLAC__StreamEncoderProtected { - FLAC__StreamEncoderState state; - FLAC__bool verify; - FLAC__bool streamable_subset; - FLAC__bool do_md5; - FLAC__bool do_mid_side_stereo; - FLAC__bool loose_mid_side_stereo; - unsigned channels; - unsigned bits_per_sample; - unsigned sample_rate; - unsigned blocksize; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - unsigned num_apodizations; - FLAC__ApodizationSpecification apodizations[FLAC__MAX_APODIZATION_FUNCTIONS]; -#endif - unsigned max_lpc_order; - unsigned qlp_coeff_precision; - FLAC__bool do_qlp_coeff_prec_search; - FLAC__bool do_exhaustive_model_search; - FLAC__bool do_escape_coding; - unsigned min_residual_partition_order; - unsigned max_residual_partition_order; - unsigned rice_parameter_search_dist; - FLAC__uint64 total_samples_estimate; - FLAC__StreamMetadata **metadata; - unsigned num_metadata_blocks; - FLAC__uint64 streaminfo_offset, seektable_offset, audio_offset; -#if FLAC__HAS_OGG - FLAC__OggEncoderAspect ogg_encoder_aspect; -#endif -} FLAC__StreamEncoderProtected; - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/juce_FlacHeader.h b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/juce_FlacHeader.h deleted file mode 100644 index d2ea76afb8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/juce_FlacHeader.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -// This file is included at the start of each FLAC .c file, just to do a few housekeeping -// tasks.. - - -#include "../../../../../../juce_Config.h" - -#define VERSION "1.2.1" - -#define FLAC__NO_DLL 1 - -#ifdef _MSC_VER - #pragma warning (disable: 4267 4127 4244 4996 4100 4701 4702 4013 4133 4206 4312) -#endif - -#if ! (defined (_WIN32) || defined (_WIN64) || defined (LINUX)) - #define FLAC__SYS_DARWIN 1 -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/lpc_flac.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/lpc_flac.c deleted file mode 100644 index 0048c1f09d..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/lpc_flac.c +++ /dev/null @@ -1,1383 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include "../assert.h" -#include "../format.h" -#include "include/private/bitmath.h" -#include "include/private/lpc.h" -#if defined DEBUG || defined FLAC__OVERFLOW_DETECT || defined FLAC__OVERFLOW_DETECT_VERBOSE -#include -#endif - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -#ifndef M_LN2 -/* math.h in VC++ doesn't seem to have this (how Microsoft is that?) */ -#define M_LN2 0.69314718055994530942 -#endif - -/* OPT: #undef'ing this may improve the speed on some architectures */ -#define FLAC__LPC_UNROLLED_FILTER_LOOPS - - -void FLAC__lpc_window_data(const FLAC__int32 in[], const FLAC__real window[], FLAC__real out[], unsigned data_len) -{ - unsigned i; - for(i = 0; i < data_len; i++) - out[i] = in[i] * window[i]; -} - -void FLAC__lpc_compute_autocorrelation(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]) -{ - /* a readable, but slower, version */ -#if 0 - FLAC__real d; - unsigned i; - - FLAC__ASSERT(lag > 0); - FLAC__ASSERT(lag <= data_len); - - /* - * Technically we should subtract the mean first like so: - * for(i = 0; i < data_len; i++) - * data[i] -= mean; - * but it appears not to make enough of a difference to matter, and - * most signals are already closely centered around zero - */ - while(lag--) { - for(i = lag, d = 0.0; i < data_len; i++) - d += data[i] * data[i - lag]; - autoc[lag] = d; - } -#endif - - /* - * this version tends to run faster because of better data locality - * ('data_len' is usually much larger than 'lag') - */ - FLAC__real d; - unsigned sample, coeff; - const unsigned limit = data_len - lag; - - FLAC__ASSERT(lag > 0); - FLAC__ASSERT(lag <= data_len); - - for(coeff = 0; coeff < lag; coeff++) - autoc[coeff] = 0.0; - for(sample = 0; sample <= limit; sample++) { - d = data[sample]; - for(coeff = 0; coeff < lag; coeff++) - autoc[coeff] += d * data[sample+coeff]; - } - for(; sample < data_len; sample++) { - d = data[sample]; - for(coeff = 0; coeff < data_len - sample; coeff++) - autoc[coeff] += d * data[sample+coeff]; - } -} - -void FLAC__lpc_compute_lp_coefficients(const FLAC__real autoc[], unsigned *max_order, FLAC__real lp_coeff[][FLAC__MAX_LPC_ORDER], FLAC__double error[]) -{ - unsigned i, j; - FLAC__double r, err, ref[FLAC__MAX_LPC_ORDER], lpc[FLAC__MAX_LPC_ORDER]; - - FLAC__ASSERT(0 != max_order); - FLAC__ASSERT(0 < *max_order); - FLAC__ASSERT(*max_order <= FLAC__MAX_LPC_ORDER); - FLAC__ASSERT(autoc[0] != 0.0); - - err = autoc[0]; - - for(i = 0; i < *max_order; i++) { - /* Sum up this iteration's reflection coefficient. */ - r = -autoc[i+1]; - for(j = 0; j < i; j++) - r -= lpc[j] * autoc[i-j]; - ref[i] = (r/=err); - - /* Update LPC coefficients and total error. */ - lpc[i]=r; - for(j = 0; j < (i>>1); j++) { - FLAC__double tmp = lpc[j]; - lpc[j] += r * lpc[i-1-j]; - lpc[i-1-j] += r * tmp; - } - if(i & 1) - lpc[j] += lpc[j] * r; - - err *= (1.0 - r * r); - - /* save this order */ - for(j = 0; j <= i; j++) - lp_coeff[i][j] = (FLAC__real)(-lpc[j]); /* negate FIR filter coeff to get predictor coeff */ - error[i] = err; - - /* see SF bug #1601812 http://sourceforge.net/tracker/index.php?func=detail&aid=1601812&group_id=13478&atid=113478 */ - if(err == 0.0) { - *max_order = i+1; - return; - } - } -} - -int FLAC__lpc_quantize_coefficients(const FLAC__real lp_coeff[], unsigned order, unsigned precision, FLAC__int32 qlp_coeff[], int *shift) -{ - unsigned i; - FLAC__double cmax; - FLAC__int32 qmax, qmin; - - FLAC__ASSERT(precision > 0); - FLAC__ASSERT(precision >= FLAC__MIN_QLP_COEFF_PRECISION); - - /* drop one bit for the sign; from here on out we consider only |lp_coeff[i]| */ - precision--; - qmax = 1 << precision; - qmin = -qmax; - qmax--; - - /* calc cmax = max( |lp_coeff[i]| ) */ - cmax = 0.0; - for(i = 0; i < order; i++) { - const FLAC__double d = fabs(lp_coeff[i]); - if(d > cmax) - cmax = d; - } - - if(cmax <= 0.0) { - /* => coefficients are all 0, which means our constant-detect didn't work */ - return 2; - } - else { - const int max_shiftlimit = (1 << (FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN-1)) - 1; - const int min_shiftlimit = -max_shiftlimit - 1; - int log2cmax; - - (void)frexp(cmax, &log2cmax); - log2cmax--; - *shift = (int)precision - log2cmax - 1; - - if(*shift > max_shiftlimit) - *shift = max_shiftlimit; - else if(*shift < min_shiftlimit) - return 1; - } - - if(*shift >= 0) { - FLAC__double error = 0.0; - FLAC__int32 q; - for(i = 0; i < order; i++) { - error += lp_coeff[i] * (1 << *shift); -#if 1 /* unfortunately lround() is C99 */ - if(error >= 0.0) - q = (FLAC__int32)(error + 0.5); - else - q = (FLAC__int32)(error - 0.5); -#else - q = lround(error); -#endif -#ifdef FLAC__OVERFLOW_DETECT - if(q > qmax+1) /* we expect q==qmax+1 occasionally due to rounding */ - fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q>qmax %d>%d shift=%d cmax=%f precision=%u lpc[%u]=%f\n",q,qmax,*shift,cmax,precision+1,i,lp_coeff[i]); - else if(q < qmin) - fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q qmax) - q = qmax; - else if(q < qmin) - q = qmin; - error -= q; - qlp_coeff[i] = q; - } - } - /* negative shift is very rare but due to design flaw, negative shift is - * a NOP in the decoder, so it must be handled specially by scaling down - * coeffs - */ - else { - const int nshift = -(*shift); - FLAC__double error = 0.0; - FLAC__int32 q; -#ifdef DEBUG - fprintf(stderr,"FLAC__lpc_quantize_coefficients: negative shift=%d order=%u cmax=%f\n", *shift, order, cmax); -#endif - for(i = 0; i < order; i++) { - error += lp_coeff[i] / (1 << nshift); -#if 1 /* unfortunately lround() is C99 */ - if(error >= 0.0) - q = (FLAC__int32)(error + 0.5); - else - q = (FLAC__int32)(error - 0.5); -#else - q = lround(error); -#endif -#ifdef FLAC__OVERFLOW_DETECT - if(q > qmax+1) /* we expect q==qmax+1 occasionally due to rounding */ - fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q>qmax %d>%d shift=%d cmax=%f precision=%u lpc[%u]=%f\n",q,qmax,*shift,cmax,precision+1,i,lp_coeff[i]); - else if(q < qmin) - fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q qmax) - q = qmax; - else if(q < qmin) - q = qmin; - error -= q; - qlp_coeff[i] = q; - } - *shift = 0; - } - - return 0; -} - -void FLAC__lpc_compute_residual_from_qlp_coefficients(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]) -#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS) -{ - FLAC__int64 sumo; - unsigned i, j; - FLAC__int32 sum; - const FLAC__int32 *history; - -#ifdef FLAC__OVERFLOW_DETECT_VERBOSE - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization); - for(i=0;i 0); - - for(i = 0; i < data_len; i++) { - sumo = 0; - sum = 0; - history = data; - for(j = 0; j < order; j++) { - sum += qlp_coeff[j] * (*(--history)); - sumo += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*history); -#if defined _MSC_VER - if(sumo > 2147483647I64 || sumo < -2147483648I64) - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients: OVERFLOW, i=%u, j=%u, c=%d, d=%d, sumo=%I64d\n",i,j,qlp_coeff[j],*history,sumo); -#else - if(sumo > 2147483647ll || sumo < -2147483648ll) - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients: OVERFLOW, i=%u, j=%u, c=%d, d=%d, sumo=%lld\n",i,j,qlp_coeff[j],*history,(long long)sumo); -#endif - } - *(residual++) = *(data++) - (sum >> lp_quantization); - } - - /* Here's a slower but clearer version: - for(i = 0; i < data_len; i++) { - sum = 0; - for(j = 0; j < order; j++) - sum += qlp_coeff[j] * data[i-j-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - */ -} -#else /* fully unrolled version for normal use */ -{ - int i; - FLAC__int32 sum; - - FLAC__ASSERT(order > 0); - FLAC__ASSERT(order <= 32); - - /* - * We do unique versions up to 12th order since that's the subset limit. - * Also they are roughly ordered to match frequency of occurrence to - * minimize branching. - */ - if(order <= 12) { - if(order > 8) { - if(order > 10) { - if(order == 12) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[11] * data[i-12]; - sum += qlp_coeff[10] * data[i-11]; - sum += qlp_coeff[9] * data[i-10]; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - else { /* order == 11 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[10] * data[i-11]; - sum += qlp_coeff[9] * data[i-10]; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - } - else { - if(order == 10) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[9] * data[i-10]; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - else { /* order == 9 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - } - } - else if(order > 4) { - if(order > 6) { - if(order == 8) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - else { /* order == 7 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - } - else { - if(order == 6) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - else { /* order == 5 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - } - } - else { - if(order > 2) { - if(order == 4) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - else { /* order == 3 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - } - else { - if(order == 2) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - residual[i] = data[i] - (sum >> lp_quantization); - } - } - else { /* order == 1 */ - for(i = 0; i < (int)data_len; i++) - residual[i] = data[i] - ((qlp_coeff[0] * data[i-1]) >> lp_quantization); - } - } - } - } - else { /* order > 12 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - switch(order) { - case 32: sum += qlp_coeff[31] * data[i-32]; - case 31: sum += qlp_coeff[30] * data[i-31]; - case 30: sum += qlp_coeff[29] * data[i-30]; - case 29: sum += qlp_coeff[28] * data[i-29]; - case 28: sum += qlp_coeff[27] * data[i-28]; - case 27: sum += qlp_coeff[26] * data[i-27]; - case 26: sum += qlp_coeff[25] * data[i-26]; - case 25: sum += qlp_coeff[24] * data[i-25]; - case 24: sum += qlp_coeff[23] * data[i-24]; - case 23: sum += qlp_coeff[22] * data[i-23]; - case 22: sum += qlp_coeff[21] * data[i-22]; - case 21: sum += qlp_coeff[20] * data[i-21]; - case 20: sum += qlp_coeff[19] * data[i-20]; - case 19: sum += qlp_coeff[18] * data[i-19]; - case 18: sum += qlp_coeff[17] * data[i-18]; - case 17: sum += qlp_coeff[16] * data[i-17]; - case 16: sum += qlp_coeff[15] * data[i-16]; - case 15: sum += qlp_coeff[14] * data[i-15]; - case 14: sum += qlp_coeff[13] * data[i-14]; - case 13: sum += qlp_coeff[12] * data[i-13]; - sum += qlp_coeff[11] * data[i-12]; - sum += qlp_coeff[10] * data[i-11]; - sum += qlp_coeff[ 9] * data[i-10]; - sum += qlp_coeff[ 8] * data[i- 9]; - sum += qlp_coeff[ 7] * data[i- 8]; - sum += qlp_coeff[ 6] * data[i- 7]; - sum += qlp_coeff[ 5] * data[i- 6]; - sum += qlp_coeff[ 4] * data[i- 5]; - sum += qlp_coeff[ 3] * data[i- 4]; - sum += qlp_coeff[ 2] * data[i- 3]; - sum += qlp_coeff[ 1] * data[i- 2]; - sum += qlp_coeff[ 0] * data[i- 1]; - } - residual[i] = data[i] - (sum >> lp_quantization); - } - } -} -#endif - -void FLAC__lpc_compute_residual_from_qlp_coefficients_wide(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]) -#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS) -{ - unsigned i, j; - FLAC__int64 sum; - const FLAC__int32 *history; - -#ifdef FLAC__OVERFLOW_DETECT_VERBOSE - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization); - for(i=0;i 0); - - for(i = 0; i < data_len; i++) { - sum = 0; - history = data; - for(j = 0; j < order; j++) - sum += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*(--history)); - if(FLAC__bitmath_silog2_wide(sum >> lp_quantization) > 32) { -#if defined _MSC_VER - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: OVERFLOW, i=%u, sum=%I64d\n", i, sum >> lp_quantization); -#else - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: OVERFLOW, i=%u, sum=%lld\n", i, (long long)(sum >> lp_quantization)); -#endif - break; - } - if(FLAC__bitmath_silog2_wide((FLAC__int64)(*data) - (sum >> lp_quantization)) > 32) { -#if defined _MSC_VER - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: OVERFLOW, i=%u, data=%d, sum=%I64d, residual=%I64d\n", i, *data, sum >> lp_quantization, (FLAC__int64)(*data) - (sum >> lp_quantization)); -#else - fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: OVERFLOW, i=%u, data=%d, sum=%lld, residual=%lld\n", i, *data, (long long)(sum >> lp_quantization), (long long)((FLAC__int64)(*data) - (sum >> lp_quantization))); -#endif - break; - } - *(residual++) = *(data++) - (FLAC__int32)(sum >> lp_quantization); - } -} -#else /* fully unrolled version for normal use */ -{ - int i; - FLAC__int64 sum; - - FLAC__ASSERT(order > 0); - FLAC__ASSERT(order <= 32); - - /* - * We do unique versions up to 12th order since that's the subset limit. - * Also they are roughly ordered to match frequency of occurrence to - * minimize branching. - */ - if(order <= 12) { - if(order > 8) { - if(order > 10) { - if(order == 12) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[11] * (FLAC__int64)data[i-12]; - sum += qlp_coeff[10] * (FLAC__int64)data[i-11]; - sum += qlp_coeff[9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 11 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[10] * (FLAC__int64)data[i-11]; - sum += qlp_coeff[9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - } - else { - if(order == 10) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 9 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - } - } - else if(order > 4) { - if(order > 6) { - if(order == 8) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 7 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - } - else { - if(order == 6) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 5 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - } - } - else { - if(order > 2) { - if(order == 4) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 3 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - } - else { - if(order == 2) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 1 */ - for(i = 0; i < (int)data_len; i++) - residual[i] = data[i] - (FLAC__int32)((qlp_coeff[0] * (FLAC__int64)data[i-1]) >> lp_quantization); - } - } - } - } - else { /* order > 12 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - switch(order) { - case 32: sum += qlp_coeff[31] * (FLAC__int64)data[i-32]; - case 31: sum += qlp_coeff[30] * (FLAC__int64)data[i-31]; - case 30: sum += qlp_coeff[29] * (FLAC__int64)data[i-30]; - case 29: sum += qlp_coeff[28] * (FLAC__int64)data[i-29]; - case 28: sum += qlp_coeff[27] * (FLAC__int64)data[i-28]; - case 27: sum += qlp_coeff[26] * (FLAC__int64)data[i-27]; - case 26: sum += qlp_coeff[25] * (FLAC__int64)data[i-26]; - case 25: sum += qlp_coeff[24] * (FLAC__int64)data[i-25]; - case 24: sum += qlp_coeff[23] * (FLAC__int64)data[i-24]; - case 23: sum += qlp_coeff[22] * (FLAC__int64)data[i-23]; - case 22: sum += qlp_coeff[21] * (FLAC__int64)data[i-22]; - case 21: sum += qlp_coeff[20] * (FLAC__int64)data[i-21]; - case 20: sum += qlp_coeff[19] * (FLAC__int64)data[i-20]; - case 19: sum += qlp_coeff[18] * (FLAC__int64)data[i-19]; - case 18: sum += qlp_coeff[17] * (FLAC__int64)data[i-18]; - case 17: sum += qlp_coeff[16] * (FLAC__int64)data[i-17]; - case 16: sum += qlp_coeff[15] * (FLAC__int64)data[i-16]; - case 15: sum += qlp_coeff[14] * (FLAC__int64)data[i-15]; - case 14: sum += qlp_coeff[13] * (FLAC__int64)data[i-14]; - case 13: sum += qlp_coeff[12] * (FLAC__int64)data[i-13]; - sum += qlp_coeff[11] * (FLAC__int64)data[i-12]; - sum += qlp_coeff[10] * (FLAC__int64)data[i-11]; - sum += qlp_coeff[ 9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[ 8] * (FLAC__int64)data[i- 9]; - sum += qlp_coeff[ 7] * (FLAC__int64)data[i- 8]; - sum += qlp_coeff[ 6] * (FLAC__int64)data[i- 7]; - sum += qlp_coeff[ 5] * (FLAC__int64)data[i- 6]; - sum += qlp_coeff[ 4] * (FLAC__int64)data[i- 5]; - sum += qlp_coeff[ 3] * (FLAC__int64)data[i- 4]; - sum += qlp_coeff[ 2] * (FLAC__int64)data[i- 3]; - sum += qlp_coeff[ 1] * (FLAC__int64)data[i- 2]; - sum += qlp_coeff[ 0] * (FLAC__int64)data[i- 1]; - } - residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization); - } - } -} -#endif - -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - -void FLAC__lpc_restore_signal(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]) -#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS) -{ - FLAC__int64 sumo; - unsigned i, j; - FLAC__int32 sum; - const FLAC__int32 *r = residual, *history; - -#ifdef FLAC__OVERFLOW_DETECT_VERBOSE - fprintf(stderr,"FLAC__lpc_restore_signal: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization); - for(i=0;i 0); - - for(i = 0; i < data_len; i++) { - sumo = 0; - sum = 0; - history = data; - for(j = 0; j < order; j++) { - sum += qlp_coeff[j] * (*(--history)); - sumo += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*history); -#if defined _MSC_VER - if(sumo > 2147483647I64 || sumo < -2147483648I64) - fprintf(stderr,"FLAC__lpc_restore_signal: OVERFLOW, i=%u, j=%u, c=%d, d=%d, sumo=%I64d\n",i,j,qlp_coeff[j],*history,sumo); -#else - if(sumo > 2147483647ll || sumo < -2147483648ll) - fprintf(stderr,"FLAC__lpc_restore_signal: OVERFLOW, i=%u, j=%u, c=%d, d=%d, sumo=%lld\n",i,j,qlp_coeff[j],*history,(long long)sumo); -#endif - } - *(data++) = *(r++) + (sum >> lp_quantization); - } - - /* Here's a slower but clearer version: - for(i = 0; i < data_len; i++) { - sum = 0; - for(j = 0; j < order; j++) - sum += qlp_coeff[j] * data[i-j-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - */ -} -#else /* fully unrolled version for normal use */ -{ - int i; - FLAC__int32 sum; - - FLAC__ASSERT(order > 0); - FLAC__ASSERT(order <= 32); - - /* - * We do unique versions up to 12th order since that's the subset limit. - * Also they are roughly ordered to match frequency of occurrence to - * minimize branching. - */ - if(order <= 12) { - if(order > 8) { - if(order > 10) { - if(order == 12) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[11] * data[i-12]; - sum += qlp_coeff[10] * data[i-11]; - sum += qlp_coeff[9] * data[i-10]; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - else { /* order == 11 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[10] * data[i-11]; - sum += qlp_coeff[9] * data[i-10]; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - } - else { - if(order == 10) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[9] * data[i-10]; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - else { /* order == 9 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[8] * data[i-9]; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - } - } - else if(order > 4) { - if(order > 6) { - if(order == 8) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[7] * data[i-8]; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - else { /* order == 7 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[6] * data[i-7]; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - } - else { - if(order == 6) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[5] * data[i-6]; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - else { /* order == 5 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[4] * data[i-5]; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - } - } - else { - if(order > 2) { - if(order == 4) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[3] * data[i-4]; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - else { /* order == 3 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[2] * data[i-3]; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - } - else { - if(order == 2) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[1] * data[i-2]; - sum += qlp_coeff[0] * data[i-1]; - data[i] = residual[i] + (sum >> lp_quantization); - } - } - else { /* order == 1 */ - for(i = 0; i < (int)data_len; i++) - data[i] = residual[i] + ((qlp_coeff[0] * data[i-1]) >> lp_quantization); - } - } - } - } - else { /* order > 12 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - switch(order) { - case 32: sum += qlp_coeff[31] * data[i-32]; - case 31: sum += qlp_coeff[30] * data[i-31]; - case 30: sum += qlp_coeff[29] * data[i-30]; - case 29: sum += qlp_coeff[28] * data[i-29]; - case 28: sum += qlp_coeff[27] * data[i-28]; - case 27: sum += qlp_coeff[26] * data[i-27]; - case 26: sum += qlp_coeff[25] * data[i-26]; - case 25: sum += qlp_coeff[24] * data[i-25]; - case 24: sum += qlp_coeff[23] * data[i-24]; - case 23: sum += qlp_coeff[22] * data[i-23]; - case 22: sum += qlp_coeff[21] * data[i-22]; - case 21: sum += qlp_coeff[20] * data[i-21]; - case 20: sum += qlp_coeff[19] * data[i-20]; - case 19: sum += qlp_coeff[18] * data[i-19]; - case 18: sum += qlp_coeff[17] * data[i-18]; - case 17: sum += qlp_coeff[16] * data[i-17]; - case 16: sum += qlp_coeff[15] * data[i-16]; - case 15: sum += qlp_coeff[14] * data[i-15]; - case 14: sum += qlp_coeff[13] * data[i-14]; - case 13: sum += qlp_coeff[12] * data[i-13]; - sum += qlp_coeff[11] * data[i-12]; - sum += qlp_coeff[10] * data[i-11]; - sum += qlp_coeff[ 9] * data[i-10]; - sum += qlp_coeff[ 8] * data[i- 9]; - sum += qlp_coeff[ 7] * data[i- 8]; - sum += qlp_coeff[ 6] * data[i- 7]; - sum += qlp_coeff[ 5] * data[i- 6]; - sum += qlp_coeff[ 4] * data[i- 5]; - sum += qlp_coeff[ 3] * data[i- 4]; - sum += qlp_coeff[ 2] * data[i- 3]; - sum += qlp_coeff[ 1] * data[i- 2]; - sum += qlp_coeff[ 0] * data[i- 1]; - } - data[i] = residual[i] + (sum >> lp_quantization); - } - } -} -#endif - -void FLAC__lpc_restore_signal_wide(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]) -#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS) -{ - unsigned i, j; - FLAC__int64 sum; - const FLAC__int32 *r = residual, *history; - -#ifdef FLAC__OVERFLOW_DETECT_VERBOSE - fprintf(stderr,"FLAC__lpc_restore_signal_wide: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization); - for(i=0;i 0); - - for(i = 0; i < data_len; i++) { - sum = 0; - history = data; - for(j = 0; j < order; j++) - sum += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*(--history)); - if(FLAC__bitmath_silog2_wide(sum >> lp_quantization) > 32) { -#ifdef _MSC_VER - fprintf(stderr,"FLAC__lpc_restore_signal_wide: OVERFLOW, i=%u, sum=%I64d\n", i, sum >> lp_quantization); -#else - fprintf(stderr,"FLAC__lpc_restore_signal_wide: OVERFLOW, i=%u, sum=%lld\n", i, (long long)(sum >> lp_quantization)); -#endif - break; - } - if(FLAC__bitmath_silog2_wide((FLAC__int64)(*r) + (sum >> lp_quantization)) > 32) { -#ifdef _MSC_VER - fprintf(stderr,"FLAC__lpc_restore_signal_wide: OVERFLOW, i=%u, residual=%d, sum=%I64d, data=%I64d\n", i, *r, sum >> lp_quantization, (FLAC__int64)(*r) + (sum >> lp_quantization)); -#else - fprintf(stderr,"FLAC__lpc_restore_signal_wide: OVERFLOW, i=%u, residual=%d, sum=%lld, data=%lld\n", i, *r, (long long)(sum >> lp_quantization), (long long)((FLAC__int64)(*r) + (sum >> lp_quantization))); -#endif - break; - } - *(data++) = *(r++) + (FLAC__int32)(sum >> lp_quantization); - } -} -#else /* fully unrolled version for normal use */ -{ - int i; - FLAC__int64 sum; - - FLAC__ASSERT(order > 0); - FLAC__ASSERT(order <= 32); - - /* - * We do unique versions up to 12th order since that's the subset limit. - * Also they are roughly ordered to match frequency of occurrence to - * minimize branching. - */ - if(order <= 12) { - if(order > 8) { - if(order > 10) { - if(order == 12) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[11] * (FLAC__int64)data[i-12]; - sum += qlp_coeff[10] * (FLAC__int64)data[i-11]; - sum += qlp_coeff[9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 11 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[10] * (FLAC__int64)data[i-11]; - sum += qlp_coeff[9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - } - else { - if(order == 10) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 9 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[8] * (FLAC__int64)data[i-9]; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - } - } - else if(order > 4) { - if(order > 6) { - if(order == 8) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[7] * (FLAC__int64)data[i-8]; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 7 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[6] * (FLAC__int64)data[i-7]; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - } - else { - if(order == 6) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[5] * (FLAC__int64)data[i-6]; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 5 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[4] * (FLAC__int64)data[i-5]; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - } - } - else { - if(order > 2) { - if(order == 4) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[3] * (FLAC__int64)data[i-4]; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 3 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[2] * (FLAC__int64)data[i-3]; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - } - else { - if(order == 2) { - for(i = 0; i < (int)data_len; i++) { - sum = 0; - sum += qlp_coeff[1] * (FLAC__int64)data[i-2]; - sum += qlp_coeff[0] * (FLAC__int64)data[i-1]; - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } - else { /* order == 1 */ - for(i = 0; i < (int)data_len; i++) - data[i] = residual[i] + (FLAC__int32)((qlp_coeff[0] * (FLAC__int64)data[i-1]) >> lp_quantization); - } - } - } - } - else { /* order > 12 */ - for(i = 0; i < (int)data_len; i++) { - sum = 0; - switch(order) { - case 32: sum += qlp_coeff[31] * (FLAC__int64)data[i-32]; - case 31: sum += qlp_coeff[30] * (FLAC__int64)data[i-31]; - case 30: sum += qlp_coeff[29] * (FLAC__int64)data[i-30]; - case 29: sum += qlp_coeff[28] * (FLAC__int64)data[i-29]; - case 28: sum += qlp_coeff[27] * (FLAC__int64)data[i-28]; - case 27: sum += qlp_coeff[26] * (FLAC__int64)data[i-27]; - case 26: sum += qlp_coeff[25] * (FLAC__int64)data[i-26]; - case 25: sum += qlp_coeff[24] * (FLAC__int64)data[i-25]; - case 24: sum += qlp_coeff[23] * (FLAC__int64)data[i-24]; - case 23: sum += qlp_coeff[22] * (FLAC__int64)data[i-23]; - case 22: sum += qlp_coeff[21] * (FLAC__int64)data[i-22]; - case 21: sum += qlp_coeff[20] * (FLAC__int64)data[i-21]; - case 20: sum += qlp_coeff[19] * (FLAC__int64)data[i-20]; - case 19: sum += qlp_coeff[18] * (FLAC__int64)data[i-19]; - case 18: sum += qlp_coeff[17] * (FLAC__int64)data[i-18]; - case 17: sum += qlp_coeff[16] * (FLAC__int64)data[i-17]; - case 16: sum += qlp_coeff[15] * (FLAC__int64)data[i-16]; - case 15: sum += qlp_coeff[14] * (FLAC__int64)data[i-15]; - case 14: sum += qlp_coeff[13] * (FLAC__int64)data[i-14]; - case 13: sum += qlp_coeff[12] * (FLAC__int64)data[i-13]; - sum += qlp_coeff[11] * (FLAC__int64)data[i-12]; - sum += qlp_coeff[10] * (FLAC__int64)data[i-11]; - sum += qlp_coeff[ 9] * (FLAC__int64)data[i-10]; - sum += qlp_coeff[ 8] * (FLAC__int64)data[i- 9]; - sum += qlp_coeff[ 7] * (FLAC__int64)data[i- 8]; - sum += qlp_coeff[ 6] * (FLAC__int64)data[i- 7]; - sum += qlp_coeff[ 5] * (FLAC__int64)data[i- 6]; - sum += qlp_coeff[ 4] * (FLAC__int64)data[i- 5]; - sum += qlp_coeff[ 3] * (FLAC__int64)data[i- 4]; - sum += qlp_coeff[ 2] * (FLAC__int64)data[i- 3]; - sum += qlp_coeff[ 1] * (FLAC__int64)data[i- 2]; - sum += qlp_coeff[ 0] * (FLAC__int64)data[i- 1]; - } - data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization); - } - } -} -#endif - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample(FLAC__double lpc_error, unsigned total_samples) -{ - FLAC__double error_scale; - - FLAC__ASSERT(total_samples > 0); - - error_scale = 0.5 * M_LN2 * M_LN2 / (FLAC__double)total_samples; - - return FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(lpc_error, error_scale); -} - -FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(FLAC__double lpc_error, FLAC__double error_scale) -{ - if(lpc_error > 0.0) { - FLAC__double bps = (FLAC__double)0.5 * log(error_scale * lpc_error) / M_LN2; - if(bps >= 0.0) - return bps; - else - return 0.0; - } - else if(lpc_error < 0.0) { /* error should not be negative but can happen due to inadequate floating-point resolution */ - return 1e32; - } - else { - return 0.0; - } -} - -unsigned FLAC__lpc_compute_best_order(const FLAC__double lpc_error[], unsigned max_order, unsigned total_samples, unsigned overhead_bits_per_order) -{ - unsigned order, index, best_index; /* 'index' the index into lpc_error; index==order-1 since lpc_error[0] is for order==1, lpc_error[1] is for order==2, etc */ - FLAC__double bits, best_bits, error_scale; - - FLAC__ASSERT(max_order > 0); - FLAC__ASSERT(total_samples > 0); - - error_scale = 0.5 * M_LN2 * M_LN2 / (FLAC__double)total_samples; - - best_index = 0; - best_bits = (unsigned)(-1); - - for(index = 0, order = 1; index < max_order; index++, order++) { - bits = FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(lpc_error[index], error_scale) * (FLAC__double)(total_samples - order) + (FLAC__double)(order * overhead_bits_per_order); - if(bits < best_bits) { - best_index = index; - best_bits = bits; - } - } - - return best_index+1; /* +1 since index of lpc_error[] is order-1 */ -} - -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/md5.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/md5.c deleted file mode 100644 index d210cc86e7..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/md5.c +++ /dev/null @@ -1,431 +0,0 @@ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include /* for malloc() */ -#include /* for memcpy() */ - -#include "include/private/md5.h" -#include "../alloc.h" - -#ifndef FLaC__INLINE -#define FLaC__INLINE -#endif - -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - * - * Changed so as no longer to depend on Colin Plumb's `usual.h' header - * definitions; now uses stuff from dpkg's config.h. - * - Ian Jackson . - * Still in the public domain. - * - * Josh Coalson: made some changes to integrate with libFLAC. - * Still in the public domain. - */ - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f,w,x,y,z,in,s) \ - (w += f(x,y,z) + in, w = (w<>(32-s)) + x) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -static void FLAC__MD5Transform(FLAC__uint32 buf[4], FLAC__uint32 const in[16]) -{ - register FLAC__uint32 a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} - -#if WORDS_BIGENDIAN -//@@@@@@ OPT: use bswap/intrinsics -static void byteSwap(FLAC__uint32 *buf, unsigned words) -{ - register FLAC__uint32 x; - do { - x = *buf; - x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); - *buf++ = (x >> 16) | (x << 16); - } while (--words); -} -static void byteSwapX16(FLAC__uint32 *buf) -{ - register FLAC__uint32 x; - - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16); - x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf = (x >> 16) | (x << 16); -} -#else -#define byteSwap(buf, words) -#define byteSwapX16(buf) -#endif - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -static void FLAC__MD5Update(FLAC__MD5Context *ctx, FLAC__byte const *buf, unsigned len) -{ - FLAC__uint32 t; - - /* Update byte count */ - - t = ctx->bytes[0]; - if ((ctx->bytes[0] = t + len) < t) - ctx->bytes[1]++; /* Carry from low to high */ - - t = 64 - (t & 0x3f); /* Space available in ctx->in (at least 1) */ - if (t > len) { - memcpy((FLAC__byte *)ctx->in + 64 - t, buf, len); - return; - } - /* First chunk is an odd size */ - memcpy((FLAC__byte *)ctx->in + 64 - t, buf, t); - byteSwapX16(ctx->in); - FLAC__MD5Transform(ctx->buf, ctx->in); - buf += t; - len -= t; - - /* Process data in 64-byte chunks */ - while (len >= 64) { - memcpy(ctx->in, buf, 64); - byteSwapX16(ctx->in); - FLAC__MD5Transform(ctx->buf, ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - memcpy(ctx->in, buf, len); -} - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -void FLAC__MD5Init(FLAC__MD5Context *ctx) -{ - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bytes[0] = 0; - ctx->bytes[1] = 0; - - ctx->internal_buf = 0; - ctx->capacity = 0; -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -void FLAC__MD5Final(FLAC__byte digest[16], FLAC__MD5Context *ctx) -{ - int count = ctx->bytes[0] & 0x3f; /* Number of bytes in ctx->in */ - FLAC__byte *p = (FLAC__byte *)ctx->in + count; - - /* Set the first char of padding to 0x80. There is always room. */ - *p++ = 0x80; - - /* Bytes of padding needed to make 56 bytes (-8..55) */ - count = 56 - 1 - count; - - if (count < 0) { /* Padding forces an extra block */ - memset(p, 0, count + 8); - byteSwapX16(ctx->in); - FLAC__MD5Transform(ctx->buf, ctx->in); - p = (FLAC__byte *)ctx->in; - count = 56; - } - memset(p, 0, count); - byteSwap(ctx->in, 14); - - /* Append length in bits and transform */ - ctx->in[14] = ctx->bytes[0] << 3; - ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29; - FLAC__MD5Transform(ctx->buf, ctx->in); - - byteSwap(ctx->buf, 4); - memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ - if(0 != ctx->internal_buf) { - free(ctx->internal_buf); - ctx->internal_buf = 0; - ctx->capacity = 0; - } -} - -/* - * Convert the incoming audio signal to a byte stream - */ -static void format_input_(FLAC__byte *buf, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample) -{ - unsigned channel, sample; - register FLAC__int32 a_word; - register FLAC__byte *buf_ = buf; - -#if WORDS_BIGENDIAN -#else - if(channels == 2 && bytes_per_sample == 2) { - FLAC__int16 *buf1_ = ((FLAC__int16*)buf_) + 1; - memcpy(buf_, signal[0], sizeof(FLAC__int32) * samples); - for(sample = 0; sample < samples; sample++, buf1_+=2) - *buf1_ = (FLAC__int16)signal[1][sample]; - } - else if(channels == 1 && bytes_per_sample == 2) { - FLAC__int16 *buf1_ = (FLAC__int16*)buf_; - for(sample = 0; sample < samples; sample++) - *buf1_++ = (FLAC__int16)signal[0][sample]; - } - else -#endif - if(bytes_per_sample == 2) { - if(channels == 2) { - for(sample = 0; sample < samples; sample++) { - a_word = signal[0][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - a_word = signal[1][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - else if(channels == 1) { - for(sample = 0; sample < samples; sample++) { - a_word = signal[0][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - else { - for(sample = 0; sample < samples; sample++) { - for(channel = 0; channel < channels; channel++) { - a_word = signal[channel][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - } - } - else if(bytes_per_sample == 3) { - if(channels == 2) { - for(sample = 0; sample < samples; sample++) { - a_word = signal[0][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - a_word = signal[1][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - else if(channels == 1) { - for(sample = 0; sample < samples; sample++) { - a_word = signal[0][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - else { - for(sample = 0; sample < samples; sample++) { - for(channel = 0; channel < channels; channel++) { - a_word = signal[channel][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - } - } - else if(bytes_per_sample == 1) { - if(channels == 2) { - for(sample = 0; sample < samples; sample++) { - a_word = signal[0][sample]; - *buf_++ = (FLAC__byte)a_word; - a_word = signal[1][sample]; - *buf_++ = (FLAC__byte)a_word; - } - } - else if(channels == 1) { - for(sample = 0; sample < samples; sample++) { - a_word = signal[0][sample]; - *buf_++ = (FLAC__byte)a_word; - } - } - else { - for(sample = 0; sample < samples; sample++) { - for(channel = 0; channel < channels; channel++) { - a_word = signal[channel][sample]; - *buf_++ = (FLAC__byte)a_word; - } - } - } - } - else { /* bytes_per_sample == 4, maybe optimize more later */ - for(sample = 0; sample < samples; sample++) { - for(channel = 0; channel < channels; channel++) { - a_word = signal[channel][sample]; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; a_word >>= 8; - *buf_++ = (FLAC__byte)a_word; - } - } - } -} - -/* - * Convert the incoming audio signal to a byte stream and FLAC__MD5Update it. - */ -FLAC__bool FLAC__MD5Accumulate(FLAC__MD5Context *ctx, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample) -{ - const size_t bytes_needed = (size_t)channels * (size_t)samples * (size_t)bytes_per_sample; - - /* overflow check */ - if((size_t)channels > SIZE_MAX / (size_t)bytes_per_sample) - return false; - if((size_t)channels * (size_t)bytes_per_sample > SIZE_MAX / (size_t)samples) - return false; - - if(ctx->capacity < bytes_needed) { - FLAC__byte *tmp = (FLAC__byte*)realloc(ctx->internal_buf, bytes_needed); - if(0 == tmp) { - free(ctx->internal_buf); - if(0 == (ctx->internal_buf = (FLAC__byte*)safe_malloc_(bytes_needed))) - return false; - } - ctx->internal_buf = tmp; - ctx->capacity = bytes_needed; - } - - format_input_(ctx->internal_buf, signal, channels, samples, bytes_per_sample); - - FLAC__MD5Update(ctx, ctx->internal_buf, bytes_needed); - - return true; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/memory.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/memory.c deleted file mode 100644 index 9ad696adb3..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/memory.c +++ /dev/null @@ -1,227 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include "include/private/memory.h" -#include "../assert.h" -#include "../alloc.h" - -void *FLAC__memory_alloc_aligned(size_t bytes, void **aligned_address) -{ - void *x; - - FLAC__ASSERT(0 != aligned_address); - -#ifdef FLAC__ALIGN_MALLOC_DATA - /* align on 32-byte (256-bit) boundary */ - x = safe_malloc_add_2op_(bytes, /*+*/31); -#ifdef SIZEOF_VOIDP -#if SIZEOF_VOIDP == 4 - /* could do *aligned_address = x + ((unsigned) (32 - (((unsigned)x) & 31))) & 31; */ - *aligned_address = (void*)(((unsigned)x + 31) & -32); -#elif SIZEOF_VOIDP == 8 - *aligned_address = (void*)(((FLAC__uint64)x + 31) & (FLAC__uint64)(-((FLAC__int64)32))); -#else -# error Unsupported sizeof(void*) -#endif -#else - /* there's got to be a better way to do this right for all archs */ - if(sizeof(void*) == sizeof(unsigned)) - *aligned_address = (void*)(((unsigned)x + 31) & -32); - else if(sizeof(void*) == sizeof(FLAC__uint64)) - *aligned_address = (void*)(((FLAC__uint64)x + 31) & (FLAC__uint64)(-((FLAC__int64)32))); - else - return 0; -#endif -#else - x = safe_malloc_(bytes); - *aligned_address = x; -#endif - return x; -} - -FLAC__bool FLAC__memory_alloc_aligned_int32_array(unsigned elements, FLAC__int32 **unaligned_pointer, FLAC__int32 **aligned_pointer) -{ - FLAC__int32 *pu; /* unaligned pointer */ - union { /* union needed to comply with C99 pointer aliasing rules */ - FLAC__int32 *pa; /* aligned pointer */ - void *pv; /* aligned pointer alias */ - } u; - - FLAC__ASSERT(elements > 0); - FLAC__ASSERT(0 != unaligned_pointer); - FLAC__ASSERT(0 != aligned_pointer); - FLAC__ASSERT(unaligned_pointer != aligned_pointer); - - if((size_t)elements > SIZE_MAX / sizeof(*pu)) /* overflow check */ - return false; - - pu = (FLAC__int32*)FLAC__memory_alloc_aligned(sizeof(*pu) * (size_t)elements, &u.pv); - if(0 == pu) { - return false; - } - else { - if(*unaligned_pointer != 0) - free(*unaligned_pointer); - *unaligned_pointer = pu; - *aligned_pointer = u.pa; - return true; - } -} - -FLAC__bool FLAC__memory_alloc_aligned_uint32_array(unsigned elements, FLAC__uint32 **unaligned_pointer, FLAC__uint32 **aligned_pointer) -{ - FLAC__uint32 *pu; /* unaligned pointer */ - union { /* union needed to comply with C99 pointer aliasing rules */ - FLAC__uint32 *pa; /* aligned pointer */ - void *pv; /* aligned pointer alias */ - } u; - - FLAC__ASSERT(elements > 0); - FLAC__ASSERT(0 != unaligned_pointer); - FLAC__ASSERT(0 != aligned_pointer); - FLAC__ASSERT(unaligned_pointer != aligned_pointer); - - if((size_t)elements > SIZE_MAX / sizeof(*pu)) /* overflow check */ - return false; - - pu = (FLAC__uint32*)FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv); - if(0 == pu) { - return false; - } - else { - if(*unaligned_pointer != 0) - free(*unaligned_pointer); - *unaligned_pointer = pu; - *aligned_pointer = u.pa; - return true; - } -} - -FLAC__bool FLAC__memory_alloc_aligned_uint64_array(unsigned elements, FLAC__uint64 **unaligned_pointer, FLAC__uint64 **aligned_pointer) -{ - FLAC__uint64 *pu; /* unaligned pointer */ - union { /* union needed to comply with C99 pointer aliasing rules */ - FLAC__uint64 *pa; /* aligned pointer */ - void *pv; /* aligned pointer alias */ - } u; - - FLAC__ASSERT(elements > 0); - FLAC__ASSERT(0 != unaligned_pointer); - FLAC__ASSERT(0 != aligned_pointer); - FLAC__ASSERT(unaligned_pointer != aligned_pointer); - - if((size_t)elements > SIZE_MAX / sizeof(*pu)) /* overflow check */ - return false; - - pu = (FLAC__uint64*)FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv); - if(0 == pu) { - return false; - } - else { - if(*unaligned_pointer != 0) - free(*unaligned_pointer); - *unaligned_pointer = pu; - *aligned_pointer = u.pa; - return true; - } -} - -FLAC__bool FLAC__memory_alloc_aligned_unsigned_array(unsigned elements, unsigned **unaligned_pointer, unsigned **aligned_pointer) -{ - unsigned *pu; /* unaligned pointer */ - union { /* union needed to comply with C99 pointer aliasing rules */ - unsigned *pa; /* aligned pointer */ - void *pv; /* aligned pointer alias */ - } u; - - FLAC__ASSERT(elements > 0); - FLAC__ASSERT(0 != unaligned_pointer); - FLAC__ASSERT(0 != aligned_pointer); - FLAC__ASSERT(unaligned_pointer != aligned_pointer); - - if((size_t)elements > SIZE_MAX / sizeof(*pu)) /* overflow check */ - return false; - - pu = (unsigned*)FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv); - if(0 == pu) { - return false; - } - else { - if(*unaligned_pointer != 0) - free(*unaligned_pointer); - *unaligned_pointer = pu; - *aligned_pointer = u.pa; - return true; - } -} - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -FLAC__bool FLAC__memory_alloc_aligned_real_array(unsigned elements, FLAC__real **unaligned_pointer, FLAC__real **aligned_pointer) -{ - FLAC__real *pu; /* unaligned pointer */ - union { /* union needed to comply with C99 pointer aliasing rules */ - FLAC__real *pa; /* aligned pointer */ - void *pv; /* aligned pointer alias */ - } u; - - FLAC__ASSERT(elements > 0); - FLAC__ASSERT(0 != unaligned_pointer); - FLAC__ASSERT(0 != aligned_pointer); - FLAC__ASSERT(unaligned_pointer != aligned_pointer); - - if((size_t)elements > SIZE_MAX / sizeof(*pu)) /* overflow check */ - return false; - - pu = (FLAC__real*)FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv); - if(0 == pu) { - return false; - } - else { - if(*unaligned_pointer != 0) - free(*unaligned_pointer); - *unaligned_pointer = pu; - *aligned_pointer = u.pa; - return true; - } -} - -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_decoder.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_decoder.c deleted file mode 100644 index db3264624d..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_decoder.c +++ /dev/null @@ -1,3391 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - -#if HAVE_CONFIG_H -# include -#endif - -#if defined _MSC_VER || defined __MINGW32__ -#include /* for _setmode() */ -#include /* for _O_BINARY */ -#endif -#if defined __CYGWIN__ || defined __EMX__ -#include /* for setmode(), O_BINARY */ -#include /* for _O_BINARY */ -#endif -#include -#include /* for malloc() */ -#include /* for memset/memcpy() */ -#include /* for stat() */ -#include /* for off_t */ -#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__ -#if _MSC_VER <= 1600 || defined __BORLANDC__ /* @@@ [2G limit] */ -#define fseeko fseek -#define ftello ftell -#endif -#endif -#include "../assert.h" -#include "../alloc.h" -#include "include/protected/stream_decoder.h" -#include "include/private/bitreader.h" -#include "include/private/bitmath.h" -#include "include/private/cpu.h" -#include "include/private/crc.h" -#include "include/private/fixed.h" -#include "include/private/format.h" -#include "include/private/lpc.h" -#include "include/private/md5.h" -#include "include/private/memory.h" - -#ifdef max -#undef max -#endif -#define max(a,b) ((a)>(b)?(a):(b)) - -/* adjust for compilers that can't understand using LLU suffix for uint64_t literals */ -#ifdef _MSC_VER -#define FLAC__U64L(x) x -#else -#define FLAC__U64L(x) x##LLU -#endif - - -/* technically this should be in an "export.c" but this is convenient enough */ -FLAC_API int FLAC_API_SUPPORTS_OGG_FLAC = -#if FLAC__HAS_OGG - 1 -#else - 0 -#endif -; - - -/*********************************************************************** - * - * Private static data - * - ***********************************************************************/ - -static FLAC__byte ID3V2_TAG_[3] = { 'I', 'D', '3' }; - -/*********************************************************************** - * - * Private class method prototypes - * - ***********************************************************************/ - -static void set_defaults_dec(FLAC__StreamDecoder *decoder); -static FILE *get_binary_stdin_(void); -static FLAC__bool allocate_output_(FLAC__StreamDecoder *decoder, unsigned size, unsigned channels); -static FLAC__bool has_id_filtered_(FLAC__StreamDecoder *decoder, FLAC__byte *id); -static FLAC__bool find_metadata_(FLAC__StreamDecoder *decoder); -static FLAC__bool read_metadata_(FLAC__StreamDecoder *decoder); -static FLAC__bool read_metadata_streaminfo_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length); -static FLAC__bool read_metadata_seektable_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length); -static FLAC__bool read_metadata_vorbiscomment_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_VorbisComment *obj); -static FLAC__bool read_metadata_cuesheet_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_CueSheet *obj); -static FLAC__bool read_metadata_picture_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_Picture *obj); -static FLAC__bool skip_id3v2_tag_(FLAC__StreamDecoder *decoder); -static FLAC__bool frame_sync_(FLAC__StreamDecoder *decoder); -static FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FLAC__bool do_full_decode); -static FLAC__bool read_frame_header_(FLAC__StreamDecoder *decoder); -static FLAC__bool read_subframe_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode); -static FLAC__bool read_subframe_constant_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode); -static FLAC__bool read_subframe_fixed_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode); -static FLAC__bool read_subframe_lpc_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode); -static FLAC__bool read_subframe_verbatim_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode); -static FLAC__bool read_residual_partitioned_rice_(FLAC__StreamDecoder *decoder, unsigned predictor_order, unsigned partition_order, FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, FLAC__int32 *residual, FLAC__bool is_extended); -static FLAC__bool read_zero_padding_(FLAC__StreamDecoder *decoder); -static FLAC__bool read_callback_(FLAC__byte buffer[], size_t *bytes, void *client_data); -#if FLAC__HAS_OGG -static FLAC__StreamDecoderReadStatus read_callback_ogg_aspect_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes); -static FLAC__OggDecoderAspectReadStatus read_callback_proxy_(const void *void_decoder, FLAC__byte buffer[], size_t *bytes, void *client_data); -#endif -static FLAC__StreamDecoderWriteStatus write_audio_frame_to_client_(FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[]); -static void send_error_to_client_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status); -static FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample); -#if FLAC__HAS_OGG -static FLAC__bool seek_to_absolute_sample_ogg_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample); -#endif -static FLAC__StreamDecoderReadStatus file_read_callback_dec (const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data); -static FLAC__StreamDecoderSeekStatus file_seek_callback_dec (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data); -static FLAC__StreamDecoderTellStatus file_tell_callback_dec (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data); -static FLAC__StreamDecoderLengthStatus file_length_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data); -static FLAC__bool file_eof_callback_(const FLAC__StreamDecoder *decoder, void *client_data); - -/*********************************************************************** - * - * Private class data - * - ***********************************************************************/ - -typedef struct FLAC__StreamDecoderPrivate { -#if FLAC__HAS_OGG - FLAC__bool is_ogg; -#endif - FLAC__StreamDecoderReadCallback read_callback; - FLAC__StreamDecoderSeekCallback seek_callback; - FLAC__StreamDecoderTellCallback tell_callback; - FLAC__StreamDecoderLengthCallback length_callback; - FLAC__StreamDecoderEofCallback eof_callback; - FLAC__StreamDecoderWriteCallback write_callback; - FLAC__StreamDecoderMetadataCallback metadata_callback; - FLAC__StreamDecoderErrorCallback error_callback; - /* generic 32-bit datapath: */ - void (*local_lpc_restore_signal)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); - /* generic 64-bit datapath: */ - void (*local_lpc_restore_signal_64bit)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); - /* for use when the signal is <= 16 bits-per-sample, or <= 15 bits-per-sample on a side channel (which requires 1 extra bit): */ - void (*local_lpc_restore_signal_16bit)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); - /* for use when the signal is <= 16 bits-per-sample, or <= 15 bits-per-sample on a side channel (which requires 1 extra bit), AND order <= 8: */ - void (*local_lpc_restore_signal_16bit_order8)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); - FLAC__bool (*local_bitreader_read_rice_signed_block)(FLAC__BitReader *br, int* vals, unsigned nvals, unsigned parameter); - void *client_data; - FILE *file; /* only used if FLAC__stream_decoder_init_file()/FLAC__stream_decoder_init_file() called, else NULL */ - FLAC__BitReader *input; - FLAC__int32 *output[FLAC__MAX_CHANNELS]; - FLAC__int32 *residual[FLAC__MAX_CHANNELS]; /* WATCHOUT: these are the aligned pointers; the real pointers that should be free()'d are residual_unaligned[] below */ - FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents[FLAC__MAX_CHANNELS]; - unsigned output_capacity, output_channels; - FLAC__uint32 fixed_block_size, next_fixed_block_size; - FLAC__uint64 samples_decoded; - FLAC__bool has_stream_info, has_seek_table; - FLAC__StreamMetadata stream_info; - FLAC__StreamMetadata seek_table; - FLAC__bool metadata_filter[128]; /* MAGIC number 128 == total number of metadata block types == 1 << 7 */ - FLAC__byte *metadata_filter_ids; - size_t metadata_filter_ids_count, metadata_filter_ids_capacity; /* units for both are IDs, not bytes */ - FLAC__Frame frame; - FLAC__bool cached; /* true if there is a byte in lookahead */ - FLAC__CPUInfo cpuinfo; - FLAC__byte header_warmup[2]; /* contains the sync code and reserved bits */ - FLAC__byte lookahead; /* temp storage when we need to look ahead one byte in the stream */ - /* unaligned (original) pointers to allocated data */ - FLAC__int32 *residual_unaligned[FLAC__MAX_CHANNELS]; - FLAC__bool do_md5_checking; /* initially gets protected_->md5_checking but is turned off after a seek or if the metadata has a zero MD5 */ - FLAC__bool internal_reset_hack; /* used only during init() so we can call reset to set up the decoder without rewinding the input */ - FLAC__bool is_seeking; - FLAC__MD5Context md5context; - FLAC__byte computed_md5sum[16]; /* this is the sum we computed from the decoded data */ - /* (the rest of these are only used for seeking) */ - FLAC__Frame last_frame; /* holds the info of the last frame we seeked to */ - FLAC__uint64 first_frame_offset; /* hint to the seek routine of where in the stream the first audio frame starts */ - FLAC__uint64 target_sample; - unsigned unparseable_frame_count; /* used to tell whether we're decoding a future version of FLAC or just got a bad sync */ -#if FLAC__HAS_OGG - FLAC__bool got_a_frame; /* hack needed in Ogg FLAC seek routine to check when process_single() actually writes a frame */ -#endif -} FLAC__StreamDecoderPrivate; - -/*********************************************************************** - * - * Public static class data - * - ***********************************************************************/ - -FLAC_API const char * const FLAC__StreamDecoderStateString[] = { - "FLAC__STREAM_DECODER_SEARCH_FOR_METADATA", - "FLAC__STREAM_DECODER_READ_METADATA", - "FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC", - "FLAC__STREAM_DECODER_READ_FRAME", - "FLAC__STREAM_DECODER_END_OF_STREAM", - "FLAC__STREAM_DECODER_OGG_ERROR", - "FLAC__STREAM_DECODER_SEEK_ERROR", - "FLAC__STREAM_DECODER_ABORTED", - "FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR", - "FLAC__STREAM_DECODER_UNINITIALIZED" -}; - -FLAC_API const char * const FLAC__StreamDecoderInitStatusString[] = { - "FLAC__STREAM_DECODER_INIT_STATUS_OK", - "FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER", - "FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS", - "FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR", - "FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE", - "FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED" -}; - -FLAC_API const char * const FLAC__StreamDecoderReadStatusString[] = { - "FLAC__STREAM_DECODER_READ_STATUS_CONTINUE", - "FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM", - "FLAC__STREAM_DECODER_READ_STATUS_ABORT" -}; - -FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[] = { - "FLAC__STREAM_DECODER_SEEK_STATUS_OK", - "FLAC__STREAM_DECODER_SEEK_STATUS_ERROR", - "FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED" -}; - -FLAC_API const char * const FLAC__StreamDecoderTellStatusString[] = { - "FLAC__STREAM_DECODER_TELL_STATUS_OK", - "FLAC__STREAM_DECODER_TELL_STATUS_ERROR", - "FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED" -}; - -FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[] = { - "FLAC__STREAM_DECODER_LENGTH_STATUS_OK", - "FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR", - "FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED" -}; - -FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[] = { - "FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE", - "FLAC__STREAM_DECODER_WRITE_STATUS_ABORT" -}; - -FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[] = { - "FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC", - "FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER", - "FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH", - "FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM" -}; - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ -FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void) -{ - FLAC__StreamDecoder *decoder; - unsigned i; - - FLAC__ASSERT(sizeof(int) >= 4); /* we want to die right away if this is not true */ - - decoder = (FLAC__StreamDecoder*)calloc(1, sizeof(FLAC__StreamDecoder)); - if(decoder == 0) { - return 0; - } - - decoder->protected_ = (FLAC__StreamDecoderProtected*)calloc(1, sizeof(FLAC__StreamDecoderProtected)); - if(decoder->protected_ == 0) { - free(decoder); - return 0; - } - - decoder->private_ = (FLAC__StreamDecoderPrivate*)calloc(1, sizeof(FLAC__StreamDecoderPrivate)); - if(decoder->private_ == 0) { - free(decoder->protected_); - free(decoder); - return 0; - } - - decoder->private_->input = FLAC__bitreader_new(); - if(decoder->private_->input == 0) { - free(decoder->private_); - free(decoder->protected_); - free(decoder); - return 0; - } - - decoder->private_->metadata_filter_ids_capacity = 16; - if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*)malloc((FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8) * decoder->private_->metadata_filter_ids_capacity))) { - FLAC__bitreader_delete(decoder->private_->input); - free(decoder->private_); - free(decoder->protected_); - free(decoder); - return 0; - } - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - decoder->private_->output[i] = 0; - decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0; - } - - decoder->private_->output_capacity = 0; - decoder->private_->output_channels = 0; - decoder->private_->has_seek_table = false; - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&decoder->private_->partitioned_rice_contents[i]); - - decoder->private_->file = 0; - - set_defaults_dec(decoder); - - decoder->protected_->state = FLAC__STREAM_DECODER_UNINITIALIZED; - - return decoder; -} - -FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder) -{ - unsigned i; - - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->private_->input); - - (void)FLAC__stream_decoder_finish(decoder); - - if(0 != decoder->private_->metadata_filter_ids) - free(decoder->private_->metadata_filter_ids); - - FLAC__bitreader_delete(decoder->private_->input); - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) - FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&decoder->private_->partitioned_rice_contents[i]); - - free(decoder->private_); - free(decoder->protected_); - free(decoder); -} - -/*********************************************************************** - * - * Public class methods - * - ***********************************************************************/ - -static FLAC__StreamDecoderInitStatus init_stream_internal_dec( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data, - FLAC__bool is_ogg -) -{ - FLAC__ASSERT(0 != decoder); - - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED; - -#if !FLAC__HAS_OGG - if(is_ogg) - return FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER; -#endif - - if( - 0 == read_callback || - 0 == write_callback || - 0 == error_callback || - (seek_callback && (0 == tell_callback || 0 == length_callback || 0 == eof_callback)) - ) - return FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS; - -#if FLAC__HAS_OGG - decoder->private_->is_ogg = is_ogg; - if(is_ogg && !FLAC__ogg_decoder_aspect_init(&decoder->protected_->ogg_decoder_aspect)) - return decoder->protected_->state = FLAC__STREAM_DECODER_OGG_ERROR; -#endif - - /* - * get the CPU info and set the function pointers - */ - FLAC__cpu_info(&decoder->private_->cpuinfo); - /* first default to the non-asm routines */ - decoder->private_->local_lpc_restore_signal = FLAC__lpc_restore_signal; - decoder->private_->local_lpc_restore_signal_64bit = FLAC__lpc_restore_signal_wide; - decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal; - decoder->private_->local_lpc_restore_signal_16bit_order8 = FLAC__lpc_restore_signal; - decoder->private_->local_bitreader_read_rice_signed_block = FLAC__bitreader_read_rice_signed_block; - /* now override with asm where appropriate */ -#ifndef FLAC__NO_ASM - if(decoder->private_->cpuinfo.use_asm) { -#ifdef FLAC__CPU_IA32 - FLAC__ASSERT(decoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_IA32); -#ifdef FLAC__HAS_NASM -#if 1 /*@@@@@@ OPT: not clearly faster, needs more testing */ - if(decoder->private_->cpuinfo.data.ia32.bswap) - decoder->private_->local_bitreader_read_rice_signed_block = FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap; -#endif - if(decoder->private_->cpuinfo.data.ia32.mmx) { - decoder->private_->local_lpc_restore_signal = FLAC__lpc_restore_signal_asm_ia32; - decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal_asm_ia32_mmx; - decoder->private_->local_lpc_restore_signal_16bit_order8 = FLAC__lpc_restore_signal_asm_ia32_mmx; - } - else { - decoder->private_->local_lpc_restore_signal = FLAC__lpc_restore_signal_asm_ia32; - decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal_asm_ia32; - decoder->private_->local_lpc_restore_signal_16bit_order8 = FLAC__lpc_restore_signal_asm_ia32; - } -#endif -#elif defined FLAC__CPU_PPC - FLAC__ASSERT(decoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_PPC); - if(decoder->private_->cpuinfo.data.ppc.altivec) { - decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal_asm_ppc_altivec_16; - decoder->private_->local_lpc_restore_signal_16bit_order8 = FLAC__lpc_restore_signal_asm_ppc_altivec_16_order8; - } -#endif - } -#endif - - /* from here on, errors are fatal */ - - if(!FLAC__bitreader_init(decoder->private_->input, decoder->private_->cpuinfo, read_callback_, decoder)) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR; - } - - decoder->private_->read_callback = read_callback; - decoder->private_->seek_callback = seek_callback; - decoder->private_->tell_callback = tell_callback; - decoder->private_->length_callback = length_callback; - decoder->private_->eof_callback = eof_callback; - decoder->private_->write_callback = write_callback; - decoder->private_->metadata_callback = metadata_callback; - decoder->private_->error_callback = error_callback; - decoder->private_->client_data = client_data; - decoder->private_->fixed_block_size = decoder->private_->next_fixed_block_size = 0; - decoder->private_->samples_decoded = 0; - decoder->private_->has_stream_info = false; - decoder->private_->cached = false; - - decoder->private_->do_md5_checking = decoder->protected_->md5_checking; - decoder->private_->is_seeking = false; - - decoder->private_->internal_reset_hack = true; /* so the following reset does not try to rewind the input */ - if(!FLAC__stream_decoder_reset(decoder)) { - /* above call sets the state for us */ - return FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR; - } - - return FLAC__STREAM_DECODER_INIT_STATUS_OK; -} - -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -) -{ - return init_stream_internal_dec( - decoder, - read_callback, - seek_callback, - tell_callback, - length_callback, - eof_callback, - write_callback, - metadata_callback, - error_callback, - client_data, - /*is_ogg=*/false - ); -} - -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -) -{ - return init_stream_internal_dec( - decoder, - read_callback, - seek_callback, - tell_callback, - length_callback, - eof_callback, - write_callback, - metadata_callback, - error_callback, - client_data, - /*is_ogg=*/true - ); -} - -static FLAC__StreamDecoderInitStatus init_FILE_internal_( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data, - FLAC__bool is_ogg -) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != file); - - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return (FLAC__StreamDecoderInitStatus) (decoder->protected_->state = (FLAC__StreamDecoderState) FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED); - - if(0 == write_callback || 0 == error_callback) - return (FLAC__StreamDecoderInitStatus) (decoder->protected_->state = (FLAC__StreamDecoderState) FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS); - - /* - * To make sure that our file does not go unclosed after an error, we - * must assign the FILE pointer before any further error can occur in - * this routine. - */ - if(file == stdin) - file = get_binary_stdin_(); /* just to be safe */ - - decoder->private_->file = file; - - return init_stream_internal_dec( - decoder, - file_read_callback_dec, - decoder->private_->file == stdin? 0: file_seek_callback_dec, - decoder->private_->file == stdin? 0: file_tell_callback_dec, - decoder->private_->file == stdin? 0: file_length_callback_, - file_eof_callback_, - write_callback, - metadata_callback, - error_callback, - client_data, - is_ogg - ); -} - -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -) -{ - return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/false); -} - -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -) -{ - return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/true); -} - -static FLAC__StreamDecoderInitStatus init_file_internal_( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data, - FLAC__bool is_ogg -) -{ - FILE *file; - - FLAC__ASSERT(0 != decoder); - - /* - * To make sure that our file does not go unclosed after an error, we - * have to do the same entrance checks here that are later performed - * in FLAC__stream_decoder_init_FILE() before the FILE* is assigned. - */ - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return (FLAC__StreamDecoderInitStatus) (decoder->protected_->state = (FLAC__StreamDecoderState) FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED); - - if(0 == write_callback || 0 == error_callback) - return (FLAC__StreamDecoderInitStatus) (decoder->protected_->state = (FLAC__StreamDecoderState) FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS); - - file = filename? fopen(filename, "rb") : stdin; - - if(0 == file) - return FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE; - - return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, is_ogg); -} - -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -) -{ - return init_file_internal_(decoder, filename, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/false); -} - -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -) -{ - return init_file_internal_(decoder, filename, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/true); -} - -FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder) -{ - FLAC__bool md5_failed = false; - unsigned i; - - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - - if(decoder->protected_->state == FLAC__STREAM_DECODER_UNINITIALIZED) - return true; - - /* see the comment in FLAC__seekable_stream_decoder_reset() as to why we - * always call FLAC__MD5Final() - */ - FLAC__MD5Final(decoder->private_->computed_md5sum, &decoder->private_->md5context); - - if(decoder->private_->has_seek_table && 0 != decoder->private_->seek_table.data.seek_table.points) { - free(decoder->private_->seek_table.data.seek_table.points); - decoder->private_->seek_table.data.seek_table.points = 0; - decoder->private_->has_seek_table = false; - } - FLAC__bitreader_free(decoder->private_->input); - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - /* WATCHOUT: - * FLAC__lpc_restore_signal_asm_ia32_mmx() requires that the - * output arrays have a buffer of up to 3 zeroes in front - * (at negative indices) for alignment purposes; we use 4 - * to keep the data well-aligned. - */ - if(0 != decoder->private_->output[i]) { - free(decoder->private_->output[i]-4); - decoder->private_->output[i] = 0; - } - if(0 != decoder->private_->residual_unaligned[i]) { - free(decoder->private_->residual_unaligned[i]); - decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0; - } - } - decoder->private_->output_capacity = 0; - decoder->private_->output_channels = 0; - -#if FLAC__HAS_OGG - if(decoder->private_->is_ogg) - FLAC__ogg_decoder_aspect_finish(&decoder->protected_->ogg_decoder_aspect); -#endif - - if(0 != decoder->private_->file) { - if(decoder->private_->file != stdin) - fclose(decoder->private_->file); - decoder->private_->file = 0; - } - - if(decoder->private_->do_md5_checking) { - if(memcmp(decoder->private_->stream_info.data.stream_info.md5sum, decoder->private_->computed_md5sum, 16)) - md5_failed = true; - } - decoder->private_->is_seeking = false; - - set_defaults_dec(decoder); - - decoder->protected_->state = FLAC__STREAM_DECODER_UNINITIALIZED; - - return !md5_failed; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long value) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; -#if FLAC__HAS_OGG - /* can't check decoder->private_->is_ogg since that's not set until init time */ - FLAC__ogg_decoder_aspect_set_serial_number(&decoder->protected_->ogg_decoder_aspect, value); - return true; -#else - (void)value; - return false; -#endif -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - decoder->protected_->md5_checking = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - FLAC__ASSERT((unsigned)type <= FLAC__MAX_METADATA_TYPE_CODE); - /* double protection */ - if((unsigned)type > FLAC__MAX_METADATA_TYPE_CODE) - return false; - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - decoder->private_->metadata_filter[type] = true; - if(type == FLAC__METADATA_TYPE_APPLICATION) - decoder->private_->metadata_filter_ids_count = 0; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - FLAC__ASSERT(0 != id); - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - - if(decoder->private_->metadata_filter[FLAC__METADATA_TYPE_APPLICATION]) - return true; - - FLAC__ASSERT(0 != decoder->private_->metadata_filter_ids); - - if(decoder->private_->metadata_filter_ids_count == decoder->private_->metadata_filter_ids_capacity) { - if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*)safe_realloc_mul_2op_(decoder->private_->metadata_filter_ids, decoder->private_->metadata_filter_ids_capacity, /*times*/2))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - decoder->private_->metadata_filter_ids_capacity *= 2; - } - - memcpy(decoder->private_->metadata_filter_ids + decoder->private_->metadata_filter_ids_count * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8)); - decoder->private_->metadata_filter_ids_count++; - - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder) -{ - unsigned i; - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - for(i = 0; i < sizeof(decoder->private_->metadata_filter) / sizeof(decoder->private_->metadata_filter[0]); i++) - decoder->private_->metadata_filter[i] = true; - decoder->private_->metadata_filter_ids_count = 0; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - FLAC__ASSERT((unsigned)type <= FLAC__MAX_METADATA_TYPE_CODE); - /* double protection */ - if((unsigned)type > FLAC__MAX_METADATA_TYPE_CODE) - return false; - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - decoder->private_->metadata_filter[type] = false; - if(type == FLAC__METADATA_TYPE_APPLICATION) - decoder->private_->metadata_filter_ids_count = 0; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - FLAC__ASSERT(0 != id); - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - - if(!decoder->private_->metadata_filter[FLAC__METADATA_TYPE_APPLICATION]) - return true; - - FLAC__ASSERT(0 != decoder->private_->metadata_filter_ids); - - if(decoder->private_->metadata_filter_ids_count == decoder->private_->metadata_filter_ids_capacity) { - if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*)safe_realloc_mul_2op_(decoder->private_->metadata_filter_ids, decoder->private_->metadata_filter_ids_capacity, /*times*/2))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - decoder->private_->metadata_filter_ids_capacity *= 2; - } - - memcpy(decoder->private_->metadata_filter_ids + decoder->private_->metadata_filter_ids_count * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8)); - decoder->private_->metadata_filter_ids_count++; - - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED) - return false; - memset(decoder->private_->metadata_filter, 0, sizeof(decoder->private_->metadata_filter)); - decoder->private_->metadata_filter_ids_count = 0; - return true; -} - -FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->state; -} - -FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder) -{ - return FLAC__StreamDecoderStateString[decoder->protected_->state]; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->md5_checking; -} - -FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->private_->has_stream_info? decoder->private_->stream_info.data.stream_info.total_samples : 0; -} - -FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->channels; -} - -FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->channel_assignment; -} - -FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->bits_per_sample; -} - -FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->sample_rate; -} - -FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - return decoder->protected_->blocksize; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != position); - -#if FLAC__HAS_OGG - if(decoder->private_->is_ogg) - return false; -#endif - if(0 == decoder->private_->tell_callback) - return false; - if(decoder->private_->tell_callback(decoder, position, decoder->private_->client_data) != FLAC__STREAM_DECODER_TELL_STATUS_OK) - return false; - /* should never happen since all FLAC frames and metadata blocks are byte aligned, but check just in case */ - if(!FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)) - return false; - FLAC__ASSERT(*position >= FLAC__stream_decoder_get_input_bytes_unconsumed(decoder)); - *position -= FLAC__stream_decoder_get_input_bytes_unconsumed(decoder); - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - - decoder->private_->samples_decoded = 0; - decoder->private_->do_md5_checking = false; - -#if FLAC__HAS_OGG - if(decoder->private_->is_ogg) - FLAC__ogg_decoder_aspect_flush(&decoder->protected_->ogg_decoder_aspect); -#endif - - if(!FLAC__bitreader_clear(decoder->private_->input)) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - FLAC__ASSERT(0 != decoder->protected_); - - if(!FLAC__stream_decoder_flush(decoder)) { - /* above call sets the state for us */ - return false; - } - -#if FLAC__HAS_OGG - /*@@@ could go in !internal_reset_hack block below */ - if(decoder->private_->is_ogg) - FLAC__ogg_decoder_aspect_reset(&decoder->protected_->ogg_decoder_aspect); -#endif - - /* Rewind if necessary. If FLAC__stream_decoder_init() is calling us, - * (internal_reset_hack) don't try to rewind since we are already at - * the beginning of the stream and don't want to fail if the input is - * not seekable. - */ - if(!decoder->private_->internal_reset_hack) { - if(decoder->private_->file == stdin) - return false; /* can't rewind stdin, reset fails */ - if(decoder->private_->seek_callback && decoder->private_->seek_callback(decoder, 0, decoder->private_->client_data) == FLAC__STREAM_DECODER_SEEK_STATUS_ERROR) - return false; /* seekable and seek fails, reset fails */ - } - else - decoder->private_->internal_reset_hack = false; - - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_METADATA; - - decoder->private_->has_stream_info = false; - if(decoder->private_->has_seek_table && 0 != decoder->private_->seek_table.data.seek_table.points) { - free(decoder->private_->seek_table.data.seek_table.points); - decoder->private_->seek_table.data.seek_table.points = 0; - decoder->private_->has_seek_table = false; - } - decoder->private_->do_md5_checking = decoder->protected_->md5_checking; - /* - * This goes in reset() and not flush() because according to the spec, a - * fixed-blocksize stream must stay that way through the whole stream. - */ - decoder->private_->fixed_block_size = decoder->private_->next_fixed_block_size = 0; - - /* We initialize the FLAC__MD5Context even though we may never use it. This - * is because md5 checking may be turned on to start and then turned off if - * a seek occurs. So we init the context here and finalize it in - * FLAC__stream_decoder_finish() to make sure things are always cleaned up - * properly. - */ - FLAC__MD5Init(&decoder->private_->md5context); - - decoder->private_->first_frame_offset = 0; - decoder->private_->unparseable_frame_count = 0; - - return true; -} - -FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder) -{ - FLAC__bool got_a_frame; - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - - while(1) { - switch(decoder->protected_->state) { - case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA: - if(!find_metadata_(decoder)) - return false; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_READ_METADATA: - if(!read_metadata_(decoder)) - return false; /* above function sets the status for us */ - else - return true; - case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC: - if(!frame_sync_(decoder)) - return true; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_READ_FRAME: - if(!read_frame_(decoder, &got_a_frame, /*do_full_decode=*/true)) - return false; /* above function sets the status for us */ - if(got_a_frame) - return true; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_END_OF_STREAM: - case FLAC__STREAM_DECODER_ABORTED: - return true; - default: - FLAC__ASSERT(0); - return false; - } - } -} - -FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - - while(1) { - switch(decoder->protected_->state) { - case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA: - if(!find_metadata_(decoder)) - return false; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_READ_METADATA: - if(!read_metadata_(decoder)) - return false; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC: - case FLAC__STREAM_DECODER_READ_FRAME: - case FLAC__STREAM_DECODER_END_OF_STREAM: - case FLAC__STREAM_DECODER_ABORTED: - return true; - default: - FLAC__ASSERT(0); - return false; - } - } -} - -FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder) -{ - FLAC__bool dummy; - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - - while(1) { - switch(decoder->protected_->state) { - case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA: - if(!find_metadata_(decoder)) - return false; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_READ_METADATA: - if(!read_metadata_(decoder)) - return false; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC: - if(!frame_sync_(decoder)) - return true; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_READ_FRAME: - if(!read_frame_(decoder, &dummy, /*do_full_decode=*/true)) - return false; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_END_OF_STREAM: - case FLAC__STREAM_DECODER_ABORTED: - return true; - default: - FLAC__ASSERT(0); - return false; - } - } -} - -FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder) -{ - FLAC__bool got_a_frame; - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->protected_); - - while(1) { - switch(decoder->protected_->state) { - case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA: - case FLAC__STREAM_DECODER_READ_METADATA: - return false; /* above function sets the status for us */ - case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC: - if(!frame_sync_(decoder)) - return true; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_READ_FRAME: - if(!read_frame_(decoder, &got_a_frame, /*do_full_decode=*/false)) - return false; /* above function sets the status for us */ - if(got_a_frame) - return true; /* above function sets the status for us */ - break; - case FLAC__STREAM_DECODER_END_OF_STREAM: - case FLAC__STREAM_DECODER_ABORTED: - return true; - default: - FLAC__ASSERT(0); - return false; - } - } -} - -FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample) -{ - FLAC__uint64 length; - - FLAC__ASSERT(0 != decoder); - - if( - decoder->protected_->state != FLAC__STREAM_DECODER_SEARCH_FOR_METADATA && - decoder->protected_->state != FLAC__STREAM_DECODER_READ_METADATA && - decoder->protected_->state != FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC && - decoder->protected_->state != FLAC__STREAM_DECODER_READ_FRAME && - decoder->protected_->state != FLAC__STREAM_DECODER_END_OF_STREAM - ) - return false; - - if(0 == decoder->private_->seek_callback) - return false; - - FLAC__ASSERT(decoder->private_->seek_callback); - FLAC__ASSERT(decoder->private_->tell_callback); - FLAC__ASSERT(decoder->private_->length_callback); - FLAC__ASSERT(decoder->private_->eof_callback); - - if(FLAC__stream_decoder_get_total_samples(decoder) > 0 && sample >= FLAC__stream_decoder_get_total_samples(decoder)) - return false; - - decoder->private_->is_seeking = true; - - /* turn off md5 checking if a seek is attempted */ - decoder->private_->do_md5_checking = false; - - /* get the file length (currently our algorithm needs to know the length so it's also an error to get FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED) */ - if(decoder->private_->length_callback(decoder, &length, decoder->private_->client_data) != FLAC__STREAM_DECODER_LENGTH_STATUS_OK) { - decoder->private_->is_seeking = false; - return false; - } - - /* if we haven't finished processing the metadata yet, do that so we have the STREAMINFO, SEEK_TABLE, and first_frame_offset */ - if( - decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_METADATA || - decoder->protected_->state == FLAC__STREAM_DECODER_READ_METADATA - ) { - if(!FLAC__stream_decoder_process_until_end_of_metadata(decoder)) { - /* above call sets the state for us */ - decoder->private_->is_seeking = false; - return false; - } - /* check this again in case we didn't know total_samples the first time */ - if(FLAC__stream_decoder_get_total_samples(decoder) > 0 && sample >= FLAC__stream_decoder_get_total_samples(decoder)) { - decoder->private_->is_seeking = false; - return false; - } - } - - { - const FLAC__bool ok = -#if FLAC__HAS_OGG - decoder->private_->is_ogg? - seek_to_absolute_sample_ogg_(decoder, length, sample) : -#endif - seek_to_absolute_sample_(decoder, length, sample) - ; - decoder->private_->is_seeking = false; - return ok; - } -} - -/*********************************************************************** - * - * Protected class methods - * - ***********************************************************************/ - -unsigned FLAC__stream_decoder_get_input_bytes_unconsumed(const FLAC__StreamDecoder *decoder) -{ - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - FLAC__ASSERT(!(FLAC__bitreader_get_input_bits_unconsumed(decoder->private_->input) & 7)); - return FLAC__bitreader_get_input_bits_unconsumed(decoder->private_->input) / 8; -} - -/*********************************************************************** - * - * Private class methods - * - ***********************************************************************/ - -void set_defaults_dec(FLAC__StreamDecoder *decoder) -{ -#if FLAC__HAS_OGG - decoder->private_->is_ogg = false; -#endif - decoder->private_->read_callback = 0; - decoder->private_->seek_callback = 0; - decoder->private_->tell_callback = 0; - decoder->private_->length_callback = 0; - decoder->private_->eof_callback = 0; - decoder->private_->write_callback = 0; - decoder->private_->metadata_callback = 0; - decoder->private_->error_callback = 0; - decoder->private_->client_data = 0; - - memset(decoder->private_->metadata_filter, 0, sizeof(decoder->private_->metadata_filter)); - decoder->private_->metadata_filter[FLAC__METADATA_TYPE_STREAMINFO] = true; - decoder->private_->metadata_filter_ids_count = 0; - - decoder->protected_->md5_checking = false; - -#if FLAC__HAS_OGG - FLAC__ogg_decoder_aspect_set_defaults(&decoder->protected_->ogg_decoder_aspect); -#endif -} - -/* - * This will forcibly set stdin to binary mode (for OSes that require it) - */ -FILE *get_binary_stdin_(void) -{ - /* if something breaks here it is probably due to the presence or - * absence of an underscore before the identifiers 'setmode', - * 'fileno', and/or 'O_BINARY'; check your system header files. - */ -#if defined _MSC_VER || defined __MINGW32__ - _setmode(_fileno(stdin), _O_BINARY); -#elif defined __CYGWIN__ - /* almost certainly not needed for any modern Cygwin, but let's be safe... */ - setmode(_fileno(stdin), _O_BINARY); -#elif defined __EMX__ - setmode(fileno(stdin), O_BINARY); -#endif - - return stdin; -} - -FLAC__bool allocate_output_(FLAC__StreamDecoder *decoder, unsigned size, unsigned channels) -{ - unsigned i; - FLAC__int32 *tmp; - - if(size <= decoder->private_->output_capacity && channels <= decoder->private_->output_channels) - return true; - - /* simply using realloc() is not practical because the number of channels may change mid-stream */ - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - if(0 != decoder->private_->output[i]) { - free(decoder->private_->output[i]-4); - decoder->private_->output[i] = 0; - } - if(0 != decoder->private_->residual_unaligned[i]) { - free(decoder->private_->residual_unaligned[i]); - decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0; - } - } - - for(i = 0; i < channels; i++) { - /* WATCHOUT: - * FLAC__lpc_restore_signal_asm_ia32_mmx() requires that the - * output arrays have a buffer of up to 3 zeroes in front - * (at negative indices) for alignment purposes; we use 4 - * to keep the data well-aligned. - */ - tmp = (FLAC__int32*)safe_malloc_muladd2_(sizeof(FLAC__int32), /*times (*/size, /*+*/4/*)*/); - if(tmp == 0) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - memset(tmp, 0, sizeof(FLAC__int32)*4); - decoder->private_->output[i] = tmp + 4; - - /* WATCHOUT: - * minimum of quadword alignment for PPC vector optimizations is REQUIRED: - */ - if(!FLAC__memory_alloc_aligned_int32_array(size, &decoder->private_->residual_unaligned[i], &decoder->private_->residual[i])) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - } - - decoder->private_->output_capacity = size; - decoder->private_->output_channels = channels; - - return true; -} - -FLAC__bool has_id_filtered_(FLAC__StreamDecoder *decoder, FLAC__byte *id) -{ - size_t i; - - FLAC__ASSERT(0 != decoder); - FLAC__ASSERT(0 != decoder->private_); - - for(i = 0; i < decoder->private_->metadata_filter_ids_count; i++) - if(0 == memcmp(decoder->private_->metadata_filter_ids + i * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8))) - return true; - - return false; -} - -FLAC__bool find_metadata_(FLAC__StreamDecoder *decoder) -{ - FLAC__uint32 x; - unsigned i, id_; - FLAC__bool first = true; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - for(i = id_ = 0; i < 4; ) { - if(decoder->private_->cached) { - x = (FLAC__uint32)decoder->private_->lookahead; - decoder->private_->cached = false; - } - else { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - } - if(x == FLAC__STREAM_SYNC_STRING[i]) { - first = true; - i++; - id_ = 0; - continue; - } - if(x == ID3V2_TAG_[id_]) { - id_++; - i = 0; - if(id_ == 3) { - if(!skip_id3v2_tag_(decoder)) - return false; /* skip_id3v2_tag_ sets the state for us */ - } - continue; - } - id_ = 0; - if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */ - decoder->private_->header_warmup[0] = (FLAC__byte)x; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - - /* we have to check if we just read two 0xff's in a row; the second may actually be the beginning of the sync code */ - /* else we have to check if the second byte is the end of a sync code */ - if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */ - decoder->private_->lookahead = (FLAC__byte)x; - decoder->private_->cached = true; - } - else if(x >> 2 == 0x3e) { /* MAGIC NUMBER for the last 6 sync bits */ - decoder->private_->header_warmup[1] = (FLAC__byte)x; - decoder->protected_->state = FLAC__STREAM_DECODER_READ_FRAME; - return true; - } - } - i = 0; - if(first) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - first = false; - } - } - - decoder->protected_->state = FLAC__STREAM_DECODER_READ_METADATA; - return true; -} - -FLAC__bool read_metadata_(FLAC__StreamDecoder *decoder) -{ - FLAC__bool is_last; - FLAC__uint32 i, x, type, length; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_IS_LAST_LEN)) - return false; /* read_callback_ sets the state for us */ - is_last = x? true : false; - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &type, FLAC__STREAM_METADATA_TYPE_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &length, FLAC__STREAM_METADATA_LENGTH_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(type == FLAC__METADATA_TYPE_STREAMINFO) { - if(!read_metadata_streaminfo_(decoder, is_last, length)) - return false; - - decoder->private_->has_stream_info = true; - if(0 == memcmp(decoder->private_->stream_info.data.stream_info.md5sum, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16)) - decoder->private_->do_md5_checking = false; - if(!decoder->private_->is_seeking && decoder->private_->metadata_filter[FLAC__METADATA_TYPE_STREAMINFO] && decoder->private_->metadata_callback) - decoder->private_->metadata_callback(decoder, &decoder->private_->stream_info, decoder->private_->client_data); - } - else if(type == FLAC__METADATA_TYPE_SEEKTABLE) { - if(!read_metadata_seektable_(decoder, is_last, length)) - return false; - - decoder->private_->has_seek_table = true; - if(!decoder->private_->is_seeking && decoder->private_->metadata_filter[FLAC__METADATA_TYPE_SEEKTABLE] && decoder->private_->metadata_callback) - decoder->private_->metadata_callback(decoder, &decoder->private_->seek_table, decoder->private_->client_data); - } - else { - FLAC__bool skip_it = !decoder->private_->metadata_filter[type]; - unsigned real_length = length; - FLAC__StreamMetadata block; - - block.is_last = is_last; - block.type = (FLAC__MetadataType)type; - block.length = length; - - if(type == FLAC__METADATA_TYPE_APPLICATION) { - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, block.data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8)) - return false; /* read_callback_ sets the state for us */ - - if(real_length < FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8) { /* underflow check */ - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;/*@@@@@@ maybe wrong error? need to resync?*/ - return false; - } - - real_length -= FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8; - - if(decoder->private_->metadata_filter_ids_count > 0 && has_id_filtered_(decoder, block.data.application.id)) - skip_it = !skip_it; - } - - if(skip_it) { - if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, real_length)) - return false; /* read_callback_ sets the state for us */ - } - else { - switch(type) { - case FLAC__METADATA_TYPE_PADDING: - /* skip the padding bytes */ - if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, real_length)) - return false; /* read_callback_ sets the state for us */ - break; - case FLAC__METADATA_TYPE_APPLICATION: - /* remember, we read the ID already */ - if(real_length > 0) { - if(0 == (block.data.application.data = (FLAC__byte*)malloc(real_length))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, block.data.application.data, real_length)) - return false; /* read_callback_ sets the state for us */ - } - else - block.data.application.data = 0; - break; - case FLAC__METADATA_TYPE_VORBIS_COMMENT: - if(!read_metadata_vorbiscomment_(decoder, &block.data.vorbis_comment)) - return false; - break; - case FLAC__METADATA_TYPE_CUESHEET: - if(!read_metadata_cuesheet_(decoder, &block.data.cue_sheet)) - return false; - break; - case FLAC__METADATA_TYPE_PICTURE: - if(!read_metadata_picture_(decoder, &block.data.picture)) - return false; - break; - case FLAC__METADATA_TYPE_STREAMINFO: - case FLAC__METADATA_TYPE_SEEKTABLE: - FLAC__ASSERT(0); - break; - default: - if(real_length > 0) { - if(0 == (block.data.unknown.data = (FLAC__byte*)malloc(real_length))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, block.data.unknown.data, real_length)) - return false; /* read_callback_ sets the state for us */ - } - else - block.data.unknown.data = 0; - break; - } - if(!decoder->private_->is_seeking && decoder->private_->metadata_callback) - decoder->private_->metadata_callback(decoder, &block, decoder->private_->client_data); - - /* now we have to free any malloc()ed data in the block */ - switch(type) { - case FLAC__METADATA_TYPE_PADDING: - break; - case FLAC__METADATA_TYPE_APPLICATION: - if(0 != block.data.application.data) - free(block.data.application.data); - break; - case FLAC__METADATA_TYPE_VORBIS_COMMENT: - if(0 != block.data.vorbis_comment.vendor_string.entry) - free(block.data.vorbis_comment.vendor_string.entry); - if(block.data.vorbis_comment.num_comments > 0) - for(i = 0; i < block.data.vorbis_comment.num_comments; i++) - if(0 != block.data.vorbis_comment.comments[i].entry) - free(block.data.vorbis_comment.comments[i].entry); - if(0 != block.data.vorbis_comment.comments) - free(block.data.vorbis_comment.comments); - break; - case FLAC__METADATA_TYPE_CUESHEET: - if(block.data.cue_sheet.num_tracks > 0) - for(i = 0; i < block.data.cue_sheet.num_tracks; i++) - if(0 != block.data.cue_sheet.tracks[i].indices) - free(block.data.cue_sheet.tracks[i].indices); - if(0 != block.data.cue_sheet.tracks) - free(block.data.cue_sheet.tracks); - break; - case FLAC__METADATA_TYPE_PICTURE: - if(0 != block.data.picture.mime_type) - free(block.data.picture.mime_type); - if(0 != block.data.picture.description) - free(block.data.picture.description); - if(0 != block.data.picture.data) - free(block.data.picture.data); - break; - case FLAC__METADATA_TYPE_STREAMINFO: - case FLAC__METADATA_TYPE_SEEKTABLE: - FLAC__ASSERT(0); - default: - if(0 != block.data.unknown.data) - free(block.data.unknown.data); - break; - } - } - } - - if(is_last) { - /* if this fails, it's OK, it's just a hint for the seek routine */ - if(!FLAC__stream_decoder_get_decode_position(decoder, &decoder->private_->first_frame_offset)) - decoder->private_->first_frame_offset = 0; - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - } - - return true; -} - -FLAC__bool read_metadata_streaminfo_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length) -{ - FLAC__uint32 x; - unsigned bits, used_bits = 0; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - decoder->private_->stream_info.type = FLAC__METADATA_TYPE_STREAMINFO; - decoder->private_->stream_info.is_last = is_last; - decoder->private_->stream_info.length = length; - - bits = FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, bits)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.min_blocksize = x; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.max_blocksize = x; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.min_framesize = x; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.max_framesize = x; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.sample_rate = x; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.channels = x+1; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->stream_info.data.stream_info.bits_per_sample = x+1; - used_bits += bits; - - bits = FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; - if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &decoder->private_->stream_info.data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN)) - return false; /* read_callback_ sets the state for us */ - used_bits += bits; - - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, decoder->private_->stream_info.data.stream_info.md5sum, 16)) - return false; /* read_callback_ sets the state for us */ - used_bits += 16*8; - - /* skip the rest of the block */ - FLAC__ASSERT(used_bits % 8 == 0); - length -= (used_bits / 8); - if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, length)) - return false; /* read_callback_ sets the state for us */ - - return true; -} - -FLAC__bool read_metadata_seektable_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length) -{ - FLAC__uint32 i, x; - FLAC__uint64 xx; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - decoder->private_->seek_table.type = FLAC__METADATA_TYPE_SEEKTABLE; - decoder->private_->seek_table.is_last = is_last; - decoder->private_->seek_table.length = length; - - decoder->private_->seek_table.data.seek_table.num_points = length / FLAC__STREAM_METADATA_SEEKPOINT_LENGTH; - - /* use realloc since we may pass through here several times (e.g. after seeking) */ - if(0 == (decoder->private_->seek_table.data.seek_table.points = (FLAC__StreamMetadata_SeekPoint*)safe_realloc_mul_2op_(decoder->private_->seek_table.data.seek_table.points, decoder->private_->seek_table.data.seek_table.num_points, /*times*/sizeof(FLAC__StreamMetadata_SeekPoint)))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - for(i = 0; i < decoder->private_->seek_table.data.seek_table.num_points; i++) { - if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &xx, FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->seek_table.data.seek_table.points[i].sample_number = xx; - - if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &xx, FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->seek_table.data.seek_table.points[i].stream_offset = xx; - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->seek_table.data.seek_table.points[i].frame_samples = x; - } - length -= (decoder->private_->seek_table.data.seek_table.num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH); - /* if there is a partial point left, skip over it */ - if(length > 0) { - /*@@@ do a send_error_to_client_() here? there's an argument for either way */ - if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, length)) - return false; /* read_callback_ sets the state for us */ - } - - return true; -} - -FLAC__bool read_metadata_vorbiscomment_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_VorbisComment *obj) -{ - FLAC__uint32 i; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - /* read vendor string */ - FLAC__ASSERT(FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN == 32); - if(!FLAC__bitreader_read_uint32_little_endian(decoder->private_->input, &obj->vendor_string.length)) - return false; /* read_callback_ sets the state for us */ - if(obj->vendor_string.length > 0) { - if(0 == (obj->vendor_string.entry = (FLAC__byte*)safe_malloc_add_2op_(obj->vendor_string.length, /*+*/1))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->vendor_string.entry, obj->vendor_string.length)) - return false; /* read_callback_ sets the state for us */ - obj->vendor_string.entry[obj->vendor_string.length] = '\0'; - } - else - obj->vendor_string.entry = 0; - - /* read num comments */ - FLAC__ASSERT(FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN == 32); - if(!FLAC__bitreader_read_uint32_little_endian(decoder->private_->input, &obj->num_comments)) - return false; /* read_callback_ sets the state for us */ - - /* read comments */ - if(obj->num_comments > 0) { - if(0 == (obj->comments = (FLAC__StreamMetadata_VorbisComment_Entry*)safe_malloc_mul_2op_(obj->num_comments, /*times*/sizeof(FLAC__StreamMetadata_VorbisComment_Entry)))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - for(i = 0; i < obj->num_comments; i++) { - FLAC__ASSERT(FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN == 32); - if(!FLAC__bitreader_read_uint32_little_endian(decoder->private_->input, &obj->comments[i].length)) - return false; /* read_callback_ sets the state for us */ - if(obj->comments[i].length > 0) { - if(0 == (obj->comments[i].entry = (FLAC__byte*)safe_malloc_add_2op_(obj->comments[i].length, /*+*/1))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->comments[i].entry, obj->comments[i].length)) - return false; /* read_callback_ sets the state for us */ - obj->comments[i].entry[obj->comments[i].length] = '\0'; - } - else - obj->comments[i].entry = 0; - } - } - else { - obj->comments = 0; - } - - return true; -} - -FLAC__bool read_metadata_cuesheet_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_CueSheet *obj) -{ - FLAC__uint32 i, j, x; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - memset(obj, 0, sizeof(FLAC__StreamMetadata_CueSheet)); - - FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN % 8 == 0); - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, (FLAC__byte*)obj->media_catalog_number, FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN/8)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &obj->lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN)) - return false; /* read_callback_ sets the state for us */ - obj->is_cd = x? true : false; - - if(!FLAC__bitreader_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN)) - return false; /* read_callback_ sets the state for us */ - obj->num_tracks = x; - - if(obj->num_tracks > 0) { - if(0 == (obj->tracks = (FLAC__StreamMetadata_CueSheet_Track*)safe_calloc_(obj->num_tracks, sizeof(FLAC__StreamMetadata_CueSheet_Track)))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - for(i = 0; i < obj->num_tracks; i++) { - FLAC__StreamMetadata_CueSheet_Track *track = &obj->tracks[i]; - if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &track->offset, FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN)) - return false; /* read_callback_ sets the state for us */ - track->number = (FLAC__byte)x; - - FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN % 8 == 0); - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, (FLAC__byte*)track->isrc, FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN/8)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN)) - return false; /* read_callback_ sets the state for us */ - track->type = x; - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN)) - return false; /* read_callback_ sets the state for us */ - track->pre_emphasis = x; - - if(!FLAC__bitreader_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN)) - return false; /* read_callback_ sets the state for us */ - track->num_indices = (FLAC__byte)x; - - if(track->num_indices > 0) { - if(0 == (track->indices = (FLAC__StreamMetadata_CueSheet_Index*)safe_calloc_(track->num_indices, sizeof(FLAC__StreamMetadata_CueSheet_Index)))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - for(j = 0; j < track->num_indices; j++) { - FLAC__StreamMetadata_CueSheet_Index *index = &track->indices[j]; - if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &index->offset, FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN)) - return false; /* read_callback_ sets the state for us */ - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN)) - return false; /* read_callback_ sets the state for us */ - index->number = (FLAC__byte)x; - - if(!FLAC__bitreader_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN)) - return false; /* read_callback_ sets the state for us */ - } - } - } - } - - return true; -} - -FLAC__bool read_metadata_picture_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_Picture *obj) -{ - FLAC__uint32 x; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - /* read type */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_PICTURE_TYPE_LEN)) - return false; /* read_callback_ sets the state for us */ - obj->type = (FLAC__StreamMetadata_Picture_Type) x; - - /* read MIME type */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN)) - return false; /* read_callback_ sets the state for us */ - if(0 == (obj->mime_type = (char*)safe_malloc_add_2op_(x, /*+*/1))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(x > 0) { - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, (FLAC__byte*)obj->mime_type, x)) - return false; /* read_callback_ sets the state for us */ - } - obj->mime_type[x] = '\0'; - - /* read description */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN)) - return false; /* read_callback_ sets the state for us */ - if(0 == (obj->description = (FLAC__byte*)safe_malloc_add_2op_(x, /*+*/1))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(x > 0) { - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->description, x)) - return false; /* read_callback_ sets the state for us */ - } - obj->description[x] = '\0'; - - /* read width */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->width, FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN)) - return false; /* read_callback_ sets the state for us */ - - /* read height */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->height, FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN)) - return false; /* read_callback_ sets the state for us */ - - /* read depth */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->depth, FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN)) - return false; /* read_callback_ sets the state for us */ - - /* read colors */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->colors, FLAC__STREAM_METADATA_PICTURE_COLORS_LEN)) - return false; /* read_callback_ sets the state for us */ - - /* read data */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &(obj->data_length), FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN)) - return false; /* read_callback_ sets the state for us */ - if(0 == (obj->data = (FLAC__byte*)safe_malloc_(obj->data_length))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - if(obj->data_length > 0) { - if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->data, obj->data_length)) - return false; /* read_callback_ sets the state for us */ - } - - return true; -} - -FLAC__bool skip_id3v2_tag_(FLAC__StreamDecoder *decoder) -{ - FLAC__uint32 x; - unsigned i, skip; - - /* skip the version and flags bytes */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 24)) - return false; /* read_callback_ sets the state for us */ - /* get the size (in bytes) to skip */ - skip = 0; - for(i = 0; i < 4; i++) { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - skip <<= 7; - skip |= (x & 0x7f); - } - /* skip the rest of the tag */ - if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, skip)) - return false; /* read_callback_ sets the state for us */ - return true; -} - -FLAC__bool frame_sync_(FLAC__StreamDecoder *decoder) -{ - FLAC__uint32 x; - FLAC__bool first = true; - - /* If we know the total number of samples in the stream, stop if we've read that many. */ - /* This will stop us, for example, from wasting time trying to sync on an ID3V1 tag. */ - if(FLAC__stream_decoder_get_total_samples(decoder) > 0) { - if(decoder->private_->samples_decoded >= FLAC__stream_decoder_get_total_samples(decoder)) { - decoder->protected_->state = FLAC__STREAM_DECODER_END_OF_STREAM; - return true; - } - } - - /* make sure we're byte aligned */ - if(!FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)) { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__bitreader_bits_left_for_byte_alignment(decoder->private_->input))) - return false; /* read_callback_ sets the state for us */ - } - - while(1) { - if(decoder->private_->cached) { - x = (FLAC__uint32)decoder->private_->lookahead; - decoder->private_->cached = false; - } - else { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - } - if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */ - decoder->private_->header_warmup[0] = (FLAC__byte)x; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - - /* we have to check if we just read two 0xff's in a row; the second may actually be the beginning of the sync code */ - /* else we have to check if the second byte is the end of a sync code */ - if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */ - decoder->private_->lookahead = (FLAC__byte)x; - decoder->private_->cached = true; - } - else if(x >> 2 == 0x3e) { /* MAGIC NUMBER for the last 6 sync bits */ - decoder->private_->header_warmup[1] = (FLAC__byte)x; - decoder->protected_->state = FLAC__STREAM_DECODER_READ_FRAME; - return true; - } - } - if(first) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - first = false; - } - } - - return true; -} - -FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FLAC__bool do_full_decode) -{ - unsigned channel; - unsigned i; - FLAC__int32 mid, side; - unsigned frame_crc; /* the one we calculate from the input stream */ - FLAC__uint32 x; - - *got_a_frame = false; - - /* init the CRC */ - frame_crc = 0; - frame_crc = FLAC__CRC16_UPDATE(decoder->private_->header_warmup[0], frame_crc); - frame_crc = FLAC__CRC16_UPDATE(decoder->private_->header_warmup[1], frame_crc); - FLAC__bitreader_reset_read_crc16(decoder->private_->input, (FLAC__uint16)frame_crc); - - if(!read_frame_header_(decoder)) - return false; - if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means we didn't sync on a valid header */ - return true; - if(!allocate_output_(decoder, decoder->private_->frame.header.blocksize, decoder->private_->frame.header.channels)) - return false; - for(channel = 0; channel < decoder->private_->frame.header.channels; channel++) { - /* - * first figure the correct bits-per-sample of the subframe - */ - unsigned bps = decoder->private_->frame.header.bits_per_sample; - switch(decoder->private_->frame.header.channel_assignment) { - case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT: - /* no adjustment needed */ - break; - case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE: - FLAC__ASSERT(decoder->private_->frame.header.channels == 2); - if(channel == 1) - bps++; - break; - case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE: - FLAC__ASSERT(decoder->private_->frame.header.channels == 2); - if(channel == 0) - bps++; - break; - case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE: - FLAC__ASSERT(decoder->private_->frame.header.channels == 2); - if(channel == 1) - bps++; - break; - default: - FLAC__ASSERT(0); - } - /* - * now read it - */ - if(!read_subframe_(decoder, channel, bps, do_full_decode)) - return false; - if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption */ - return true; - } - if(!read_zero_padding_(decoder)) - return false; - if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption (i.e. "zero bits" were not all zeroes) */ - return true; - - /* - * Read the frame CRC-16 from the footer and check - */ - frame_crc = FLAC__bitreader_get_read_crc16(decoder->private_->input); - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__FRAME_FOOTER_CRC_LEN)) - return false; /* read_callback_ sets the state for us */ - if(frame_crc == x) { - if(do_full_decode) { - /* Undo any special channel coding */ - switch(decoder->private_->frame.header.channel_assignment) { - case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT: - /* do nothing */ - break; - case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE: - FLAC__ASSERT(decoder->private_->frame.header.channels == 2); - for(i = 0; i < decoder->private_->frame.header.blocksize; i++) - decoder->private_->output[1][i] = decoder->private_->output[0][i] - decoder->private_->output[1][i]; - break; - case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE: - FLAC__ASSERT(decoder->private_->frame.header.channels == 2); - for(i = 0; i < decoder->private_->frame.header.blocksize; i++) - decoder->private_->output[0][i] += decoder->private_->output[1][i]; - break; - case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE: - FLAC__ASSERT(decoder->private_->frame.header.channels == 2); - for(i = 0; i < decoder->private_->frame.header.blocksize; i++) { -#if 1 - mid = decoder->private_->output[0][i]; - side = decoder->private_->output[1][i]; - mid <<= 1; - mid |= (side & 1); /* i.e. if 'side' is odd... */ - decoder->private_->output[0][i] = (mid + side) >> 1; - decoder->private_->output[1][i] = (mid - side) >> 1; -#else - /* OPT: without 'side' temp variable */ - mid = (decoder->private_->output[0][i] << 1) | (decoder->private_->output[1][i] & 1); /* i.e. if 'side' is odd... */ - decoder->private_->output[0][i] = (mid + decoder->private_->output[1][i]) >> 1; - decoder->private_->output[1][i] = (mid - decoder->private_->output[1][i]) >> 1; -#endif - } - break; - default: - FLAC__ASSERT(0); - break; - } - } - } - else { - /* Bad frame, emit error and zero the output signal */ - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH); - if(do_full_decode) { - for(channel = 0; channel < decoder->private_->frame.header.channels; channel++) { - memset(decoder->private_->output[channel], 0, sizeof(FLAC__int32) * decoder->private_->frame.header.blocksize); - } - } - } - - *got_a_frame = true; - - /* we wait to update fixed_block_size until here, when we're sure we've got a proper frame and hence a correct blocksize */ - if(decoder->private_->next_fixed_block_size) - decoder->private_->fixed_block_size = decoder->private_->next_fixed_block_size; - - /* put the latest values into the public section of the decoder instance */ - decoder->protected_->channels = decoder->private_->frame.header.channels; - decoder->protected_->channel_assignment = decoder->private_->frame.header.channel_assignment; - decoder->protected_->bits_per_sample = decoder->private_->frame.header.bits_per_sample; - decoder->protected_->sample_rate = decoder->private_->frame.header.sample_rate; - decoder->protected_->blocksize = decoder->private_->frame.header.blocksize; - - FLAC__ASSERT(decoder->private_->frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER); - decoder->private_->samples_decoded = decoder->private_->frame.header.number.sample_number + decoder->private_->frame.header.blocksize; - - /* write it */ - if(do_full_decode) { - if(write_audio_frame_to_client_(decoder, &decoder->private_->frame, (const FLAC__int32 * const *)decoder->private_->output) != FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE) - return false; - } - - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; -} - -FLAC__bool read_frame_header_(FLAC__StreamDecoder *decoder) -{ - FLAC__uint32 x; - FLAC__uint64 xx; - unsigned i, blocksize_hint = 0, sample_rate_hint = 0; - FLAC__byte crc8, raw_header[16]; /* MAGIC NUMBER based on the maximum frame header size, including CRC */ - unsigned raw_header_len; - FLAC__bool is_unparseable = false; - - FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)); - - /* init the raw header with the saved bits from synchronization */ - raw_header[0] = decoder->private_->header_warmup[0]; - raw_header[1] = decoder->private_->header_warmup[1]; - raw_header_len = 2; - - /* check to make sure that reserved bit is 0 */ - if(raw_header[1] & 0x02) /* MAGIC NUMBER */ - is_unparseable = true; - - /* - * Note that along the way as we read the header, we look for a sync - * code inside. If we find one it would indicate that our original - * sync was bad since there cannot be a sync code in a valid header. - * - * Three kinds of things can go wrong when reading the frame header: - * 1) We may have sync'ed incorrectly and not landed on a frame header. - * If we don't find a sync code, it can end up looking like we read - * a valid but unparseable header, until getting to the frame header - * CRC. Even then we could get a false positive on the CRC. - * 2) We may have sync'ed correctly but on an unparseable frame (from a - * future encoder). - * 3) We may be on a damaged frame which appears valid but unparseable. - * - * For all these reasons, we try and read a complete frame header as - * long as it seems valid, even if unparseable, up until the frame - * header CRC. - */ - - /* - * read in the raw header as bytes so we can CRC it, and parse it on the way - */ - for(i = 0; i < 2; i++) { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */ - /* if we get here it means our original sync was erroneous since the sync code cannot appear in the header */ - decoder->private_->lookahead = (FLAC__byte)x; - decoder->private_->cached = true; - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - raw_header[raw_header_len++] = (FLAC__byte)x; - } - - switch(x = raw_header[2] >> 4) { - case 0: - is_unparseable = true; - break; - case 1: - decoder->private_->frame.header.blocksize = 192; - break; - case 2: - case 3: - case 4: - case 5: - decoder->private_->frame.header.blocksize = 576 << (x-2); - break; - case 6: - case 7: - blocksize_hint = x; - break; - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - decoder->private_->frame.header.blocksize = 256 << (x-8); - break; - default: - FLAC__ASSERT(0); - break; - } - - switch(x = raw_header[2] & 0x0f) { - case 0: - if(decoder->private_->has_stream_info) - decoder->private_->frame.header.sample_rate = decoder->private_->stream_info.data.stream_info.sample_rate; - else - is_unparseable = true; - break; - case 1: - decoder->private_->frame.header.sample_rate = 88200; - break; - case 2: - decoder->private_->frame.header.sample_rate = 176400; - break; - case 3: - decoder->private_->frame.header.sample_rate = 192000; - break; - case 4: - decoder->private_->frame.header.sample_rate = 8000; - break; - case 5: - decoder->private_->frame.header.sample_rate = 16000; - break; - case 6: - decoder->private_->frame.header.sample_rate = 22050; - break; - case 7: - decoder->private_->frame.header.sample_rate = 24000; - break; - case 8: - decoder->private_->frame.header.sample_rate = 32000; - break; - case 9: - decoder->private_->frame.header.sample_rate = 44100; - break; - case 10: - decoder->private_->frame.header.sample_rate = 48000; - break; - case 11: - decoder->private_->frame.header.sample_rate = 96000; - break; - case 12: - case 13: - case 14: - sample_rate_hint = x; - break; - case 15: - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - default: - FLAC__ASSERT(0); - } - - x = (unsigned)(raw_header[3] >> 4); - if(x & 8) { - decoder->private_->frame.header.channels = 2; - switch(x & 7) { - case 0: - decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE; - break; - case 1: - decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE; - break; - case 2: - decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_MID_SIDE; - break; - default: - is_unparseable = true; - break; - } - } - else { - decoder->private_->frame.header.channels = (unsigned)x + 1; - decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT; - } - - switch(x = (unsigned)(raw_header[3] & 0x0e) >> 1) { - case 0: - if(decoder->private_->has_stream_info) - decoder->private_->frame.header.bits_per_sample = decoder->private_->stream_info.data.stream_info.bits_per_sample; - else - is_unparseable = true; - break; - case 1: - decoder->private_->frame.header.bits_per_sample = 8; - break; - case 2: - decoder->private_->frame.header.bits_per_sample = 12; - break; - case 4: - decoder->private_->frame.header.bits_per_sample = 16; - break; - case 5: - decoder->private_->frame.header.bits_per_sample = 20; - break; - case 6: - decoder->private_->frame.header.bits_per_sample = 24; - break; - case 3: - case 7: - is_unparseable = true; - break; - default: - FLAC__ASSERT(0); - break; - } - - /* check to make sure that reserved bit is 0 */ - if(raw_header[3] & 0x01) /* MAGIC NUMBER */ - is_unparseable = true; - - /* read the frame's starting sample number (or frame number as the case may be) */ - if( - raw_header[1] & 0x01 || - /*@@@ this clause is a concession to the old way of doing variable blocksize; the only known implementation is flake and can probably be removed without inconveniencing anyone */ - (decoder->private_->has_stream_info && decoder->private_->stream_info.data.stream_info.min_blocksize != decoder->private_->stream_info.data.stream_info.max_blocksize) - ) { /* variable blocksize */ - if(!FLAC__bitreader_read_utf8_uint64(decoder->private_->input, &xx, raw_header, &raw_header_len)) - return false; /* read_callback_ sets the state for us */ - if(xx == FLAC__U64L(0xffffffffffffffff)) { /* i.e. non-UTF8 code... */ - decoder->private_->lookahead = raw_header[raw_header_len-1]; /* back up as much as we can */ - decoder->private_->cached = true; - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - decoder->private_->frame.header.number_type = FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER; - decoder->private_->frame.header.number.sample_number = xx; - } - else { /* fixed blocksize */ - if(!FLAC__bitreader_read_utf8_uint32(decoder->private_->input, &x, raw_header, &raw_header_len)) - return false; /* read_callback_ sets the state for us */ - if(x == 0xffffffff) { /* i.e. non-UTF8 code... */ - decoder->private_->lookahead = raw_header[raw_header_len-1]; /* back up as much as we can */ - decoder->private_->cached = true; - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - decoder->private_->frame.header.number_type = FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER; - decoder->private_->frame.header.number.frame_number = x; - } - - if(blocksize_hint) { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - raw_header[raw_header_len++] = (FLAC__byte)x; - if(blocksize_hint == 7) { - FLAC__uint32 _x; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &_x, 8)) - return false; /* read_callback_ sets the state for us */ - raw_header[raw_header_len++] = (FLAC__byte)_x; - x = (x << 8) | _x; - } - decoder->private_->frame.header.blocksize = x+1; - } - - if(sample_rate_hint) { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - raw_header[raw_header_len++] = (FLAC__byte)x; - if(sample_rate_hint != 12) { - FLAC__uint32 _x; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &_x, 8)) - return false; /* read_callback_ sets the state for us */ - raw_header[raw_header_len++] = (FLAC__byte)_x; - x = (x << 8) | _x; - } - if(sample_rate_hint == 12) - decoder->private_->frame.header.sample_rate = x*1000; - else if(sample_rate_hint == 13) - decoder->private_->frame.header.sample_rate = x; - else - decoder->private_->frame.header.sample_rate = x*10; - } - - /* read the CRC-8 byte */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) - return false; /* read_callback_ sets the state for us */ - crc8 = (FLAC__byte)x; - - if(FLAC__crc8(raw_header, raw_header_len) != crc8) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - - /* calculate the sample number from the frame number if needed */ - decoder->private_->next_fixed_block_size = 0; - if(decoder->private_->frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER) { - x = decoder->private_->frame.header.number.frame_number; - decoder->private_->frame.header.number_type = FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER; - if(decoder->private_->fixed_block_size) - decoder->private_->frame.header.number.sample_number = (FLAC__uint64)decoder->private_->fixed_block_size * (FLAC__uint64)x; - else if(decoder->private_->has_stream_info) { - if(decoder->private_->stream_info.data.stream_info.min_blocksize == decoder->private_->stream_info.data.stream_info.max_blocksize) { - decoder->private_->frame.header.number.sample_number = (FLAC__uint64)decoder->private_->stream_info.data.stream_info.min_blocksize * (FLAC__uint64)x; - decoder->private_->next_fixed_block_size = decoder->private_->stream_info.data.stream_info.max_blocksize; - } - else - is_unparseable = true; - } - else if(x == 0) { - decoder->private_->frame.header.number.sample_number = 0; - decoder->private_->next_fixed_block_size = decoder->private_->frame.header.blocksize; - } - else { - /* can only get here if the stream has invalid frame numbering and no STREAMINFO, so assume it's not the last (possibly short) frame */ - decoder->private_->frame.header.number.sample_number = (FLAC__uint64)decoder->private_->frame.header.blocksize * (FLAC__uint64)x; - } - } - - if(is_unparseable) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - - return true; -} - -FLAC__bool read_subframe_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode) -{ - FLAC__uint32 x; - FLAC__bool wasted_bits; - unsigned i; - - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) /* MAGIC NUMBER */ - return false; /* read_callback_ sets the state for us */ - - wasted_bits = (x & 1); - x &= 0xfe; - - if(wasted_bits) { - unsigned u; - if(!FLAC__bitreader_read_unary_unsigned(decoder->private_->input, &u)) - return false; /* read_callback_ sets the state for us */ - decoder->private_->frame.subframes[channel].wasted_bits = u+1; - bps -= decoder->private_->frame.subframes[channel].wasted_bits; - } - else - decoder->private_->frame.subframes[channel].wasted_bits = 0; - - /* - * Lots of magic numbers here - */ - if(x & 0x80) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - else if(x == 0) { - if(!read_subframe_constant_(decoder, channel, bps, do_full_decode)) - return false; - } - else if(x == 2) { - if(!read_subframe_verbatim_(decoder, channel, bps, do_full_decode)) - return false; - } - else if(x < 16) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - else if(x <= 24) { - if(!read_subframe_fixed_(decoder, channel, bps, (x>>1)&7, do_full_decode)) - return false; - if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption */ - return true; - } - else if(x < 64) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - else { - if(!read_subframe_lpc_(decoder, channel, bps, ((x>>1)&31)+1, do_full_decode)) - return false; - if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption */ - return true; - } - - if(wasted_bits && do_full_decode) { - x = decoder->private_->frame.subframes[channel].wasted_bits; - for(i = 0; i < decoder->private_->frame.header.blocksize; i++) - decoder->private_->output[channel][i] <<= x; - } - - return true; -} - -FLAC__bool read_subframe_constant_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode) -{ - FLAC__Subframe_Constant *subframe = &decoder->private_->frame.subframes[channel].data.constant; - FLAC__int32 x; - unsigned i; - FLAC__int32 *output = decoder->private_->output[channel]; - - decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_CONSTANT; - - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &x, bps)) - return false; /* read_callback_ sets the state for us */ - - subframe->value = x; - - /* decode the subframe */ - if(do_full_decode) { - for(i = 0; i < decoder->private_->frame.header.blocksize; i++) - output[i] = x; - } - - return true; -} - -FLAC__bool read_subframe_fixed_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode) -{ - FLAC__Subframe_Fixed *subframe = &decoder->private_->frame.subframes[channel].data.fixed; - FLAC__int32 i32; - FLAC__uint32 u32; - unsigned u; - - decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_FIXED; - - subframe->residual = decoder->private_->residual[channel]; - subframe->order = order; - - /* read warm-up samples */ - for(u = 0; u < order; u++) { - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, bps)) - return false; /* read_callback_ sets the state for us */ - subframe->warmup[u] = i32; - } - - /* read entropy coding method info */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN)) - return false; /* read_callback_ sets the state for us */ - subframe->entropy_coding_method.type = (FLAC__EntropyCodingMethodType)u32; - switch(subframe->entropy_coding_method.type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN)) - return false; /* read_callback_ sets the state for us */ - subframe->entropy_coding_method.data.partitioned_rice.order = u32; - subframe->entropy_coding_method.data.partitioned_rice.contents = &decoder->private_->partitioned_rice_contents[channel]; - break; - default: - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - - /* read residual */ - switch(subframe->entropy_coding_method.type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!read_residual_partitioned_rice_(decoder, order, subframe->entropy_coding_method.data.partitioned_rice.order, &decoder->private_->partitioned_rice_contents[channel], decoder->private_->residual[channel], /*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2)) - return false; - break; - default: - FLAC__ASSERT(0); - } - - /* decode the subframe */ - if(do_full_decode) { - memcpy(decoder->private_->output[channel], subframe->warmup, sizeof(FLAC__int32) * order); - FLAC__fixed_restore_signal(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, order, decoder->private_->output[channel]+order); - } - - return true; -} - -FLAC__bool read_subframe_lpc_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode) -{ - FLAC__Subframe_LPC *subframe = &decoder->private_->frame.subframes[channel].data.lpc; - FLAC__int32 i32; - FLAC__uint32 u32; - unsigned u; - - decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_LPC; - - subframe->residual = decoder->private_->residual[channel]; - subframe->order = order; - - /* read warm-up samples */ - for(u = 0; u < order; u++) { - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, bps)) - return false; /* read_callback_ sets the state for us */ - subframe->warmup[u] = i32; - } - - /* read qlp coeff precision */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN)) - return false; /* read_callback_ sets the state for us */ - if(u32 == (1u << FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN) - 1) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - subframe->qlp_coeff_precision = u32+1; - - /* read qlp shift */ - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN)) - return false; /* read_callback_ sets the state for us */ - subframe->quantization_level = i32; - - /* read quantized lp coefficiencts */ - for(u = 0; u < order; u++) { - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, subframe->qlp_coeff_precision)) - return false; /* read_callback_ sets the state for us */ - subframe->qlp_coeff[u] = i32; - } - - /* read entropy coding method info */ - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN)) - return false; /* read_callback_ sets the state for us */ - subframe->entropy_coding_method.type = (FLAC__EntropyCodingMethodType)u32; - switch(subframe->entropy_coding_method.type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN)) - return false; /* read_callback_ sets the state for us */ - subframe->entropy_coding_method.data.partitioned_rice.order = u32; - subframe->entropy_coding_method.data.partitioned_rice.contents = &decoder->private_->partitioned_rice_contents[channel]; - break; - default: - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - - /* read residual */ - switch(subframe->entropy_coding_method.type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!read_residual_partitioned_rice_(decoder, order, subframe->entropy_coding_method.data.partitioned_rice.order, &decoder->private_->partitioned_rice_contents[channel], decoder->private_->residual[channel], /*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2)) - return false; - break; - default: - FLAC__ASSERT(0); - } - - /* decode the subframe */ - if(do_full_decode) { - memcpy(decoder->private_->output[channel], subframe->warmup, sizeof(FLAC__int32) * order); - /*@@@@@@ technically not pessimistic enough, should be more like - if( (FLAC__uint64)order * ((((FLAC__uint64)1)<qlp_coeff_precision)-1) < (((FLAC__uint64)-1) << 32) ) - */ - if(bps + subframe->qlp_coeff_precision + FLAC__bitmath_ilog2(order) <= 32) - if(bps <= 16 && subframe->qlp_coeff_precision <= 16) { - if(order <= 8) - decoder->private_->local_lpc_restore_signal_16bit_order8(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order); - else - decoder->private_->local_lpc_restore_signal_16bit(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order); - } - else - decoder->private_->local_lpc_restore_signal(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order); - else - decoder->private_->local_lpc_restore_signal_64bit(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order); - } - - return true; -} - -FLAC__bool read_subframe_verbatim_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode) -{ - FLAC__Subframe_Verbatim *subframe = &decoder->private_->frame.subframes[channel].data.verbatim; - FLAC__int32 x, *residual = decoder->private_->residual[channel]; - unsigned i; - - decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_VERBATIM; - - subframe->data = residual; - - for(i = 0; i < decoder->private_->frame.header.blocksize; i++) { - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &x, bps)) - return false; /* read_callback_ sets the state for us */ - residual[i] = x; - } - - /* decode the subframe */ - if(do_full_decode) - memcpy(decoder->private_->output[channel], subframe->data, sizeof(FLAC__int32) * decoder->private_->frame.header.blocksize); - - return true; -} - -FLAC__bool read_residual_partitioned_rice_(FLAC__StreamDecoder *decoder, unsigned predictor_order, unsigned partition_order, FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, FLAC__int32 *residual, FLAC__bool is_extended) -{ - FLAC__uint32 rice_parameter; - int i; - unsigned partition, sample, u; - const unsigned partitions = 1u << partition_order; - const unsigned partition_samples = partition_order > 0? decoder->private_->frame.header.blocksize >> partition_order : decoder->private_->frame.header.blocksize - predictor_order; - const unsigned plen = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; - const unsigned pesc = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; - - /* sanity checks */ - if(partition_order == 0) { - if(decoder->private_->frame.header.blocksize < predictor_order) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - } - else { - if(partition_samples < predictor_order) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - return true; - } - } - - if(!FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(partitioned_rice_contents, max(6, partition_order))) { - decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR; - return false; - } - - sample = 0; - for(partition = 0; partition < partitions; partition++) { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &rice_parameter, plen)) - return false; /* read_callback_ sets the state for us */ - partitioned_rice_contents->parameters[partition] = rice_parameter; - if(rice_parameter < pesc) { - partitioned_rice_contents->raw_bits[partition] = 0; - u = (partition_order == 0 || partition > 0)? partition_samples : partition_samples - predictor_order; - if(!decoder->private_->local_bitreader_read_rice_signed_block(decoder->private_->input, (int*) residual + sample, u, rice_parameter)) - return false; /* read_callback_ sets the state for us */ - sample += u; - } - else { - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &rice_parameter, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN)) - return false; /* read_callback_ sets the state for us */ - partitioned_rice_contents->raw_bits[partition] = rice_parameter; - for(u = (partition_order == 0 || partition > 0)? 0 : predictor_order; u < partition_samples; u++, sample++) { - if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, (FLAC__int32*) &i, rice_parameter)) - return false; /* read_callback_ sets the state for us */ - residual[sample] = i; - } - } - } - - return true; -} - -FLAC__bool read_zero_padding_(FLAC__StreamDecoder *decoder) -{ - if(!FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)) { - FLAC__uint32 zero = 0; - if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &zero, FLAC__bitreader_bits_left_for_byte_alignment(decoder->private_->input))) - return false; /* read_callback_ sets the state for us */ - if(zero != 0) { - send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC); - decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; - } - } - return true; -} - -FLAC__bool read_callback_(FLAC__byte buffer[], size_t *bytes, void *client_data) -{ - FLAC__StreamDecoder *decoder = (FLAC__StreamDecoder *)client_data; - - if( -#if FLAC__HAS_OGG - /* see [1] HACK NOTE below for why we don't call the eof_callback when decoding Ogg FLAC */ - !decoder->private_->is_ogg && -#endif - decoder->private_->eof_callback && decoder->private_->eof_callback(decoder, decoder->private_->client_data) - ) { - *bytes = 0; - decoder->protected_->state = FLAC__STREAM_DECODER_END_OF_STREAM; - return false; - } - else if(*bytes > 0) { - /* While seeking, it is possible for our seek to land in the - * middle of audio data that looks exactly like a frame header - * from a future version of an encoder. When that happens, our - * error callback will get an - * FLAC__STREAM_DECODER_UNPARSEABLE_STREAM and increment its - * unparseable_frame_count. But there is a remote possibility - * that it is properly synced at such a "future-codec frame", - * so to make sure, we wait to see many "unparseable" errors in - * a row before bailing out. - */ - if(decoder->private_->is_seeking && decoder->private_->unparseable_frame_count > 20) { - decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED; - return false; - } - else { - const FLAC__StreamDecoderReadStatus status = -#if FLAC__HAS_OGG - decoder->private_->is_ogg? - read_callback_ogg_aspect_(decoder, buffer, bytes) : -#endif - decoder->private_->read_callback(decoder, buffer, bytes, decoder->private_->client_data) - ; - if(status == FLAC__STREAM_DECODER_READ_STATUS_ABORT) { - decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED; - return false; - } - else if(*bytes == 0) { - if( - status == FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM || - ( -#if FLAC__HAS_OGG - /* see [1] HACK NOTE below for why we don't call the eof_callback when decoding Ogg FLAC */ - !decoder->private_->is_ogg && -#endif - decoder->private_->eof_callback && decoder->private_->eof_callback(decoder, decoder->private_->client_data) - ) - ) { - decoder->protected_->state = FLAC__STREAM_DECODER_END_OF_STREAM; - return false; - } - else - return true; - } - else - return true; - } - } - else { - /* abort to avoid a deadlock */ - decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED; - return false; - } - /* [1] @@@ HACK NOTE: The end-of-stream checking has to be hacked around - * for Ogg FLAC. This is because the ogg decoder aspect can lose sync - * and at the same time hit the end of the stream (for example, seeking - * to a point that is after the beginning of the last Ogg page). There - * is no way to report an Ogg sync loss through the callbacks (see note - * in read_callback_ogg_aspect_()) so it returns CONTINUE with *bytes==0. - * So to keep the decoder from stopping at this point we gate the call - * to the eof_callback and let the Ogg decoder aspect set the - * end-of-stream state when it is needed. - */ -} - -#if FLAC__HAS_OGG -FLAC__StreamDecoderReadStatus read_callback_ogg_aspect_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes) -{ - switch(FLAC__ogg_decoder_aspect_read_callback_wrapper(&decoder->protected_->ogg_decoder_aspect, buffer, bytes, read_callback_proxy_, decoder, decoder->private_->client_data)) { - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK: - return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; - /* we don't really have a way to handle lost sync via read - * callback so we'll let it pass and let the underlying - * FLAC decoder catch the error - */ - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC: - return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM: - return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC: - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION: - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT: - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR: - case FLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR: - return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - default: - FLAC__ASSERT(0); - /* double protection */ - return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - } -} - -FLAC__OggDecoderAspectReadStatus read_callback_proxy_(const void *void_decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) -{ - FLAC__StreamDecoder *decoder = (FLAC__StreamDecoder*)void_decoder; - - switch(decoder->private_->read_callback(decoder, buffer, bytes, client_data)) { - case FLAC__STREAM_DECODER_READ_STATUS_CONTINUE: - return FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK; - case FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM: - return FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM; - case FLAC__STREAM_DECODER_READ_STATUS_ABORT: - return FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT; - default: - /* double protection: */ - FLAC__ASSERT(0); - return FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT; - } -} -#endif - -FLAC__StreamDecoderWriteStatus write_audio_frame_to_client_(FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[]) -{ - if(decoder->private_->is_seeking) { - FLAC__uint64 this_frame_sample = frame->header.number.sample_number; - FLAC__uint64 next_frame_sample = this_frame_sample + (FLAC__uint64)frame->header.blocksize; - FLAC__uint64 target_sample = decoder->private_->target_sample; - - FLAC__ASSERT(frame->header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER); - -#if FLAC__HAS_OGG - decoder->private_->got_a_frame = true; -#endif - decoder->private_->last_frame = *frame; /* save the frame */ - if(this_frame_sample <= target_sample && target_sample < next_frame_sample) { /* we hit our target frame */ - unsigned delta = (unsigned)(target_sample - this_frame_sample); - /* kick out of seek mode */ - decoder->private_->is_seeking = false; - /* shift out the samples before target_sample */ - if(delta > 0) { - unsigned channel; - const FLAC__int32 *newbuffer[FLAC__MAX_CHANNELS]; - for(channel = 0; channel < frame->header.channels; channel++) - newbuffer[channel] = buffer[channel] + delta; - decoder->private_->last_frame.header.blocksize -= delta; - decoder->private_->last_frame.header.number.sample_number += (FLAC__uint64)delta; - /* write the relevant samples */ - return decoder->private_->write_callback(decoder, &decoder->private_->last_frame, newbuffer, decoder->private_->client_data); - } - else { - /* write the relevant samples */ - return decoder->private_->write_callback(decoder, frame, buffer, decoder->private_->client_data); - } - } - - return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; - } - - /* - * If we never got STREAMINFO, turn off MD5 checking to save - * cycles since we don't have a sum to compare to anyway - */ - if(!decoder->private_->has_stream_info) - decoder->private_->do_md5_checking = false; - if(decoder->private_->do_md5_checking) { - if(!FLAC__MD5Accumulate(&decoder->private_->md5context, buffer, frame->header.channels, frame->header.blocksize, (frame->header.bits_per_sample+7) / 8)) - return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; - } - - return decoder->private_->write_callback(decoder, frame, buffer, decoder->private_->client_data); -} - -void send_error_to_client_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status) -{ - if(!decoder->private_->is_seeking) - decoder->private_->error_callback(decoder, status, decoder->private_->client_data); - else if(status == FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM) - decoder->private_->unparseable_frame_count++; -} - -FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample) -{ - FLAC__uint64 first_frame_offset = decoder->private_->first_frame_offset, lower_bound, upper_bound, lower_bound_sample, upper_bound_sample, this_frame_sample; - FLAC__int64 pos = -1; - int i; - unsigned approx_bytes_per_frame; - FLAC__bool first_seek = true; - const FLAC__uint64 total_samples = FLAC__stream_decoder_get_total_samples(decoder); - const unsigned min_blocksize = decoder->private_->stream_info.data.stream_info.min_blocksize; - const unsigned max_blocksize = decoder->private_->stream_info.data.stream_info.max_blocksize; - const unsigned max_framesize = decoder->private_->stream_info.data.stream_info.max_framesize; - const unsigned min_framesize = decoder->private_->stream_info.data.stream_info.min_framesize; - /* take these from the current frame in case they've changed mid-stream */ - unsigned channels = FLAC__stream_decoder_get_channels(decoder); - unsigned bps = FLAC__stream_decoder_get_bits_per_sample(decoder); - const FLAC__StreamMetadata_SeekTable *seek_table = decoder->private_->has_seek_table? &decoder->private_->seek_table.data.seek_table : 0; - - /* use values from stream info if we didn't decode a frame */ - if(channels == 0) - channels = decoder->private_->stream_info.data.stream_info.channels; - if(bps == 0) - bps = decoder->private_->stream_info.data.stream_info.bits_per_sample; - - /* we are just guessing here */ - if(max_framesize > 0) - approx_bytes_per_frame = (max_framesize + min_framesize) / 2 + 1; - /* - * Check if it's a known fixed-blocksize stream. Note that though - * the spec doesn't allow zeroes in the STREAMINFO block, we may - * never get a STREAMINFO block when decoding so the value of - * min_blocksize might be zero. - */ - else if(min_blocksize == max_blocksize && min_blocksize > 0) { - /* note there are no () around 'bps/8' to keep precision up since it's an integer calulation */ - approx_bytes_per_frame = min_blocksize * channels * bps/8 + 64; - } - else - approx_bytes_per_frame = 4096 * channels * bps/8 + 64; - - /* - * First, we set an upper and lower bound on where in the - * stream we will search. For now we assume the worst case - * scenario, which is our best guess at the beginning of - * the first frame and end of the stream. - */ - lower_bound = first_frame_offset; - lower_bound_sample = 0; - upper_bound = stream_length; - upper_bound_sample = total_samples > 0 ? total_samples : target_sample /*estimate it*/; - - /* - * Now we refine the bounds if we have a seektable with - * suitable points. Note that according to the spec they - * must be ordered by ascending sample number. - * - * Note: to protect against invalid seek tables we will ignore points - * that have frame_samples==0 or sample_number>=total_samples - */ - if(seek_table) { - FLAC__uint64 new_lower_bound = lower_bound; - FLAC__uint64 new_upper_bound = upper_bound; - FLAC__uint64 new_lower_bound_sample = lower_bound_sample; - FLAC__uint64 new_upper_bound_sample = upper_bound_sample; - - /* find the closest seek point <= target_sample, if it exists */ - for(i = (int)seek_table->num_points - 1; i >= 0; i--) { - if( - seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER && - seek_table->points[i].frame_samples > 0 && /* defense against bad seekpoints */ - (total_samples <= 0 || seek_table->points[i].sample_number < total_samples) && /* defense against bad seekpoints */ - seek_table->points[i].sample_number <= target_sample - ) - break; - } - if(i >= 0) { /* i.e. we found a suitable seek point... */ - new_lower_bound = first_frame_offset + seek_table->points[i].stream_offset; - new_lower_bound_sample = seek_table->points[i].sample_number; - } - - /* find the closest seek point > target_sample, if it exists */ - for(i = 0; i < (int)seek_table->num_points; i++) { - if( - seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER && - seek_table->points[i].frame_samples > 0 && /* defense against bad seekpoints */ - (total_samples <= 0 || seek_table->points[i].sample_number < total_samples) && /* defense against bad seekpoints */ - seek_table->points[i].sample_number > target_sample - ) - break; - } - if(i < (int)seek_table->num_points) { /* i.e. we found a suitable seek point... */ - new_upper_bound = first_frame_offset + seek_table->points[i].stream_offset; - new_upper_bound_sample = seek_table->points[i].sample_number; - } - /* final protection against unsorted seek tables; keep original values if bogus */ - if(new_upper_bound >= new_lower_bound) { - lower_bound = new_lower_bound; - upper_bound = new_upper_bound; - lower_bound_sample = new_lower_bound_sample; - upper_bound_sample = new_upper_bound_sample; - } - } - - FLAC__ASSERT(upper_bound_sample >= lower_bound_sample); - /* there are 2 insidious ways that the following equality occurs, which - * we need to fix: - * 1) total_samples is 0 (unknown) and target_sample is 0 - * 2) total_samples is 0 (unknown) and target_sample happens to be - * exactly equal to the last seek point in the seek table; this - * means there is no seek point above it, and upper_bound_samples - * remains equal to the estimate (of target_samples) we made above - * in either case it does not hurt to move upper_bound_sample up by 1 - */ - if(upper_bound_sample == lower_bound_sample) - upper_bound_sample++; - - decoder->private_->target_sample = target_sample; - while(1) { - /* check if the bounds are still ok */ - if (lower_bound_sample >= upper_bound_sample || lower_bound > upper_bound) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } -#ifndef FLAC__INTEGER_ONLY_LIBRARY -#if defined _MSC_VER || defined __MINGW32__ - /* with VC++ you have to spoon feed it the casting */ - pos = (FLAC__int64)lower_bound + (FLAC__int64)((FLAC__double)(FLAC__int64)(target_sample - lower_bound_sample) / (FLAC__double)(FLAC__int64)(upper_bound_sample - lower_bound_sample) * (FLAC__double)(FLAC__int64)(upper_bound - lower_bound)) - approx_bytes_per_frame; -#else - pos = (FLAC__int64)lower_bound + (FLAC__int64)((FLAC__double)(target_sample - lower_bound_sample) / (FLAC__double)(upper_bound_sample - lower_bound_sample) * (FLAC__double)(upper_bound - lower_bound)) - approx_bytes_per_frame; -#endif -#else - /* a little less accurate: */ - if(upper_bound - lower_bound < 0xffffffff) - pos = (FLAC__int64)lower_bound + (FLAC__int64)(((target_sample - lower_bound_sample) * (upper_bound - lower_bound)) / (upper_bound_sample - lower_bound_sample)) - approx_bytes_per_frame; - else /* @@@ WATCHOUT, ~2TB limit */ - pos = (FLAC__int64)lower_bound + (FLAC__int64)((((target_sample - lower_bound_sample)>>8) * ((upper_bound - lower_bound)>>8)) / ((upper_bound_sample - lower_bound_sample)>>16)) - approx_bytes_per_frame; -#endif - if(pos >= (FLAC__int64)upper_bound) - pos = (FLAC__int64)upper_bound - 1; - if(pos < (FLAC__int64)lower_bound) - pos = (FLAC__int64)lower_bound; - if(decoder->private_->seek_callback(decoder, (FLAC__uint64)pos, decoder->private_->client_data) != FLAC__STREAM_DECODER_SEEK_STATUS_OK) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - if(!FLAC__stream_decoder_flush(decoder)) { - /* above call sets the state for us */ - return false; - } - /* Now we need to get a frame. First we need to reset our - * unparseable_frame_count; if we get too many unparseable - * frames in a row, the read callback will return - * FLAC__STREAM_DECODER_READ_STATUS_ABORT, causing - * FLAC__stream_decoder_process_single() to return false. - */ - decoder->private_->unparseable_frame_count = 0; - if(!FLAC__stream_decoder_process_single(decoder)) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - /* our write callback will change the state when it gets to the target frame */ - /* actually, we could have got_a_frame if our decoder is at FLAC__STREAM_DECODER_END_OF_STREAM so we need to check for that also */ -#if 0 - /*@@@@@@ used to be the following; not clear if the check for end of stream is needed anymore */ - if(decoder->protected_->state != FLAC__SEEKABLE_STREAM_DECODER_SEEKING && decoder->protected_->state != FLAC__STREAM_DECODER_END_OF_STREAM) - break; -#endif - if(!decoder->private_->is_seeking) - break; - - FLAC__ASSERT(decoder->private_->last_frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER); - this_frame_sample = decoder->private_->last_frame.header.number.sample_number; - - if (0 == decoder->private_->samples_decoded || (this_frame_sample + decoder->private_->last_frame.header.blocksize >= upper_bound_sample && !first_seek)) { - if (pos == (FLAC__int64)lower_bound) { - /* can't move back any more than the first frame, something is fatally wrong */ - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - /* our last move backwards wasn't big enough, try again */ - approx_bytes_per_frame = approx_bytes_per_frame? approx_bytes_per_frame * 2 : 16; - continue; - } - /* allow one seek over upper bound, so we can get a correct upper_bound_sample for streams with unknown total_samples */ - first_seek = false; - - /* make sure we are not seeking in corrupted stream */ - if (this_frame_sample < lower_bound_sample) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - - /* we need to narrow the search */ - if(target_sample < this_frame_sample) { - upper_bound_sample = this_frame_sample + decoder->private_->last_frame.header.blocksize; -/*@@@@@@ what will decode position be if at end of stream? */ - if(!FLAC__stream_decoder_get_decode_position(decoder, &upper_bound)) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - approx_bytes_per_frame = (unsigned)(2 * (upper_bound - pos) / 3 + 16); - } - else { /* target_sample >= this_frame_sample + this frame's blocksize */ - lower_bound_sample = this_frame_sample + decoder->private_->last_frame.header.blocksize; - if(!FLAC__stream_decoder_get_decode_position(decoder, &lower_bound)) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - approx_bytes_per_frame = (unsigned)(2 * (lower_bound - pos) / 3 + 16); - } - } - - return true; -} - -#if FLAC__HAS_OGG -FLAC__bool seek_to_absolute_sample_ogg_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample) -{ - FLAC__uint64 left_pos = 0, right_pos = stream_length; - FLAC__uint64 left_sample = 0, right_sample = FLAC__stream_decoder_get_total_samples(decoder); - FLAC__uint64 this_frame_sample = (FLAC__uint64)0 - 1; - FLAC__uint64 pos = 0; /* only initialized to avoid compiler warning */ - FLAC__bool did_a_seek; - unsigned iteration = 0; - - /* In the first iterations, we will calculate the target byte position - * by the distance from the target sample to left_sample and - * right_sample (let's call it "proportional search"). After that, we - * will switch to binary search. - */ - unsigned BINARY_SEARCH_AFTER_ITERATION = 2; - - /* We will switch to a linear search once our current sample is less - * than this number of samples ahead of the target sample - */ - static const FLAC__uint64 LINEAR_SEARCH_WITHIN_SAMPLES = FLAC__MAX_BLOCK_SIZE * 2; - - /* If the total number of samples is unknown, use a large value, and - * force binary search immediately. - */ - if(right_sample == 0) { - right_sample = (FLAC__uint64)(-1); - BINARY_SEARCH_AFTER_ITERATION = 0; - } - - decoder->private_->target_sample = target_sample; - for( ; ; iteration++) { - if (iteration == 0 || this_frame_sample > target_sample || target_sample - this_frame_sample > LINEAR_SEARCH_WITHIN_SAMPLES) { - if (iteration >= BINARY_SEARCH_AFTER_ITERATION) { - pos = (right_pos + left_pos) / 2; - } - else { -#ifndef FLAC__INTEGER_ONLY_LIBRARY -#if defined _MSC_VER || defined __MINGW32__ - /* with MSVC you have to spoon feed it the casting */ - pos = (FLAC__uint64)((FLAC__double)(FLAC__int64)(target_sample - left_sample) / (FLAC__double)(FLAC__int64)(right_sample - left_sample) * (FLAC__double)(FLAC__int64)(right_pos - left_pos)); -#else - pos = (FLAC__uint64)((FLAC__double)(target_sample - left_sample) / (FLAC__double)(right_sample - left_sample) * (FLAC__double)(right_pos - left_pos)); -#endif -#else - /* a little less accurate: */ - if ((target_sample-left_sample <= 0xffffffff) && (right_pos-left_pos <= 0xffffffff)) - pos = (FLAC__int64)(((target_sample-left_sample) * (right_pos-left_pos)) / (right_sample-left_sample)); - else /* @@@ WATCHOUT, ~2TB limit */ - pos = (FLAC__int64)((((target_sample-left_sample)>>8) * ((right_pos-left_pos)>>8)) / ((right_sample-left_sample)>>16)); -#endif - /* @@@ TODO: might want to limit pos to some distance - * before EOF, to make sure we land before the last frame, - * thereby getting a this_frame_sample and so having a better - * estimate. - */ - } - - /* physical seek */ - if(decoder->private_->seek_callback((FLAC__StreamDecoder*)decoder, (FLAC__uint64)pos, decoder->private_->client_data) != FLAC__STREAM_DECODER_SEEK_STATUS_OK) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - if(!FLAC__stream_decoder_flush(decoder)) { - /* above call sets the state for us */ - return false; - } - did_a_seek = true; - } - else - did_a_seek = false; - - decoder->private_->got_a_frame = false; - if(!FLAC__stream_decoder_process_single(decoder)) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - if(!decoder->private_->got_a_frame) { - if(did_a_seek) { - /* this can happen if we seek to a point after the last frame; we drop - * to binary search right away in this case to avoid any wasted - * iterations of proportional search. - */ - right_pos = pos; - BINARY_SEARCH_AFTER_ITERATION = 0; - } - else { - /* this can probably only happen if total_samples is unknown and the - * target_sample is past the end of the stream - */ - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - } - /* our write callback will change the state when it gets to the target frame */ - else if(!decoder->private_->is_seeking) { - break; - } - else { - this_frame_sample = decoder->private_->last_frame.header.number.sample_number; - FLAC__ASSERT(decoder->private_->last_frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER); - - if (did_a_seek) { - if (this_frame_sample <= target_sample) { - /* The 'equal' case should not happen, since - * FLAC__stream_decoder_process_single() - * should recognize that it has hit the - * target sample and we would exit through - * the 'break' above. - */ - FLAC__ASSERT(this_frame_sample != target_sample); - - left_sample = this_frame_sample; - /* sanity check to avoid infinite loop */ - if (left_pos == pos) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - left_pos = pos; - } - else if(this_frame_sample > target_sample) { - right_sample = this_frame_sample; - /* sanity check to avoid infinite loop */ - if (right_pos == pos) { - decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR; - return false; - } - right_pos = pos; - } - } - } - } - - return true; -} -#endif - -FLAC__StreamDecoderReadStatus file_read_callback_dec(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) -{ - (void)client_data; - - if(*bytes > 0) { - *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, decoder->private_->file); - if(ferror(decoder->private_->file)) - return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - else if(*bytes == 0) - return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; - else - return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; - } - else - return FLAC__STREAM_DECODER_READ_STATUS_ABORT; /* abort to avoid a deadlock */ -} - -FLAC__StreamDecoderSeekStatus file_seek_callback_dec(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) -{ - (void)client_data; - - if(decoder->private_->file == stdin) - return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED; - else if(fseeko(decoder->private_->file, (off_t)absolute_byte_offset, SEEK_SET) < 0) - return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR; - else - return FLAC__STREAM_DECODER_SEEK_STATUS_OK; -} - -FLAC__StreamDecoderTellStatus file_tell_callback_dec(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) -{ - off_t pos; - (void)client_data; - - if(decoder->private_->file == stdin) - return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED; - else if((pos = ftello(decoder->private_->file)) < 0) - return FLAC__STREAM_DECODER_TELL_STATUS_ERROR; - else { - *absolute_byte_offset = (FLAC__uint64)pos; - return FLAC__STREAM_DECODER_TELL_STATUS_OK; - } -} - -FLAC__StreamDecoderLengthStatus file_length_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) -{ - struct stat filestats; - (void)client_data; - - if(decoder->private_->file == stdin) - return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED; - else if(fstat(fileno(decoder->private_->file), &filestats) != 0) - return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR; - else { - *stream_length = (FLAC__uint64)filestats.st_size; - return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; - } -} - -FLAC__bool file_eof_callback_(const FLAC__StreamDecoder *decoder, void *client_data) -{ - (void)client_data; - - return feof(decoder->private_->file)? true : false; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_encoder.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_encoder.c deleted file mode 100644 index c9152467a9..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_encoder.c +++ /dev/null @@ -1,4364 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - -#if HAVE_CONFIG_H -# include -#endif - -#if defined _MSC_VER || defined __MINGW32__ -#include /* for _setmode() */ -#include /* for _O_BINARY */ -#endif -#if defined __CYGWIN__ || defined __EMX__ -#include /* for setmode(), O_BINARY */ -#include /* for _O_BINARY */ -#endif -#include -#include -#include /* for malloc() */ -#include /* for memcpy() */ -#include /* for off_t */ -#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__ -#if _MSC_VER <= 1600 || defined __BORLANDC__ /* @@@ [2G limit] */ -#define fseeko fseek -#define ftello ftell -#endif -#endif -#include "../assert.h" -#include "../alloc.h" -#include "../stream_decoder.h" -#include "include/protected/stream_encoder.h" -#include "include/private/bitwriter.h" -#include "include/private/bitmath.h" -#include "include/private/crc.h" -#include "include/private/cpu.h" -#include "include/private/fixed.h" -#include "include/private/format.h" -#include "include/private/lpc.h" -#include "include/private/md5.h" -#include "include/private/memory.h" -#if FLAC__HAS_OGG -#include "include/private/ogg_helper.h" -#include "include/private/ogg_mapping.h" -#endif -#include "include/private/stream_encoder_framing.h" -#include "include/private/window.h" - -#ifndef FLaC__INLINE -#define FLaC__INLINE -#endif - -#ifdef min -#undef min -#endif -#define min(x,y) ((x)<(y)?(x):(y)) - -#ifdef max -#undef max -#endif -#define max(x,y) ((x)>(y)?(x):(y)) - -/* Exact Rice codeword length calculation is off by default. The simple - * (and fast) estimation (of how many bits a residual value will be - * encoded with) in this encoder is very good, almost always yielding - * compression within 0.1% of exact calculation. - */ -#undef EXACT_RICE_BITS_CALCULATION -/* Rice parameter searching is off by default. The simple (and fast) - * parameter estimation in this encoder is very good, almost always - * yielding compression within 0.1% of the optimal parameters. - */ -#undef ENABLE_RICE_PARAMETER_SEARCH - - -typedef struct { - FLAC__int32 *data[FLAC__MAX_CHANNELS]; - unsigned size; /* of each data[] in samples */ - unsigned tail; -} verify_input_fifo; - -typedef struct { - const FLAC__byte *data; - unsigned capacity; - unsigned bytes; -} verify_output; - -typedef enum { - ENCODER_IN_MAGIC = 0, - ENCODER_IN_METADATA = 1, - ENCODER_IN_AUDIO = 2 -} EncoderStateHint; - -static struct CompressionLevels { - FLAC__bool do_mid_side_stereo; - FLAC__bool loose_mid_side_stereo; - unsigned max_lpc_order; - unsigned qlp_coeff_precision; - FLAC__bool do_qlp_coeff_prec_search; - FLAC__bool do_escape_coding; - FLAC__bool do_exhaustive_model_search; - unsigned min_residual_partition_order; - unsigned max_residual_partition_order; - unsigned rice_parameter_search_dist; -} compression_levels_[] = { - { false, false, 0, 0, false, false, false, 0, 3, 0 }, - { true , true , 0, 0, false, false, false, 0, 3, 0 }, - { true , false, 0, 0, false, false, false, 0, 3, 0 }, - { false, false, 6, 0, false, false, false, 0, 4, 0 }, - { true , true , 8, 0, false, false, false, 0, 4, 0 }, - { true , false, 8, 0, false, false, false, 0, 5, 0 }, - { true , false, 8, 0, false, false, false, 0, 6, 0 }, - { true , false, 8, 0, false, false, true , 0, 6, 0 }, - { true , false, 12, 0, false, false, true , 0, 6, 0 } -}; - - -/*********************************************************************** - * - * Private class method prototypes - * - ***********************************************************************/ - -static void set_defaults_enc(FLAC__StreamEncoder *encoder); -static void free_(FLAC__StreamEncoder *encoder); -static FLAC__bool resize_buffers_(FLAC__StreamEncoder *encoder, unsigned new_blocksize); -static FLAC__bool write_bitbuffer_(FLAC__StreamEncoder *encoder, unsigned samples, FLAC__bool is_last_block); -static FLAC__StreamEncoderWriteStatus write_frame_(FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, FLAC__bool is_last_block); -static void update_metadata_(const FLAC__StreamEncoder *encoder); -#if FLAC__HAS_OGG -static void update_ogg_metadata_(FLAC__StreamEncoder *encoder); -#endif -static FLAC__bool process_frame_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block, FLAC__bool is_last_block); -static FLAC__bool process_subframes_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block); - -static FLAC__bool process_subframe_( - FLAC__StreamEncoder *encoder, - unsigned min_partition_order, - unsigned max_partition_order, - const FLAC__FrameHeader *frame_header, - unsigned subframe_bps, - const FLAC__int32 integer_signal[], - FLAC__Subframe *subframe[2], - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents[2], - FLAC__int32 *residual[2], - unsigned *best_subframe, - unsigned *best_bits -); - -static FLAC__bool add_subframe_( - FLAC__StreamEncoder *encoder, - unsigned blocksize, - unsigned subframe_bps, - const FLAC__Subframe *subframe, - FLAC__BitWriter *frame -); - -static unsigned evaluate_constant_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal, - unsigned blocksize, - unsigned subframe_bps, - FLAC__Subframe *subframe -); - -static unsigned evaluate_fixed_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal[], - FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned raw_bits_per_partition[], - unsigned blocksize, - unsigned subframe_bps, - unsigned order, - unsigned rice_parameter, - unsigned rice_parameter_limit, - unsigned min_partition_order, - unsigned max_partition_order, - FLAC__bool do_escape_coding, - unsigned rice_parameter_search_dist, - FLAC__Subframe *subframe, - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents -); - -#ifndef FLAC__INTEGER_ONLY_LIBRARY -static unsigned evaluate_lpc_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal[], - FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned raw_bits_per_partition[], - const FLAC__real lp_coeff[], - unsigned blocksize, - unsigned subframe_bps, - unsigned order, - unsigned qlp_coeff_precision, - unsigned rice_parameter, - unsigned rice_parameter_limit, - unsigned min_partition_order, - unsigned max_partition_order, - FLAC__bool do_escape_coding, - unsigned rice_parameter_search_dist, - FLAC__Subframe *subframe, - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents -); -#endif - -static unsigned evaluate_verbatim_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal[], - unsigned blocksize, - unsigned subframe_bps, - FLAC__Subframe *subframe -); - -static unsigned find_best_partition_order_( - struct FLAC__StreamEncoderPrivate *private_, - const FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned raw_bits_per_partition[], - unsigned residual_samples, - unsigned predictor_order, - unsigned rice_parameter, - unsigned rice_parameter_limit, - unsigned min_partition_order, - unsigned max_partition_order, - unsigned bps, - FLAC__bool do_escape_coding, - unsigned rice_parameter_search_dist, - FLAC__EntropyCodingMethod *best_ecm -); - -static void precompute_partition_info_sums_( - const FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned residual_samples, - unsigned predictor_order, - unsigned min_partition_order, - unsigned max_partition_order, - unsigned bps -); - -static void precompute_partition_info_escapes_( - const FLAC__int32 residual[], - unsigned raw_bits_per_partition[], - unsigned residual_samples, - unsigned predictor_order, - unsigned min_partition_order, - unsigned max_partition_order -); - -static FLAC__bool set_partitioned_rice_( -#ifdef EXACT_RICE_BITS_CALCULATION - const FLAC__int32 residual[], -#endif - const FLAC__uint64 abs_residual_partition_sums[], - const unsigned raw_bits_per_partition[], - const unsigned residual_samples, - const unsigned predictor_order, - const unsigned suggested_rice_parameter, - const unsigned rice_parameter_limit, - const unsigned rice_parameter_search_dist, - const unsigned partition_order, - const FLAC__bool search_for_escapes, - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, - unsigned *bits -); - -static unsigned get_wasted_bits_(FLAC__int32 signal[], unsigned samples); - -/* verify-related routines: */ -static void append_to_verify_fifo_( - verify_input_fifo *fifo, - const FLAC__int32 * const input[], - unsigned input_offset, - unsigned channels, - unsigned wide_samples -); - -static void append_to_verify_fifo_interleaved_( - verify_input_fifo *fifo, - const FLAC__int32 input[], - unsigned input_offset, - unsigned channels, - unsigned wide_samples -); - -static FLAC__StreamDecoderReadStatus verify_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data); -static FLAC__StreamDecoderWriteStatus verify_write_callback_(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data); -static void verify_metadata_callback_(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data); -static void verify_error_callback_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data); - -static FLAC__StreamEncoderReadStatus file_read_callback_enc(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data); -static FLAC__StreamEncoderSeekStatus file_seek_callback_enc(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data); -static FLAC__StreamEncoderTellStatus file_tell_callback_enc(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data); -static FLAC__StreamEncoderWriteStatus file_write_callback_(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data); -static FILE *get_binary_stdout_(void); - - -/*********************************************************************** - * - * Private class data - * - ***********************************************************************/ - -typedef struct FLAC__StreamEncoderPrivate { - unsigned input_capacity; /* current size (in samples) of the signal and residual buffers */ - FLAC__int32 *integer_signal[FLAC__MAX_CHANNELS]; /* the integer version of the input signal */ - FLAC__int32 *integer_signal_mid_side[2]; /* the integer version of the mid-side input signal (stereo only) */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY - FLAC__real *real_signal[FLAC__MAX_CHANNELS]; /* (@@@ currently unused) the floating-point version of the input signal */ - FLAC__real *real_signal_mid_side[2]; /* (@@@ currently unused) the floating-point version of the mid-side input signal (stereo only) */ - FLAC__real *window[FLAC__MAX_APODIZATION_FUNCTIONS]; /* the pre-computed floating-point window for each apodization function */ - FLAC__real *windowed_signal; /* the integer_signal[] * current window[] */ -#endif - unsigned subframe_bps[FLAC__MAX_CHANNELS]; /* the effective bits per sample of the input signal (stream bps - wasted bits) */ - unsigned subframe_bps_mid_side[2]; /* the effective bits per sample of the mid-side input signal (stream bps - wasted bits + 0/1) */ - FLAC__int32 *residual_workspace[FLAC__MAX_CHANNELS][2]; /* each channel has a candidate and best workspace where the subframe residual signals will be stored */ - FLAC__int32 *residual_workspace_mid_side[2][2]; - FLAC__Subframe subframe_workspace[FLAC__MAX_CHANNELS][2]; - FLAC__Subframe subframe_workspace_mid_side[2][2]; - FLAC__Subframe *subframe_workspace_ptr[FLAC__MAX_CHANNELS][2]; - FLAC__Subframe *subframe_workspace_ptr_mid_side[2][2]; - FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents_workspace[FLAC__MAX_CHANNELS][2]; - FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents_workspace_mid_side[FLAC__MAX_CHANNELS][2]; - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents_workspace_ptr[FLAC__MAX_CHANNELS][2]; - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents_workspace_ptr_mid_side[FLAC__MAX_CHANNELS][2]; - unsigned best_subframe[FLAC__MAX_CHANNELS]; /* index (0 or 1) into 2nd dimension of the above workspaces */ - unsigned best_subframe_mid_side[2]; - unsigned best_subframe_bits[FLAC__MAX_CHANNELS]; /* size in bits of the best subframe for each channel */ - unsigned best_subframe_bits_mid_side[2]; - FLAC__uint64 *abs_residual_partition_sums; /* workspace where the sum of abs(candidate residual) for each partition is stored */ - unsigned *raw_bits_per_partition; /* workspace where the sum of silog2(candidate residual) for each partition is stored */ - FLAC__BitWriter *frame; /* the current frame being worked on */ - unsigned loose_mid_side_stereo_frames; /* rounded number of frames the encoder will use before trying both independent and mid/side frames again */ - unsigned loose_mid_side_stereo_frame_count; /* number of frames using the current channel assignment */ - FLAC__ChannelAssignment last_channel_assignment; - FLAC__StreamMetadata streaminfo; /* scratchpad for STREAMINFO as it is built */ - FLAC__StreamMetadata_SeekTable *seek_table; /* pointer into encoder->protected_->metadata_ where the seek table is */ - unsigned current_sample_number; - unsigned current_frame_number; - FLAC__MD5Context md5context; - FLAC__CPUInfo cpuinfo; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - unsigned (*local_fixed_compute_best_predictor)(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -#else - unsigned (*local_fixed_compute_best_predictor)(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]); -#endif -#ifndef FLAC__INTEGER_ONLY_LIBRARY - void (*local_lpc_compute_autocorrelation)(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); - void (*local_lpc_compute_residual_from_qlp_coefficients)(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); - void (*local_lpc_compute_residual_from_qlp_coefficients_64bit)(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); - void (*local_lpc_compute_residual_from_qlp_coefficients_16bit)(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); -#endif - FLAC__bool use_wide_by_block; /* use slow 64-bit versions of some functions because of the block size */ - FLAC__bool use_wide_by_partition; /* use slow 64-bit versions of some functions because of the min partition order and blocksize */ - FLAC__bool use_wide_by_order; /* use slow 64-bit versions of some functions because of the lpc order */ - FLAC__bool disable_constant_subframes; - FLAC__bool disable_fixed_subframes; - FLAC__bool disable_verbatim_subframes; -#if FLAC__HAS_OGG - FLAC__bool is_ogg; -#endif - FLAC__StreamEncoderReadCallback read_callback; /* currently only needed for Ogg FLAC */ - FLAC__StreamEncoderSeekCallback seek_callback; - FLAC__StreamEncoderTellCallback tell_callback; - FLAC__StreamEncoderWriteCallback write_callback; - FLAC__StreamEncoderMetadataCallback metadata_callback; - FLAC__StreamEncoderProgressCallback progress_callback; - void *client_data; - unsigned first_seekpoint_to_check; - FILE *file; /* only used when encoding to a file */ - FLAC__uint64 bytes_written; - FLAC__uint64 samples_written; - unsigned frames_written; - unsigned total_frames_estimate; - /* unaligned (original) pointers to allocated data */ - FLAC__int32 *integer_signal_unaligned[FLAC__MAX_CHANNELS]; - FLAC__int32 *integer_signal_mid_side_unaligned[2]; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - FLAC__real *real_signal_unaligned[FLAC__MAX_CHANNELS]; /* (@@@ currently unused) */ - FLAC__real *real_signal_mid_side_unaligned[2]; /* (@@@ currently unused) */ - FLAC__real *window_unaligned[FLAC__MAX_APODIZATION_FUNCTIONS]; - FLAC__real *windowed_signal_unaligned; -#endif - FLAC__int32 *residual_workspace_unaligned[FLAC__MAX_CHANNELS][2]; - FLAC__int32 *residual_workspace_mid_side_unaligned[2][2]; - FLAC__uint64 *abs_residual_partition_sums_unaligned; - unsigned *raw_bits_per_partition_unaligned; - /* - * These fields have been moved here from private function local - * declarations merely to save stack space during encoding. - */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY - FLAC__real lp_coeff[FLAC__MAX_LPC_ORDER][FLAC__MAX_LPC_ORDER]; /* from process_subframe_() */ -#endif - FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents_extra[2]; /* from find_best_partition_order_() */ - /* - * The data for the verify section - */ - struct { - FLAC__StreamDecoder *decoder; - EncoderStateHint state_hint; - FLAC__bool needs_magic_hack; - verify_input_fifo input_fifo; - verify_output output; - struct { - FLAC__uint64 absolute_sample; - unsigned frame_number; - unsigned channel; - unsigned sample; - FLAC__int32 expected; - FLAC__int32 got; - } error_stats; - } verify; - FLAC__bool is_being_deleted; /* if true, call to ..._finish() from ..._delete() will not call the callbacks */ -} FLAC__StreamEncoderPrivate; - -/*********************************************************************** - * - * Public static class data - * - ***********************************************************************/ - -FLAC_API const char * const FLAC__StreamEncoderStateString[] = { - "FLAC__STREAM_ENCODER_OK", - "FLAC__STREAM_ENCODER_UNINITIALIZED", - "FLAC__STREAM_ENCODER_OGG_ERROR", - "FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR", - "FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA", - "FLAC__STREAM_ENCODER_CLIENT_ERROR", - "FLAC__STREAM_ENCODER_IO_ERROR", - "FLAC__STREAM_ENCODER_FRAMING_ERROR", - "FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR" -}; - -FLAC_API const char * const FLAC__StreamEncoderInitStatusString[] = { - "FLAC__STREAM_ENCODER_INIT_STATUS_OK", - "FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR", - "FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION", - "FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER", - "FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE", - "FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA", - "FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED" -}; - -FLAC_API const char * const FLAC__treamEncoderReadStatusString[] = { - "FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE", - "FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM", - "FLAC__STREAM_ENCODER_READ_STATUS_ABORT", - "FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED" -}; - -FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[] = { - "FLAC__STREAM_ENCODER_WRITE_STATUS_OK", - "FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR" -}; - -FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[] = { - "FLAC__STREAM_ENCODER_SEEK_STATUS_OK", - "FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR", - "FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED" -}; - -FLAC_API const char * const FLAC__StreamEncoderTellStatusString[] = { - "FLAC__STREAM_ENCODER_TELL_STATUS_OK", - "FLAC__STREAM_ENCODER_TELL_STATUS_ERROR", - "FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED" -}; - -/* Number of samples that will be overread to watch for end of stream. By - * 'overread', we mean that the FLAC__stream_encoder_process*() calls will - * always try to read blocksize+1 samples before encoding a block, so that - * even if the stream has a total sample count that is an integral multiple - * of the blocksize, we will still notice when we are encoding the last - * block. This is needed, for example, to correctly set the end-of-stream - * marker in Ogg FLAC. - * - * WATCHOUT: some parts of the code assert that OVERREAD_ == 1 and there's - * not really any reason to change it. - */ -static const unsigned OVERREAD_ = 1; - -/*********************************************************************** - * - * Class constructor/destructor - * - */ -FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void) -{ - FLAC__StreamEncoder *encoder; - unsigned i; - - FLAC__ASSERT(sizeof(int) >= 4); /* we want to die right away if this is not true */ - - encoder = (FLAC__StreamEncoder*)calloc(1, sizeof(FLAC__StreamEncoder)); - if(encoder == 0) { - return 0; - } - - encoder->protected_ = (FLAC__StreamEncoderProtected*)calloc(1, sizeof(FLAC__StreamEncoderProtected)); - if(encoder->protected_ == 0) { - free(encoder); - return 0; - } - - encoder->private_ = (FLAC__StreamEncoderPrivate*)calloc(1, sizeof(FLAC__StreamEncoderPrivate)); - if(encoder->private_ == 0) { - free(encoder->protected_); - free(encoder); - return 0; - } - - encoder->private_->frame = FLAC__bitwriter_new(); - if(encoder->private_->frame == 0) { - free(encoder->private_); - free(encoder->protected_); - free(encoder); - return 0; - } - - encoder->private_->file = 0; - - set_defaults_enc(encoder); - - encoder->private_->is_being_deleted = false; - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - encoder->private_->subframe_workspace_ptr[i][0] = &encoder->private_->subframe_workspace[i][0]; - encoder->private_->subframe_workspace_ptr[i][1] = &encoder->private_->subframe_workspace[i][1]; - } - for(i = 0; i < 2; i++) { - encoder->private_->subframe_workspace_ptr_mid_side[i][0] = &encoder->private_->subframe_workspace_mid_side[i][0]; - encoder->private_->subframe_workspace_ptr_mid_side[i][1] = &encoder->private_->subframe_workspace_mid_side[i][1]; - } - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - encoder->private_->partitioned_rice_contents_workspace_ptr[i][0] = &encoder->private_->partitioned_rice_contents_workspace[i][0]; - encoder->private_->partitioned_rice_contents_workspace_ptr[i][1] = &encoder->private_->partitioned_rice_contents_workspace[i][1]; - } - for(i = 0; i < 2; i++) { - encoder->private_->partitioned_rice_contents_workspace_ptr_mid_side[i][0] = &encoder->private_->partitioned_rice_contents_workspace_mid_side[i][0]; - encoder->private_->partitioned_rice_contents_workspace_ptr_mid_side[i][1] = &encoder->private_->partitioned_rice_contents_workspace_mid_side[i][1]; - } - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace[i][0]); - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace[i][1]); - } - for(i = 0; i < 2; i++) { - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][0]); - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][1]); - } - for(i = 0; i < 2; i++) - FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_extra[i]); - - encoder->protected_->state = FLAC__STREAM_ENCODER_UNINITIALIZED; - - return encoder; -} - -FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder) -{ - unsigned i; - - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->protected_); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->private_->frame); - - encoder->private_->is_being_deleted = true; - - (void)FLAC__stream_encoder_finish(encoder); - - if(0 != encoder->private_->verify.decoder) - FLAC__stream_decoder_delete(encoder->private_->verify.decoder); - - for(i = 0; i < FLAC__MAX_CHANNELS; i++) { - FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace[i][0]); - FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace[i][1]); - } - for(i = 0; i < 2; i++) { - FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][0]); - FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][1]); - } - for(i = 0; i < 2; i++) - FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_extra[i]); - - FLAC__bitwriter_delete(encoder->private_->frame); - free(encoder->private_); - free(encoder->protected_); - free(encoder); -} - -/*********************************************************************** - * - * Public class methods - * - ***********************************************************************/ - -static FLAC__StreamEncoderInitStatus init_stream_internal_enc( - FLAC__StreamEncoder *encoder, - FLAC__StreamEncoderReadCallback read_callback, - FLAC__StreamEncoderWriteCallback write_callback, - FLAC__StreamEncoderSeekCallback seek_callback, - FLAC__StreamEncoderTellCallback tell_callback, - FLAC__StreamEncoderMetadataCallback metadata_callback, - void *client_data, - FLAC__bool is_ogg -) -{ - unsigned i; - FLAC__bool metadata_has_seektable, metadata_has_vorbis_comment, metadata_picture_has_type1, metadata_picture_has_type2; - - FLAC__ASSERT(0 != encoder); - - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED; - -#if !FLAC__HAS_OGG - if(is_ogg) - return FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER; -#endif - - if(0 == write_callback || (seek_callback && 0 == tell_callback)) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS; - - if(encoder->protected_->channels == 0 || encoder->protected_->channels > FLAC__MAX_CHANNELS) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS; - - if(encoder->protected_->channels != 2) { - encoder->protected_->do_mid_side_stereo = false; - encoder->protected_->loose_mid_side_stereo = false; - } - else if(!encoder->protected_->do_mid_side_stereo) - encoder->protected_->loose_mid_side_stereo = false; - - if(encoder->protected_->bits_per_sample >= 32) - encoder->protected_->do_mid_side_stereo = false; /* since we currenty do 32-bit math, the side channel would have 33 bps and overflow */ - - if(encoder->protected_->bits_per_sample < FLAC__MIN_BITS_PER_SAMPLE || encoder->protected_->bits_per_sample > FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE; - - if(!FLAC__format_sample_rate_is_valid(encoder->protected_->sample_rate)) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE; - - if(encoder->protected_->blocksize == 0) { - if(encoder->protected_->max_lpc_order == 0) - encoder->protected_->blocksize = 1152; - else - encoder->protected_->blocksize = 4096; - } - - if(encoder->protected_->blocksize < FLAC__MIN_BLOCK_SIZE || encoder->protected_->blocksize > FLAC__MAX_BLOCK_SIZE) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE; - - if(encoder->protected_->max_lpc_order > FLAC__MAX_LPC_ORDER) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER; - - if(encoder->protected_->blocksize < encoder->protected_->max_lpc_order) - return FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER; - - if(encoder->protected_->qlp_coeff_precision == 0) { - if(encoder->protected_->bits_per_sample < 16) { - /* @@@ need some data about how to set this here w.r.t. blocksize and sample rate */ - /* @@@ until then we'll make a guess */ - encoder->protected_->qlp_coeff_precision = max(FLAC__MIN_QLP_COEFF_PRECISION, 2 + encoder->protected_->bits_per_sample / 2); - } - else if(encoder->protected_->bits_per_sample == 16) { - if(encoder->protected_->blocksize <= 192) - encoder->protected_->qlp_coeff_precision = 7; - else if(encoder->protected_->blocksize <= 384) - encoder->protected_->qlp_coeff_precision = 8; - else if(encoder->protected_->blocksize <= 576) - encoder->protected_->qlp_coeff_precision = 9; - else if(encoder->protected_->blocksize <= 1152) - encoder->protected_->qlp_coeff_precision = 10; - else if(encoder->protected_->blocksize <= 2304) - encoder->protected_->qlp_coeff_precision = 11; - else if(encoder->protected_->blocksize <= 4608) - encoder->protected_->qlp_coeff_precision = 12; - else - encoder->protected_->qlp_coeff_precision = 13; - } - else { - if(encoder->protected_->blocksize <= 384) - encoder->protected_->qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION-2; - else if(encoder->protected_->blocksize <= 1152) - encoder->protected_->qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION-1; - else - encoder->protected_->qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION; - } - FLAC__ASSERT(encoder->protected_->qlp_coeff_precision <= FLAC__MAX_QLP_COEFF_PRECISION); - } - else if(encoder->protected_->qlp_coeff_precision < FLAC__MIN_QLP_COEFF_PRECISION || encoder->protected_->qlp_coeff_precision > FLAC__MAX_QLP_COEFF_PRECISION) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION; - - if(encoder->protected_->streamable_subset) { - if( - encoder->protected_->blocksize != 192 && - encoder->protected_->blocksize != 576 && - encoder->protected_->blocksize != 1152 && - encoder->protected_->blocksize != 2304 && - encoder->protected_->blocksize != 4608 && - encoder->protected_->blocksize != 256 && - encoder->protected_->blocksize != 512 && - encoder->protected_->blocksize != 1024 && - encoder->protected_->blocksize != 2048 && - encoder->protected_->blocksize != 4096 && - encoder->protected_->blocksize != 8192 && - encoder->protected_->blocksize != 16384 - ) - return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE; - if(!FLAC__format_sample_rate_is_subset(encoder->protected_->sample_rate)) - return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE; - if( - encoder->protected_->bits_per_sample != 8 && - encoder->protected_->bits_per_sample != 12 && - encoder->protected_->bits_per_sample != 16 && - encoder->protected_->bits_per_sample != 20 && - encoder->protected_->bits_per_sample != 24 - ) - return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE; - if(encoder->protected_->max_residual_partition_order > FLAC__SUBSET_MAX_RICE_PARTITION_ORDER) - return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE; - if( - encoder->protected_->sample_rate <= 48000 && - ( - encoder->protected_->blocksize > FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ || - encoder->protected_->max_lpc_order > FLAC__SUBSET_MAX_LPC_ORDER_48000HZ - ) - ) { - return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE; - } - } - - if(encoder->protected_->max_residual_partition_order >= (1u << FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN)) - encoder->protected_->max_residual_partition_order = (1u << FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN) - 1; - if(encoder->protected_->min_residual_partition_order >= encoder->protected_->max_residual_partition_order) - encoder->protected_->min_residual_partition_order = encoder->protected_->max_residual_partition_order; - -#if FLAC__HAS_OGG - /* reorder metadata if necessary to ensure that any VORBIS_COMMENT is the first, according to the mapping spec */ - if(is_ogg && 0 != encoder->protected_->metadata && encoder->protected_->num_metadata_blocks > 1) { - unsigned i; - for(i = 1; i < encoder->protected_->num_metadata_blocks; i++) { - if(0 != encoder->protected_->metadata[i] && encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) { - FLAC__StreamMetadata *vc = encoder->protected_->metadata[i]; - for( ; i > 0; i--) - encoder->protected_->metadata[i] = encoder->protected_->metadata[i-1]; - encoder->protected_->metadata[0] = vc; - break; - } - } - } -#endif - /* keep track of any SEEKTABLE block */ - if(0 != encoder->protected_->metadata && encoder->protected_->num_metadata_blocks > 0) { - unsigned i; - for(i = 0; i < encoder->protected_->num_metadata_blocks; i++) { - if(0 != encoder->protected_->metadata[i] && encoder->protected_->metadata[i]->type == FLAC__METADATA_TYPE_SEEKTABLE) { - encoder->private_->seek_table = &encoder->protected_->metadata[i]->data.seek_table; - break; /* take only the first one */ - } - } - } - - /* validate metadata */ - if(0 == encoder->protected_->metadata && encoder->protected_->num_metadata_blocks > 0) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - metadata_has_seektable = false; - metadata_has_vorbis_comment = false; - metadata_picture_has_type1 = false; - metadata_picture_has_type2 = false; - for(i = 0; i < encoder->protected_->num_metadata_blocks; i++) { - const FLAC__StreamMetadata *m = encoder->protected_->metadata[i]; - if(m->type == FLAC__METADATA_TYPE_STREAMINFO) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - else if(m->type == FLAC__METADATA_TYPE_SEEKTABLE) { - if(metadata_has_seektable) /* only one is allowed */ - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - metadata_has_seektable = true; - if(!FLAC__format_seektable_is_legal(&m->data.seek_table)) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - } - else if(m->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) { - if(metadata_has_vorbis_comment) /* only one is allowed */ - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - metadata_has_vorbis_comment = true; - } - else if(m->type == FLAC__METADATA_TYPE_CUESHEET) { - if(!FLAC__format_cuesheet_is_legal(&m->data.cue_sheet, m->data.cue_sheet.is_cd, /*violation=*/0)) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - } - else if(m->type == FLAC__METADATA_TYPE_PICTURE) { - if(!FLAC__format_picture_is_legal(&m->data.picture, /*violation=*/0)) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - if(m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD) { - if(metadata_picture_has_type1) /* there should only be 1 per stream */ - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - metadata_picture_has_type1 = true; - /* standard icon must be 32x32 pixel PNG */ - if( - m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD && - ( - (strcmp(m->data.picture.mime_type, "image/png") && strcmp(m->data.picture.mime_type, "-->")) || - m->data.picture.width != 32 || - m->data.picture.height != 32 - ) - ) - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - } - else if(m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON) { - if(metadata_picture_has_type2) /* there should only be 1 per stream */ - return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA; - metadata_picture_has_type2 = true; - } - } - } - - encoder->private_->input_capacity = 0; - for(i = 0; i < encoder->protected_->channels; i++) { - encoder->private_->integer_signal_unaligned[i] = encoder->private_->integer_signal[i] = 0; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - encoder->private_->real_signal_unaligned[i] = encoder->private_->real_signal[i] = 0; -#endif - } - for(i = 0; i < 2; i++) { - encoder->private_->integer_signal_mid_side_unaligned[i] = encoder->private_->integer_signal_mid_side[i] = 0; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - encoder->private_->real_signal_mid_side_unaligned[i] = encoder->private_->real_signal_mid_side[i] = 0; -#endif - } -#ifndef FLAC__INTEGER_ONLY_LIBRARY - for(i = 0; i < encoder->protected_->num_apodizations; i++) - encoder->private_->window_unaligned[i] = encoder->private_->window[i] = 0; - encoder->private_->windowed_signal_unaligned = encoder->private_->windowed_signal = 0; -#endif - for(i = 0; i < encoder->protected_->channels; i++) { - encoder->private_->residual_workspace_unaligned[i][0] = encoder->private_->residual_workspace[i][0] = 0; - encoder->private_->residual_workspace_unaligned[i][1] = encoder->private_->residual_workspace[i][1] = 0; - encoder->private_->best_subframe[i] = 0; - } - for(i = 0; i < 2; i++) { - encoder->private_->residual_workspace_mid_side_unaligned[i][0] = encoder->private_->residual_workspace_mid_side[i][0] = 0; - encoder->private_->residual_workspace_mid_side_unaligned[i][1] = encoder->private_->residual_workspace_mid_side[i][1] = 0; - encoder->private_->best_subframe_mid_side[i] = 0; - } - encoder->private_->abs_residual_partition_sums_unaligned = encoder->private_->abs_residual_partition_sums = 0; - encoder->private_->raw_bits_per_partition_unaligned = encoder->private_->raw_bits_per_partition = 0; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - encoder->private_->loose_mid_side_stereo_frames = (unsigned)((FLAC__double)encoder->protected_->sample_rate * 0.4 / (FLAC__double)encoder->protected_->blocksize + 0.5); -#else - /* 26214 is the approximate fixed-point equivalent to 0.4 (0.4 * 2^16) */ - /* sample rate can be up to 655350 Hz, and thus use 20 bits, so we do the multiply÷ by hand */ - FLAC__ASSERT(FLAC__MAX_SAMPLE_RATE <= 655350); - FLAC__ASSERT(FLAC__MAX_BLOCK_SIZE <= 65535); - FLAC__ASSERT(encoder->protected_->sample_rate <= 655350); - FLAC__ASSERT(encoder->protected_->blocksize <= 65535); - encoder->private_->loose_mid_side_stereo_frames = (unsigned)FLAC__fixedpoint_trunc((((FLAC__uint64)(encoder->protected_->sample_rate) * (FLAC__uint64)(26214)) << 16) / (encoder->protected_->blocksize<<16) + FLAC__FP_ONE_HALF); -#endif - if(encoder->private_->loose_mid_side_stereo_frames == 0) - encoder->private_->loose_mid_side_stereo_frames = 1; - encoder->private_->loose_mid_side_stereo_frame_count = 0; - encoder->private_->current_sample_number = 0; - encoder->private_->current_frame_number = 0; - - encoder->private_->use_wide_by_block = (encoder->protected_->bits_per_sample + FLAC__bitmath_ilog2(encoder->protected_->blocksize)+1 > 30); - encoder->private_->use_wide_by_order = (encoder->protected_->bits_per_sample + FLAC__bitmath_ilog2(max(encoder->protected_->max_lpc_order, FLAC__MAX_FIXED_ORDER))+1 > 30); /*@@@ need to use this? */ - encoder->private_->use_wide_by_partition = (false); /*@@@ need to set this */ - - /* - * get the CPU info and set the function pointers - */ - FLAC__cpu_info(&encoder->private_->cpuinfo); - /* first default to the non-asm routines */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation; -#endif - encoder->private_->local_fixed_compute_best_predictor = FLAC__fixed_compute_best_predictor; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients; - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit = FLAC__lpc_compute_residual_from_qlp_coefficients_wide; - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients; -#endif - /* now override with asm where appropriate */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY -# ifndef FLAC__NO_ASM - if(encoder->private_->cpuinfo.use_asm) { -# ifdef FLAC__CPU_IA32 - FLAC__ASSERT(encoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_IA32); -# ifdef FLAC__HAS_NASM - if(encoder->private_->cpuinfo.data.ia32.sse) { - if(encoder->protected_->max_lpc_order < 4) - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_4; - else if(encoder->protected_->max_lpc_order < 8) - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_8; - else if(encoder->protected_->max_lpc_order < 12) - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_12; - else - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32; - } - else if(encoder->private_->cpuinfo.data.ia32._3dnow) - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_3dnow; - else - encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32; - if(encoder->private_->cpuinfo.data.ia32.mmx) { - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32; - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx; - } - else { - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32; - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32; - } - if(encoder->private_->cpuinfo.data.ia32.mmx && encoder->private_->cpuinfo.data.ia32.cmov) - encoder->private_->local_fixed_compute_best_predictor = FLAC__fixed_compute_best_predictor_asm_ia32_mmx_cmov; -# endif /* FLAC__HAS_NASM */ -# endif /* FLAC__CPU_IA32 */ - } -# endif /* !FLAC__NO_ASM */ -#endif /* !FLAC__INTEGER_ONLY_LIBRARY */ - /* finally override based on wide-ness if necessary */ - if(encoder->private_->use_wide_by_block) { - encoder->private_->local_fixed_compute_best_predictor = FLAC__fixed_compute_best_predictor_wide; - } - - /* set state to OK; from here on, errors are fatal and we'll override the state then */ - encoder->protected_->state = FLAC__STREAM_ENCODER_OK; - -#if FLAC__HAS_OGG - encoder->private_->is_ogg = is_ogg; - if(is_ogg && !FLAC__ogg_encoder_aspect_init(&encoder->protected_->ogg_encoder_aspect)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } -#endif - - encoder->private_->read_callback = read_callback; - encoder->private_->write_callback = write_callback; - encoder->private_->seek_callback = seek_callback; - encoder->private_->tell_callback = tell_callback; - encoder->private_->metadata_callback = metadata_callback; - encoder->private_->client_data = client_data; - - if(!resize_buffers_(encoder, encoder->protected_->blocksize)) { - /* the above function sets the state for us in case of an error */ - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - if(!FLAC__bitwriter_init(encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - /* - * Set up the verify stuff if necessary - */ - if(encoder->protected_->verify) { - /* - * First, set up the fifo which will hold the - * original signal to compare against - */ - encoder->private_->verify.input_fifo.size = encoder->protected_->blocksize+OVERREAD_; - for(i = 0; i < encoder->protected_->channels; i++) { - if(0 == (encoder->private_->verify.input_fifo.data[i] = (FLAC__int32*)safe_malloc_mul_2op_(sizeof(FLAC__int32), /*times*/encoder->private_->verify.input_fifo.size))) { - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - } - encoder->private_->verify.input_fifo.tail = 0; - - /* - * Now set up a stream decoder for verification - */ - encoder->private_->verify.decoder = FLAC__stream_decoder_new(); - if(0 == encoder->private_->verify.decoder) { - encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - if(FLAC__stream_decoder_init_stream(encoder->private_->verify.decoder, verify_read_callback_, /*seek_callback=*/0, /*tell_callback=*/0, /*length_callback=*/0, /*eof_callback=*/0, verify_write_callback_, verify_metadata_callback_, verify_error_callback_, /*client_data=*/encoder) != FLAC__STREAM_DECODER_INIT_STATUS_OK) { - encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - } - encoder->private_->verify.error_stats.absolute_sample = 0; - encoder->private_->verify.error_stats.frame_number = 0; - encoder->private_->verify.error_stats.channel = 0; - encoder->private_->verify.error_stats.sample = 0; - encoder->private_->verify.error_stats.expected = 0; - encoder->private_->verify.error_stats.got = 0; - - /* - * These must be done before we write any metadata, because that - * calls the write_callback, which uses these values. - */ - encoder->private_->first_seekpoint_to_check = 0; - encoder->private_->samples_written = 0; - encoder->protected_->streaminfo_offset = 0; - encoder->protected_->seektable_offset = 0; - encoder->protected_->audio_offset = 0; - - /* - * write the stream header - */ - if(encoder->protected_->verify) - encoder->private_->verify.state_hint = ENCODER_IN_MAGIC; - if(!FLAC__bitwriter_write_raw_uint32(encoder->private_->frame, FLAC__STREAM_SYNC, FLAC__STREAM_SYNC_LEN)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) { - /* the above function sets the state for us in case of an error */ - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - /* - * write the STREAMINFO metadata block - */ - if(encoder->protected_->verify) - encoder->private_->verify.state_hint = ENCODER_IN_METADATA; - encoder->private_->streaminfo.type = FLAC__METADATA_TYPE_STREAMINFO; - encoder->private_->streaminfo.is_last = false; /* we will have at a minimum a VORBIS_COMMENT afterwards */ - encoder->private_->streaminfo.length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH; - encoder->private_->streaminfo.data.stream_info.min_blocksize = encoder->protected_->blocksize; /* this encoder uses the same blocksize for the whole stream */ - encoder->private_->streaminfo.data.stream_info.max_blocksize = encoder->protected_->blocksize; - encoder->private_->streaminfo.data.stream_info.min_framesize = 0; /* we don't know this yet; have to fill it in later */ - encoder->private_->streaminfo.data.stream_info.max_framesize = 0; /* we don't know this yet; have to fill it in later */ - encoder->private_->streaminfo.data.stream_info.sample_rate = encoder->protected_->sample_rate; - encoder->private_->streaminfo.data.stream_info.channels = encoder->protected_->channels; - encoder->private_->streaminfo.data.stream_info.bits_per_sample = encoder->protected_->bits_per_sample; - encoder->private_->streaminfo.data.stream_info.total_samples = encoder->protected_->total_samples_estimate; /* we will replace this later with the real total */ - memset(encoder->private_->streaminfo.data.stream_info.md5sum, 0, 16); /* we don't know this yet; have to fill it in later */ - if(encoder->protected_->do_md5) - FLAC__MD5Init(&encoder->private_->md5context); - if(!FLAC__add_metadata_block(&encoder->private_->streaminfo, encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) { - /* the above function sets the state for us in case of an error */ - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - /* - * Now that the STREAMINFO block is written, we can init this to an - * absurdly-high value... - */ - encoder->private_->streaminfo.data.stream_info.min_framesize = (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN) - 1; - /* ... and clear this to 0 */ - encoder->private_->streaminfo.data.stream_info.total_samples = 0; - - /* - * Check to see if the supplied metadata contains a VORBIS_COMMENT; - * if not, we will write an empty one (FLAC__add_metadata_block() - * automatically supplies the vendor string). - * - * WATCHOUT: the Ogg FLAC mapping requires us to write this block after - * the STREAMINFO. (In the case that metadata_has_vorbis_comment is - * true it will have already insured that the metadata list is properly - * ordered.) - */ - if(!metadata_has_vorbis_comment) { - FLAC__StreamMetadata vorbis_comment; - vorbis_comment.type = FLAC__METADATA_TYPE_VORBIS_COMMENT; - vorbis_comment.is_last = (encoder->protected_->num_metadata_blocks == 0); - vorbis_comment.length = 4 + 4; /* MAGIC NUMBER */ - vorbis_comment.data.vorbis_comment.vendor_string.length = 0; - vorbis_comment.data.vorbis_comment.vendor_string.entry = 0; - vorbis_comment.data.vorbis_comment.num_comments = 0; - vorbis_comment.data.vorbis_comment.comments = 0; - if(!FLAC__add_metadata_block(&vorbis_comment, encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) { - /* the above function sets the state for us in case of an error */ - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - } - - /* - * write the user's metadata blocks - */ - for(i = 0; i < encoder->protected_->num_metadata_blocks; i++) { - encoder->protected_->metadata[i]->is_last = (i == encoder->protected_->num_metadata_blocks - 1); - if(!FLAC__add_metadata_block(encoder->protected_->metadata[i], encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) { - /* the above function sets the state for us in case of an error */ - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - } - - /* now that all the metadata is written, we save the stream offset */ - if(encoder->private_->tell_callback && encoder->private_->tell_callback(encoder, &encoder->protected_->audio_offset, encoder->private_->client_data) == FLAC__STREAM_ENCODER_TELL_STATUS_ERROR) { /* FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED just means we didn't get the offset; no error */ - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - if(encoder->protected_->verify) - encoder->private_->verify.state_hint = ENCODER_IN_AUDIO; - - return FLAC__STREAM_ENCODER_INIT_STATUS_OK; -} - -FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_stream( - FLAC__StreamEncoder *encoder, - FLAC__StreamEncoderWriteCallback write_callback, - FLAC__StreamEncoderSeekCallback seek_callback, - FLAC__StreamEncoderTellCallback tell_callback, - FLAC__StreamEncoderMetadataCallback metadata_callback, - void *client_data -) -{ - return init_stream_internal_enc( - encoder, - /*read_callback=*/0, - write_callback, - seek_callback, - tell_callback, - metadata_callback, - client_data, - /*is_ogg=*/false - ); -} - -FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_stream( - FLAC__StreamEncoder *encoder, - FLAC__StreamEncoderReadCallback read_callback, - FLAC__StreamEncoderWriteCallback write_callback, - FLAC__StreamEncoderSeekCallback seek_callback, - FLAC__StreamEncoderTellCallback tell_callback, - FLAC__StreamEncoderMetadataCallback metadata_callback, - void *client_data -) -{ - return init_stream_internal_enc( - encoder, - read_callback, - write_callback, - seek_callback, - tell_callback, - metadata_callback, - client_data, - /*is_ogg=*/true - ); -} - -static FLAC__StreamEncoderInitStatus init_FILE_internal_enc( - FLAC__StreamEncoder *encoder, - FILE *file, - FLAC__StreamEncoderProgressCallback progress_callback, - void *client_data, - FLAC__bool is_ogg -) -{ - FLAC__StreamEncoderInitStatus init_status; - - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != file); - - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED; - - /* double protection */ - if(file == 0) { - encoder->protected_->state = FLAC__STREAM_ENCODER_IO_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - /* - * To make sure that our file does not go unclosed after an error, we - * must assign the FILE pointer before any further error can occur in - * this routine. - */ - if(file == stdout) - file = get_binary_stdout_(); /* just to be safe */ - - encoder->private_->file = file; - - encoder->private_->progress_callback = progress_callback; - encoder->private_->bytes_written = 0; - encoder->private_->samples_written = 0; - encoder->private_->frames_written = 0; - - init_status = init_stream_internal_enc( - encoder, - encoder->private_->file == stdout? 0 : is_ogg? file_read_callback_enc : 0, - file_write_callback_, - encoder->private_->file == stdout? 0 : file_seek_callback_enc, - encoder->private_->file == stdout? 0 : file_tell_callback_enc, - /*metadata_callback=*/0, - client_data, - is_ogg - ); - if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) { - /* the above function sets the state for us in case of an error */ - return init_status; - } - - { - unsigned blocksize = FLAC__stream_encoder_get_blocksize(encoder); - - FLAC__ASSERT(blocksize != 0); - encoder->private_->total_frames_estimate = (unsigned)((FLAC__stream_encoder_get_total_samples_estimate(encoder) + blocksize - 1) / blocksize); - } - - return init_status; -} - -FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE( - FLAC__StreamEncoder *encoder, - FILE *file, - FLAC__StreamEncoderProgressCallback progress_callback, - void *client_data -) -{ - return init_FILE_internal_enc(encoder, file, progress_callback, client_data, /*is_ogg=*/false); -} - -FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE( - FLAC__StreamEncoder *encoder, - FILE *file, - FLAC__StreamEncoderProgressCallback progress_callback, - void *client_data -) -{ - return init_FILE_internal_enc(encoder, file, progress_callback, client_data, /*is_ogg=*/true); -} - -static FLAC__StreamEncoderInitStatus init_file_internal_enc( - FLAC__StreamEncoder *encoder, - const char *filename, - FLAC__StreamEncoderProgressCallback progress_callback, - void *client_data, - FLAC__bool is_ogg -) -{ - FILE *file; - - FLAC__ASSERT(0 != encoder); - - /* - * To make sure that our file does not go unclosed after an error, we - * have to do the same entrance checks here that are later performed - * in FLAC__stream_encoder_init_FILE() before the FILE* is assigned. - */ - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED; - - file = filename? fopen(filename, "w+b") : stdout; - - if(file == 0) { - encoder->protected_->state = FLAC__STREAM_ENCODER_IO_ERROR; - return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR; - } - - return init_FILE_internal_enc(encoder, file, progress_callback, client_data, is_ogg); -} - -FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file( - FLAC__StreamEncoder *encoder, - const char *filename, - FLAC__StreamEncoderProgressCallback progress_callback, - void *client_data -) -{ - return init_file_internal_enc(encoder, filename, progress_callback, client_data, /*is_ogg=*/false); -} - -FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file( - FLAC__StreamEncoder *encoder, - const char *filename, - FLAC__StreamEncoderProgressCallback progress_callback, - void *client_data -) -{ - return init_file_internal_enc(encoder, filename, progress_callback, client_data, /*is_ogg=*/true); -} - -FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder) -{ - FLAC__bool error = false; - - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - - if(encoder->protected_->state == FLAC__STREAM_ENCODER_UNINITIALIZED) - return true; - - if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK && !encoder->private_->is_being_deleted) { - if(encoder->private_->current_sample_number != 0) { - const FLAC__bool is_fractional_block = encoder->protected_->blocksize != encoder->private_->current_sample_number; - encoder->protected_->blocksize = encoder->private_->current_sample_number; - if(!process_frame_(encoder, is_fractional_block, /*is_last_block=*/true)) - error = true; - } - } - - if(encoder->protected_->do_md5) - FLAC__MD5Final(encoder->private_->streaminfo.data.stream_info.md5sum, &encoder->private_->md5context); - - if(!encoder->private_->is_being_deleted) { - if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK) { - if(encoder->private_->seek_callback) { -#if FLAC__HAS_OGG - if(encoder->private_->is_ogg) - update_ogg_metadata_(encoder); - else -#endif - update_metadata_(encoder); - - /* check if an error occurred while updating metadata */ - if(encoder->protected_->state != FLAC__STREAM_ENCODER_OK) - error = true; - } - if(encoder->private_->metadata_callback) - encoder->private_->metadata_callback(encoder, &encoder->private_->streaminfo, encoder->private_->client_data); - } - - if(encoder->protected_->verify && 0 != encoder->private_->verify.decoder && !FLAC__stream_decoder_finish(encoder->private_->verify.decoder)) { - if(!error) - encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA; - error = true; - } - } - - if(0 != encoder->private_->file) { - if(encoder->private_->file != stdout) - fclose(encoder->private_->file); - encoder->private_->file = 0; - } - -#if FLAC__HAS_OGG - if(encoder->private_->is_ogg) - FLAC__ogg_encoder_aspect_finish(&encoder->protected_->ogg_encoder_aspect); -#endif - - free_(encoder); - set_defaults_enc(encoder); - - if(!error) - encoder->protected_->state = FLAC__STREAM_ENCODER_UNINITIALIZED; - - return !error; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; -#if FLAC__HAS_OGG - /* can't check encoder->private_->is_ogg since that's not set until init time */ - FLAC__ogg_encoder_aspect_set_serial_number(&encoder->protected_->ogg_encoder_aspect, value); - return true; -#else - (void)value; - return false; -#endif -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; -#ifndef FLAC__MANDATORY_VERIFY_WHILE_ENCODING - encoder->protected_->verify = value; -#endif - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->streamable_subset = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_md5(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->do_md5 = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->channels = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->bits_per_sample = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->sample_rate = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__bool ok = true; - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - if(value >= sizeof(compression_levels_)/sizeof(compression_levels_[0])) - value = sizeof(compression_levels_)/sizeof(compression_levels_[0]) - 1; - ok &= FLAC__stream_encoder_set_do_mid_side_stereo (encoder, compression_levels_[value].do_mid_side_stereo); - ok &= FLAC__stream_encoder_set_loose_mid_side_stereo (encoder, compression_levels_[value].loose_mid_side_stereo); -#ifndef FLAC__INTEGER_ONLY_LIBRARY -#if 0 - /* was: */ - ok &= FLAC__stream_encoder_set_apodization (encoder, compression_levels_[value].apodization); - /* but it's too hard to specify the string in a locale-specific way */ -#else - encoder->protected_->num_apodizations = 1; - encoder->protected_->apodizations[0].type = FLAC__APODIZATION_TUKEY; - encoder->protected_->apodizations[0].parameters.tukey.p = 0.5; -#endif -#endif - ok &= FLAC__stream_encoder_set_max_lpc_order (encoder, compression_levels_[value].max_lpc_order); - ok &= FLAC__stream_encoder_set_qlp_coeff_precision (encoder, compression_levels_[value].qlp_coeff_precision); - ok &= FLAC__stream_encoder_set_do_qlp_coeff_prec_search (encoder, compression_levels_[value].do_qlp_coeff_prec_search); - ok &= FLAC__stream_encoder_set_do_escape_coding (encoder, compression_levels_[value].do_escape_coding); - ok &= FLAC__stream_encoder_set_do_exhaustive_model_search (encoder, compression_levels_[value].do_exhaustive_model_search); - ok &= FLAC__stream_encoder_set_min_residual_partition_order(encoder, compression_levels_[value].min_residual_partition_order); - ok &= FLAC__stream_encoder_set_max_residual_partition_order(encoder, compression_levels_[value].max_residual_partition_order); - ok &= FLAC__stream_encoder_set_rice_parameter_search_dist (encoder, compression_levels_[value].rice_parameter_search_dist); - return ok; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->blocksize = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->do_mid_side_stereo = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->loose_mid_side_stereo = value; - return true; -} - -/*@@@@add to tests*/ -FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - FLAC__ASSERT(0 != specification); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; -#ifdef FLAC__INTEGER_ONLY_LIBRARY - (void)specification; /* silently ignore since we haven't integerized; will always use a rectangular window */ -#else - encoder->protected_->num_apodizations = 0; - while(1) { - const char *s = strchr(specification, ';'); - const size_t n = s? (size_t)(s - specification) : strlen(specification); - if (n==8 && 0 == strncmp("bartlett" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BARTLETT; - else if(n==13 && 0 == strncmp("bartlett_hann", specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BARTLETT_HANN; - else if(n==8 && 0 == strncmp("blackman" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BLACKMAN; - else if(n==26 && 0 == strncmp("blackman_harris_4term_92db", specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE; - else if(n==6 && 0 == strncmp("connes" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_CONNES; - else if(n==7 && 0 == strncmp("flattop" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_FLATTOP; - else if(n>7 && 0 == strncmp("gauss(" , specification, 6)) { - FLAC__real stddev = (FLAC__real)strtod(specification+6, 0); - if (stddev > 0.0 && stddev <= 0.5) { - encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.gauss.stddev = stddev; - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_GAUSS; - } - } - else if(n==7 && 0 == strncmp("hamming" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_HAMMING; - else if(n==4 && 0 == strncmp("hann" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_HANN; - else if(n==13 && 0 == strncmp("kaiser_bessel", specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_KAISER_BESSEL; - else if(n==7 && 0 == strncmp("nuttall" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_NUTTALL; - else if(n==9 && 0 == strncmp("rectangle" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_RECTANGLE; - else if(n==8 && 0 == strncmp("triangle" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_TRIANGLE; - else if(n>7 && 0 == strncmp("tukey(" , specification, 6)) { - FLAC__real p = (FLAC__real)strtod(specification+6, 0); - if (p >= 0.0 && p <= 1.0) { - encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.tukey.p = p; - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_TUKEY; - } - } - else if(n==5 && 0 == strncmp("welch" , specification, n)) - encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_WELCH; - if (encoder->protected_->num_apodizations == 32) - break; - if (s) - specification = s+1; - else - break; - } - if(encoder->protected_->num_apodizations == 0) { - encoder->protected_->num_apodizations = 1; - encoder->protected_->apodizations[0].type = FLAC__APODIZATION_TUKEY; - encoder->protected_->apodizations[0].parameters.tukey.p = 0.5; - } -#endif - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->max_lpc_order = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->qlp_coeff_precision = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->do_qlp_coeff_prec_search = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; -#if 0 - /*@@@ deprecated: */ - encoder->protected_->do_escape_coding = value; -#else - (void)value; -#endif - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->do_exhaustive_model_search = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->min_residual_partition_order = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->max_residual_partition_order = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; -#if 0 - /*@@@ deprecated: */ - encoder->protected_->rice_parameter_search_dist = value; -#else - (void)value; -#endif - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->protected_->total_samples_estimate = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - if(0 == metadata) - num_blocks = 0; - if(0 == num_blocks) - metadata = 0; - /* realloc() does not do exactly what we want so... */ - if(encoder->protected_->metadata) { - free(encoder->protected_->metadata); - encoder->protected_->metadata = 0; - encoder->protected_->num_metadata_blocks = 0; - } - if(num_blocks) { - FLAC__StreamMetadata **m; - if(0 == (m = (FLAC__StreamMetadata**)safe_malloc_mul_2op_(sizeof(m[0]), /*times*/num_blocks))) - return false; - memcpy(m, metadata, sizeof(m[0]) * num_blocks); - encoder->protected_->metadata = m; - encoder->protected_->num_metadata_blocks = num_blocks; - } -#if FLAC__HAS_OGG - if(!FLAC__ogg_encoder_aspect_set_num_metadata(&encoder->protected_->ogg_encoder_aspect, num_blocks)) - return false; -#endif - return true; -} - -/* - * These three functions are not static, but not publically exposed in - * include/FLAC/ either. They are used by the test suite. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_disable_constant_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->private_->disable_constant_subframes = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_disable_fixed_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->private_->disable_fixed_subframes = value; - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_disable_verbatim_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED) - return false; - encoder->private_->disable_verbatim_subframes = value; - return true; -} - -FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->state; -} - -FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->verify) - return FLAC__stream_decoder_get_state(encoder->private_->verify.decoder); - else - return FLAC__STREAM_DECODER_UNINITIALIZED; -} - -FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR) - return FLAC__StreamEncoderStateString[encoder->protected_->state]; - else - return FLAC__stream_decoder_get_resolved_state_string(encoder->private_->verify.decoder); -} - -FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - if(0 != absolute_sample) - *absolute_sample = encoder->private_->verify.error_stats.absolute_sample; - if(0 != frame_number) - *frame_number = encoder->private_->verify.error_stats.frame_number; - if(0 != channel) - *channel = encoder->private_->verify.error_stats.channel; - if(0 != sample) - *sample = encoder->private_->verify.error_stats.sample; - if(0 != expected) - *expected = encoder->private_->verify.error_stats.expected; - if(0 != got) - *got = encoder->private_->verify.error_stats.got; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->verify; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->streamable_subset; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_do_md5(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->do_md5; -} - -FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->channels; -} - -FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->bits_per_sample; -} - -FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->sample_rate; -} - -FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->blocksize; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->do_mid_side_stereo; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->loose_mid_side_stereo; -} - -FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->max_lpc_order; -} - -FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->qlp_coeff_precision; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->do_qlp_coeff_prec_search; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->do_escape_coding; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->do_exhaustive_model_search; -} - -FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->min_residual_partition_order; -} - -FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->max_residual_partition_order; -} - -FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->rice_parameter_search_dist; -} - -FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - return encoder->protected_->total_samples_estimate; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples) -{ - unsigned i, j = 0, channel; - const unsigned channels = encoder->protected_->channels, blocksize = encoder->protected_->blocksize; - - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK); - - do { - const unsigned n = min(blocksize+OVERREAD_-encoder->private_->current_sample_number, samples-j); - - if(encoder->protected_->verify) - append_to_verify_fifo_(&encoder->private_->verify.input_fifo, buffer, j, channels, n); - - for(channel = 0; channel < channels; channel++) - memcpy(&encoder->private_->integer_signal[channel][encoder->private_->current_sample_number], &buffer[channel][j], sizeof(buffer[channel][0]) * n); - - if(encoder->protected_->do_mid_side_stereo) { - FLAC__ASSERT(channels == 2); - /* "i <= blocksize" to overread 1 sample; see comment in OVERREAD_ decl */ - for(i = encoder->private_->current_sample_number; i <= blocksize && j < samples; i++, j++) { - encoder->private_->integer_signal_mid_side[1][i] = buffer[0][j] - buffer[1][j]; - encoder->private_->integer_signal_mid_side[0][i] = (buffer[0][j] + buffer[1][j]) >> 1; /* NOTE: not the same as 'mid = (buffer[0][j] + buffer[1][j]) / 2' ! */ - } - } - else - j += n; - - encoder->private_->current_sample_number += n; - - /* we only process if we have a full block + 1 extra sample; final block is always handled by FLAC__stream_encoder_finish() */ - if(encoder->private_->current_sample_number > blocksize) { - FLAC__ASSERT(encoder->private_->current_sample_number == blocksize+OVERREAD_); - FLAC__ASSERT(OVERREAD_ == 1); /* assert we only overread 1 sample which simplifies the rest of the code below */ - if(!process_frame_(encoder, /*is_fractional_block=*/false, /*is_last_block=*/false)) - return false; - /* move unprocessed overread samples to beginnings of arrays */ - for(channel = 0; channel < channels; channel++) - encoder->private_->integer_signal[channel][0] = encoder->private_->integer_signal[channel][blocksize]; - if(encoder->protected_->do_mid_side_stereo) { - encoder->private_->integer_signal_mid_side[0][0] = encoder->private_->integer_signal_mid_side[0][blocksize]; - encoder->private_->integer_signal_mid_side[1][0] = encoder->private_->integer_signal_mid_side[1][blocksize]; - } - encoder->private_->current_sample_number = 1; - } - } while(j < samples); - - return true; -} - -FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples) -{ - unsigned i, j, k, channel; - FLAC__int32 x, mid, side; - const unsigned channels = encoder->protected_->channels, blocksize = encoder->protected_->blocksize; - - FLAC__ASSERT(0 != encoder); - FLAC__ASSERT(0 != encoder->private_); - FLAC__ASSERT(0 != encoder->protected_); - FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK); - - j = k = 0; - /* - * we have several flavors of the same basic loop, optimized for - * different conditions: - */ - if(encoder->protected_->do_mid_side_stereo && channels == 2) { - /* - * stereo coding: unroll channel loop - */ - do { - if(encoder->protected_->verify) - append_to_verify_fifo_interleaved_(&encoder->private_->verify.input_fifo, buffer, j, channels, min(blocksize+OVERREAD_-encoder->private_->current_sample_number, samples-j)); - - /* "i <= blocksize" to overread 1 sample; see comment in OVERREAD_ decl */ - for(i = encoder->private_->current_sample_number; i <= blocksize && j < samples; i++, j++) { - encoder->private_->integer_signal[0][i] = mid = side = buffer[k++]; - x = buffer[k++]; - encoder->private_->integer_signal[1][i] = x; - mid += x; - side -= x; - mid >>= 1; /* NOTE: not the same as 'mid = (left + right) / 2' ! */ - encoder->private_->integer_signal_mid_side[1][i] = side; - encoder->private_->integer_signal_mid_side[0][i] = mid; - } - encoder->private_->current_sample_number = i; - /* we only process if we have a full block + 1 extra sample; final block is always handled by FLAC__stream_encoder_finish() */ - if(i > blocksize) { - if(!process_frame_(encoder, /*is_fractional_block=*/false, /*is_last_block=*/false)) - return false; - /* move unprocessed overread samples to beginnings of arrays */ - FLAC__ASSERT(i == blocksize+OVERREAD_); - FLAC__ASSERT(OVERREAD_ == 1); /* assert we only overread 1 sample which simplifies the rest of the code below */ - encoder->private_->integer_signal[0][0] = encoder->private_->integer_signal[0][blocksize]; - encoder->private_->integer_signal[1][0] = encoder->private_->integer_signal[1][blocksize]; - encoder->private_->integer_signal_mid_side[0][0] = encoder->private_->integer_signal_mid_side[0][blocksize]; - encoder->private_->integer_signal_mid_side[1][0] = encoder->private_->integer_signal_mid_side[1][blocksize]; - encoder->private_->current_sample_number = 1; - } - } while(j < samples); - } - else { - /* - * independent channel coding: buffer each channel in inner loop - */ - do { - if(encoder->protected_->verify) - append_to_verify_fifo_interleaved_(&encoder->private_->verify.input_fifo, buffer, j, channels, min(blocksize+OVERREAD_-encoder->private_->current_sample_number, samples-j)); - - /* "i <= blocksize" to overread 1 sample; see comment in OVERREAD_ decl */ - for(i = encoder->private_->current_sample_number; i <= blocksize && j < samples; i++, j++) { - for(channel = 0; channel < channels; channel++) - encoder->private_->integer_signal[channel][i] = buffer[k++]; - } - encoder->private_->current_sample_number = i; - /* we only process if we have a full block + 1 extra sample; final block is always handled by FLAC__stream_encoder_finish() */ - if(i > blocksize) { - if(!process_frame_(encoder, /*is_fractional_block=*/false, /*is_last_block=*/false)) - return false; - /* move unprocessed overread samples to beginnings of arrays */ - FLAC__ASSERT(i == blocksize+OVERREAD_); - FLAC__ASSERT(OVERREAD_ == 1); /* assert we only overread 1 sample which simplifies the rest of the code below */ - for(channel = 0; channel < channels; channel++) - encoder->private_->integer_signal[channel][0] = encoder->private_->integer_signal[channel][blocksize]; - encoder->private_->current_sample_number = 1; - } - } while(j < samples); - } - - return true; -} - -/*********************************************************************** - * - * Private class methods - * - ***********************************************************************/ - -void set_defaults_enc(FLAC__StreamEncoder *encoder) -{ - FLAC__ASSERT(0 != encoder); - -#ifdef FLAC__MANDATORY_VERIFY_WHILE_ENCODING - encoder->protected_->verify = true; -#else - encoder->protected_->verify = false; -#endif - encoder->protected_->streamable_subset = true; - encoder->protected_->do_md5 = true; - encoder->protected_->do_mid_side_stereo = false; - encoder->protected_->loose_mid_side_stereo = false; - encoder->protected_->channels = 2; - encoder->protected_->bits_per_sample = 16; - encoder->protected_->sample_rate = 44100; - encoder->protected_->blocksize = 0; -#ifndef FLAC__INTEGER_ONLY_LIBRARY - encoder->protected_->num_apodizations = 1; - encoder->protected_->apodizations[0].type = FLAC__APODIZATION_TUKEY; - encoder->protected_->apodizations[0].parameters.tukey.p = 0.5; -#endif - encoder->protected_->max_lpc_order = 0; - encoder->protected_->qlp_coeff_precision = 0; - encoder->protected_->do_qlp_coeff_prec_search = false; - encoder->protected_->do_exhaustive_model_search = false; - encoder->protected_->do_escape_coding = false; - encoder->protected_->min_residual_partition_order = 0; - encoder->protected_->max_residual_partition_order = 0; - encoder->protected_->rice_parameter_search_dist = 0; - encoder->protected_->total_samples_estimate = 0; - encoder->protected_->metadata = 0; - encoder->protected_->num_metadata_blocks = 0; - - encoder->private_->seek_table = 0; - encoder->private_->disable_constant_subframes = false; - encoder->private_->disable_fixed_subframes = false; - encoder->private_->disable_verbatim_subframes = false; -#if FLAC__HAS_OGG - encoder->private_->is_ogg = false; -#endif - encoder->private_->read_callback = 0; - encoder->private_->write_callback = 0; - encoder->private_->seek_callback = 0; - encoder->private_->tell_callback = 0; - encoder->private_->metadata_callback = 0; - encoder->private_->progress_callback = 0; - encoder->private_->client_data = 0; - -#if FLAC__HAS_OGG - FLAC__ogg_encoder_aspect_set_defaults(&encoder->protected_->ogg_encoder_aspect); -#endif -} - -void free_(FLAC__StreamEncoder *encoder) -{ - unsigned i, channel; - - FLAC__ASSERT(0 != encoder); - if(encoder->protected_->metadata) { - free(encoder->protected_->metadata); - encoder->protected_->metadata = 0; - encoder->protected_->num_metadata_blocks = 0; - } - for(i = 0; i < encoder->protected_->channels; i++) { - if(0 != encoder->private_->integer_signal_unaligned[i]) { - free(encoder->private_->integer_signal_unaligned[i]); - encoder->private_->integer_signal_unaligned[i] = 0; - } -#ifndef FLAC__INTEGER_ONLY_LIBRARY - if(0 != encoder->private_->real_signal_unaligned[i]) { - free(encoder->private_->real_signal_unaligned[i]); - encoder->private_->real_signal_unaligned[i] = 0; - } -#endif - } - for(i = 0; i < 2; i++) { - if(0 != encoder->private_->integer_signal_mid_side_unaligned[i]) { - free(encoder->private_->integer_signal_mid_side_unaligned[i]); - encoder->private_->integer_signal_mid_side_unaligned[i] = 0; - } -#ifndef FLAC__INTEGER_ONLY_LIBRARY - if(0 != encoder->private_->real_signal_mid_side_unaligned[i]) { - free(encoder->private_->real_signal_mid_side_unaligned[i]); - encoder->private_->real_signal_mid_side_unaligned[i] = 0; - } -#endif - } -#ifndef FLAC__INTEGER_ONLY_LIBRARY - for(i = 0; i < encoder->protected_->num_apodizations; i++) { - if(0 != encoder->private_->window_unaligned[i]) { - free(encoder->private_->window_unaligned[i]); - encoder->private_->window_unaligned[i] = 0; - } - } - if(0 != encoder->private_->windowed_signal_unaligned) { - free(encoder->private_->windowed_signal_unaligned); - encoder->private_->windowed_signal_unaligned = 0; - } -#endif - for(channel = 0; channel < encoder->protected_->channels; channel++) { - for(i = 0; i < 2; i++) { - if(0 != encoder->private_->residual_workspace_unaligned[channel][i]) { - free(encoder->private_->residual_workspace_unaligned[channel][i]); - encoder->private_->residual_workspace_unaligned[channel][i] = 0; - } - } - } - for(channel = 0; channel < 2; channel++) { - for(i = 0; i < 2; i++) { - if(0 != encoder->private_->residual_workspace_mid_side_unaligned[channel][i]) { - free(encoder->private_->residual_workspace_mid_side_unaligned[channel][i]); - encoder->private_->residual_workspace_mid_side_unaligned[channel][i] = 0; - } - } - } - if(0 != encoder->private_->abs_residual_partition_sums_unaligned) { - free(encoder->private_->abs_residual_partition_sums_unaligned); - encoder->private_->abs_residual_partition_sums_unaligned = 0; - } - if(0 != encoder->private_->raw_bits_per_partition_unaligned) { - free(encoder->private_->raw_bits_per_partition_unaligned); - encoder->private_->raw_bits_per_partition_unaligned = 0; - } - if(encoder->protected_->verify) { - for(i = 0; i < encoder->protected_->channels; i++) { - if(0 != encoder->private_->verify.input_fifo.data[i]) { - free(encoder->private_->verify.input_fifo.data[i]); - encoder->private_->verify.input_fifo.data[i] = 0; - } - } - } - FLAC__bitwriter_free(encoder->private_->frame); -} - -FLAC__bool resize_buffers_(FLAC__StreamEncoder *encoder, unsigned new_blocksize) -{ - FLAC__bool ok; - unsigned i, channel; - - FLAC__ASSERT(new_blocksize > 0); - FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK); - FLAC__ASSERT(encoder->private_->current_sample_number == 0); - - /* To avoid excessive malloc'ing, we only grow the buffer; no shrinking. */ - if(new_blocksize <= encoder->private_->input_capacity) - return true; - - ok = true; - - /* WATCHOUT: FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx() - * requires that the input arrays (in our case the integer signals) - * have a buffer of up to 3 zeroes in front (at negative indices) for - * alignment purposes; we use 4 in front to keep the data well-aligned. - */ - - for(i = 0; ok && i < encoder->protected_->channels; i++) { - ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize+4+OVERREAD_, &encoder->private_->integer_signal_unaligned[i], &encoder->private_->integer_signal[i]); - memset(encoder->private_->integer_signal[i], 0, sizeof(FLAC__int32)*4); - encoder->private_->integer_signal[i] += 4; -#ifndef FLAC__INTEGER_ONLY_LIBRARY -#if 0 /* @@@ currently unused */ - if(encoder->protected_->max_lpc_order > 0) - ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize+OVERREAD_, &encoder->private_->real_signal_unaligned[i], &encoder->private_->real_signal[i]); -#endif -#endif - } - for(i = 0; ok && i < 2; i++) { - ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize+4+OVERREAD_, &encoder->private_->integer_signal_mid_side_unaligned[i], &encoder->private_->integer_signal_mid_side[i]); - memset(encoder->private_->integer_signal_mid_side[i], 0, sizeof(FLAC__int32)*4); - encoder->private_->integer_signal_mid_side[i] += 4; -#ifndef FLAC__INTEGER_ONLY_LIBRARY -#if 0 /* @@@ currently unused */ - if(encoder->protected_->max_lpc_order > 0) - ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize+OVERREAD_, &encoder->private_->real_signal_mid_side_unaligned[i], &encoder->private_->real_signal_mid_side[i]); -#endif -#endif - } -#ifndef FLAC__INTEGER_ONLY_LIBRARY - if(ok && encoder->protected_->max_lpc_order > 0) { - for(i = 0; ok && i < encoder->protected_->num_apodizations; i++) - ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize, &encoder->private_->window_unaligned[i], &encoder->private_->window[i]); - ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize, &encoder->private_->windowed_signal_unaligned, &encoder->private_->windowed_signal); - } -#endif - for(channel = 0; ok && channel < encoder->protected_->channels; channel++) { - for(i = 0; ok && i < 2; i++) { - ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize, &encoder->private_->residual_workspace_unaligned[channel][i], &encoder->private_->residual_workspace[channel][i]); - } - } - for(channel = 0; ok && channel < 2; channel++) { - for(i = 0; ok && i < 2; i++) { - ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize, &encoder->private_->residual_workspace_mid_side_unaligned[channel][i], &encoder->private_->residual_workspace_mid_side[channel][i]); - } - } - /* the *2 is an approximation to the series 1 + 1/2 + 1/4 + ... that sums tree occupies in a flat array */ - /*@@@ new_blocksize*2 is too pessimistic, but to fix, we need smarter logic because a smaller new_blocksize can actually increase the # of partitions; would require moving this out into a separate function, then checking its capacity against the need of the current blocksize&min/max_partition_order (and maybe predictor order) */ - ok = ok && FLAC__memory_alloc_aligned_uint64_array(new_blocksize * 2, &encoder->private_->abs_residual_partition_sums_unaligned, &encoder->private_->abs_residual_partition_sums); - if(encoder->protected_->do_escape_coding) - ok = ok && FLAC__memory_alloc_aligned_unsigned_array(new_blocksize * 2, &encoder->private_->raw_bits_per_partition_unaligned, &encoder->private_->raw_bits_per_partition); - - /* now adjust the windows if the blocksize has changed */ -#ifndef FLAC__INTEGER_ONLY_LIBRARY - if(ok && new_blocksize != encoder->private_->input_capacity && encoder->protected_->max_lpc_order > 0) { - for(i = 0; ok && i < encoder->protected_->num_apodizations; i++) { - switch(encoder->protected_->apodizations[i].type) { - case FLAC__APODIZATION_BARTLETT: - FLAC__window_bartlett(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_BARTLETT_HANN: - FLAC__window_bartlett_hann(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_BLACKMAN: - FLAC__window_blackman(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE: - FLAC__window_blackman_harris_4term_92db_sidelobe(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_CONNES: - FLAC__window_connes(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_FLATTOP: - FLAC__window_flattop(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_GAUSS: - FLAC__window_gauss(encoder->private_->window[i], new_blocksize, encoder->protected_->apodizations[i].parameters.gauss.stddev); - break; - case FLAC__APODIZATION_HAMMING: - FLAC__window_hamming(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_HANN: - FLAC__window_hann(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_KAISER_BESSEL: - FLAC__window_kaiser_bessel(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_NUTTALL: - FLAC__window_nuttall(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_RECTANGLE: - FLAC__window_rectangle(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_TRIANGLE: - FLAC__window_triangle(encoder->private_->window[i], new_blocksize); - break; - case FLAC__APODIZATION_TUKEY: - FLAC__window_tukey(encoder->private_->window[i], new_blocksize, encoder->protected_->apodizations[i].parameters.tukey.p); - break; - case FLAC__APODIZATION_WELCH: - FLAC__window_welch(encoder->private_->window[i], new_blocksize); - break; - default: - FLAC__ASSERT(0); - /* double protection */ - FLAC__window_hann(encoder->private_->window[i], new_blocksize); - break; - } - } - } -#endif - - if(ok) - encoder->private_->input_capacity = new_blocksize; - else - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - - return ok; -} - -FLAC__bool write_bitbuffer_(FLAC__StreamEncoder *encoder, unsigned samples, FLAC__bool is_last_block) -{ - const FLAC__byte *buffer; - size_t bytes; - - FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(encoder->private_->frame)); - - if(!FLAC__bitwriter_get_buffer(encoder->private_->frame, &buffer, &bytes)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - return false; - } - - if(encoder->protected_->verify) { - encoder->private_->verify.output.data = buffer; - encoder->private_->verify.output.bytes = bytes; - if(encoder->private_->verify.state_hint == ENCODER_IN_MAGIC) { - encoder->private_->verify.needs_magic_hack = true; - } - else { - if(!FLAC__stream_decoder_process_single(encoder->private_->verify.decoder)) { - FLAC__bitwriter_release_buffer(encoder->private_->frame); - FLAC__bitwriter_clear(encoder->private_->frame); - if(encoder->protected_->state != FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA) - encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR; - return false; - } - } - } - - if(write_frame_(encoder, buffer, bytes, samples, is_last_block) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) { - FLAC__bitwriter_release_buffer(encoder->private_->frame); - FLAC__bitwriter_clear(encoder->private_->frame); - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return false; - } - - FLAC__bitwriter_release_buffer(encoder->private_->frame); - FLAC__bitwriter_clear(encoder->private_->frame); - - if(samples > 0) { - encoder->private_->streaminfo.data.stream_info.min_framesize = min(bytes, encoder->private_->streaminfo.data.stream_info.min_framesize); - encoder->private_->streaminfo.data.stream_info.max_framesize = max(bytes, encoder->private_->streaminfo.data.stream_info.max_framesize); - } - - return true; -} - -FLAC__StreamEncoderWriteStatus write_frame_(FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, FLAC__bool is_last_block) -{ - FLAC__StreamEncoderWriteStatus status; - FLAC__uint64 output_position = 0; - - /* FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED just means we didn't get the offset; no error */ - if(encoder->private_->tell_callback && encoder->private_->tell_callback(encoder, &output_position, encoder->private_->client_data) == FLAC__STREAM_ENCODER_TELL_STATUS_ERROR) { - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; - } - - /* - * Watch for the STREAMINFO block and first SEEKTABLE block to go by and store their offsets. - */ - if(samples == 0) { - FLAC__MetadataType type = (FLAC__MetadataType) (buffer[0] & 0x7f); - if(type == FLAC__METADATA_TYPE_STREAMINFO) - encoder->protected_->streaminfo_offset = output_position; - else if(type == FLAC__METADATA_TYPE_SEEKTABLE && encoder->protected_->seektable_offset == 0) - encoder->protected_->seektable_offset = output_position; - } - - /* - * Mark the current seek point if hit (if audio_offset == 0 that - * means we're still writing metadata and haven't hit the first - * frame yet) - */ - if(0 != encoder->private_->seek_table && encoder->protected_->audio_offset > 0 && encoder->private_->seek_table->num_points > 0) { - const unsigned blocksize = FLAC__stream_encoder_get_blocksize(encoder); - const FLAC__uint64 frame_first_sample = encoder->private_->samples_written; - const FLAC__uint64 frame_last_sample = frame_first_sample + (FLAC__uint64)blocksize - 1; - FLAC__uint64 test_sample; - unsigned i; - for(i = encoder->private_->first_seekpoint_to_check; i < encoder->private_->seek_table->num_points; i++) { - test_sample = encoder->private_->seek_table->points[i].sample_number; - if(test_sample > frame_last_sample) { - break; - } - else if(test_sample >= frame_first_sample) { - encoder->private_->seek_table->points[i].sample_number = frame_first_sample; - encoder->private_->seek_table->points[i].stream_offset = output_position - encoder->protected_->audio_offset; - encoder->private_->seek_table->points[i].frame_samples = blocksize; - encoder->private_->first_seekpoint_to_check++; - /* DO NOT: "break;" and here's why: - * The seektable template may contain more than one target - * sample for any given frame; we will keep looping, generating - * duplicate seekpoints for them, and we'll clean it up later, - * just before writing the seektable back to the metadata. - */ - } - else { - encoder->private_->first_seekpoint_to_check++; - } - } - } - -#if FLAC__HAS_OGG - if(encoder->private_->is_ogg) { - status = FLAC__ogg_encoder_aspect_write_callback_wrapper( - &encoder->protected_->ogg_encoder_aspect, - buffer, - bytes, - samples, - encoder->private_->current_frame_number, - is_last_block, - (FLAC__OggEncoderAspectWriteCallbackProxy)encoder->private_->write_callback, - encoder, - encoder->private_->client_data - ); - } - else -#endif - status = encoder->private_->write_callback(encoder, buffer, bytes, samples, encoder->private_->current_frame_number, encoder->private_->client_data); - - if(status == FLAC__STREAM_ENCODER_WRITE_STATUS_OK) { - encoder->private_->bytes_written += bytes; - encoder->private_->samples_written += samples; - /* we keep a high watermark on the number of frames written because - * when the encoder goes back to write metadata, 'current_frame' - * will drop back to 0. - */ - encoder->private_->frames_written = max(encoder->private_->frames_written, encoder->private_->current_frame_number+1); - } - else - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - - return status; -} - -/* Gets called when the encoding process has finished so that we can update the STREAMINFO and SEEKTABLE blocks. */ -void update_metadata_(const FLAC__StreamEncoder *encoder) -{ - FLAC__byte b[max(6, FLAC__STREAM_METADATA_SEEKPOINT_LENGTH)]; - const FLAC__StreamMetadata *metadata = &encoder->private_->streaminfo; - const FLAC__uint64 samples = metadata->data.stream_info.total_samples; - const unsigned min_framesize = metadata->data.stream_info.min_framesize; - const unsigned max_framesize = metadata->data.stream_info.max_framesize; - const unsigned bps = metadata->data.stream_info.bits_per_sample; - FLAC__StreamEncoderSeekStatus seek_status; - - FLAC__ASSERT(metadata->type == FLAC__METADATA_TYPE_STREAMINFO); - - /* All this is based on intimate knowledge of the stream header - * layout, but a change to the header format that would break this - * would also break all streams encoded in the previous format. - */ - - /* - * Write MD5 signature - */ - { - const unsigned md5_offset = - FLAC__STREAM_METADATA_HEADER_LENGTH + - ( - FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN + - FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN - ) / 8; - - if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->streaminfo_offset + md5_offset, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) { - if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR) - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - if(encoder->private_->write_callback(encoder, metadata->data.stream_info.md5sum, 16, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) { - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - } - - /* - * Write total samples - */ - { - const unsigned total_samples_byte_offset = - FLAC__STREAM_METADATA_HEADER_LENGTH + - ( - FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN + - FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN - - 4 - ) / 8; - - b[0] = ((FLAC__byte)(bps-1) << 4) | (FLAC__byte)((samples >> 32) & 0x0F); - b[1] = (FLAC__byte)((samples >> 24) & 0xFF); - b[2] = (FLAC__byte)((samples >> 16) & 0xFF); - b[3] = (FLAC__byte)((samples >> 8) & 0xFF); - b[4] = (FLAC__byte)(samples & 0xFF); - if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->streaminfo_offset + total_samples_byte_offset, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) { - if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR) - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - if(encoder->private_->write_callback(encoder, b, 5, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) { - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - } - - /* - * Write min/max framesize - */ - { - const unsigned min_framesize_offset = - FLAC__STREAM_METADATA_HEADER_LENGTH + - ( - FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN - ) / 8; - - b[0] = (FLAC__byte)((min_framesize >> 16) & 0xFF); - b[1] = (FLAC__byte)((min_framesize >> 8) & 0xFF); - b[2] = (FLAC__byte)(min_framesize & 0xFF); - b[3] = (FLAC__byte)((max_framesize >> 16) & 0xFF); - b[4] = (FLAC__byte)((max_framesize >> 8) & 0xFF); - b[5] = (FLAC__byte)(max_framesize & 0xFF); - if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->streaminfo_offset + min_framesize_offset, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) { - if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR) - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - if(encoder->private_->write_callback(encoder, b, 6, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) { - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - } - - /* - * Write seektable - */ - if(0 != encoder->private_->seek_table && encoder->private_->seek_table->num_points > 0 && encoder->protected_->seektable_offset > 0) { - unsigned i; - - FLAC__format_seektable_sort(encoder->private_->seek_table); - - FLAC__ASSERT(FLAC__format_seektable_is_legal(encoder->private_->seek_table)); - - if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->seektable_offset + FLAC__STREAM_METADATA_HEADER_LENGTH, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) { - if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR) - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - - for(i = 0; i < encoder->private_->seek_table->num_points; i++) { - FLAC__uint64 xx; - unsigned x; - xx = encoder->private_->seek_table->points[i].sample_number; - b[7] = (FLAC__byte)xx; xx >>= 8; - b[6] = (FLAC__byte)xx; xx >>= 8; - b[5] = (FLAC__byte)xx; xx >>= 8; - b[4] = (FLAC__byte)xx; xx >>= 8; - b[3] = (FLAC__byte)xx; xx >>= 8; - b[2] = (FLAC__byte)xx; xx >>= 8; - b[1] = (FLAC__byte)xx; xx >>= 8; - b[0] = (FLAC__byte)xx; xx >>= 8; - xx = encoder->private_->seek_table->points[i].stream_offset; - b[15] = (FLAC__byte)xx; xx >>= 8; - b[14] = (FLAC__byte)xx; xx >>= 8; - b[13] = (FLAC__byte)xx; xx >>= 8; - b[12] = (FLAC__byte)xx; xx >>= 8; - b[11] = (FLAC__byte)xx; xx >>= 8; - b[10] = (FLAC__byte)xx; xx >>= 8; - b[9] = (FLAC__byte)xx; xx >>= 8; - b[8] = (FLAC__byte)xx; xx >>= 8; - x = encoder->private_->seek_table->points[i].frame_samples; - b[17] = (FLAC__byte)x; x >>= 8; - b[16] = (FLAC__byte)x; x >>= 8; - if(encoder->private_->write_callback(encoder, b, 18, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) { - encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR; - return; - } - } - } -} - -#if FLAC__HAS_OGG -/* Gets called when the encoding process has finished so that we can update the STREAMINFO and SEEKTABLE blocks. */ -void update_ogg_metadata_(FLAC__StreamEncoder *encoder) -{ - /* the # of bytes in the 1st packet that precede the STREAMINFO */ - static const unsigned FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH = - FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH + - FLAC__OGG_MAPPING_MAGIC_LENGTH + - FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH + - FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH + - FLAC__OGG_MAPPING_NUM_HEADERS_LENGTH + - FLAC__STREAM_SYNC_LENGTH - ; - FLAC__byte b[max(6, FLAC__STREAM_METADATA_SEEKPOINT_LENGTH)]; - const FLAC__StreamMetadata *metadata = &encoder->private_->streaminfo; - const FLAC__uint64 samples = metadata->data.stream_info.total_samples; - const unsigned min_framesize = metadata->data.stream_info.min_framesize; - const unsigned max_framesize = metadata->data.stream_info.max_framesize; - ogg_page page; - - FLAC__ASSERT(metadata->type == FLAC__METADATA_TYPE_STREAMINFO); - FLAC__ASSERT(0 != encoder->private_->seek_callback); - - /* Pre-check that client supports seeking, since we don't want the - * ogg_helper code to ever have to deal with this condition. - */ - if(encoder->private_->seek_callback(encoder, 0, encoder->private_->client_data) == FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED) - return; - - /* All this is based on intimate knowledge of the stream header - * layout, but a change to the header format that would break this - * would also break all streams encoded in the previous format. - */ - - /** - ** Write STREAMINFO stats - **/ - simple_ogg_page__init(&page); - if(!simple_ogg_page__get_at(encoder, encoder->protected_->streaminfo_offset, &page, encoder->private_->seek_callback, encoder->private_->read_callback, encoder->private_->client_data)) { - simple_ogg_page__clear(&page); - return; /* state already set */ - } - - /* - * Write MD5 signature - */ - { - const unsigned md5_offset = - FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH + - FLAC__STREAM_METADATA_HEADER_LENGTH + - ( - FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN + - FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN - ) / 8; - - if(md5_offset + 16 > (unsigned)page.body_len) { - encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR; - simple_ogg_page__clear(&page); - return; - } - memcpy(page.body + md5_offset, metadata->data.stream_info.md5sum, 16); - } - - /* - * Write total samples - */ - { - const unsigned total_samples_byte_offset = - FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH + - FLAC__STREAM_METADATA_HEADER_LENGTH + - ( - FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN + - FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN - - 4 - ) / 8; - - if(total_samples_byte_offset + 5 > (unsigned)page.body_len) { - encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR; - simple_ogg_page__clear(&page); - return; - } - b[0] = (FLAC__byte)page.body[total_samples_byte_offset] & 0xF0; - b[0] |= (FLAC__byte)((samples >> 32) & 0x0F); - b[1] = (FLAC__byte)((samples >> 24) & 0xFF); - b[2] = (FLAC__byte)((samples >> 16) & 0xFF); - b[3] = (FLAC__byte)((samples >> 8) & 0xFF); - b[4] = (FLAC__byte)(samples & 0xFF); - memcpy(page.body + total_samples_byte_offset, b, 5); - } - - /* - * Write min/max framesize - */ - { - const unsigned min_framesize_offset = - FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH + - FLAC__STREAM_METADATA_HEADER_LENGTH + - ( - FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN + - FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN - ) / 8; - - if(min_framesize_offset + 6 > (unsigned)page.body_len) { - encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR; - simple_ogg_page__clear(&page); - return; - } - b[0] = (FLAC__byte)((min_framesize >> 16) & 0xFF); - b[1] = (FLAC__byte)((min_framesize >> 8) & 0xFF); - b[2] = (FLAC__byte)(min_framesize & 0xFF); - b[3] = (FLAC__byte)((max_framesize >> 16) & 0xFF); - b[4] = (FLAC__byte)((max_framesize >> 8) & 0xFF); - b[5] = (FLAC__byte)(max_framesize & 0xFF); - memcpy(page.body + min_framesize_offset, b, 6); - } - if(!simple_ogg_page__set_at(encoder, encoder->protected_->streaminfo_offset, &page, encoder->private_->seek_callback, encoder->private_->write_callback, encoder->private_->client_data)) { - simple_ogg_page__clear(&page); - return; /* state already set */ - } - simple_ogg_page__clear(&page); - - /* - * Write seektable - */ - if(0 != encoder->private_->seek_table && encoder->private_->seek_table->num_points > 0 && encoder->protected_->seektable_offset > 0) { - unsigned i; - FLAC__byte *p; - - FLAC__format_seektable_sort(encoder->private_->seek_table); - - FLAC__ASSERT(FLAC__format_seektable_is_legal(encoder->private_->seek_table)); - - simple_ogg_page__init(&page); - if(!simple_ogg_page__get_at(encoder, encoder->protected_->seektable_offset, &page, encoder->private_->seek_callback, encoder->private_->read_callback, encoder->private_->client_data)) { - simple_ogg_page__clear(&page); - return; /* state already set */ - } - - if((FLAC__STREAM_METADATA_HEADER_LENGTH + 18*encoder->private_->seek_table->num_points) != (unsigned)page.body_len) { - encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR; - simple_ogg_page__clear(&page); - return; - } - - for(i = 0, p = page.body + FLAC__STREAM_METADATA_HEADER_LENGTH; i < encoder->private_->seek_table->num_points; i++, p += 18) { - FLAC__uint64 xx; - unsigned x; - xx = encoder->private_->seek_table->points[i].sample_number; - b[7] = (FLAC__byte)xx; xx >>= 8; - b[6] = (FLAC__byte)xx; xx >>= 8; - b[5] = (FLAC__byte)xx; xx >>= 8; - b[4] = (FLAC__byte)xx; xx >>= 8; - b[3] = (FLAC__byte)xx; xx >>= 8; - b[2] = (FLAC__byte)xx; xx >>= 8; - b[1] = (FLAC__byte)xx; xx >>= 8; - b[0] = (FLAC__byte)xx; xx >>= 8; - xx = encoder->private_->seek_table->points[i].stream_offset; - b[15] = (FLAC__byte)xx; xx >>= 8; - b[14] = (FLAC__byte)xx; xx >>= 8; - b[13] = (FLAC__byte)xx; xx >>= 8; - b[12] = (FLAC__byte)xx; xx >>= 8; - b[11] = (FLAC__byte)xx; xx >>= 8; - b[10] = (FLAC__byte)xx; xx >>= 8; - b[9] = (FLAC__byte)xx; xx >>= 8; - b[8] = (FLAC__byte)xx; xx >>= 8; - x = encoder->private_->seek_table->points[i].frame_samples; - b[17] = (FLAC__byte)x; x >>= 8; - b[16] = (FLAC__byte)x; x >>= 8; - memcpy(p, b, 18); - } - - if(!simple_ogg_page__set_at(encoder, encoder->protected_->seektable_offset, &page, encoder->private_->seek_callback, encoder->private_->write_callback, encoder->private_->client_data)) { - simple_ogg_page__clear(&page); - return; /* state already set */ - } - simple_ogg_page__clear(&page); - } -} -#endif - -FLAC__bool process_frame_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block, FLAC__bool is_last_block) -{ - FLAC__uint16 crc; - FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK); - - /* - * Accumulate raw signal to the MD5 signature - */ - if(encoder->protected_->do_md5 && !FLAC__MD5Accumulate(&encoder->private_->md5context, (const FLAC__int32 * const *)encoder->private_->integer_signal, encoder->protected_->channels, encoder->protected_->blocksize, (encoder->protected_->bits_per_sample+7) / 8)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - return false; - } - - /* - * Process the frame header and subframes into the frame bitbuffer - */ - if(!process_subframes_(encoder, is_fractional_block)) { - /* the above function sets the state for us in case of an error */ - return false; - } - - /* - * Zero-pad the frame to a byte_boundary - */ - if(!FLAC__bitwriter_zero_pad_to_byte_boundary(encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - return false; - } - - /* - * CRC-16 the whole thing - */ - FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(encoder->private_->frame)); - if( - !FLAC__bitwriter_get_write_crc16(encoder->private_->frame, &crc) || - !FLAC__bitwriter_write_raw_uint32(encoder->private_->frame, crc, FLAC__FRAME_FOOTER_CRC_LEN) - ) { - encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR; - return false; - } - - /* - * Write it - */ - if(!write_bitbuffer_(encoder, encoder->protected_->blocksize, is_last_block)) { - /* the above function sets the state for us in case of an error */ - return false; - } - - /* - * Get ready for the next frame - */ - encoder->private_->current_sample_number = 0; - encoder->private_->current_frame_number++; - encoder->private_->streaminfo.data.stream_info.total_samples += (FLAC__uint64)encoder->protected_->blocksize; - - return true; -} - -FLAC__bool process_subframes_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block) -{ - FLAC__FrameHeader frame_header; - unsigned channel, min_partition_order = encoder->protected_->min_residual_partition_order, max_partition_order; - FLAC__bool do_independent, do_mid_side; - - /* - * Calculate the min,max Rice partition orders - */ - if(is_fractional_block) { - max_partition_order = 0; - } - else { - max_partition_order = FLAC__format_get_max_rice_partition_order_from_blocksize(encoder->protected_->blocksize); - max_partition_order = min(max_partition_order, encoder->protected_->max_residual_partition_order); - } - min_partition_order = min(min_partition_order, max_partition_order); - - /* - * Setup the frame - */ - frame_header.blocksize = encoder->protected_->blocksize; - frame_header.sample_rate = encoder->protected_->sample_rate; - frame_header.channels = encoder->protected_->channels; - frame_header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT; /* the default unless the encoder determines otherwise */ - frame_header.bits_per_sample = encoder->protected_->bits_per_sample; - frame_header.number_type = FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER; - frame_header.number.frame_number = encoder->private_->current_frame_number; - - /* - * Figure out what channel assignments to try - */ - if(encoder->protected_->do_mid_side_stereo) { - if(encoder->protected_->loose_mid_side_stereo) { - if(encoder->private_->loose_mid_side_stereo_frame_count == 0) { - do_independent = true; - do_mid_side = true; - } - else { - do_independent = (encoder->private_->last_channel_assignment == FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT); - do_mid_side = !do_independent; - } - } - else { - do_independent = true; - do_mid_side = true; - } - } - else { - do_independent = true; - do_mid_side = false; - } - - FLAC__ASSERT(do_independent || do_mid_side); - - /* - * Check for wasted bits; set effective bps for each subframe - */ - if(do_independent) { - for(channel = 0; channel < encoder->protected_->channels; channel++) { - const unsigned w = get_wasted_bits_(encoder->private_->integer_signal[channel], encoder->protected_->blocksize); - encoder->private_->subframe_workspace[channel][0].wasted_bits = encoder->private_->subframe_workspace[channel][1].wasted_bits = w; - encoder->private_->subframe_bps[channel] = encoder->protected_->bits_per_sample - w; - } - } - if(do_mid_side) { - FLAC__ASSERT(encoder->protected_->channels == 2); - for(channel = 0; channel < 2; channel++) { - const unsigned w = get_wasted_bits_(encoder->private_->integer_signal_mid_side[channel], encoder->protected_->blocksize); - encoder->private_->subframe_workspace_mid_side[channel][0].wasted_bits = encoder->private_->subframe_workspace_mid_side[channel][1].wasted_bits = w; - encoder->private_->subframe_bps_mid_side[channel] = encoder->protected_->bits_per_sample - w + (channel==0? 0:1); - } - } - - /* - * First do a normal encoding pass of each independent channel - */ - if(do_independent) { - for(channel = 0; channel < encoder->protected_->channels; channel++) { - if(! - process_subframe_( - encoder, - min_partition_order, - max_partition_order, - &frame_header, - encoder->private_->subframe_bps[channel], - encoder->private_->integer_signal[channel], - encoder->private_->subframe_workspace_ptr[channel], - encoder->private_->partitioned_rice_contents_workspace_ptr[channel], - encoder->private_->residual_workspace[channel], - encoder->private_->best_subframe+channel, - encoder->private_->best_subframe_bits+channel - ) - ) - return false; - } - } - - /* - * Now do mid and side channels if requested - */ - if(do_mid_side) { - FLAC__ASSERT(encoder->protected_->channels == 2); - - for(channel = 0; channel < 2; channel++) { - if(! - process_subframe_( - encoder, - min_partition_order, - max_partition_order, - &frame_header, - encoder->private_->subframe_bps_mid_side[channel], - encoder->private_->integer_signal_mid_side[channel], - encoder->private_->subframe_workspace_ptr_mid_side[channel], - encoder->private_->partitioned_rice_contents_workspace_ptr_mid_side[channel], - encoder->private_->residual_workspace_mid_side[channel], - encoder->private_->best_subframe_mid_side+channel, - encoder->private_->best_subframe_bits_mid_side+channel - ) - ) - return false; - } - } - - /* - * Compose the frame bitbuffer - */ - if(do_mid_side) { - unsigned left_bps = 0, right_bps = 0; /* initialized only to prevent superfluous compiler warning */ - FLAC__Subframe *left_subframe = 0, *right_subframe = 0; /* initialized only to prevent superfluous compiler warning */ - FLAC__ChannelAssignment channel_assignment; - - FLAC__ASSERT(encoder->protected_->channels == 2); - - if(encoder->protected_->loose_mid_side_stereo && encoder->private_->loose_mid_side_stereo_frame_count > 0) { - channel_assignment = (encoder->private_->last_channel_assignment == FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT? FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT : FLAC__CHANNEL_ASSIGNMENT_MID_SIDE); - } - else { - unsigned bits[4]; /* WATCHOUT - indexed by FLAC__ChannelAssignment */ - unsigned min_bits; - int ca; - - FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT == 0); - FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE == 1); - FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE == 2); - FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_MID_SIDE == 3); - FLAC__ASSERT(do_independent && do_mid_side); - - /* We have to figure out which channel assignent results in the smallest frame */ - bits[FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT] = encoder->private_->best_subframe_bits [0] + encoder->private_->best_subframe_bits [1]; - bits[FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE ] = encoder->private_->best_subframe_bits [0] + encoder->private_->best_subframe_bits_mid_side[1]; - bits[FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE ] = encoder->private_->best_subframe_bits [1] + encoder->private_->best_subframe_bits_mid_side[1]; - bits[FLAC__CHANNEL_ASSIGNMENT_MID_SIDE ] = encoder->private_->best_subframe_bits_mid_side[0] + encoder->private_->best_subframe_bits_mid_side[1]; - - channel_assignment = FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT; - min_bits = bits[channel_assignment]; - for(ca = 1; ca <= 3; ca++) { - if(bits[ca] < min_bits) { - min_bits = bits[ca]; - channel_assignment = (FLAC__ChannelAssignment)ca; - } - } - } - - frame_header.channel_assignment = channel_assignment; - - if(!FLAC__frame_add_header(&frame_header, encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return false; - } - - switch(channel_assignment) { - case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT: - left_subframe = &encoder->private_->subframe_workspace [0][encoder->private_->best_subframe [0]]; - right_subframe = &encoder->private_->subframe_workspace [1][encoder->private_->best_subframe [1]]; - break; - case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE: - left_subframe = &encoder->private_->subframe_workspace [0][encoder->private_->best_subframe [0]]; - right_subframe = &encoder->private_->subframe_workspace_mid_side[1][encoder->private_->best_subframe_mid_side[1]]; - break; - case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE: - left_subframe = &encoder->private_->subframe_workspace_mid_side[1][encoder->private_->best_subframe_mid_side[1]]; - right_subframe = &encoder->private_->subframe_workspace [1][encoder->private_->best_subframe [1]]; - break; - case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE: - left_subframe = &encoder->private_->subframe_workspace_mid_side[0][encoder->private_->best_subframe_mid_side[0]]; - right_subframe = &encoder->private_->subframe_workspace_mid_side[1][encoder->private_->best_subframe_mid_side[1]]; - break; - default: - FLAC__ASSERT(0); - } - - switch(channel_assignment) { - case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT: - left_bps = encoder->private_->subframe_bps [0]; - right_bps = encoder->private_->subframe_bps [1]; - break; - case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE: - left_bps = encoder->private_->subframe_bps [0]; - right_bps = encoder->private_->subframe_bps_mid_side[1]; - break; - case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE: - left_bps = encoder->private_->subframe_bps_mid_side[1]; - right_bps = encoder->private_->subframe_bps [1]; - break; - case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE: - left_bps = encoder->private_->subframe_bps_mid_side[0]; - right_bps = encoder->private_->subframe_bps_mid_side[1]; - break; - default: - FLAC__ASSERT(0); - } - - /* note that encoder_add_subframe_ sets the state for us in case of an error */ - if(!add_subframe_(encoder, frame_header.blocksize, left_bps , left_subframe , encoder->private_->frame)) - return false; - if(!add_subframe_(encoder, frame_header.blocksize, right_bps, right_subframe, encoder->private_->frame)) - return false; - } - else { - if(!FLAC__frame_add_header(&frame_header, encoder->private_->frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return false; - } - - for(channel = 0; channel < encoder->protected_->channels; channel++) { - if(!add_subframe_(encoder, frame_header.blocksize, encoder->private_->subframe_bps[channel], &encoder->private_->subframe_workspace[channel][encoder->private_->best_subframe[channel]], encoder->private_->frame)) { - /* the above function sets the state for us in case of an error */ - return false; - } - } - } - - if(encoder->protected_->loose_mid_side_stereo) { - encoder->private_->loose_mid_side_stereo_frame_count++; - if(encoder->private_->loose_mid_side_stereo_frame_count >= encoder->private_->loose_mid_side_stereo_frames) - encoder->private_->loose_mid_side_stereo_frame_count = 0; - } - - encoder->private_->last_channel_assignment = frame_header.channel_assignment; - - return true; -} - -FLAC__bool process_subframe_( - FLAC__StreamEncoder *encoder, - unsigned min_partition_order, - unsigned max_partition_order, - const FLAC__FrameHeader *frame_header, - unsigned subframe_bps, - const FLAC__int32 integer_signal[], - FLAC__Subframe *subframe[2], - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents[2], - FLAC__int32 *residual[2], - unsigned *best_subframe, - unsigned *best_bits -) -{ -#ifndef FLAC__INTEGER_ONLY_LIBRARY - FLAC__float fixed_residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]; -#else - FLAC__fixedpoint fixed_residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]; -#endif -#ifndef FLAC__INTEGER_ONLY_LIBRARY - FLAC__double lpc_residual_bits_per_sample; - FLAC__real autoc[FLAC__MAX_LPC_ORDER+1]; /* WATCHOUT: the size is important even though encoder->protected_->max_lpc_order might be less; some asm routines need all the space */ - FLAC__double lpc_error[FLAC__MAX_LPC_ORDER]; - unsigned min_lpc_order, max_lpc_order, lpc_order; - unsigned min_qlp_coeff_precision, max_qlp_coeff_precision, qlp_coeff_precision; -#endif - unsigned min_fixed_order, max_fixed_order, guess_fixed_order, fixed_order; - unsigned rice_parameter; - unsigned _candidate_bits, _best_bits; - unsigned _best_subframe; - /* only use RICE2 partitions if stream bps > 16 */ - const unsigned rice_parameter_limit = FLAC__stream_encoder_get_bits_per_sample(encoder) > 16? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; - - FLAC__ASSERT(frame_header->blocksize > 0); - - /* verbatim subframe is the baseline against which we measure other compressed subframes */ - _best_subframe = 0; - if(encoder->private_->disable_verbatim_subframes && frame_header->blocksize >= FLAC__MAX_FIXED_ORDER) - _best_bits = UINT_MAX; - else - _best_bits = evaluate_verbatim_subframe_(encoder, integer_signal, frame_header->blocksize, subframe_bps, subframe[_best_subframe]); - - if(frame_header->blocksize >= FLAC__MAX_FIXED_ORDER) { - unsigned signal_is_constant = false; - guess_fixed_order = encoder->private_->local_fixed_compute_best_predictor(integer_signal+FLAC__MAX_FIXED_ORDER, frame_header->blocksize-FLAC__MAX_FIXED_ORDER, fixed_residual_bits_per_sample); - /* check for constant subframe */ - if( - !encoder->private_->disable_constant_subframes && -#ifndef FLAC__INTEGER_ONLY_LIBRARY - fixed_residual_bits_per_sample[1] == 0.0 -#else - fixed_residual_bits_per_sample[1] == FLAC__FP_ZERO -#endif - ) { - /* the above means it's possible all samples are the same value; now double-check it: */ - unsigned i; - signal_is_constant = true; - for(i = 1; i < frame_header->blocksize; i++) { - if(integer_signal[0] != integer_signal[i]) { - signal_is_constant = false; - break; - } - } - } - if(signal_is_constant) { - _candidate_bits = evaluate_constant_subframe_(encoder, integer_signal[0], frame_header->blocksize, subframe_bps, subframe[!_best_subframe]); - if(_candidate_bits < _best_bits) { - _best_subframe = !_best_subframe; - _best_bits = _candidate_bits; - } - } - else { - if(!encoder->private_->disable_fixed_subframes || (encoder->protected_->max_lpc_order == 0 && _best_bits == UINT_MAX)) { - /* encode fixed */ - if(encoder->protected_->do_exhaustive_model_search) { - min_fixed_order = 0; - max_fixed_order = FLAC__MAX_FIXED_ORDER; - } - else { - min_fixed_order = max_fixed_order = guess_fixed_order; - } - if(max_fixed_order >= frame_header->blocksize) - max_fixed_order = frame_header->blocksize - 1; - for(fixed_order = min_fixed_order; fixed_order <= max_fixed_order; fixed_order++) { -#ifndef FLAC__INTEGER_ONLY_LIBRARY - if(fixed_residual_bits_per_sample[fixed_order] >= (FLAC__float)subframe_bps) - continue; /* don't even try */ - rice_parameter = (fixed_residual_bits_per_sample[fixed_order] > 0.0)? (unsigned)(fixed_residual_bits_per_sample[fixed_order]+0.5) : 0; /* 0.5 is for rounding */ -#else - if(FLAC__fixedpoint_trunc(fixed_residual_bits_per_sample[fixed_order]) >= (int)subframe_bps) - continue; /* don't even try */ - rice_parameter = (fixed_residual_bits_per_sample[fixed_order] > FLAC__FP_ZERO)? (unsigned)FLAC__fixedpoint_trunc(fixed_residual_bits_per_sample[fixed_order]+FLAC__FP_ONE_HALF) : 0; /* 0.5 is for rounding */ -#endif - rice_parameter++; /* to account for the signed->unsigned conversion during rice coding */ - if(rice_parameter >= rice_parameter_limit) { -#ifdef DEBUG_VERBOSE - fprintf(stderr, "clipping rice_parameter (%u -> %u) @0\n", rice_parameter, rice_parameter_limit - 1); -#endif - rice_parameter = rice_parameter_limit - 1; - } - _candidate_bits = - evaluate_fixed_subframe_( - encoder, - integer_signal, - residual[!_best_subframe], - encoder->private_->abs_residual_partition_sums, - encoder->private_->raw_bits_per_partition, - frame_header->blocksize, - subframe_bps, - fixed_order, - rice_parameter, - rice_parameter_limit, - min_partition_order, - max_partition_order, - encoder->protected_->do_escape_coding, - encoder->protected_->rice_parameter_search_dist, - subframe[!_best_subframe], - partitioned_rice_contents[!_best_subframe] - ); - if(_candidate_bits < _best_bits) { - _best_subframe = !_best_subframe; - _best_bits = _candidate_bits; - } - } - } - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - /* encode lpc */ - if(encoder->protected_->max_lpc_order > 0) { - if(encoder->protected_->max_lpc_order >= frame_header->blocksize) - max_lpc_order = frame_header->blocksize-1; - else - max_lpc_order = encoder->protected_->max_lpc_order; - if(max_lpc_order > 0) { - unsigned a; - for (a = 0; a < encoder->protected_->num_apodizations; a++) { - FLAC__lpc_window_data(integer_signal, encoder->private_->window[a], encoder->private_->windowed_signal, frame_header->blocksize); - encoder->private_->local_lpc_compute_autocorrelation(encoder->private_->windowed_signal, frame_header->blocksize, max_lpc_order+1, autoc); - /* if autoc[0] == 0.0, the signal is constant and we usually won't get here, but it can happen */ - if(autoc[0] != 0.0) { - FLAC__lpc_compute_lp_coefficients(autoc, &max_lpc_order, encoder->private_->lp_coeff, lpc_error); - if(encoder->protected_->do_exhaustive_model_search) { - min_lpc_order = 1; - } - else { - const unsigned guess_lpc_order = - FLAC__lpc_compute_best_order( - lpc_error, - max_lpc_order, - frame_header->blocksize, - subframe_bps + ( - encoder->protected_->do_qlp_coeff_prec_search? - FLAC__MIN_QLP_COEFF_PRECISION : /* have to guess; use the min possible size to avoid accidentally favoring lower orders */ - encoder->protected_->qlp_coeff_precision - ) - ); - min_lpc_order = max_lpc_order = guess_lpc_order; - } - if(max_lpc_order >= frame_header->blocksize) - max_lpc_order = frame_header->blocksize - 1; - for(lpc_order = min_lpc_order; lpc_order <= max_lpc_order; lpc_order++) { - lpc_residual_bits_per_sample = FLAC__lpc_compute_expected_bits_per_residual_sample(lpc_error[lpc_order-1], frame_header->blocksize-lpc_order); - if(lpc_residual_bits_per_sample >= (FLAC__double)subframe_bps) - continue; /* don't even try */ - rice_parameter = (lpc_residual_bits_per_sample > 0.0)? (unsigned)(lpc_residual_bits_per_sample+0.5) : 0; /* 0.5 is for rounding */ - rice_parameter++; /* to account for the signed->unsigned conversion during rice coding */ - if(rice_parameter >= rice_parameter_limit) { -#ifdef DEBUG_VERBOSE - fprintf(stderr, "clipping rice_parameter (%u -> %u) @1\n", rice_parameter, rice_parameter_limit - 1); -#endif - rice_parameter = rice_parameter_limit - 1; - } - if(encoder->protected_->do_qlp_coeff_prec_search) { - min_qlp_coeff_precision = FLAC__MIN_QLP_COEFF_PRECISION; - /* try to ensure a 32-bit datapath throughout for 16bps(+1bps for side channel) or less */ - if(subframe_bps <= 17) { - max_qlp_coeff_precision = min(32 - subframe_bps - lpc_order, FLAC__MAX_QLP_COEFF_PRECISION); - max_qlp_coeff_precision = max(max_qlp_coeff_precision, min_qlp_coeff_precision); - } - else - max_qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION; - } - else { - min_qlp_coeff_precision = max_qlp_coeff_precision = encoder->protected_->qlp_coeff_precision; - } - for(qlp_coeff_precision = min_qlp_coeff_precision; qlp_coeff_precision <= max_qlp_coeff_precision; qlp_coeff_precision++) { - _candidate_bits = - evaluate_lpc_subframe_( - encoder, - integer_signal, - residual[!_best_subframe], - encoder->private_->abs_residual_partition_sums, - encoder->private_->raw_bits_per_partition, - encoder->private_->lp_coeff[lpc_order-1], - frame_header->blocksize, - subframe_bps, - lpc_order, - qlp_coeff_precision, - rice_parameter, - rice_parameter_limit, - min_partition_order, - max_partition_order, - encoder->protected_->do_escape_coding, - encoder->protected_->rice_parameter_search_dist, - subframe[!_best_subframe], - partitioned_rice_contents[!_best_subframe] - ); - if(_candidate_bits > 0) { /* if == 0, there was a problem quantizing the lpcoeffs */ - if(_candidate_bits < _best_bits) { - _best_subframe = !_best_subframe; - _best_bits = _candidate_bits; - } - } - } - } - } - } - } - } -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - } - } - - /* under rare circumstances this can happen when all but lpc subframe types are disabled: */ - if(_best_bits == UINT_MAX) { - FLAC__ASSERT(_best_subframe == 0); - _best_bits = evaluate_verbatim_subframe_(encoder, integer_signal, frame_header->blocksize, subframe_bps, subframe[_best_subframe]); - } - - *best_subframe = _best_subframe; - *best_bits = _best_bits; - - return true; -} - -FLAC__bool add_subframe_( - FLAC__StreamEncoder *encoder, - unsigned blocksize, - unsigned subframe_bps, - const FLAC__Subframe *subframe, - FLAC__BitWriter *frame -) -{ - switch(subframe->type) { - case FLAC__SUBFRAME_TYPE_CONSTANT: - if(!FLAC__subframe_add_constant(&(subframe->data.constant), subframe_bps, subframe->wasted_bits, frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return false; - } - break; - case FLAC__SUBFRAME_TYPE_FIXED: - if(!FLAC__subframe_add_fixed(&(subframe->data.fixed), blocksize - subframe->data.fixed.order, subframe_bps, subframe->wasted_bits, frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return false; - } - break; - case FLAC__SUBFRAME_TYPE_LPC: - if(!FLAC__subframe_add_lpc(&(subframe->data.lpc), blocksize - subframe->data.lpc.order, subframe_bps, subframe->wasted_bits, frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return false; - } - break; - case FLAC__SUBFRAME_TYPE_VERBATIM: - if(!FLAC__subframe_add_verbatim(&(subframe->data.verbatim), blocksize, subframe_bps, subframe->wasted_bits, frame)) { - encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR; - return false; - } - break; - default: - FLAC__ASSERT(0); - } - - return true; -} - -#define SPOTCHECK_ESTIMATE 0 -#if SPOTCHECK_ESTIMATE -static void spotcheck_subframe_estimate_( - FLAC__StreamEncoder *encoder, - unsigned blocksize, - unsigned subframe_bps, - const FLAC__Subframe *subframe, - unsigned estimate -) -{ - FLAC__bool ret; - FLAC__BitWriter *frame = FLAC__bitwriter_new(); - if(frame == 0) { - fprintf(stderr, "EST: can't allocate frame\n"); - return; - } - if(!FLAC__bitwriter_init(frame)) { - fprintf(stderr, "EST: can't init frame\n"); - return; - } - ret = add_subframe_(encoder, blocksize, subframe_bps, subframe, frame); - FLAC__ASSERT(ret); - { - const unsigned actual = FLAC__bitwriter_get_input_bits_unconsumed(frame); - if(estimate != actual) - fprintf(stderr, "EST: bad, frame#%u sub#%%d type=%8s est=%u, actual=%u, delta=%d\n", encoder->private_->current_frame_number, FLAC__SubframeTypeString[subframe->type], estimate, actual, (int)actual-(int)estimate); - } - FLAC__bitwriter_delete(frame); -} -#endif - -unsigned evaluate_constant_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal, - unsigned blocksize, - unsigned subframe_bps, - FLAC__Subframe *subframe -) -{ - unsigned estimate; - subframe->type = FLAC__SUBFRAME_TYPE_CONSTANT; - subframe->data.constant.value = signal; - - estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + subframe_bps; - -#if SPOTCHECK_ESTIMATE - spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate); -#else - (void)encoder, (void)blocksize; -#endif - - return estimate; -} - -unsigned evaluate_fixed_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal[], - FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned raw_bits_per_partition[], - unsigned blocksize, - unsigned subframe_bps, - unsigned order, - unsigned rice_parameter, - unsigned rice_parameter_limit, - unsigned min_partition_order, - unsigned max_partition_order, - FLAC__bool do_escape_coding, - unsigned rice_parameter_search_dist, - FLAC__Subframe *subframe, - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents -) -{ - unsigned i, residual_bits, estimate; - const unsigned residual_samples = blocksize - order; - - FLAC__fixed_compute_residual(signal+order, residual_samples, order, residual); - - subframe->type = FLAC__SUBFRAME_TYPE_FIXED; - - subframe->data.fixed.entropy_coding_method.type = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE; - subframe->data.fixed.entropy_coding_method.data.partitioned_rice.contents = partitioned_rice_contents; - subframe->data.fixed.residual = residual; - - residual_bits = - find_best_partition_order_( - encoder->private_, - residual, - abs_residual_partition_sums, - raw_bits_per_partition, - residual_samples, - order, - rice_parameter, - rice_parameter_limit, - min_partition_order, - max_partition_order, - subframe_bps, - do_escape_coding, - rice_parameter_search_dist, - &subframe->data.fixed.entropy_coding_method - ); - - subframe->data.fixed.order = order; - for(i = 0; i < order; i++) - subframe->data.fixed.warmup[i] = signal[i]; - - estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + (order * subframe_bps) + residual_bits; - -#if SPOTCHECK_ESTIMATE - spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate); -#endif - - return estimate; -} - -#ifndef FLAC__INTEGER_ONLY_LIBRARY -unsigned evaluate_lpc_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal[], - FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned raw_bits_per_partition[], - const FLAC__real lp_coeff[], - unsigned blocksize, - unsigned subframe_bps, - unsigned order, - unsigned qlp_coeff_precision, - unsigned rice_parameter, - unsigned rice_parameter_limit, - unsigned min_partition_order, - unsigned max_partition_order, - FLAC__bool do_escape_coding, - unsigned rice_parameter_search_dist, - FLAC__Subframe *subframe, - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents -) -{ - FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER]; - unsigned i, residual_bits, estimate; - int quantization, ret; - const unsigned residual_samples = blocksize - order; - - /* try to keep qlp coeff precision such that only 32-bit math is required for decode of <=16bps streams */ - if(subframe_bps <= 16) { - FLAC__ASSERT(order > 0); - FLAC__ASSERT(order <= FLAC__MAX_LPC_ORDER); - qlp_coeff_precision = min(qlp_coeff_precision, 32 - subframe_bps - FLAC__bitmath_ilog2(order)); - } - - ret = FLAC__lpc_quantize_coefficients(lp_coeff, order, qlp_coeff_precision, qlp_coeff, &quantization); - if(ret != 0) - return 0; /* this is a hack to indicate to the caller that we can't do lp at this order on this subframe */ - - if(subframe_bps + qlp_coeff_precision + FLAC__bitmath_ilog2(order) <= 32) - if(subframe_bps <= 16 && qlp_coeff_precision <= 16) - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit(signal+order, residual_samples, qlp_coeff, order, quantization, residual); - else - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients(signal+order, residual_samples, qlp_coeff, order, quantization, residual); - else - encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit(signal+order, residual_samples, qlp_coeff, order, quantization, residual); - - subframe->type = FLAC__SUBFRAME_TYPE_LPC; - - subframe->data.lpc.entropy_coding_method.type = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE; - subframe->data.lpc.entropy_coding_method.data.partitioned_rice.contents = partitioned_rice_contents; - subframe->data.lpc.residual = residual; - - residual_bits = - find_best_partition_order_( - encoder->private_, - residual, - abs_residual_partition_sums, - raw_bits_per_partition, - residual_samples, - order, - rice_parameter, - rice_parameter_limit, - min_partition_order, - max_partition_order, - subframe_bps, - do_escape_coding, - rice_parameter_search_dist, - &subframe->data.lpc.entropy_coding_method - ); - - subframe->data.lpc.order = order; - subframe->data.lpc.qlp_coeff_precision = qlp_coeff_precision; - subframe->data.lpc.quantization_level = quantization; - memcpy(subframe->data.lpc.qlp_coeff, qlp_coeff, sizeof(FLAC__int32)*FLAC__MAX_LPC_ORDER); - for(i = 0; i < order; i++) - subframe->data.lpc.warmup[i] = signal[i]; - - estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN + FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN + (order * (qlp_coeff_precision + subframe_bps)) + residual_bits; - -#if SPOTCHECK_ESTIMATE - spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate); -#endif - - return estimate; -} -#endif - -unsigned evaluate_verbatim_subframe_( - FLAC__StreamEncoder *encoder, - const FLAC__int32 signal[], - unsigned blocksize, - unsigned subframe_bps, - FLAC__Subframe *subframe -) -{ - unsigned estimate; - - subframe->type = FLAC__SUBFRAME_TYPE_VERBATIM; - - subframe->data.verbatim.data = signal; - - estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + (blocksize * subframe_bps); - -#if SPOTCHECK_ESTIMATE - spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate); -#else - (void)encoder; -#endif - - return estimate; -} - -unsigned find_best_partition_order_( - FLAC__StreamEncoderPrivate *private_, - const FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned raw_bits_per_partition[], - unsigned residual_samples, - unsigned predictor_order, - unsigned rice_parameter, - unsigned rice_parameter_limit, - unsigned min_partition_order, - unsigned max_partition_order, - unsigned bps, - FLAC__bool do_escape_coding, - unsigned rice_parameter_search_dist, - FLAC__EntropyCodingMethod *best_ecm -) -{ - unsigned residual_bits, best_residual_bits = 0; - unsigned best_parameters_index = 0; - unsigned best_partition_order = 0; - const unsigned blocksize = residual_samples + predictor_order; - - max_partition_order = FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(max_partition_order, blocksize, predictor_order); - min_partition_order = min(min_partition_order, max_partition_order); - - precompute_partition_info_sums_(residual, abs_residual_partition_sums, residual_samples, predictor_order, min_partition_order, max_partition_order, bps); - - if(do_escape_coding) - precompute_partition_info_escapes_(residual, raw_bits_per_partition, residual_samples, predictor_order, min_partition_order, max_partition_order); - - { - int partition_order; - unsigned sum; - - for(partition_order = (int)max_partition_order, sum = 0; partition_order >= (int)min_partition_order; partition_order--) { - if(! - set_partitioned_rice_( -#ifdef EXACT_RICE_BITS_CALCULATION - residual, -#endif - abs_residual_partition_sums+sum, - raw_bits_per_partition+sum, - residual_samples, - predictor_order, - rice_parameter, - rice_parameter_limit, - rice_parameter_search_dist, - (unsigned)partition_order, - do_escape_coding, - &private_->partitioned_rice_contents_extra[!best_parameters_index], - &residual_bits - ) - ) - { - FLAC__ASSERT(best_residual_bits != 0); - break; - } - sum += 1u << partition_order; - if(best_residual_bits == 0 || residual_bits < best_residual_bits) { - best_residual_bits = residual_bits; - best_parameters_index = !best_parameters_index; - best_partition_order = partition_order; - } - } - } - - best_ecm->data.partitioned_rice.order = best_partition_order; - - { - /* - * We are allowed to de-const the pointer based on our special - * knowledge; it is const to the outside world. - */ - FLAC__EntropyCodingMethod_PartitionedRiceContents* prc = (FLAC__EntropyCodingMethod_PartitionedRiceContents*)best_ecm->data.partitioned_rice.contents; - unsigned partition; - - /* save best parameters and raw_bits */ - FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(prc, max(6, best_partition_order)); - memcpy(prc->parameters, private_->partitioned_rice_contents_extra[best_parameters_index].parameters, sizeof(unsigned)*(1<<(best_partition_order))); - if(do_escape_coding) - memcpy(prc->raw_bits, private_->partitioned_rice_contents_extra[best_parameters_index].raw_bits, sizeof(unsigned)*(1<<(best_partition_order))); - /* - * Now need to check if the type should be changed to - * FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 based on the - * size of the rice parameters. - */ - for(partition = 0; partition < (1u<parameters[partition] >= FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER) { - best_ecm->type = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2; - break; - } - } - } - - return best_residual_bits; -} - -#if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && defined FLAC__HAS_NASM -extern void precompute_partition_info_sums_32bit_asm_ia32_( - const FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned blocksize, - unsigned predictor_order, - unsigned min_partition_order, - unsigned max_partition_order -); -#endif - -void precompute_partition_info_sums_( - const FLAC__int32 residual[], - FLAC__uint64 abs_residual_partition_sums[], - unsigned residual_samples, - unsigned predictor_order, - unsigned min_partition_order, - unsigned max_partition_order, - unsigned bps -) -{ - const unsigned default_partition_samples = (residual_samples + predictor_order) >> max_partition_order; - unsigned partitions = 1u << max_partition_order; - - FLAC__ASSERT(default_partition_samples > predictor_order); - -#if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && defined FLAC__HAS_NASM - /* slightly pessimistic but still catches all common cases */ - /* WATCHOUT: "+ bps" is an assumption that the average residual magnitude will not be more than "bps" bits */ - if(FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) { - precompute_partition_info_sums_32bit_asm_ia32_(residual, abs_residual_partition_sums, residual_samples + predictor_order, predictor_order, min_partition_order, max_partition_order); - return; - } -#endif - - /* first do max_partition_order */ - { - unsigned partition, residual_sample, end = (unsigned)(-(int)predictor_order); - /* slightly pessimistic but still catches all common cases */ - /* WATCHOUT: "+ bps" is an assumption that the average residual magnitude will not be more than "bps" bits */ - if(FLAC__bitmath_ilog2(default_partition_samples) + bps < 32) { - FLAC__uint32 abs_residual_partition_sum; - - for(partition = residual_sample = 0; partition < partitions; partition++) { - end += default_partition_samples; - abs_residual_partition_sum = 0; - for( ; residual_sample < end; residual_sample++) - abs_residual_partition_sum += abs(residual[residual_sample]); /* abs(INT_MIN) is undefined, but if the residual is INT_MIN we have bigger problems */ - abs_residual_partition_sums[partition] = abs_residual_partition_sum; - } - } - else { /* have to pessimistically use 64 bits for accumulator */ - FLAC__uint64 abs_residual_partition_sum; - - for(partition = residual_sample = 0; partition < partitions; partition++) { - end += default_partition_samples; - abs_residual_partition_sum = 0; - for( ; residual_sample < end; residual_sample++) - abs_residual_partition_sum += abs(residual[residual_sample]); /* abs(INT_MIN) is undefined, but if the residual is INT_MIN we have bigger problems */ - abs_residual_partition_sums[partition] = abs_residual_partition_sum; - } - } - } - - /* now merge partitions for lower orders */ - { - unsigned from_partition = 0, to_partition = partitions; - int partition_order; - for(partition_order = (int)max_partition_order - 1; partition_order >= (int)min_partition_order; partition_order--) { - unsigned i; - partitions >>= 1; - for(i = 0; i < partitions; i++) { - abs_residual_partition_sums[to_partition++] = - abs_residual_partition_sums[from_partition ] + - abs_residual_partition_sums[from_partition+1]; - from_partition += 2; - } - } - } -} - -void precompute_partition_info_escapes_( - const FLAC__int32 residual[], - unsigned raw_bits_per_partition[], - unsigned residual_samples, - unsigned predictor_order, - unsigned min_partition_order, - unsigned max_partition_order -) -{ - int partition_order; - unsigned from_partition, to_partition = 0; - const unsigned blocksize = residual_samples + predictor_order; - - /* first do max_partition_order */ - for(partition_order = (int)max_partition_order; partition_order >= 0; partition_order--) { - FLAC__int32 r; - FLAC__uint32 rmax; - unsigned partition, partition_sample, partition_samples, residual_sample; - const unsigned partitions = 1u << partition_order; - const unsigned default_partition_samples = blocksize >> partition_order; - - FLAC__ASSERT(default_partition_samples > predictor_order); - - for(partition = residual_sample = 0; partition < partitions; partition++) { - partition_samples = default_partition_samples; - if(partition == 0) - partition_samples -= predictor_order; - rmax = 0; - for(partition_sample = 0; partition_sample < partition_samples; partition_sample++) { - r = residual[residual_sample++]; - /* OPT: maybe faster: rmax |= r ^ (r>>31) */ - if(r < 0) - rmax |= ~r; - else - rmax |= r; - } - /* now we know all residual values are in the range [-rmax-1,rmax] */ - raw_bits_per_partition[partition] = rmax? FLAC__bitmath_ilog2(rmax) + 2 : 1; - } - to_partition = partitions; - break; /*@@@ yuck, should remove the 'for' loop instead */ - } - - /* now merge partitions for lower orders */ - for(from_partition = 0, --partition_order; partition_order >= (int)min_partition_order; partition_order--) { - unsigned m; - unsigned i; - const unsigned partitions = 1u << partition_order; - for(i = 0; i < partitions; i++) { - m = raw_bits_per_partition[from_partition]; - from_partition++; - raw_bits_per_partition[to_partition] = max(m, raw_bits_per_partition[from_partition]); - from_partition++; - to_partition++; - } - } -} - -#ifdef EXACT_RICE_BITS_CALCULATION -static FLaC__INLINE unsigned count_rice_bits_in_partition_( - const unsigned rice_parameter, - const unsigned partition_samples, - const FLAC__int32 *residual -) -{ - unsigned i, partition_bits = - FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN + /* actually could end up being FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN but err on side of 16bps */ - (1+rice_parameter) * partition_samples /* 1 for unary stop bit + rice_parameter for the binary portion */ - ; - for(i = 0; i < partition_samples; i++) - partition_bits += ( (FLAC__uint32)((residual[i]<<1)^(residual[i]>>31)) >> rice_parameter ); - return partition_bits; -} -#else -static FLaC__INLINE unsigned count_rice_bits_in_partition_( - const unsigned rice_parameter, - const unsigned partition_samples, - const FLAC__uint64 abs_residual_partition_sum -) -{ - return - FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN + /* actually could end up being FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN but err on side of 16bps */ - (1+rice_parameter) * partition_samples + /* 1 for unary stop bit + rice_parameter for the binary portion */ - ( - rice_parameter? - (unsigned)(abs_residual_partition_sum >> (rice_parameter-1)) /* rice_parameter-1 because the real coder sign-folds instead of using a sign bit */ - : (unsigned)(abs_residual_partition_sum << 1) /* can't shift by negative number, so reverse */ - ) - - (partition_samples >> 1) - /* -(partition_samples>>1) to subtract out extra contributions to the abs_residual_partition_sum. - * The actual number of bits used is closer to the sum(for all i in the partition) of abs(residual[i])>>(rice_parameter-1) - * By using the abs_residual_partition sum, we also add in bits in the LSBs that would normally be shifted out. - * So the subtraction term tries to guess how many extra bits were contributed. - * If the LSBs are randomly distributed, this should average to 0.5 extra bits per sample. - */ - ; -} -#endif - -FLAC__bool set_partitioned_rice_( -#ifdef EXACT_RICE_BITS_CALCULATION - const FLAC__int32 residual[], -#endif - const FLAC__uint64 abs_residual_partition_sums[], - const unsigned raw_bits_per_partition[], - const unsigned residual_samples, - const unsigned predictor_order, - const unsigned suggested_rice_parameter, - const unsigned rice_parameter_limit, - const unsigned rice_parameter_search_dist, - const unsigned partition_order, - const FLAC__bool search_for_escapes, - FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, - unsigned *bits -) -{ - unsigned rice_parameter, partition_bits; - unsigned best_partition_bits, best_rice_parameter = 0; - unsigned bits_ = FLAC__ENTROPY_CODING_METHOD_TYPE_LEN + FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; - unsigned *parameters, *raw_bits; -#ifdef ENABLE_RICE_PARAMETER_SEARCH - unsigned min_rice_parameter, max_rice_parameter; -#else - (void)rice_parameter_search_dist; -#endif - - FLAC__ASSERT(suggested_rice_parameter < FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER); - FLAC__ASSERT(rice_parameter_limit <= FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER); - - FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(partitioned_rice_contents, max(6, partition_order)); - parameters = partitioned_rice_contents->parameters; - raw_bits = partitioned_rice_contents->raw_bits; - - if(partition_order == 0) { - best_partition_bits = (unsigned)(-1); -#ifdef ENABLE_RICE_PARAMETER_SEARCH - if(rice_parameter_search_dist) { - if(suggested_rice_parameter < rice_parameter_search_dist) - min_rice_parameter = 0; - else - min_rice_parameter = suggested_rice_parameter - rice_parameter_search_dist; - max_rice_parameter = suggested_rice_parameter + rice_parameter_search_dist; - if(max_rice_parameter >= rice_parameter_limit) { -#ifdef DEBUG_VERBOSE - fprintf(stderr, "clipping rice_parameter (%u -> %u) @5\n", max_rice_parameter, rice_parameter_limit - 1); -#endif - max_rice_parameter = rice_parameter_limit - 1; - } - } - else - min_rice_parameter = max_rice_parameter = suggested_rice_parameter; - - for(rice_parameter = min_rice_parameter; rice_parameter <= max_rice_parameter; rice_parameter++) { -#else - rice_parameter = suggested_rice_parameter; -#endif -#ifdef EXACT_RICE_BITS_CALCULATION - partition_bits = count_rice_bits_in_partition_(rice_parameter, residual_samples, residual); -#else - partition_bits = count_rice_bits_in_partition_(rice_parameter, residual_samples, abs_residual_partition_sums[0]); -#endif - if(partition_bits < best_partition_bits) { - best_rice_parameter = rice_parameter; - best_partition_bits = partition_bits; - } -#ifdef ENABLE_RICE_PARAMETER_SEARCH - } -#endif - if(search_for_escapes) { - partition_bits = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN + FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN + raw_bits_per_partition[0] * residual_samples; - if(partition_bits <= best_partition_bits) { - raw_bits[0] = raw_bits_per_partition[0]; - best_rice_parameter = 0; /* will be converted to appropriate escape parameter later */ - best_partition_bits = partition_bits; - } - else - raw_bits[0] = 0; - } - parameters[0] = best_rice_parameter; - bits_ += best_partition_bits; - } - else { - unsigned partition, residual_sample; - unsigned partition_samples; - FLAC__uint64 mean, k; - const unsigned partitions = 1u << partition_order; - for(partition = residual_sample = 0; partition < partitions; partition++) { - partition_samples = (residual_samples+predictor_order) >> partition_order; - if(partition == 0) { - if(partition_samples <= predictor_order) - return false; - else - partition_samples -= predictor_order; - } - mean = abs_residual_partition_sums[partition]; - /* we are basically calculating the size in bits of the - * average residual magnitude in the partition: - * rice_parameter = floor(log2(mean/partition_samples)) - * 'mean' is not a good name for the variable, it is - * actually the sum of magnitudes of all residual values - * in the partition, so the actual mean is - * mean/partition_samples - */ - for(rice_parameter = 0, k = partition_samples; k < mean; rice_parameter++, k <<= 1) - ; - if(rice_parameter >= rice_parameter_limit) { -#ifdef DEBUG_VERBOSE - fprintf(stderr, "clipping rice_parameter (%u -> %u) @6\n", rice_parameter, rice_parameter_limit - 1); -#endif - rice_parameter = rice_parameter_limit - 1; - } - - best_partition_bits = (unsigned)(-1); -#ifdef ENABLE_RICE_PARAMETER_SEARCH - if(rice_parameter_search_dist) { - if(rice_parameter < rice_parameter_search_dist) - min_rice_parameter = 0; - else - min_rice_parameter = rice_parameter - rice_parameter_search_dist; - max_rice_parameter = rice_parameter + rice_parameter_search_dist; - if(max_rice_parameter >= rice_parameter_limit) { -#ifdef DEBUG_VERBOSE - fprintf(stderr, "clipping rice_parameter (%u -> %u) @7\n", max_rice_parameter, rice_parameter_limit - 1); -#endif - max_rice_parameter = rice_parameter_limit - 1; - } - } - else - min_rice_parameter = max_rice_parameter = rice_parameter; - - for(rice_parameter = min_rice_parameter; rice_parameter <= max_rice_parameter; rice_parameter++) { -#endif -#ifdef EXACT_RICE_BITS_CALCULATION - partition_bits = count_rice_bits_in_partition_(rice_parameter, partition_samples, residual+residual_sample); -#else - partition_bits = count_rice_bits_in_partition_(rice_parameter, partition_samples, abs_residual_partition_sums[partition]); -#endif - if(partition_bits < best_partition_bits) { - best_rice_parameter = rice_parameter; - best_partition_bits = partition_bits; - } -#ifdef ENABLE_RICE_PARAMETER_SEARCH - } -#endif - if(search_for_escapes) { - partition_bits = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN + FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN + raw_bits_per_partition[partition] * partition_samples; - if(partition_bits <= best_partition_bits) { - raw_bits[partition] = raw_bits_per_partition[partition]; - best_rice_parameter = 0; /* will be converted to appropriate escape parameter later */ - best_partition_bits = partition_bits; - } - else - raw_bits[partition] = 0; - } - parameters[partition] = best_rice_parameter; - bits_ += best_partition_bits; - residual_sample += partition_samples; - } - } - - *bits = bits_; - return true; -} - -unsigned get_wasted_bits_(FLAC__int32 signal[], unsigned samples) -{ - unsigned i, shift; - FLAC__int32 x = 0; - - for(i = 0; i < samples && !(x&1); i++) - x |= signal[i]; - - if(x == 0) { - shift = 0; - } - else { - for(shift = 0; !(x&1); shift++) - x >>= 1; - } - - if(shift > 0) { - for(i = 0; i < samples; i++) - signal[i] >>= shift; - } - - return shift; -} - -void append_to_verify_fifo_(verify_input_fifo *fifo, const FLAC__int32 * const input[], unsigned input_offset, unsigned channels, unsigned wide_samples) -{ - unsigned channel; - - for(channel = 0; channel < channels; channel++) - memcpy(&fifo->data[channel][fifo->tail], &input[channel][input_offset], sizeof(FLAC__int32) * wide_samples); - - fifo->tail += wide_samples; - - FLAC__ASSERT(fifo->tail <= fifo->size); -} - -void append_to_verify_fifo_interleaved_(verify_input_fifo *fifo, const FLAC__int32 input[], unsigned input_offset, unsigned channels, unsigned wide_samples) -{ - unsigned channel; - unsigned sample, wide_sample; - unsigned tail = fifo->tail; - - sample = input_offset * channels; - for(wide_sample = 0; wide_sample < wide_samples; wide_sample++) { - for(channel = 0; channel < channels; channel++) - fifo->data[channel][tail] = input[sample++]; - tail++; - } - fifo->tail = tail; - - FLAC__ASSERT(fifo->tail <= fifo->size); -} - -FLAC__StreamDecoderReadStatus verify_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) -{ - FLAC__StreamEncoder *encoder = (FLAC__StreamEncoder*)client_data; - const size_t encoded_bytes = encoder->private_->verify.output.bytes; - (void)decoder; - - if(encoder->private_->verify.needs_magic_hack) { - FLAC__ASSERT(*bytes >= FLAC__STREAM_SYNC_LENGTH); - *bytes = FLAC__STREAM_SYNC_LENGTH; - memcpy(buffer, FLAC__STREAM_SYNC_STRING, *bytes); - encoder->private_->verify.needs_magic_hack = false; - } - else { - if(encoded_bytes == 0) { - /* - * If we get here, a FIFO underflow has occurred, - * which means there is a bug somewhere. - */ - FLAC__ASSERT(0); - return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - } - else if(encoded_bytes < *bytes) - *bytes = encoded_bytes; - memcpy(buffer, encoder->private_->verify.output.data, *bytes); - encoder->private_->verify.output.data += *bytes; - encoder->private_->verify.output.bytes -= *bytes; - } - - return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; -} - -FLAC__StreamDecoderWriteStatus verify_write_callback_(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data) -{ - FLAC__StreamEncoder *encoder = (FLAC__StreamEncoder *)client_data; - unsigned channel; - const unsigned channels = frame->header.channels; - const unsigned blocksize = frame->header.blocksize; - const unsigned bytes_per_block = sizeof(FLAC__int32) * blocksize; - - (void)decoder; - - for(channel = 0; channel < channels; channel++) { - if(0 != memcmp(buffer[channel], encoder->private_->verify.input_fifo.data[channel], bytes_per_block)) { - unsigned i, sample = 0; - FLAC__int32 expect = 0, got = 0; - - for(i = 0; i < blocksize; i++) { - if(buffer[channel][i] != encoder->private_->verify.input_fifo.data[channel][i]) { - sample = i; - expect = (FLAC__int32)encoder->private_->verify.input_fifo.data[channel][i]; - got = (FLAC__int32)buffer[channel][i]; - break; - } - } - FLAC__ASSERT(i < blocksize); - FLAC__ASSERT(frame->header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER); - encoder->private_->verify.error_stats.absolute_sample = frame->header.number.sample_number + sample; - encoder->private_->verify.error_stats.frame_number = (unsigned)(frame->header.number.sample_number / blocksize); - encoder->private_->verify.error_stats.channel = channel; - encoder->private_->verify.error_stats.sample = sample; - encoder->private_->verify.error_stats.expected = expect; - encoder->private_->verify.error_stats.got = got; - encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA; - return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; - } - } - /* dequeue the frame from the fifo */ - encoder->private_->verify.input_fifo.tail -= blocksize; - FLAC__ASSERT(encoder->private_->verify.input_fifo.tail <= OVERREAD_); - for(channel = 0; channel < channels; channel++) - memmove(&encoder->private_->verify.input_fifo.data[channel][0], &encoder->private_->verify.input_fifo.data[channel][blocksize], encoder->private_->verify.input_fifo.tail * sizeof(encoder->private_->verify.input_fifo.data[0][0])); - return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; -} - -void verify_metadata_callback_(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) -{ - (void)decoder, (void)metadata, (void)client_data; -} - -void verify_error_callback_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) -{ - FLAC__StreamEncoder *encoder = (FLAC__StreamEncoder*)client_data; - (void)decoder, (void)status; - encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR; -} - -FLAC__StreamEncoderReadStatus file_read_callback_enc(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data) -{ - (void)client_data; - - *bytes = fread(buffer, 1, *bytes, encoder->private_->file); - if (*bytes == 0) { - if (feof(encoder->private_->file)) - return FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM; - else if (ferror(encoder->private_->file)) - return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; - } - return FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE; -} - -FLAC__StreamEncoderSeekStatus file_seek_callback_enc(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) -{ - (void)client_data; - - if(fseeko(encoder->private_->file, (off_t)absolute_byte_offset, SEEK_SET) < 0) - return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR; - else - return FLAC__STREAM_ENCODER_SEEK_STATUS_OK; -} - -FLAC__StreamEncoderTellStatus file_tell_callback_enc(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) -{ - off_t offset; - - (void)client_data; - - offset = ftello(encoder->private_->file); - - if(offset < 0) { - return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR; - } - else { - *absolute_byte_offset = (FLAC__uint64)offset; - return FLAC__STREAM_ENCODER_TELL_STATUS_OK; - } -} - -#ifdef FLAC__VALGRIND_TESTING -static size_t local__fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - size_t ret = fwrite(ptr, size, nmemb, stream); - if(!ferror(stream)) - fflush(stream); - return ret; -} -#else -#define local__fwrite fwrite -#endif - -FLAC__StreamEncoderWriteStatus file_write_callback_(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) -{ - (void)client_data, (void)current_frame; - - if(local__fwrite(buffer, sizeof(FLAC__byte), bytes, encoder->private_->file) == bytes) { - FLAC__bool call_it = 0 != encoder->private_->progress_callback && ( -#if FLAC__HAS_OGG - /* We would like to be able to use 'samples > 0' in the - * clause here but currently because of the nature of our - * Ogg writing implementation, 'samples' is always 0 (see - * ogg_encoder_aspect.c). The downside is extra progress - * callbacks. - */ - encoder->private_->is_ogg? true : -#endif - samples > 0 - ); - if(call_it) { - /* NOTE: We have to add +bytes, +samples, and +1 to the stats - * because at this point in the callback chain, the stats - * have not been updated. Only after we return and control - * gets back to write_frame_() are the stats updated - */ - encoder->private_->progress_callback(encoder, encoder->private_->bytes_written+bytes, encoder->private_->samples_written+samples, encoder->private_->frames_written+(samples?1:0), encoder->private_->total_frames_estimate, encoder->private_->client_data); - } - return FLAC__STREAM_ENCODER_WRITE_STATUS_OK; - } - else - return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; -} - -/* - * This will forcibly set stdout to binary mode (for OSes that require it) - */ -FILE *get_binary_stdout_(void) -{ - /* if something breaks here it is probably due to the presence or - * absence of an underscore before the identifiers 'setmode', - * 'fileno', and/or 'O_BINARY'; check your system header files. - */ -#if defined _MSC_VER || defined __MINGW32__ - _setmode(_fileno(stdout), _O_BINARY); -#elif defined __CYGWIN__ - /* almost certainly not needed for any modern Cygwin, but let's be safe... */ - setmode(_fileno(stdout), _O_BINARY); -#elif defined __EMX__ - setmode(fileno(stdout), O_BINARY); -#endif - - return stdout; -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_encoder_framing.c b/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_encoder_framing.c deleted file mode 100644 index b544f6f664..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/libFLAC/stream_encoder_framing.c +++ /dev/null @@ -1,559 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "juce_FlacHeader.h" -#if JUCE_USE_FLAC - - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include /* for strlen() */ -#include "include/private/stream_encoder_framing.h" -#include "include/private/crc.h" -#include "../assert.h" - -#ifdef max -#undef max -#endif -#define max(x,y) ((x)>(y)?(x):(y)) - -static FLAC__bool add_entropy_coding_method_(FLAC__BitWriter *bw, const FLAC__EntropyCodingMethod *method); -static FLAC__bool add_residual_partitioned_rice_(FLAC__BitWriter *bw, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order, const FLAC__bool is_extended); - -FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitWriter *bw) -{ - unsigned i, j; - const unsigned vendor_string_length = (unsigned)strlen(FLAC__VENDOR_STRING); - - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->is_last, FLAC__STREAM_METADATA_IS_LAST_LEN)) - return false; - - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->type, FLAC__STREAM_METADATA_TYPE_LEN)) - return false; - - /* - * First, for VORBIS_COMMENTs, adjust the length to reflect our vendor string - */ - i = metadata->length; - if(metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) { - FLAC__ASSERT(metadata->data.vorbis_comment.vendor_string.length == 0 || 0 != metadata->data.vorbis_comment.vendor_string.entry); - i -= metadata->data.vorbis_comment.vendor_string.length; - i += vendor_string_length; - } - FLAC__ASSERT(i < (1u << FLAC__STREAM_METADATA_LENGTH_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, i, FLAC__STREAM_METADATA_LENGTH_LEN)) - return false; - - switch(metadata->type) { - case FLAC__METADATA_TYPE_STREAMINFO: - FLAC__ASSERT(metadata->data.stream_info.min_blocksize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.min_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN)) - return false; - FLAC__ASSERT(metadata->data.stream_info.max_blocksize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.max_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN)) - return false; - FLAC__ASSERT(metadata->data.stream_info.min_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.min_framesize, FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN)) - return false; - FLAC__ASSERT(metadata->data.stream_info.max_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.max_framesize, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN)) - return false; - FLAC__ASSERT(FLAC__format_sample_rate_is_valid(metadata->data.stream_info.sample_rate)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.sample_rate, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN)) - return false; - FLAC__ASSERT(metadata->data.stream_info.channels > 0); - FLAC__ASSERT(metadata->data.stream_info.channels <= (1u << FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.channels-1, FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN)) - return false; - FLAC__ASSERT(metadata->data.stream_info.bits_per_sample > 0); - FLAC__ASSERT(metadata->data.stream_info.bits_per_sample <= (1u << FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN)); - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.bits_per_sample-1, FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.stream_info.md5sum, 16)) - return false; - break; - case FLAC__METADATA_TYPE_PADDING: - if(!FLAC__bitwriter_write_zeroes(bw, metadata->length * 8)) - return false; - break; - case FLAC__METADATA_TYPE_APPLICATION: - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.application.data, metadata->length - (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8))) - return false; - break; - case FLAC__METADATA_TYPE_SEEKTABLE: - for(i = 0; i < metadata->data.seek_table.num_points; i++) { - if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.seek_table.points[i].sample_number, FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.seek_table.points[i].stream_offset, FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.seek_table.points[i].frame_samples, FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN)) - return false; - } - break; - case FLAC__METADATA_TYPE_VORBIS_COMMENT: - if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, vendor_string_length)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)FLAC__VENDOR_STRING, vendor_string_length)) - return false; - if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, metadata->data.vorbis_comment.num_comments)) - return false; - for(i = 0; i < metadata->data.vorbis_comment.num_comments; i++) { - if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, metadata->data.vorbis_comment.comments[i].length)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.vorbis_comment.comments[i].entry, metadata->data.vorbis_comment.comments[i].length)) - return false; - } - break; - case FLAC__METADATA_TYPE_CUESHEET: - FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN % 8 == 0); - if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)metadata->data.cue_sheet.media_catalog_number, FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN/8)) - return false; - if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.cue_sheet.lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.cue_sheet.is_cd? 1 : 0, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN)) - return false; - if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.cue_sheet.num_tracks, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN)) - return false; - for(i = 0; i < metadata->data.cue_sheet.num_tracks; i++) { - const FLAC__StreamMetadata_CueSheet_Track *track = metadata->data.cue_sheet.tracks + i; - - if(!FLAC__bitwriter_write_raw_uint64(bw, track->offset, FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, track->number, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN)) - return false; - FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN % 8 == 0); - if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)track->isrc, FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN/8)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, track->type, FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, track->pre_emphasis, FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN)) - return false; - if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, track->num_indices, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN)) - return false; - for(j = 0; j < track->num_indices; j++) { - const FLAC__StreamMetadata_CueSheet_Index *index = track->indices + j; - - if(!FLAC__bitwriter_write_raw_uint64(bw, index->offset, FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, index->number, FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN)) - return false; - if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN)) - return false; - } - } - break; - case FLAC__METADATA_TYPE_PICTURE: - { - size_t len; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.type, FLAC__STREAM_METADATA_PICTURE_TYPE_LEN)) - return false; - len = strlen(metadata->data.picture.mime_type); - if(!FLAC__bitwriter_write_raw_uint32(bw, len, FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)metadata->data.picture.mime_type, len)) - return false; - len = strlen((const char *)metadata->data.picture.description); - if(!FLAC__bitwriter_write_raw_uint32(bw, len, FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.picture.description, len)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.width, FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.height, FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.depth, FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.colors, FLAC__STREAM_METADATA_PICTURE_COLORS_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.data_length, FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN)) - return false; - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.picture.data, metadata->data.picture.data_length)) - return false; - } - break; - default: - if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.unknown.data, metadata->length)) - return false; - break; - } - - FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(bw)); - return true; -} - -FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__BitWriter *bw) -{ - unsigned u, blocksize_hint, sample_rate_hint; - FLAC__byte crc; - - FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(bw)); - - if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__FRAME_HEADER_SYNC, FLAC__FRAME_HEADER_SYNC_LEN)) - return false; - - if(!FLAC__bitwriter_write_raw_uint32(bw, 0, FLAC__FRAME_HEADER_RESERVED_LEN)) - return false; - - if(!FLAC__bitwriter_write_raw_uint32(bw, (header->number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER)? 0 : 1, FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN)) - return false; - - FLAC__ASSERT(header->blocksize > 0 && header->blocksize <= FLAC__MAX_BLOCK_SIZE); - /* when this assertion holds true, any legal blocksize can be expressed in the frame header */ - FLAC__ASSERT(FLAC__MAX_BLOCK_SIZE <= 65535u); - blocksize_hint = 0; - switch(header->blocksize) { - case 192: u = 1; break; - case 576: u = 2; break; - case 1152: u = 3; break; - case 2304: u = 4; break; - case 4608: u = 5; break; - case 256: u = 8; break; - case 512: u = 9; break; - case 1024: u = 10; break; - case 2048: u = 11; break; - case 4096: u = 12; break; - case 8192: u = 13; break; - case 16384: u = 14; break; - case 32768: u = 15; break; - default: - if(header->blocksize <= 0x100) - blocksize_hint = u = 6; - else - blocksize_hint = u = 7; - break; - } - if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_BLOCK_SIZE_LEN)) - return false; - - FLAC__ASSERT(FLAC__format_sample_rate_is_valid(header->sample_rate)); - sample_rate_hint = 0; - switch(header->sample_rate) { - case 88200: u = 1; break; - case 176400: u = 2; break; - case 192000: u = 3; break; - case 8000: u = 4; break; - case 16000: u = 5; break; - case 22050: u = 6; break; - case 24000: u = 7; break; - case 32000: u = 8; break; - case 44100: u = 9; break; - case 48000: u = 10; break; - case 96000: u = 11; break; - default: - if(header->sample_rate <= 255000 && header->sample_rate % 1000 == 0) - sample_rate_hint = u = 12; - else if(header->sample_rate % 10 == 0) - sample_rate_hint = u = 14; - else if(header->sample_rate <= 0xffff) - sample_rate_hint = u = 13; - else - u = 0; - break; - } - if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_SAMPLE_RATE_LEN)) - return false; - - FLAC__ASSERT(header->channels > 0 && header->channels <= (1u << FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN) && header->channels <= FLAC__MAX_CHANNELS); - switch(header->channel_assignment) { - case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT: - u = header->channels - 1; - break; - case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE: - FLAC__ASSERT(header->channels == 2); - u = 8; - break; - case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE: - FLAC__ASSERT(header->channels == 2); - u = 9; - break; - case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE: - FLAC__ASSERT(header->channels == 2); - u = 10; - break; - default: - FLAC__ASSERT(0); - } - if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN)) - return false; - - FLAC__ASSERT(header->bits_per_sample > 0 && header->bits_per_sample <= (1u << FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN)); - switch(header->bits_per_sample) { - case 8 : u = 1; break; - case 12: u = 2; break; - case 16: u = 4; break; - case 20: u = 5; break; - case 24: u = 6; break; - default: u = 0; break; - } - if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN)) - return false; - - if(!FLAC__bitwriter_write_raw_uint32(bw, 0, FLAC__FRAME_HEADER_ZERO_PAD_LEN)) - return false; - - if(header->number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER) { - if(!FLAC__bitwriter_write_utf8_uint32(bw, header->number.frame_number)) - return false; - } - else { - if(!FLAC__bitwriter_write_utf8_uint64(bw, header->number.sample_number)) - return false; - } - - if(blocksize_hint) - if(!FLAC__bitwriter_write_raw_uint32(bw, header->blocksize-1, (blocksize_hint==6)? 8:16)) - return false; - - switch(sample_rate_hint) { - case 12: - if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate / 1000, 8)) - return false; - break; - case 13: - if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate, 16)) - return false; - break; - case 14: - if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate / 10, 16)) - return false; - break; - } - - /* write the CRC */ - if(!FLAC__bitwriter_get_write_crc8(bw, &crc)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, crc, FLAC__FRAME_HEADER_CRC_LEN)) - return false; - - return true; -} - -FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw) -{ - FLAC__bool ok; - - ok = - FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN) && - (wasted_bits? FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1) : true) && - FLAC__bitwriter_write_raw_int32(bw, subframe->value, subframe_bps) - ; - - return ok; -} - -FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw) -{ - unsigned i; - - if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK | (subframe->order<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN)) - return false; - if(wasted_bits) - if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1)) - return false; - - for(i = 0; i < subframe->order; i++) - if(!FLAC__bitwriter_write_raw_int32(bw, subframe->warmup[i], subframe_bps)) - return false; - - if(!add_entropy_coding_method_(bw, &subframe->entropy_coding_method)) - return false; - switch(subframe->entropy_coding_method.type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!add_residual_partitioned_rice_( - bw, - subframe->residual, - residual_samples, - subframe->order, - subframe->entropy_coding_method.data.partitioned_rice.contents->parameters, - subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits, - subframe->entropy_coding_method.data.partitioned_rice.order, - /*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 - )) - return false; - break; - default: - FLAC__ASSERT(0); - } - - return true; -} - -FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw) -{ - unsigned i; - - if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK | ((subframe->order-1)<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN)) - return false; - if(wasted_bits) - if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1)) - return false; - - for(i = 0; i < subframe->order; i++) - if(!FLAC__bitwriter_write_raw_int32(bw, subframe->warmup[i], subframe_bps)) - return false; - - if(!FLAC__bitwriter_write_raw_uint32(bw, subframe->qlp_coeff_precision-1, FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN)) - return false; - if(!FLAC__bitwriter_write_raw_int32(bw, subframe->quantization_level, FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN)) - return false; - for(i = 0; i < subframe->order; i++) - if(!FLAC__bitwriter_write_raw_int32(bw, subframe->qlp_coeff[i], subframe->qlp_coeff_precision)) - return false; - - if(!add_entropy_coding_method_(bw, &subframe->entropy_coding_method)) - return false; - switch(subframe->entropy_coding_method.type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!add_residual_partitioned_rice_( - bw, - subframe->residual, - residual_samples, - subframe->order, - subframe->entropy_coding_method.data.partitioned_rice.contents->parameters, - subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits, - subframe->entropy_coding_method.data.partitioned_rice.order, - /*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 - )) - return false; - break; - default: - FLAC__ASSERT(0); - } - - return true; -} - -FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw) -{ - unsigned i; - const FLAC__int32 *signal = subframe->data; - - if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN)) - return false; - if(wasted_bits) - if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1)) - return false; - - for(i = 0; i < samples; i++) - if(!FLAC__bitwriter_write_raw_int32(bw, signal[i], subframe_bps)) - return false; - - return true; -} - -FLAC__bool add_entropy_coding_method_(FLAC__BitWriter *bw, const FLAC__EntropyCodingMethod *method) -{ - if(!FLAC__bitwriter_write_raw_uint32(bw, method->type, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN)) - return false; - switch(method->type) { - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE: - case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2: - if(!FLAC__bitwriter_write_raw_uint32(bw, method->data.partitioned_rice.order, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN)) - return false; - break; - default: - FLAC__ASSERT(0); - } - return true; -} - -FLAC__bool add_residual_partitioned_rice_(FLAC__BitWriter *bw, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order, const FLAC__bool is_extended) -{ - const unsigned plen = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; - const unsigned pesc = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; - - if(partition_order == 0) { - unsigned i; - - if(raw_bits[0] == 0) { - if(!FLAC__bitwriter_write_raw_uint32(bw, rice_parameters[0], plen)) - return false; - if(!FLAC__bitwriter_write_rice_signed_block(bw, residual, residual_samples, rice_parameters[0])) - return false; - } - else { - FLAC__ASSERT(rice_parameters[0] == 0); - if(!FLAC__bitwriter_write_raw_uint32(bw, pesc, plen)) - return false; - if(!FLAC__bitwriter_write_raw_uint32(bw, raw_bits[0], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN)) - return false; - for(i = 0; i < residual_samples; i++) { - if(!FLAC__bitwriter_write_raw_int32(bw, residual[i], raw_bits[0])) - return false; - } - } - return true; - } - else { - unsigned i, j, k = 0, k_last = 0; - unsigned partition_samples; - const unsigned default_partition_samples = (residual_samples+predictor_order) >> partition_order; - for(i = 0; i < (1u< -#endif - -#include -#include "../assert.h" -#include "../format.h" -#include "include/private/window.h" - -#ifndef FLAC__INTEGER_ONLY_LIBRARY - -#ifndef M_PI -/* math.h in VC++ doesn't seem to have this (how Microsoft is that?) */ -#define M_PI 3.14159265358979323846 -#endif - - -void FLAC__window_bartlett(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - if (L & 1) { - for (n = 0; n <= N/2; n++) - window[n] = 2.0f * n / (float)N; - for (; n <= N; n++) - window[n] = 2.0f - 2.0f * n / (float)N; - } - else { - for (n = 0; n <= L/2-1; n++) - window[n] = 2.0f * n / (float)N; - for (; n <= N; n++) - window[n] = 2.0f - 2.0f * (N-n) / (float)N; - } -} - -void FLAC__window_bartlett_hann(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(0.62f - 0.48f * fabs((float)n/(float)N+0.5f) + 0.38f * cos(2.0f * M_PI * ((float)n/(float)N+0.5f))); -} - -void FLAC__window_blackman(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(0.42f - 0.5f * cos(2.0f * M_PI * n / N) + 0.08f * cos(4.0f * M_PI * n / N)); -} - -/* 4-term -92dB side-lobe */ -void FLAC__window_blackman_harris_4term_92db_sidelobe(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n <= N; n++) - window[n] = (FLAC__real)(0.35875f - 0.48829f * cos(2.0f * M_PI * n / N) + 0.14128f * cos(4.0f * M_PI * n / N) - 0.01168f * cos(6.0f * M_PI * n / N)); -} - -void FLAC__window_connes(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - const double N2 = (double)N / 2.; - FLAC__int32 n; - - for (n = 0; n <= N; n++) { - double k = ((double)n - N2) / N2; - k = 1.0f - k * k; - window[n] = (FLAC__real)(k * k); - } -} - -void FLAC__window_flattop(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(1.0f - 1.93f * cos(2.0f * M_PI * n / N) + 1.29f * cos(4.0f * M_PI * n / N) - 0.388f * cos(6.0f * M_PI * n / N) + 0.0322f * cos(8.0f * M_PI * n / N)); -} - -void FLAC__window_gauss(FLAC__real *window, const FLAC__int32 L, const FLAC__real stddev) -{ - const FLAC__int32 N = L - 1; - const double N2 = (double)N / 2.; - FLAC__int32 n; - - for (n = 0; n <= N; n++) { - const double k = ((double)n - N2) / (stddev * N2); - window[n] = (FLAC__real)exp(-0.5f * k * k); - } -} - -void FLAC__window_hamming(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(0.54f - 0.46f * cos(2.0f * M_PI * n / N)); -} - -void FLAC__window_hann(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(0.5f - 0.5f * cos(2.0f * M_PI * n / N)); -} - -void FLAC__window_kaiser_bessel(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(0.402f - 0.498f * cos(2.0f * M_PI * n / N) + 0.098f * cos(4.0f * M_PI * n / N) - 0.001f * cos(6.0f * M_PI * n / N)); -} - -void FLAC__window_nuttall(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = (FLAC__real)(0.3635819f - 0.4891775f*cos(2.0f*M_PI*n/N) + 0.1365995f*cos(4.0f*M_PI*n/N) - 0.0106411f*cos(6.0f*M_PI*n/N)); -} - -void FLAC__window_rectangle(FLAC__real *window, const FLAC__int32 L) -{ - FLAC__int32 n; - - for (n = 0; n < L; n++) - window[n] = 1.0f; -} - -void FLAC__window_triangle(FLAC__real *window, const FLAC__int32 L) -{ - FLAC__int32 n; - - if (L & 1) { - for (n = 1; n <= L+1/2; n++) - window[n-1] = 2.0f * n / ((float)L + 1.0f); - for (; n <= L; n++) - window[n-1] = - (float)(2 * (L - n + 1)) / ((float)L + 1.0f); - } - else { - for (n = 1; n <= L/2; n++) - window[n-1] = 2.0f * n / (float)L; - for (; n <= L; n++) - window[n-1] = ((float)(2 * (L - n)) + 1.0f) / (float)L; - } -} - -void FLAC__window_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p) -{ - if (p <= 0.0) - FLAC__window_rectangle(window, L); - else if (p >= 1.0) - FLAC__window_hann(window, L); - else { - const FLAC__int32 Np = (FLAC__int32)(p / 2.0f * L) - 1; - FLAC__int32 n; - /* start with rectangle... */ - FLAC__window_rectangle(window, L); - /* ...replace ends with hann */ - if (Np > 0) { - for (n = 0; n <= Np; n++) { - window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * n / Np)); - window[L-Np-1+n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * (n+Np) / Np)); - } - } - } -} - -void FLAC__window_welch(FLAC__real *window, const FLAC__int32 L) -{ - const FLAC__int32 N = L - 1; - const double N2 = (double)N / 2.; - FLAC__int32 n; - - for (n = 0; n <= N; n++) { - const double k = ((double)n - N2) / N2; - window[n] = (FLAC__real)(1.0f - k * k); - } -} - -#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/metadata.h b/src/juce_appframework/audio/audio_file_formats/flac/metadata.h deleted file mode 100644 index 19c3b0fe82..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/metadata.h +++ /dev/null @@ -1,2181 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__METADATA_H -#define FLAC__METADATA_H - -#include /* for off_t */ -#include "export.h" -#include "callback.h" -#include "format.h" - -/* -------------------------------------------------------------------- - (For an example of how all these routines are used, see the source - code for the unit tests in src/test_libFLAC/metadata_*.c, or - metaflac in src/metaflac/) - ------------------------------------------------------------------*/ - -/** \file include/FLAC/metadata.h - * - * \brief - * This module provides functions for creating and manipulating FLAC - * metadata blocks in memory, and three progressively more powerful - * interfaces for traversing and editing metadata in FLAC files. - * - * See the detailed documentation for each interface in the - * \link flac_metadata metadata \endlink module. - */ - -/** \defgroup flac_metadata FLAC/metadata.h: metadata interfaces - * \ingroup flac - * - * \brief - * This module provides functions for creating and manipulating FLAC - * metadata blocks in memory, and three progressively more powerful - * interfaces for traversing and editing metadata in native FLAC files. - * Note that currently only the Chain interface (level 2) supports Ogg - * FLAC files, and it is read-only i.e. no writing back changed - * metadata to file. - * - * There are three metadata interfaces of increasing complexity: - * - * Level 0: - * Read-only access to the STREAMINFO, VORBIS_COMMENT, CUESHEET, and - * PICTURE blocks. - * - * Level 1: - * Read-write access to all metadata blocks. This level is write- - * efficient in most cases (more on this below), and uses less memory - * than level 2. - * - * Level 2: - * Read-write access to all metadata blocks. This level is write- - * efficient in all cases, but uses more memory since all metadata for - * the whole file is read into memory and manipulated before writing - * out again. - * - * What do we mean by efficient? Since FLAC metadata appears at the - * beginning of the file, when writing metadata back to a FLAC file - * it is possible to grow or shrink the metadata such that the entire - * file must be rewritten. However, if the size remains the same during - * changes or PADDING blocks are utilized, only the metadata needs to be - * overwritten, which is much faster. - * - * Efficient means the whole file is rewritten at most one time, and only - * when necessary. Level 1 is not efficient only in the case that you - * cause more than one metadata block to grow or shrink beyond what can - * be accomodated by padding. In this case you should probably use level - * 2, which allows you to edit all the metadata for a file in memory and - * write it out all at once. - * - * All levels know how to skip over and not disturb an ID3v2 tag at the - * front of the file. - * - * All levels access files via their filenames. In addition, level 2 - * has additional alternative read and write functions that take an I/O - * handle and callbacks, for situations where access by filename is not - * possible. - * - * In addition to the three interfaces, this module defines functions for - * creating and manipulating various metadata objects in memory. As we see - * from the Format module, FLAC metadata blocks in memory are very primitive - * structures for storing information in an efficient way. Reading - * information from the structures is easy but creating or modifying them - * directly is more complex. The metadata object routines here facilitate - * this by taking care of the consistency and memory management drudgery. - * - * Unless you will be using the level 1 or 2 interfaces to modify existing - * metadata however, you will not probably not need these. - * - * From a dependency standpoint, none of the encoders or decoders require - * the metadata module. This is so that embedded users can strip out the - * metadata module from libFLAC to reduce the size and complexity. - */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \defgroup flac_metadata_level0 FLAC/metadata.h: metadata level 0 interface - * \ingroup flac_metadata - * - * \brief - * The level 0 interface consists of individual routines to read the - * STREAMINFO, VORBIS_COMMENT, CUESHEET, and PICTURE blocks, requiring - * only a filename. - * - * They try to skip any ID3v2 tag at the head of the file. - * - * \{ - */ - -/** Read the STREAMINFO metadata block of the given FLAC file. This function - * will try to skip any ID3v2 tag at the head of the file. - * - * \param filename The path to the FLAC file to read. - * \param streaminfo A pointer to space for the STREAMINFO block. Since - * FLAC__StreamMetadata is a simple structure with no - * memory allocation involved, you pass the address of - * an existing structure. It need not be initialized. - * \assert - * \code filename != NULL \endcode - * \code streaminfo != NULL \endcode - * \retval FLAC__bool - * \c true if a valid STREAMINFO block was read from \a filename. Returns - * \c false if there was a memory allocation error, a file decoder error, - * or the file contained no STREAMINFO block. (A memory allocation error - * is possible because this function must set up a file decoder.) - */ -FLAC_API FLAC__bool FLAC__metadata_get_streaminfo(const char *filename, FLAC__StreamMetadata *streaminfo); - -/** Read the VORBIS_COMMENT metadata block of the given FLAC file. This - * function will try to skip any ID3v2 tag at the head of the file. - * - * \param filename The path to the FLAC file to read. - * \param tags The address where the returned pointer will be - * stored. The \a tags object must be deleted by - * the caller using FLAC__metadata_object_delete(). - * \assert - * \code filename != NULL \endcode - * \code tags != NULL \endcode - * \retval FLAC__bool - * \c true if a valid VORBIS_COMMENT block was read from \a filename, - * and \a *tags will be set to the address of the metadata structure. - * Returns \c false if there was a memory allocation error, a file - * decoder error, or the file contained no VORBIS_COMMENT block, and - * \a *tags will be set to \c NULL. - */ -FLAC_API FLAC__bool FLAC__metadata_get_tags(const char *filename, FLAC__StreamMetadata **tags); - -/** Read the CUESHEET metadata block of the given FLAC file. This - * function will try to skip any ID3v2 tag at the head of the file. - * - * \param filename The path to the FLAC file to read. - * \param cuesheet The address where the returned pointer will be - * stored. The \a cuesheet object must be deleted by - * the caller using FLAC__metadata_object_delete(). - * \assert - * \code filename != NULL \endcode - * \code cuesheet != NULL \endcode - * \retval FLAC__bool - * \c true if a valid CUESHEET block was read from \a filename, - * and \a *cuesheet will be set to the address of the metadata - * structure. Returns \c false if there was a memory allocation - * error, a file decoder error, or the file contained no CUESHEET - * block, and \a *cuesheet will be set to \c NULL. - */ -FLAC_API FLAC__bool FLAC__metadata_get_cuesheet(const char *filename, FLAC__StreamMetadata **cuesheet); - -/** Read a PICTURE metadata block of the given FLAC file. This - * function will try to skip any ID3v2 tag at the head of the file. - * Since there can be more than one PICTURE block in a file, this - * function takes a number of parameters that act as constraints to - * the search. The PICTURE block with the largest area matching all - * the constraints will be returned, or \a *picture will be set to - * \c NULL if there was no such block. - * - * \param filename The path to the FLAC file to read. - * \param picture The address where the returned pointer will be - * stored. The \a picture object must be deleted by - * the caller using FLAC__metadata_object_delete(). - * \param type The desired picture type. Use \c -1 to mean - * "any type". - * \param mime_type The desired MIME type, e.g. "image/jpeg". The - * string will be matched exactly. Use \c NULL to - * mean "any MIME type". - * \param description The desired description. The string will be - * matched exactly. Use \c NULL to mean "any - * description". - * \param max_width The maximum width in pixels desired. Use - * \c (unsigned)(-1) to mean "any width". - * \param max_height The maximum height in pixels desired. Use - * \c (unsigned)(-1) to mean "any height". - * \param max_depth The maximum color depth in bits-per-pixel desired. - * Use \c (unsigned)(-1) to mean "any depth". - * \param max_colors The maximum number of colors desired. Use - * \c (unsigned)(-1) to mean "any number of colors". - * \assert - * \code filename != NULL \endcode - * \code picture != NULL \endcode - * \retval FLAC__bool - * \c true if a valid PICTURE block was read from \a filename, - * and \a *picture will be set to the address of the metadata - * structure. Returns \c false if there was a memory allocation - * error, a file decoder error, or the file contained no PICTURE - * block, and \a *picture will be set to \c NULL. - */ -FLAC_API FLAC__bool FLAC__metadata_get_picture(const char *filename, FLAC__StreamMetadata **picture, FLAC__StreamMetadata_Picture_Type type, const char *mime_type, const FLAC__byte *description, unsigned max_width, unsigned max_height, unsigned max_depth, unsigned max_colors); - -/* \} */ - - -/** \defgroup flac_metadata_level1 FLAC/metadata.h: metadata level 1 interface - * \ingroup flac_metadata - * - * \brief - * The level 1 interface provides read-write access to FLAC file metadata and - * operates directly on the FLAC file. - * - * The general usage of this interface is: - * - * - Create an iterator using FLAC__metadata_simple_iterator_new() - * - Attach it to a file using FLAC__metadata_simple_iterator_init() and check - * the exit code. Call FLAC__metadata_simple_iterator_is_writable() to - * see if the file is writable, or only read access is allowed. - * - Use FLAC__metadata_simple_iterator_next() and - * FLAC__metadata_simple_iterator_prev() to traverse the blocks. - * This is does not read the actual blocks themselves. - * FLAC__metadata_simple_iterator_next() is relatively fast. - * FLAC__metadata_simple_iterator_prev() is slower since it needs to search - * forward from the front of the file. - * - Use FLAC__metadata_simple_iterator_get_block_type() or - * FLAC__metadata_simple_iterator_get_block() to access the actual data at - * the current iterator position. The returned object is yours to modify - * and free. - * - Use FLAC__metadata_simple_iterator_set_block() to write a modified block - * back. You must have write permission to the original file. Make sure to - * read the whole comment to FLAC__metadata_simple_iterator_set_block() - * below. - * - Use FLAC__metadata_simple_iterator_insert_block_after() to add new blocks. - * Use the object creation functions from - * \link flac_metadata_object here \endlink to generate new objects. - * - Use FLAC__metadata_simple_iterator_delete_block() to remove the block - * currently referred to by the iterator, or replace it with padding. - * - Destroy the iterator with FLAC__metadata_simple_iterator_delete() when - * finished. - * - * \note - * The FLAC file remains open the whole time between - * FLAC__metadata_simple_iterator_init() and - * FLAC__metadata_simple_iterator_delete(), so make sure you are not altering - * the file during this time. - * - * \note - * Do not modify the \a is_last, \a length, or \a type fields of returned - * FLAC__StreamMetadata objects. These are managed automatically. - * - * \note - * If any of the modification functions - * (FLAC__metadata_simple_iterator_set_block(), - * FLAC__metadata_simple_iterator_delete_block(), - * FLAC__metadata_simple_iterator_insert_block_after(), etc.) return \c false, - * you should delete the iterator as it may no longer be valid. - * - * \{ - */ - -struct FLAC__Metadata_SimpleIterator; -/** The opaque structure definition for the level 1 iterator type. - * See the - * \link flac_metadata_level1 metadata level 1 module \endlink - * for a detailed description. - */ -typedef struct FLAC__Metadata_SimpleIterator FLAC__Metadata_SimpleIterator; - -/** Status type for FLAC__Metadata_SimpleIterator. - * - * The iterator's current status can be obtained by calling FLAC__metadata_simple_iterator_status(). - */ -typedef enum { - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK = 0, - /**< The iterator is in the normal OK state */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, - /**< The data passed into a function violated the function's usage criteria */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE, - /**< The iterator could not open the target file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_A_FLAC_FILE, - /**< The iterator could not find the FLAC signature at the start of the file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_WRITABLE, - /**< The iterator tried to write to a file that was not writable */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_BAD_METADATA, - /**< The iterator encountered input that does not conform to the FLAC metadata specification */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR, - /**< The iterator encountered an error while reading the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, - /**< The iterator encountered an error while seeking in the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR, - /**< The iterator encountered an error while writing the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_RENAME_ERROR, - /**< The iterator encountered an error renaming the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_UNLINK_ERROR, - /**< The iterator encountered an error removing the temporary file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR, - /**< Memory allocation failed */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_INTERNAL_ERROR - /**< The caller violated an assertion or an unexpected error occurred */ - -} FLAC__Metadata_SimpleIteratorStatus; - -/** Maps a FLAC__Metadata_SimpleIteratorStatus to a C string. - * - * Using a FLAC__Metadata_SimpleIteratorStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__Metadata_SimpleIteratorStatusString[]; - - -/** Create a new iterator instance. - * - * \retval FLAC__Metadata_SimpleIterator* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__Metadata_SimpleIterator *FLAC__metadata_simple_iterator_new(void); - -/** Free an iterator instance. Deletes the object pointed to by \a iterator. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - */ -FLAC_API void FLAC__metadata_simple_iterator_delete(FLAC__Metadata_SimpleIterator *iterator); - -/** Get the current status of the iterator. Call this after a function - * returns \c false to get the reason for the error. Also resets the status - * to FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - * \retval FLAC__Metadata_SimpleIteratorStatus - * The current status of the iterator. - */ -FLAC_API FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator); - -/** Initialize the iterator to point to the first metadata block in the - * given FLAC file. - * - * \param iterator A pointer to an existing iterator. - * \param filename The path to the FLAC file. - * \param read_only If \c true, the FLAC file will be opened - * in read-only mode; if \c false, the FLAC - * file will be opened for edit even if no - * edits are performed. - * \param preserve_file_stats If \c true, the owner and modification - * time will be preserved even if the FLAC - * file is written to. - * \assert - * \code iterator != NULL \endcode - * \code filename != NULL \endcode - * \retval FLAC__bool - * \c false if a memory allocation error occurs, the file can't be - * opened, or another error occurs, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool read_only, FLAC__bool preserve_file_stats); - -/** Returns \c true if the FLAC file is writable. If \c false, calls to - * FLAC__metadata_simple_iterator_set_block() and - * FLAC__metadata_simple_iterator_insert_block_after() will fail. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - * \retval FLAC__bool - * See above. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator); - -/** Moves the iterator forward one metadata block, returning \c false if - * already at the end. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c false if already at the last metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_next(FLAC__Metadata_SimpleIterator *iterator); - -/** Moves the iterator backward one metadata block, returning \c false if - * already at the beginning. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c false if already at the first metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_prev(FLAC__Metadata_SimpleIterator *iterator); - -/** Returns a flag telling if the current metadata block is the last. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c true if the current metadata block is the last in the file, - * else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_last(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the offset of the metadata block at the current position. This - * avoids reading the actual block data which can save time for large - * blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval off_t - * The offset of the metadata block at the current iterator position. - * This is the byte offset relative to the beginning of the file of - * the current metadata block's header. - */ -FLAC_API off_t FLAC__metadata_simple_iterator_get_block_offset(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the type of the metadata block at the current position. This - * avoids reading the actual block data which can save time for large - * blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__MetadataType - * The type of the metadata block at the current iterator position. - */ -FLAC_API FLAC__MetadataType FLAC__metadata_simple_iterator_get_block_type(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the length of the metadata block at the current position. This - * avoids reading the actual block data which can save time for large - * blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval unsigned - * The length of the metadata block at the current iterator position. - * The is same length as that in the - * metadata block header, - * i.e. the length of the metadata body that follows the header. - */ -FLAC_API unsigned FLAC__metadata_simple_iterator_get_block_length(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the application ID of the \c APPLICATION block at the current - * position. This avoids reading the actual block data which can save - * time for large blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \param id A pointer to a buffer of at least \c 4 bytes where - * the ID will be stored. - * \assert - * \code iterator != NULL \endcode - * \code id != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c true if the ID was successfully read, else \c false, in which - * case you should check FLAC__metadata_simple_iterator_status() to - * find out why. If the status is - * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, then the - * current metadata block is not an \c APPLICATION block. Otherwise - * if the status is - * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR or - * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, an I/O error - * occurred and the iterator can no longer be used. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_get_application_id(FLAC__Metadata_SimpleIterator *iterator, FLAC__byte *id); - -/** Get the metadata block at the current position. You can modify the - * block but must use FLAC__metadata_simple_iterator_set_block() to - * write it back to the FLAC file. - * - * You must call FLAC__metadata_object_delete() on the returned object - * when you are finished with it. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__StreamMetadata* - * The current metadata block, or \c NULL if there was a memory - * allocation error. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_simple_iterator_get_block(FLAC__Metadata_SimpleIterator *iterator); - -/** Write a block back to the FLAC file. This function tries to be - * as efficient as possible; how the block is actually written is - * shown by the following: - * - * Existing block is a STREAMINFO block and the new block is a - * STREAMINFO block: the new block is written in place. Make sure - * you know what you're doing when changing the values of a - * STREAMINFO block. - * - * Existing block is a STREAMINFO block and the new block is a - * not a STREAMINFO block: this is an error since the first block - * must be a STREAMINFO block. Returns \c false without altering the - * file. - * - * Existing block is not a STREAMINFO block and the new block is a - * STREAMINFO block: this is an error since there may be only one - * STREAMINFO block. Returns \c false without altering the file. - * - * Existing block and new block are the same length: the existing - * block will be replaced by the new block, written in place. - * - * Existing block is longer than new block: if use_padding is \c true, - * the existing block will be overwritten in place with the new - * block followed by a PADDING block, if possible, to make the total - * size the same as the existing block. Remember that a padding - * block requires at least four bytes so if the difference in size - * between the new block and existing block is less than that, the - * entire file will have to be rewritten, using the new block's - * exact size. If use_padding is \c false, the entire file will be - * rewritten, replacing the existing block by the new block. - * - * Existing block is shorter than new block: if use_padding is \c true, - * the function will try and expand the new block into the following - * PADDING block, if it exists and doing so won't shrink the PADDING - * block to less than 4 bytes. If there is no following PADDING - * block, or it will shrink to less than 4 bytes, or use_padding is - * \c false, the entire file is rewritten, replacing the existing block - * with the new block. Note that in this case any following PADDING - * block is preserved as is. - * - * After writing the block, the iterator will remain in the same - * place, i.e. pointing to the new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block The block to set. - * \param use_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \code block != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_set_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding); - -/** This is similar to FLAC__metadata_simple_iterator_set_block() - * except that instead of writing over an existing block, it appends - * a block after the existing block. \a use_padding is again used to - * tell the function to try an expand into following padding in an - * attempt to avoid rewriting the entire file. - * - * This function will fail and return \c false if given a STREAMINFO - * block. - * - * After writing the block, the iterator will be pointing to the - * new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block The block to set. - * \param use_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \code block != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_insert_block_after(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding); - -/** Deletes the block at the current position. This will cause the - * entire FLAC file to be rewritten, unless \a use_padding is \c true, - * in which case the block will be replaced by an equal-sized PADDING - * block. The iterator will be left pointing to the block before the - * one just deleted. - * - * You may not delete the STREAMINFO block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param use_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_delete_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool use_padding); - -/* \} */ - - -/** \defgroup flac_metadata_level2 FLAC/metadata.h: metadata level 2 interface - * \ingroup flac_metadata - * - * \brief - * The level 2 interface provides read-write access to FLAC file metadata; - * all metadata is read into memory, operated on in memory, and then written - * to file, which is more efficient than level 1 when editing multiple blocks. - * - * Currently Ogg FLAC is supported for read only, via - * FLAC__metadata_chain_read_ogg() but a subsequent - * FLAC__metadata_chain_write() will fail. - * - * The general usage of this interface is: - * - * - Create a new chain using FLAC__metadata_chain_new(). A chain is a - * linked list of FLAC metadata blocks. - * - Read all metadata into the the chain from a FLAC file using - * FLAC__metadata_chain_read() or FLAC__metadata_chain_read_ogg() and - * check the status. - * - Optionally, consolidate the padding using - * FLAC__metadata_chain_merge_padding() or - * FLAC__metadata_chain_sort_padding(). - * - Create a new iterator using FLAC__metadata_iterator_new() - * - Initialize the iterator to point to the first element in the chain - * using FLAC__metadata_iterator_init() - * - Traverse the chain using FLAC__metadata_iterator_next and - * FLAC__metadata_iterator_prev(). - * - Get a block for reading or modification using - * FLAC__metadata_iterator_get_block(). The pointer to the object - * inside the chain is returned, so the block is yours to modify. - * Changes will be reflected in the FLAC file when you write the - * chain. You can also add and delete blocks (see functions below). - * - When done, write out the chain using FLAC__metadata_chain_write(). - * Make sure to read the whole comment to the function below. - * - Delete the chain using FLAC__metadata_chain_delete(). - * - * \note - * Even though the FLAC file is not open while the chain is being - * manipulated, you must not alter the file externally during - * this time. The chain assumes the FLAC file will not change - * between the time of FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg() - * and FLAC__metadata_chain_write(). - * - * \note - * Do not modify the is_last, length, or type fields of returned - * FLAC__StreamMetadata objects. These are managed automatically. - * - * \note - * The metadata objects returned by FLAC__metadata_iterator_get_block() - * are owned by the chain; do not FLAC__metadata_object_delete() them. - * In the same way, blocks passed to FLAC__metadata_iterator_set_block() - * become owned by the chain and they will be deleted when the chain is - * deleted. - * - * \{ - */ - -struct FLAC__Metadata_Chain; -/** The opaque structure definition for the level 2 chain type. - */ -typedef struct FLAC__Metadata_Chain FLAC__Metadata_Chain; - -struct FLAC__Metadata_Iterator; -/** The opaque structure definition for the level 2 iterator type. - */ -typedef struct FLAC__Metadata_Iterator FLAC__Metadata_Iterator; - -typedef enum { - FLAC__METADATA_CHAIN_STATUS_OK = 0, - /**< The chain is in the normal OK state */ - - FLAC__METADATA_CHAIN_STATUS_ILLEGAL_INPUT, - /**< The data passed into a function violated the function's usage criteria */ - - FLAC__METADATA_CHAIN_STATUS_ERROR_OPENING_FILE, - /**< The chain could not open the target file */ - - FLAC__METADATA_CHAIN_STATUS_NOT_A_FLAC_FILE, - /**< The chain could not find the FLAC signature at the start of the file */ - - FLAC__METADATA_CHAIN_STATUS_NOT_WRITABLE, - /**< The chain tried to write to a file that was not writable */ - - FLAC__METADATA_CHAIN_STATUS_BAD_METADATA, - /**< The chain encountered input that does not conform to the FLAC metadata specification */ - - FLAC__METADATA_CHAIN_STATUS_READ_ERROR, - /**< The chain encountered an error while reading the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_SEEK_ERROR, - /**< The chain encountered an error while seeking in the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_WRITE_ERROR, - /**< The chain encountered an error while writing the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_RENAME_ERROR, - /**< The chain encountered an error renaming the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_UNLINK_ERROR, - /**< The chain encountered an error removing the temporary file */ - - FLAC__METADATA_CHAIN_STATUS_MEMORY_ALLOCATION_ERROR, - /**< Memory allocation failed */ - - FLAC__METADATA_CHAIN_STATUS_INTERNAL_ERROR, - /**< The caller violated an assertion or an unexpected error occurred */ - - FLAC__METADATA_CHAIN_STATUS_INVALID_CALLBACKS, - /**< One or more of the required callbacks was NULL */ - - FLAC__METADATA_CHAIN_STATUS_READ_WRITE_MISMATCH, - /**< FLAC__metadata_chain_write() was called on a chain read by - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), - * or - * FLAC__metadata_chain_write_with_callbacks()/FLAC__metadata_chain_write_with_callbacks_and_tempfile() - * was called on a chain read by - * FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). - * Matching read/write methods must always be used. */ - - FLAC__METADATA_CHAIN_STATUS_WRONG_WRITE_CALL - /**< FLAC__metadata_chain_write_with_callbacks() was called when the - * chain write requires a tempfile; use - * FLAC__metadata_chain_write_with_callbacks_and_tempfile() instead. - * Or, FLAC__metadata_chain_write_with_callbacks_and_tempfile() was - * called when the chain write does not require a tempfile; use - * FLAC__metadata_chain_write_with_callbacks() instead. - * Always check FLAC__metadata_chain_check_if_tempfile_needed() - * before writing via callbacks. */ - -} FLAC__Metadata_ChainStatus; - -/** Maps a FLAC__Metadata_ChainStatus to a C string. - * - * Using a FLAC__Metadata_ChainStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__Metadata_ChainStatusString[]; - -/*********** FLAC__Metadata_Chain ***********/ - -/** Create a new chain instance. - * - * \retval FLAC__Metadata_Chain* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__Metadata_Chain *FLAC__metadata_chain_new(void); - -/** Free a chain instance. Deletes the object pointed to by \a chain. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_chain_delete(FLAC__Metadata_Chain *chain); - -/** Get the current status of the chain. Call this after a function - * returns \c false to get the reason for the error. Also resets the - * status to FLAC__METADATA_CHAIN_STATUS_OK. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__Metadata_ChainStatus - * The current status of the chain. - */ -FLAC_API FLAC__Metadata_ChainStatus FLAC__metadata_chain_status(FLAC__Metadata_Chain *chain); - -/** Read all metadata from a FLAC file into the chain. - * - * \param chain A pointer to an existing chain. - * \param filename The path to the FLAC file to read. - * \assert - * \code chain != NULL \endcode - * \code filename != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a filename, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read(FLAC__Metadata_Chain *chain, const char *filename); - -/** Read all metadata from an Ogg FLAC file into the chain. - * - * \note Ogg FLAC metadata data writing is not supported yet and - * FLAC__metadata_chain_write() will fail. - * - * \param chain A pointer to an existing chain. - * \param filename The path to the Ogg FLAC file to read. - * \assert - * \code chain != NULL \endcode - * \code filename != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a filename, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg(FLAC__Metadata_Chain *chain, const char *filename); - -/** Read all metadata from a FLAC stream into the chain via I/O callbacks. - * - * The \a handle need only be open for reading, but must be seekable. - * The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" - * for Windows). - * - * \param chain A pointer to an existing chain. - * \param handle The I/O handle of the FLAC stream to read. The - * handle will NOT be closed after the metadata is read; - * that is the duty of the caller. - * \param callbacks - * A set of callbacks to use for I/O. The mandatory - * callbacks are \a read, \a seek, and \a tell. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a handle, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); - -/** Read all metadata from an Ogg FLAC stream into the chain via I/O callbacks. - * - * The \a handle need only be open for reading, but must be seekable. - * The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" - * for Windows). - * - * \note Ogg FLAC metadata data writing is not supported yet and - * FLAC__metadata_chain_write() will fail. - * - * \param chain A pointer to an existing chain. - * \param handle The I/O handle of the Ogg FLAC stream to read. The - * handle will NOT be closed after the metadata is read; - * that is the duty of the caller. - * \param callbacks - * A set of callbacks to use for I/O. The mandatory - * callbacks are \a read, \a seek, and \a tell. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a handle, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); - -/** Checks if writing the given chain would require the use of a - * temporary file, or if it could be written in place. - * - * Under certain conditions, padding can be utilized so that writing - * edited metadata back to the FLAC file does not require rewriting the - * entire file. If rewriting is required, then a temporary workfile is - * required. When writing metadata using callbacks, you must check - * this function to know whether to call - * FLAC__metadata_chain_write_with_callbacks() or - * FLAC__metadata_chain_write_with_callbacks_and_tempfile(). When - * writing with FLAC__metadata_chain_write(), the temporary file is - * handled internally. - * - * \param chain A pointer to an existing chain. - * \param use_padding - * Whether or not padding will be allowed to be used - * during the write. The value of \a use_padding given - * here must match the value later passed to - * FLAC__metadata_chain_write_with_callbacks() or - * FLAC__metadata_chain_write_with_callbacks_with_tempfile(). - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if writing the current chain would require a tempfile, or - * \c false if metadata can be written in place. - */ -FLAC_API FLAC__bool FLAC__metadata_chain_check_if_tempfile_needed(FLAC__Metadata_Chain *chain, FLAC__bool use_padding); - -/** Write all metadata out to the FLAC file. This function tries to be as - * efficient as possible; how the metadata is actually written is shown by - * the following: - * - * If the current chain is the same size as the existing metadata, the new - * data is written in place. - * - * If the current chain is longer than the existing metadata, and - * \a use_padding is \c true, and the last block is a PADDING block of - * sufficient length, the function will truncate the final padding block - * so that the overall size of the metadata is the same as the existing - * metadata, and then just rewrite the metadata. Otherwise, if not all of - * the above conditions are met, the entire FLAC file must be rewritten. - * If you want to use padding this way it is a good idea to call - * FLAC__metadata_chain_sort_padding() first so that you have the maximum - * amount of padding to work with, unless you need to preserve ordering - * of the PADDING blocks for some reason. - * - * If the current chain is shorter than the existing metadata, and - * \a use_padding is \c true, and the final block is a PADDING block, the padding - * is extended to make the overall size the same as the existing data. If - * \a use_padding is \c true and the last block is not a PADDING block, a new - * PADDING block is added to the end of the new data to make it the same - * size as the existing data (if possible, see the note to - * FLAC__metadata_simple_iterator_set_block() about the four byte limit) - * and the new data is written in place. If none of the above apply or - * \a use_padding is \c false, the entire FLAC file is rewritten. - * - * If \a preserve_file_stats is \c true, the owner and modification time will - * be preserved even if the FLAC file is written. - * - * For this write function to be used, the chain must have been read with - * FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(), not - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(). - * - * \param chain A pointer to an existing chain. - * \param use_padding See above. - * \param preserve_file_stats See above. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if the write succeeded, else \c false. On failure, - * check the status with FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_write(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__bool preserve_file_stats); - -/** Write all metadata out to a FLAC stream via callbacks. - * - * (See FLAC__metadata_chain_write() for the details on how padding is - * used to write metadata in place if possible.) - * - * The \a handle must be open for updating and be seekable. The - * equivalent minimum stdio fopen() file mode is \c "r+" (or \c "r+b" - * for Windows). - * - * For this write function to be used, the chain must have been read with - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), - * not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). - * Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned - * \c false. - * - * \param chain A pointer to an existing chain. - * \param use_padding See FLAC__metadata_chain_write() - * \param handle The I/O handle of the FLAC stream to write. The - * handle will NOT be closed after the metadata is - * written; that is the duty of the caller. - * \param callbacks A set of callbacks to use for I/O. The mandatory - * callbacks are \a write and \a seek. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if the write succeeded, else \c false. On failure, - * check the status with FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); - -/** Write all metadata out to a FLAC stream via callbacks. - * - * (See FLAC__metadata_chain_write() for the details on how padding is - * used to write metadata in place if possible.) - * - * This version of the write-with-callbacks function must be used when - * FLAC__metadata_chain_check_if_tempfile_needed() returns true. In - * this function, you must supply an I/O handle corresponding to the - * FLAC file to edit, and a temporary handle to which the new FLAC - * file will be written. It is the caller's job to move this temporary - * FLAC file on top of the original FLAC file to complete the metadata - * edit. - * - * The \a handle must be open for reading and be seekable. The - * equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" - * for Windows). - * - * The \a temp_handle must be open for writing. The - * equivalent minimum stdio fopen() file mode is \c "w" (or \c "wb" - * for Windows). It should be an empty stream, or at least positioned - * at the start-of-file (in which case it is the caller's duty to - * truncate it on return). - * - * For this write function to be used, the chain must have been read with - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), - * not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). - * Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned - * \c true. - * - * \param chain A pointer to an existing chain. - * \param use_padding See FLAC__metadata_chain_write() - * \param handle The I/O handle of the original FLAC stream to read. - * The handle will NOT be closed after the metadata is - * written; that is the duty of the caller. - * \param callbacks A set of callbacks to use for I/O on \a handle. - * The mandatory callbacks are \a read, \a seek, and - * \a eof. - * \param temp_handle The I/O handle of the FLAC stream to write. The - * handle will NOT be closed after the metadata is - * written; that is the duty of the caller. - * \param temp_callbacks - * A set of callbacks to use for I/O on temp_handle. - * The only mandatory callback is \a write. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if the write succeeded, else \c false. On failure, - * check the status with FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks_and_tempfile(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks, FLAC__IOHandle temp_handle, FLAC__IOCallbacks temp_callbacks); - -/** Merge adjacent PADDING blocks into a single block. - * - * \note This function does not write to the FLAC file, it only - * modifies the chain. - * - * \warning Any iterator on the current chain will become invalid after this - * call. You should delete the iterator and get a new one. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_chain_merge_padding(FLAC__Metadata_Chain *chain); - -/** This function will move all PADDING blocks to the end on the metadata, - * then merge them into a single block. - * - * \note This function does not write to the FLAC file, it only - * modifies the chain. - * - * \warning Any iterator on the current chain will become invalid after this - * call. You should delete the iterator and get a new one. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_chain_sort_padding(FLAC__Metadata_Chain *chain); - - -/*********** FLAC__Metadata_Iterator ***********/ - -/** Create a new iterator instance. - * - * \retval FLAC__Metadata_Iterator* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__Metadata_Iterator *FLAC__metadata_iterator_new(void); - -/** Free an iterator instance. Deletes the object pointed to by \a iterator. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - */ -FLAC_API void FLAC__metadata_iterator_delete(FLAC__Metadata_Iterator *iterator); - -/** Initialize the iterator to point to the first metadata block in the - * given chain. - * - * \param iterator A pointer to an existing iterator. - * \param chain A pointer to an existing and initialized (read) chain. - * \assert - * \code iterator != NULL \endcode - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_iterator_init(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Chain *chain); - -/** Moves the iterator forward one metadata block, returning \c false if - * already at the end. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if already at the last metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_next(FLAC__Metadata_Iterator *iterator); - -/** Moves the iterator backward one metadata block, returning \c false if - * already at the beginning. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if already at the first metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_prev(FLAC__Metadata_Iterator *iterator); - -/** Get the type of the metadata block at the current position. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__MetadataType - * The type of the metadata block at the current iterator position. - */ -FLAC_API FLAC__MetadataType FLAC__metadata_iterator_get_block_type(const FLAC__Metadata_Iterator *iterator); - -/** Get the metadata block at the current position. You can modify - * the block in place but must write the chain before the changes - * are reflected to the FLAC file. You do not need to call - * FLAC__metadata_iterator_set_block() to reflect the changes; - * the pointer returned by FLAC__metadata_iterator_get_block() - * points directly into the chain. - * - * \warning - * Do not call FLAC__metadata_object_delete() on the returned object; - * to delete a block use FLAC__metadata_iterator_delete_block(). - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__StreamMetadata* - * The current metadata block. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_iterator_get_block(FLAC__Metadata_Iterator *iterator); - -/** Set the metadata block at the current position, replacing the existing - * block. The new block passed in becomes owned by the chain and it will be - * deleted when the chain is deleted. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block A pointer to a metadata block. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \code block != NULL \endcode - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, or - * a memory allocation error occurs, otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_set_block(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); - -/** Removes the current block from the chain. If \a replace_with_padding is - * \c true, the block will instead be replaced with a padding block of equal - * size. You can not delete the STREAMINFO block. The iterator will be - * left pointing to the block before the one just "deleted", even if - * \a replace_with_padding is \c true. - * - * \param iterator A pointer to an existing initialized iterator. - * \param replace_with_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, - * otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_delete_block(FLAC__Metadata_Iterator *iterator, FLAC__bool replace_with_padding); - -/** Insert a new block before the current block. You cannot insert a block - * before the first STREAMINFO block. You cannot insert a STREAMINFO block - * as there can be only one, the one that already exists at the head when you - * read in a chain. The chain takes ownership of the new block and it will be - * deleted when the chain is deleted. The iterator will be left pointing to - * the new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block A pointer to a metadata block to insert. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, or - * a memory allocation error occurs, otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_before(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); - -/** Insert a new block after the current block. You cannot insert a STREAMINFO - * block as there can be only one, the one that already exists at the head when - * you read in a chain. The chain takes ownership of the new block and it will - * be deleted when the chain is deleted. The iterator will be left pointing to - * the new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block A pointer to a metadata block to insert. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, or - * a memory allocation error occurs, otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_after(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); - -/* \} */ - - -/** \defgroup flac_metadata_object FLAC/metadata.h: metadata object methods - * \ingroup flac_metadata - * - * \brief - * This module contains methods for manipulating FLAC metadata objects. - * - * Since many are variable length we have to be careful about the memory - * management. We decree that all pointers to data in the object are - * owned by the object and memory-managed by the object. - * - * Use the FLAC__metadata_object_new() and FLAC__metadata_object_delete() - * functions to create all instances. When using the - * FLAC__metadata_object_set_*() functions to set pointers to data, set - * \a copy to \c true to have the function make it's own copy of the data, or - * to \c false to give the object ownership of your data. In the latter case - * your pointer must be freeable by free() and will be free()d when the object - * is FLAC__metadata_object_delete()d. It is legal to pass a null pointer as - * the data pointer to a FLAC__metadata_object_set_*() function as long as - * the length argument is 0 and the \a copy argument is \c false. - * - * The FLAC__metadata_object_new() and FLAC__metadata_object_clone() function - * will return \c NULL in the case of a memory allocation error, otherwise a new - * object. The FLAC__metadata_object_set_*() functions return \c false in the - * case of a memory allocation error. - * - * We don't have the convenience of C++ here, so note that the library relies - * on you to keep the types straight. In other words, if you pass, for - * example, a FLAC__StreamMetadata* that represents a STREAMINFO block to - * FLAC__metadata_object_application_set_data(), you will get an assertion - * failure. - * - * For convenience the FLAC__metadata_object_vorbiscomment_*() functions - * maintain a trailing NUL on each Vorbis comment entry. This is not counted - * toward the length or stored in the stream, but it can make working with plain - * comments (those that don't contain embedded-NULs in the value) easier. - * Entries passed into these functions have trailing NULs added if missing, and - * returned entries are guaranteed to have a trailing NUL. - * - * The FLAC__metadata_object_vorbiscomment_*() functions that take a Vorbis - * comment entry/name/value will first validate that it complies with the Vorbis - * comment specification and return false if it does not. - * - * There is no need to recalculate the length field on metadata blocks you - * have modified. They will be calculated automatically before they are - * written back to a file. - * - * \{ - */ - - -/** Create a new metadata object instance of the given type. - * - * The object will be "empty"; i.e. values and data pointers will be \c 0, - * with the exception of FLAC__METADATA_TYPE_VORBIS_COMMENT, which will have - * the vendor string set (but zero comments). - * - * Do not pass in a value greater than or equal to - * \a FLAC__METADATA_TYPE_UNDEFINED unless you really know what you're - * doing. - * - * \param type Type of object to create - * \retval FLAC__StreamMetadata* - * \c NULL if there was an error allocating memory or the type code is - * greater than FLAC__MAX_METADATA_TYPE_CODE, else the new instance. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_new(FLAC__MetadataType type); - -/** Create a copy of an existing metadata object. - * - * The copy is a "deep" copy, i.e. dynamically allocated data within the - * object is also copied. The caller takes ownership of the new block and - * is responsible for freeing it with FLAC__metadata_object_delete(). - * - * \param object Pointer to object to copy. - * \assert - * \code object != NULL \endcode - * \retval FLAC__StreamMetadata* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_clone(const FLAC__StreamMetadata *object); - -/** Free a metadata object. Deletes the object pointed to by \a object. - * - * The delete is a "deep" delete, i.e. dynamically allocated data within the - * object is also deleted. - * - * \param object A pointer to an existing object. - * \assert - * \code object != NULL \endcode - */ -FLAC_API void FLAC__metadata_object_delete(FLAC__StreamMetadata *object); - -/** Compares two metadata objects. - * - * The compare is "deep", i.e. dynamically allocated data within the - * object is also compared. - * - * \param block1 A pointer to an existing object. - * \param block2 A pointer to an existing object. - * \assert - * \code block1 != NULL \endcode - * \code block2 != NULL \endcode - * \retval FLAC__bool - * \c true if objects are identical, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_object_is_equal(const FLAC__StreamMetadata *block1, const FLAC__StreamMetadata *block2); - -/** Sets the application data of an APPLICATION block. - * - * If \a copy is \c true, a copy of the data is stored; otherwise, the object - * takes ownership of the pointer. The existing data will be freed if this - * function is successful, otherwise the original data will remain if \a copy - * is \c true and malloc() fails. - * - * \note It is safe to pass a const pointer to \a data if \a copy is \c true. - * - * \param object A pointer to an existing APPLICATION object. - * \param data A pointer to the data to set. - * \param length The length of \a data in bytes. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_APPLICATION \endcode - * \code (data != NULL && length > 0) || - * (data == NULL && length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_application_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, unsigned length, FLAC__bool copy); - -/** Resize the seekpoint array. - * - * If the size shrinks, elements will truncated; if it grows, new placeholder - * points will be added to the end. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param new_num_points The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code (object->data.seek_table.points == NULL && object->data.seek_table.num_points == 0) || - * (object->data.seek_table.points != NULL && object->data.seek_table.num_points > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_resize_points(FLAC__StreamMetadata *object, unsigned new_num_points); - -/** Set a seekpoint in a seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param point_num Index into seekpoint array to set. - * \param point The point to set. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code object->data.seek_table.num_points > point_num \endcode - */ -FLAC_API void FLAC__metadata_object_seektable_set_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point); - -/** Insert a seekpoint into a seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param point_num Index into seekpoint array to set. - * \param point The point to set. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code object->data.seek_table.num_points >= point_num \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_insert_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point); - -/** Delete a seekpoint from a seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param point_num Index into seekpoint array to set. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code object->data.seek_table.num_points > point_num \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_delete_point(FLAC__StreamMetadata *object, unsigned point_num); - -/** Check a seektable to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if seek table is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_is_legal(const FLAC__StreamMetadata *object); - -/** Append a number of placeholder points to the end of a seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param num The number of placeholder points to append. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_placeholders(FLAC__StreamMetadata *object, unsigned num); - -/** Append a specific seek point template to the end of a seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param sample_number The sample number of the seek point template. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_point(FLAC__StreamMetadata *object, FLAC__uint64 sample_number); - -/** Append specific seek point templates to the end of a seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param sample_numbers An array of sample numbers for the seek points. - * \param num The number of seek point templates to append. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_points(FLAC__StreamMetadata *object, FLAC__uint64 sample_numbers[], unsigned num); - -/** Append a set of evenly-spaced seek point templates to the end of a - * seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param num The number of placeholder points to append. - * \param total_samples The total number of samples to be encoded; - * the seekpoints will be spaced approximately - * \a total_samples / \a num samples apart. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code total_samples > 0 \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points(FLAC__StreamMetadata *object, unsigned num, FLAC__uint64 total_samples); - -/** Append a set of evenly-spaced seek point templates to the end of a - * seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param samples The number of samples apart to space the placeholder - * points. The first point will be at sample \c 0, the - * second at sample \a samples, then 2*\a samples, and - * so on. As long as \a samples and \a total_samples - * are greater than \c 0, there will always be at least - * one seekpoint at sample \c 0. - * \param total_samples The total number of samples to be encoded; - * the seekpoints will be spaced - * \a samples samples apart. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code samples > 0 \endcode - * \code total_samples > 0 \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(FLAC__StreamMetadata *object, unsigned samples, FLAC__uint64 total_samples); - -/** Sort a seek table's seek points according to the format specification, - * removing duplicates. - * - * \param object A pointer to a seek table to be sorted. - * \param compact If \c false, behaves like FLAC__format_seektable_sort(). - * If \c true, duplicates are deleted and the seek table is - * shrunk appropriately; the number of placeholder points - * present in the seek table will be the same after the call - * as before. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_sort(FLAC__StreamMetadata *object, FLAC__bool compact); - -/** Sets the vendor string in a VORBIS_COMMENT block. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param entry The entry to set the vendor string to. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_vendor_string(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Resize the comment array. - * - * If the size shrinks, elements will truncated; if it grows, new empty - * fields will be added to the end. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param new_num_comments The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (object->data.vorbis_comment.comments == NULL && object->data.vorbis_comment.num_comments == 0) || - * (object->data.vorbis_comment.comments != NULL && object->data.vorbis_comment.num_comments > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_resize_comments(FLAC__StreamMetadata *object, unsigned new_num_comments); - -/** Sets a comment in a VORBIS_COMMENT block. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param comment_num Index into comment array to set. - * \param entry The entry to set the comment to. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code comment_num < object->data.vorbis_comment.num_comments \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Insert a comment in a VORBIS_COMMENT block at the given index. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param comment_num The index at which to insert the comment. The comments - * at and after \a comment_num move right one position. - * To append a comment to the end, set \a comment_num to - * \c object->data.vorbis_comment.num_comments . - * \param entry The comment to insert. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code object->data.vorbis_comment.num_comments >= comment_num \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_insert_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Appends a comment to a VORBIS_COMMENT block. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param entry The comment to insert. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_append_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Replaces comments in a VORBIS_COMMENT block with a new one. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * Depending on the the value of \a all, either all or just the first comment - * whose field name(s) match the given entry's name will be replaced by the - * given entry. If no comments match, \a entry will simply be appended. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param entry The comment to insert. - * \param all If \c true, all comments whose field name matches - * \a entry's field name will be removed, and \a entry will - * be inserted at the position of the first matching - * comment. If \c false, only the first comment whose - * field name matches \a entry's field name will be - * replaced with \a entry. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_replace_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool all, FLAC__bool copy); - -/** Delete a comment in a VORBIS_COMMENT block at the given index. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param comment_num The index of the comment to delete. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code object->data.vorbis_comment.num_comments > comment_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_delete_comment(FLAC__StreamMetadata *object, unsigned comment_num); - -/** Creates a Vorbis comment entry from NUL-terminated name and value strings. - * - * On return, the filled-in \a entry->entry pointer will point to malloc()ed - * memory and shall be owned by the caller. For convenience the entry will - * have a terminating NUL. - * - * \param entry A pointer to a Vorbis comment entry. The entry's - * \c entry pointer should not point to allocated - * memory as it will be overwritten. - * \param field_name The field name in ASCII, \c NUL terminated. - * \param field_value The field value in UTF-8, \c NUL terminated. - * \assert - * \code entry != NULL \endcode - * \code field_name != NULL \endcode - * \code field_value != NULL \endcode - * \retval FLAC__bool - * \c false if malloc() fails, or if \a field_name or \a field_value does - * not comply with the Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *field_name, const char *field_value); - -/** Splits a Vorbis comment entry into NUL-terminated name and value strings. - * - * The returned pointers to name and value will be allocated by malloc() - * and shall be owned by the caller. - * - * \param entry An existing Vorbis comment entry. - * \param field_name The address of where the returned pointer to the - * field name will be stored. - * \param field_value The address of where the returned pointer to the - * field value will be stored. - * \assert - * \code (entry.entry != NULL && entry.length > 0) \endcode - * \code memchr(entry.entry, '=', entry.length) != NULL \endcode - * \code field_name != NULL \endcode - * \code field_value != NULL \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(const FLAC__StreamMetadata_VorbisComment_Entry entry, char **field_name, char **field_value); - -/** Check if the given Vorbis comment entry's field name matches the given - * field name. - * - * \param entry An existing Vorbis comment entry. - * \param field_name The field name to check. - * \param field_name_length The length of \a field_name, not including the - * terminating \c NUL. - * \assert - * \code (entry.entry != NULL && entry.length > 0) \endcode - * \retval FLAC__bool - * \c true if the field names match, else \c false - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_matches(const FLAC__StreamMetadata_VorbisComment_Entry entry, const char *field_name, unsigned field_name_length); - -/** Find a Vorbis comment with the given field name. - * - * The search begins at entry number \a offset; use an offset of 0 to - * search from the beginning of the comment array. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param offset The offset into the comment array from where to start - * the search. - * \param field_name The field name of the comment to find. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code field_name != NULL \endcode - * \retval int - * The offset in the comment array of the first comment whose field - * name matches \a field_name, or \c -1 if no match was found. - */ -FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name); - -/** Remove first Vorbis comment matching the given field name. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param field_name The field name of comment to delete. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \retval int - * \c -1 for memory allocation error, \c 0 for no matching entries, - * \c 1 for one matching entry deleted. - */ -FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name); - -/** Remove all Vorbis comments matching the given field name. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param field_name The field name of comments to delete. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \retval int - * \c -1 for memory allocation error, \c 0 for no matching entries, - * else the number of matching entries deleted. - */ -FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name); - -/** Create a new CUESHEET track instance. - * - * The object will be "empty"; i.e. values and data pointers will be \c 0. - * - * \retval FLAC__StreamMetadata_CueSheet_Track* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_new(void); - -/** Create a copy of an existing CUESHEET track object. - * - * The copy is a "deep" copy, i.e. dynamically allocated data within the - * object is also copied. The caller takes ownership of the new object and - * is responsible for freeing it with - * FLAC__metadata_object_cuesheet_track_delete(). - * - * \param object Pointer to object to copy. - * \assert - * \code object != NULL \endcode - * \retval FLAC__StreamMetadata_CueSheet_Track* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_clone(const FLAC__StreamMetadata_CueSheet_Track *object); - -/** Delete a CUESHEET track object - * - * \param object A pointer to an existing CUESHEET track object. - * \assert - * \code object != NULL \endcode - */ -FLAC_API void FLAC__metadata_object_cuesheet_track_delete(FLAC__StreamMetadata_CueSheet_Track *object); - -/** Resize a track's index point array. - * - * If the size shrinks, elements will truncated; if it grows, new blank - * indices will be added to the end. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index of the track to modify. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param new_num_indices The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code (object->data.cue_sheet.tracks[track_num].indices == NULL && object->data.cue_sheet.tracks[track_num].num_indices == 0) || - * (object->data.cue_sheet.tracks[track_num].indices != NULL && object->data.cue_sheet.tracks[track_num].num_indices > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_resize_indices(FLAC__StreamMetadata *object, unsigned track_num, unsigned new_num_indices); - -/** Insert an index point in a CUESHEET track at the given index. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index of the track to modify. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param index_num The index into the track's index array at which to - * insert the index point. NOTE: this is not necessarily - * the same as the index point's \a number field. The - * indices at and after \a index_num move right one - * position. To append an index point to the end, set - * \a index_num to - * \c object->data.cue_sheet.tracks[track_num].num_indices . - * \param index The index point to insert. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num, FLAC__StreamMetadata_CueSheet_Index index); - -/** Insert a blank index point in a CUESHEET track at the given index. - * - * A blank index point is one in which all field values are zero. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index of the track to modify. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param index_num The index into the track's index array at which to - * insert the index point. NOTE: this is not necessarily - * the same as the index point's \a number field. The - * indices at and after \a index_num move right one - * position. To append an index point to the end, set - * \a index_num to - * \c object->data.cue_sheet.tracks[track_num].num_indices . - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_blank_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num); - -/** Delete an index point in a CUESHEET track at the given index. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index into the track array of the track to - * modify. NOTE: this is not necessarily the same - * as the track's \a number field. - * \param index_num The index into the track's index array of the index - * to delete. NOTE: this is not necessarily the same - * as the index's \a number field. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code object->data.cue_sheet.tracks[track_num].num_indices > index_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_delete_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num); - -/** Resize the track array. - * - * If the size shrinks, elements will truncated; if it grows, new blank - * tracks will be added to the end. - * - * \param object A pointer to an existing CUESHEET object. - * \param new_num_tracks The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code (object->data.cue_sheet.tracks == NULL && object->data.cue_sheet.num_tracks == 0) || - * (object->data.cue_sheet.tracks != NULL && object->data.cue_sheet.num_tracks > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_resize_tracks(FLAC__StreamMetadata *object, unsigned new_num_tracks); - -/** Sets a track in a CUESHEET block. - * - * If \a copy is \c true, a copy of the track is stored; otherwise, the object - * takes ownership of the \a track pointer. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num Index into track array to set. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param track The track to set the track to. You may safely pass in - * a const pointer if \a copy is \c true. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code track_num < object->data.cue_sheet.num_tracks \endcode - * \code (track->indices != NULL && track->num_indices > 0) || - * (track->indices == NULL && track->num_indices == 0) - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_set_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy); - -/** Insert a track in a CUESHEET block at the given index. - * - * If \a copy is \c true, a copy of the track is stored; otherwise, the object - * takes ownership of the \a track pointer. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index at which to insert the track. NOTE: this - * is not necessarily the same as the track's \a number - * field. The tracks at and after \a track_num move right - * one position. To append a track to the end, set - * \a track_num to \c object->data.cue_sheet.num_tracks . - * \param track The track to insert. You may safely pass in a const - * pointer if \a copy is \c true. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks >= track_num \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy); - -/** Insert a blank track in a CUESHEET block at the given index. - * - * A blank track is one in which all field values are zero. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index at which to insert the track. NOTE: this - * is not necessarily the same as the track's \a number - * field. The tracks at and after \a track_num move right - * one position. To append a track to the end, set - * \a track_num to \c object->data.cue_sheet.num_tracks . - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks >= track_num \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_blank_track(FLAC__StreamMetadata *object, unsigned track_num); - -/** Delete a track in a CUESHEET block at the given index. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index into the track array of the track to - * delete. NOTE: this is not necessarily the same - * as the track's \a number field. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_delete_track(FLAC__StreamMetadata *object, unsigned track_num); - -/** Check a cue sheet to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * cue sheet. - * - * \param object A pointer to an existing CUESHEET object. - * \param check_cd_da_subset If \c true, check CUESHEET against more - * stringent requirements for a CD-DA (audio) disc. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \retval FLAC__bool - * \c false if cue sheet is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_is_legal(const FLAC__StreamMetadata *object, FLAC__bool check_cd_da_subset, const char **violation); - -/** Calculate and return the CDDB/freedb ID for a cue sheet. The function - * assumes the cue sheet corresponds to a CD; the result is undefined - * if the cuesheet's is_cd bit is not set. - * - * \param object A pointer to an existing CUESHEET object. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \retval FLAC__uint32 - * The unsigned integer representation of the CDDB/freedb ID - */ -FLAC_API FLAC__uint32 FLAC__metadata_object_cuesheet_calculate_cddb_id(const FLAC__StreamMetadata *object); - -/** Sets the MIME type of a PICTURE block. - * - * If \a copy is \c true, a copy of the string is stored; otherwise, the object - * takes ownership of the pointer. The existing string will be freed if this - * function is successful, otherwise the original string will remain if \a copy - * is \c true and malloc() fails. - * - * \note It is safe to pass a const pointer to \a mime_type if \a copy is \c true. - * - * \param object A pointer to an existing PICTURE object. - * \param mime_type A pointer to the MIME type string. The string must be - * ASCII characters 0x20-0x7e, NUL-terminated. No validation - * is done. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \code (mime_type != NULL) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_set_mime_type(FLAC__StreamMetadata *object, char *mime_type, FLAC__bool copy); - -/** Sets the description of a PICTURE block. - * - * If \a copy is \c true, a copy of the string is stored; otherwise, the object - * takes ownership of the pointer. The existing string will be freed if this - * function is successful, otherwise the original string will remain if \a copy - * is \c true and malloc() fails. - * - * \note It is safe to pass a const pointer to \a description if \a copy is \c true. - * - * \param object A pointer to an existing PICTURE object. - * \param description A pointer to the description string. The string must be - * valid UTF-8, NUL-terminated. No validation is done. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \code (description != NULL) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_set_description(FLAC__StreamMetadata *object, FLAC__byte *description, FLAC__bool copy); - -/** Sets the picture data of a PICTURE block. - * - * If \a copy is \c true, a copy of the data is stored; otherwise, the object - * takes ownership of the pointer. Also sets the \a data_length field of the - * metadata object to what is passed in as the \a length parameter. The - * existing data will be freed if this function is successful, otherwise the - * original data and data_length will remain if \a copy is \c true and - * malloc() fails. - * - * \note It is safe to pass a const pointer to \a data if \a copy is \c true. - * - * \param object A pointer to an existing PICTURE object. - * \param data A pointer to the data to set. - * \param length The length of \a data in bytes. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \code (data != NULL && length > 0) || - * (data == NULL && length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, FLAC__uint32 length, FLAC__bool copy); - -/** Check a PICTURE block to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * PICTURE block. - * - * \param object A pointer to existing PICTURE block to be checked. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \retval FLAC__bool - * \c false if PICTURE block is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_is_legal(const FLAC__StreamMetadata *object, const char **violation); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/ordinals.h b/src/juce_appframework/audio/audio_file_formats/flac/ordinals.h deleted file mode 100644 index b3ea5928ce..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/ordinals.h +++ /dev/null @@ -1,80 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__ORDINALS_H -#define FLAC__ORDINALS_H - -#if !(defined(_MSC_VER) || defined(__BORLANDC__) || defined(__EMX__)) -#include -#endif - -typedef signed char FLAC__int8; -typedef unsigned char FLAC__uint8; - -#if defined(_MSC_VER) || defined(__BORLANDC__) -typedef __int16 FLAC__int16; -typedef __int32 FLAC__int32; -typedef __int64 FLAC__int64; -typedef unsigned __int16 FLAC__uint16; -typedef unsigned __int32 FLAC__uint32; -typedef unsigned __int64 FLAC__uint64; -#elif defined(__EMX__) -typedef short FLAC__int16; -typedef long FLAC__int32; -typedef long long FLAC__int64; -typedef unsigned short FLAC__uint16; -typedef unsigned long FLAC__uint32; -typedef unsigned long long FLAC__uint64; -#else -typedef int16_t FLAC__int16; -typedef int32_t FLAC__int32; -typedef int64_t FLAC__int64; -typedef uint16_t FLAC__uint16; -typedef uint32_t FLAC__uint32; -typedef uint64_t FLAC__uint64; -#endif - -typedef int FLAC__bool; - -typedef FLAC__uint8 FLAC__byte; - -#ifdef true -#undef true -#endif -#ifdef false -#undef false -#endif -#ifndef __cplusplus -#define true 1 -#define false 0 -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/stream_decoder.h b/src/juce_appframework/audio/audio_file_formats/flac/stream_decoder.h deleted file mode 100644 index 5818fdd334..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/stream_decoder.h +++ /dev/null @@ -1,1559 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__STREAM_DECODER_H -#define FLAC__STREAM_DECODER_H - -#include /* for FILE */ -#include "export.h" -#include "format.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \file include/FLAC/stream_decoder.h - * - * \brief - * This module contains the functions which implement the stream - * decoder. - * - * See the detailed documentation in the - * \link flac_stream_decoder stream decoder \endlink module. - */ - -/** \defgroup flac_decoder FLAC/ \*_decoder.h: decoder interfaces - * \ingroup flac - * - * \brief - * This module describes the decoder layers provided by libFLAC. - * - * The stream decoder can be used to decode complete streams either from - * the client via callbacks, or directly from a file, depending on how - * it is initialized. When decoding via callbacks, the client provides - * callbacks for reading FLAC data and writing decoded samples, and - * handling metadata and errors. If the client also supplies seek-related - * callback, the decoder function for sample-accurate seeking within the - * FLAC input is also available. When decoding from a file, the client - * needs only supply a filename or open \c FILE* and write/metadata/error - * callbacks; the rest of the callbacks are supplied internally. For more - * info see the \link flac_stream_decoder stream decoder \endlink module. - */ - -/** \defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface - * \ingroup flac_decoder - * - * \brief - * This module contains the functions which implement the stream - * decoder. - * - * The stream decoder can decode native FLAC, and optionally Ogg FLAC - * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files. - * - * The basic usage of this decoder is as follows: - * - The program creates an instance of a decoder using - * FLAC__stream_decoder_new(). - * - The program overrides the default settings using - * FLAC__stream_decoder_set_*() functions. - * - The program initializes the instance to validate the settings and - * prepare for decoding using - * - FLAC__stream_decoder_init_stream() or FLAC__stream_decoder_init_FILE() - * or FLAC__stream_decoder_init_file() for native FLAC, - * - FLAC__stream_decoder_init_ogg_stream() or FLAC__stream_decoder_init_ogg_FILE() - * or FLAC__stream_decoder_init_ogg_file() for Ogg FLAC - * - The program calls the FLAC__stream_decoder_process_*() functions - * to decode data, which subsequently calls the callbacks. - * - The program finishes the decoding with FLAC__stream_decoder_finish(), - * which flushes the input and output and resets the decoder to the - * uninitialized state. - * - The instance may be used again or deleted with - * FLAC__stream_decoder_delete(). - * - * In more detail, the program will create a new instance by calling - * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*() - * functions to override the default decoder options, and call - * one of the FLAC__stream_decoder_init_*() functions. - * - * There are three initialization functions for native FLAC, one for - * setting up the decoder to decode FLAC data from the client via - * callbacks, and two for decoding directly from a FLAC file. - * - * For decoding via callbacks, use FLAC__stream_decoder_init_stream(). - * You must also supply several callbacks for handling I/O. Some (like - * seeking) are optional, depending on the capabilities of the input. - * - * For decoding directly from a file, use FLAC__stream_decoder_init_FILE() - * or FLAC__stream_decoder_init_file(). Then you must only supply an open - * \c FILE* or filename and fewer callbacks; the decoder will handle - * the other callbacks internally. - * - * There are three similarly-named init functions for decoding from Ogg - * FLAC streams. Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the - * library has been built with Ogg support. - * - * Once the decoder is initialized, your program will call one of several - * functions to start the decoding process: - * - * - FLAC__stream_decoder_process_single() - Tells the decoder to process at - * most one metadata block or audio frame and return, calling either the - * metadata callback or write callback, respectively, once. If the decoder - * loses sync it will return with only the error callback being called. - * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder - * to process the stream from the current location and stop upon reaching - * the first audio frame. The client will get one metadata, write, or error - * callback per metadata block, audio frame, or sync error, respectively. - * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder - * to process the stream from the current location until the read callback - * returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or - * FLAC__STREAM_DECODER_READ_STATUS_ABORT. The client will get one metadata, - * write, or error callback per metadata block, audio frame, or sync error, - * respectively. - * - * When the decoder has finished decoding (normally or through an abort), - * the instance is finished by calling FLAC__stream_decoder_finish(), which - * ensures the decoder is in the correct state and frees memory. Then the - * instance may be deleted with FLAC__stream_decoder_delete() or initialized - * again to decode another stream. - * - * Seeking is exposed through the FLAC__stream_decoder_seek_absolute() method. - * At any point after the stream decoder has been initialized, the client can - * call this function to seek to an exact sample within the stream. - * Subsequently, the first time the write callback is called it will be - * passed a (possibly partial) block starting at that sample. - * - * If the client cannot seek via the callback interface provided, but still - * has another way of seeking, it can flush the decoder using - * FLAC__stream_decoder_flush() and start feeding data from the new position - * through the read callback. - * - * The stream decoder also provides MD5 signature checking. If this is - * turned on before initialization, FLAC__stream_decoder_finish() will - * report when the decoded MD5 signature does not match the one stored - * in the STREAMINFO block. MD5 checking is automatically turned off - * (until the next FLAC__stream_decoder_reset()) if there is no signature - * in the STREAMINFO block or when a seek is attempted. - * - * The FLAC__stream_decoder_set_metadata_*() functions deserve special - * attention. By default, the decoder only calls the metadata_callback for - * the STREAMINFO block. These functions allow you to tell the decoder - * explicitly which blocks to parse and return via the metadata_callback - * and/or which to skip. Use a FLAC__stream_decoder_set_metadata_respond_all(), - * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(), - * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify - * which blocks to return. Remember that metadata blocks can potentially - * be big (for example, cover art) so filtering out the ones you don't - * use can reduce the memory requirements of the decoder. Also note the - * special forms FLAC__stream_decoder_set_metadata_respond_application(id) - * and FLAC__stream_decoder_set_metadata_ignore_application(id) for - * filtering APPLICATION blocks based on the application ID. - * - * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but - * they still can legally be filtered from the metadata_callback. - * - * \note - * The "set" functions may only be called when the decoder is in the - * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after - * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but - * before FLAC__stream_decoder_init_*(). If this is the case they will - * return \c true, otherwise \c false. - * - * \note - * FLAC__stream_decoder_finish() resets all settings to the constructor - * defaults, including the callbacks. - * - * \{ - */ - - -/** State values for a FLAC__StreamDecoder - * - * The decoder's state can be obtained by calling FLAC__stream_decoder_get_state(). - */ -typedef enum { - - FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0, - /**< The decoder is ready to search for metadata. */ - - FLAC__STREAM_DECODER_READ_METADATA, - /**< The decoder is ready to or is in the process of reading metadata. */ - - FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC, - /**< The decoder is ready to or is in the process of searching for the - * frame sync code. - */ - - FLAC__STREAM_DECODER_READ_FRAME, - /**< The decoder is ready to or is in the process of reading a frame. */ - - FLAC__STREAM_DECODER_END_OF_STREAM, - /**< The decoder has reached the end of the stream. */ - - FLAC__STREAM_DECODER_OGG_ERROR, - /**< An error occurred in the underlying Ogg layer. */ - - FLAC__STREAM_DECODER_SEEK_ERROR, - /**< An error occurred while seeking. The decoder must be flushed - * with FLAC__stream_decoder_flush() or reset with - * FLAC__stream_decoder_reset() before decoding can continue. - */ - - FLAC__STREAM_DECODER_ABORTED, - /**< The decoder was aborted by the read callback. */ - - FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR, - /**< An error occurred allocating memory. The decoder is in an invalid - * state and can no longer be used. - */ - - FLAC__STREAM_DECODER_UNINITIALIZED - /**< The decoder is in the uninitialized state; one of the - * FLAC__stream_decoder_init_*() functions must be called before samples - * can be processed. - */ - -} FLAC__StreamDecoderState; - -/** Maps a FLAC__StreamDecoderState to a C string. - * - * Using a FLAC__StreamDecoderState as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderStateString[]; - - -/** Possible return values for the FLAC__stream_decoder_init_*() functions. - */ -typedef enum { - - FLAC__STREAM_DECODER_INIT_STATUS_OK = 0, - /**< Initialization was successful. */ - - FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER, - /**< The library was not compiled with support for the given container - * format. - */ - - FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS, - /**< A required callback was not supplied. */ - - FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR, - /**< An error occurred allocating memory. */ - - FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE, - /**< fopen() failed in FLAC__stream_decoder_init_file() or - * FLAC__stream_decoder_init_ogg_file(). */ - - FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED - /**< FLAC__stream_decoder_init_*() was called when the decoder was - * already initialized, usually because - * FLAC__stream_decoder_finish() was not called. - */ - -} FLAC__StreamDecoderInitStatus; - -/** Maps a FLAC__StreamDecoderInitStatus to a C string. - * - * Using a FLAC__StreamDecoderInitStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[]; - - -/** Return values for the FLAC__StreamDecoder read callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, - /**< The read was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM, - /**< The read was attempted while at the end of the stream. Note that - * the client must only return this value when the read callback was - * called when already at the end of the stream. Otherwise, if the read - * itself moves to the end of the stream, the client should still return - * the data and \c FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, and then on - * the next read callback it should return - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM with a byte count - * of \c 0. - */ - - FLAC__STREAM_DECODER_READ_STATUS_ABORT - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - -} FLAC__StreamDecoderReadStatus; - -/** Maps a FLAC__StreamDecoderReadStatus to a C string. - * - * Using a FLAC__StreamDecoderReadStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[]; - - -/** Return values for the FLAC__StreamDecoder seek callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_SEEK_STATUS_OK, - /**< The seek was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_SEEK_STATUS_ERROR, - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - - FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED - /**< Client does not support seeking. */ - -} FLAC__StreamDecoderSeekStatus; - -/** Maps a FLAC__StreamDecoderSeekStatus to a C string. - * - * Using a FLAC__StreamDecoderSeekStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[]; - - -/** Return values for the FLAC__StreamDecoder tell callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_TELL_STATUS_OK, - /**< The tell was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_TELL_STATUS_ERROR, - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - - FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED - /**< Client does not support telling the position. */ - -} FLAC__StreamDecoderTellStatus; - -/** Maps a FLAC__StreamDecoderTellStatus to a C string. - * - * Using a FLAC__StreamDecoderTellStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[]; - - -/** Return values for the FLAC__StreamDecoder length callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_LENGTH_STATUS_OK, - /**< The length call was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR, - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - - FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED - /**< Client does not support reporting the length. */ - -} FLAC__StreamDecoderLengthStatus; - -/** Maps a FLAC__StreamDecoderLengthStatus to a C string. - * - * Using a FLAC__StreamDecoderLengthStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[]; - - -/** Return values for the FLAC__StreamDecoder write callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE, - /**< The write was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_WRITE_STATUS_ABORT - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - -} FLAC__StreamDecoderWriteStatus; - -/** Maps a FLAC__StreamDecoderWriteStatus to a C string. - * - * Using a FLAC__StreamDecoderWriteStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[]; - - -/** Possible values passed back to the FLAC__StreamDecoder error callback. - * \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC is the generic catch- - * all. The rest could be caused by bad sync (false synchronization on - * data that is not the start of a frame) or corrupted data. The error - * itself is the decoder's best guess at what happened assuming a correct - * sync. For example \c FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER - * could be caused by a correct sync on the start of a frame, but some - * data in the frame header was corrupted. Or it could be the result of - * syncing on a point the stream that looked like the starting of a frame - * but was not. \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM - * could be because the decoder encountered a valid frame made by a future - * version of the encoder which it cannot parse, or because of a false - * sync making it appear as though an encountered frame was generated by - * a future encoder. - */ -typedef enum { - - FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC, - /**< An error in the stream caused the decoder to lose synchronization. */ - - FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER, - /**< The decoder encountered a corrupted frame header. */ - - FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH, - /**< The frame's data did not match the CRC in the footer. */ - - FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM - /**< The decoder encountered reserved fields in use in the stream. */ - -} FLAC__StreamDecoderErrorStatus; - -/** Maps a FLAC__StreamDecoderErrorStatus to a C string. - * - * Using a FLAC__StreamDecoderErrorStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[]; - - -/*********************************************************************** - * - * class FLAC__StreamDecoder - * - ***********************************************************************/ - -struct FLAC__StreamDecoderProtected; -struct FLAC__StreamDecoderPrivate; -/** The opaque structure definition for the stream decoder type. - * See the \link flac_stream_decoder stream decoder module \endlink - * for a detailed description. - */ -typedef struct { - struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */ - struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */ -} FLAC__StreamDecoder; - -/** Signature for the read callback. - * - * A function pointer matching this signature must be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder needs more input data. The address of the - * buffer to be filled is supplied, along with the number of bytes the - * buffer can hold. The callback may choose to supply less data and - * modify the byte count but must be careful not to overflow the buffer. - * The callback then returns a status code chosen from - * FLAC__StreamDecoderReadStatus. - * - * Here is an example of a read callback for stdio streams: - * \code - * FLAC__StreamDecoderReadStatus read_cb(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(*bytes > 0) { - * *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file); - * if(ferror(file)) - * return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - * else if(*bytes == 0) - * return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; - * else - * return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; - * } - * else - * return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param buffer A pointer to a location for the callee to store - * data to be decoded. - * \param bytes A pointer to the size of the buffer. On entry - * to the callback, it contains the maximum number - * of bytes that may be stored in \a buffer. The - * callee must set it to the actual number of bytes - * stored (0 in case of error or end-of-stream) before - * returning. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderReadStatus - * The callee's return status. Note that the callback should return - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM if and only if - * zero bytes were read and there is no more data to be read. - */ -typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data); - -/** Signature for the seek callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder needs to seek the input stream. The decoder - * will pass the absolute byte offset to seek to, 0 meaning the - * beginning of the stream. - * - * Here is an example of a seek callback for stdio streams: - * \code - * FLAC__StreamDecoderSeekStatus seek_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(file == stdin) - * return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED; - * else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0) - * return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR; - * else - * return FLAC__STREAM_DECODER_SEEK_STATUS_OK; - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param absolute_byte_offset The offset from the beginning of the stream - * to seek to. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderSeekStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data); - -/** Signature for the tell callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder wants to know the current position of the - * stream. The callback should return the byte offset from the - * beginning of the stream. - * - * Here is an example of a tell callback for stdio streams: - * \code - * FLAC__StreamDecoderTellStatus tell_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * off_t pos; - * if(file == stdin) - * return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED; - * else if((pos = ftello(file)) < 0) - * return FLAC__STREAM_DECODER_TELL_STATUS_ERROR; - * else { - * *absolute_byte_offset = (FLAC__uint64)pos; - * return FLAC__STREAM_DECODER_TELL_STATUS_OK; - * } - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param absolute_byte_offset A pointer to storage for the current offset - * from the beginning of the stream. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderTellStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data); - -/** Signature for the length callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder wants to know the total length of the stream - * in bytes. - * - * Here is an example of a length callback for stdio streams: - * \code - * FLAC__StreamDecoderLengthStatus length_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * struct stat filestats; - * - * if(file == stdin) - * return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED; - * else if(fstat(fileno(file), &filestats) != 0) - * return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR; - * else { - * *stream_length = (FLAC__uint64)filestats.st_size; - * return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; - * } - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param stream_length A pointer to storage for the length of the stream - * in bytes. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderLengthStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data); - -/** Signature for the EOF callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder needs to know if the end of the stream has - * been reached. - * - * Here is an example of a EOF callback for stdio streams: - * FLAC__bool eof_cb(const FLAC__StreamDecoder *decoder, void *client_data) - * \code - * { - * FILE *file = ((MyClientData*)client_data)->file; - * return feof(file)? true : false; - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__bool - * \c true if the currently at the end of the stream, else \c false. - */ -typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data); - -/** Signature for the write callback. - * - * A function pointer matching this signature must be passed to one of - * the FLAC__stream_decoder_init_*() functions. - * The supplied function will be called when the decoder has decoded a - * single audio frame. The decoder will pass the frame metadata as well - * as an array of pointers (one for each channel) pointing to the - * decoded audio. - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param frame The description of the decoded frame. See - * FLAC__Frame. - * \param buffer An array of pointers to decoded channels of data. - * Each pointer will point to an array of signed - * samples of length \a frame->header.blocksize. - * Channels will be ordered according to the FLAC - * specification; see the documentation for the - * frame header. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderWriteStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data); - -/** Signature for the metadata callback. - * - * A function pointer matching this signature must be passed to one of - * the FLAC__stream_decoder_init_*() functions. - * The supplied function will be called when the decoder has decoded a - * metadata block. In a valid FLAC file there will always be one - * \c STREAMINFO block, followed by zero or more other metadata blocks. - * These will be supplied by the decoder in the same order as they - * appear in the stream and always before the first audio frame (i.e. - * write callback). The metadata block that is passed in must not be - * modified, and it doesn't live beyond the callback, so you should make - * a copy of it with FLAC__metadata_object_clone() if you will need it - * elsewhere. Since metadata blocks can potentially be large, by - * default the decoder only calls the metadata callback for the - * \c STREAMINFO block; you can instruct the decoder to pass or filter - * other blocks with FLAC__stream_decoder_set_metadata_*() calls. - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param metadata The decoded metadata block. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - */ -typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data); - -/** Signature for the error callback. - * - * A function pointer matching this signature must be passed to one of - * the FLAC__stream_decoder_init_*() functions. - * The supplied function will be called whenever an error occurs during - * decoding. - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param status The error encountered by the decoder. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - */ -typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data); - - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ - -/** Create a new stream decoder instance. The instance is created with - * default settings; see the individual FLAC__stream_decoder_set_*() - * functions for each setting's default. - * - * \retval FLAC__StreamDecoder* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void); - -/** Free a decoder instance. Deletes the object pointed to by \a decoder. - * - * \param decoder A pointer to an existing decoder. - * \assert - * \code decoder != NULL \endcode - */ -FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder); - - -/*********************************************************************** - * - * Public class method prototypes - * - ***********************************************************************/ - -/** Set the serial number for the FLAC stream within the Ogg container. - * The default behavior is to use the serial number of the first Ogg - * page. Setting a serial number here will explicitly specify which - * stream is to be decoded. - * - * \note - * This does not need to be set for native FLAC decoding. - * - * \default \c use serial number of first page - * \param decoder A decoder instance to set. - * \param serial_number See above. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number); - -/** Set the "MD5 signature checking" flag. If \c true, the decoder will - * compute the MD5 signature of the unencoded audio data while decoding - * and compare it to the signature from the STREAMINFO block, if it - * exists, during FLAC__stream_decoder_finish(). - * - * MD5 signature checking will be turned off (until the next - * FLAC__stream_decoder_reset()) if there is no signature in the - * STREAMINFO block or when a seek is attempted. - * - * Clients that do not use the MD5 check should leave this off to speed - * up decoding. - * - * \default \c false - * \param decoder A decoder instance to set. - * \param value Flag value (see above). - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value); - -/** Direct the decoder to pass on all metadata blocks of type \a type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param type See above. - * \assert - * \code decoder != NULL \endcode - * \a type is valid - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type); - -/** Direct the decoder to pass on all APPLICATION metadata blocks of the - * given \a id. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param id See above. - * \assert - * \code decoder != NULL \endcode - * \code id != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]); - -/** Direct the decoder to pass on all metadata blocks of any type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder); - -/** Direct the decoder to filter out all metadata blocks of type \a type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param type See above. - * \assert - * \code decoder != NULL \endcode - * \a type is valid - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type); - -/** Direct the decoder to filter out all APPLICATION metadata blocks of - * the given \a id. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param id See above. - * \assert - * \code decoder != NULL \endcode - * \code id != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]); - -/** Direct the decoder to filter out all metadata blocks of any type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder); - -/** Get the current decoder state. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderState - * The current decoder state. - */ -FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder); - -/** Get the current decoder state as a C string. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval const char * - * The decoder state as a C string. Do not modify the contents. - */ -FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder); - -/** Get the "MD5 signature checking" flag. - * This is the value of the setting, not whether or not the decoder is - * currently checking the MD5 (remember, it can be turned off automatically - * by a seek). When the decoder is reset the flag will be restored to the - * value returned by this function. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * See above. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder); - -/** Get the total number of samples in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the \c STREAMINFO block. A value of \c 0 means "unknown". - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval unsigned - * See above. - */ -FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder); - -/** Get the current number of channels in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval unsigned - * See above. - */ -FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder); - -/** Get the current channel assignment in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__ChannelAssignment - * See above. - */ -FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder); - -/** Get the current sample resolution in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval unsigned - * See above. - */ -FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder); - -/** Get the current sample rate in Hz of the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval unsigned - * See above. - */ -FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder); - -/** Get the current blocksize of the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval unsigned - * See above. - */ -FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder); - -/** Returns the decoder's current read position within the stream. - * The position is the byte offset from the start of the stream. - * Bytes before this position have been fully decoded. Note that - * there may still be undecoded bytes in the decoder's read FIFO. - * The returned position is correct even after a seek. - * - * \warning This function currently only works for native FLAC, - * not Ogg FLAC streams. - * - * \param decoder A decoder instance to query. - * \param position Address at which to return the desired position. - * \assert - * \code decoder != NULL \endcode - * \code position != NULL \endcode - * \retval FLAC__bool - * \c true if successful, \c false if the stream is not native FLAC, - * or there was an error from the 'tell' callback or it returned - * \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position); - -/** Initialize the decoder instance to decode native FLAC streams. - * - * This flavor of initialization sets up the decoder to decode from a - * native FLAC stream. I/O is performed via callbacks to the client. - * For decoding from a plain file via filename or open FILE*, - * FLAC__stream_decoder_init_file() and FLAC__stream_decoder_init_FILE() - * provide a simpler interface. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \param decoder An uninitialized decoder instance. - * \param read_callback See FLAC__StreamDecoderReadCallback. This - * pointer must not be \c NULL. - * \param seek_callback See FLAC__StreamDecoderSeekCallback. This - * pointer may be \c NULL if seeking is not - * supported. If \a seek_callback is not \c NULL then a - * \a tell_callback, \a length_callback, and \a eof_callback must also be supplied. - * Alternatively, a dummy seek callback that just - * returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param tell_callback See FLAC__StreamDecoderTellCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a tell_callback must also be supplied. - * Alternatively, a dummy tell callback that just - * returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param length_callback See FLAC__StreamDecoderLengthCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a length_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param eof_callback See FLAC__StreamDecoderEofCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a eof_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c false - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode Ogg FLAC streams. - * - * This flavor of initialization sets up the decoder to decode from a - * FLAC stream in an Ogg container. I/O is performed via callbacks to the - * client. For decoding from a plain file via filename or open FILE*, - * FLAC__stream_decoder_init_ogg_file() and FLAC__stream_decoder_init_ogg_FILE() - * provide a simpler interface. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \note Support for Ogg FLAC in the library is optional. If this - * library has been built without support for Ogg FLAC, this function - * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. - * - * \param decoder An uninitialized decoder instance. - * \param read_callback See FLAC__StreamDecoderReadCallback. This - * pointer must not be \c NULL. - * \param seek_callback See FLAC__StreamDecoderSeekCallback. This - * pointer may be \c NULL if seeking is not - * supported. If \a seek_callback is not \c NULL then a - * \a tell_callback, \a length_callback, and \a eof_callback must also be supplied. - * Alternatively, a dummy seek callback that just - * returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param tell_callback See FLAC__StreamDecoderTellCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a tell_callback must also be supplied. - * Alternatively, a dummy tell callback that just - * returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param length_callback See FLAC__StreamDecoderLengthCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a length_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param eof_callback See FLAC__StreamDecoderEofCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a eof_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c false - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode native FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a - * plain native FLAC file. For non-stdio streams, you must use - * FLAC__stream_decoder_init_stream() and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \param decoder An uninitialized decoder instance. - * \param file An open FLAC file. The file should have been - * opened with mode \c "rb" and rewound. The file - * becomes owned by the decoder and should not be - * manipulated by the client while decoding. - * Unless \a file is \c stdin, it will be closed - * when FLAC__stream_decoder_finish() is called. - * Note however that seeking will not work when - * decoding from \c stdout since it is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \code file != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode Ogg FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a - * plain Ogg FLAC file. For non-stdio streams, you must use - * FLAC__stream_decoder_init_ogg_stream() and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \note Support for Ogg FLAC in the library is optional. If this - * library has been built without support for Ogg FLAC, this function - * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. - * - * \param decoder An uninitialized decoder instance. - * \param file An open FLAC file. The file should have been - * opened with mode \c "rb" and rewound. The file - * becomes owned by the decoder and should not be - * manipulated by the client while decoding. - * Unless \a file is \c stdin, it will be closed - * when FLAC__stream_decoder_finish() is called. - * Note however that seeking will not work when - * decoding from \c stdout since it is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \code file != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode native FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a plain - * native FLAC file. If POSIX fopen() semantics are not sufficient, (for - * example, with Unicode filenames on Windows), you must use - * FLAC__stream_decoder_init_FILE(), or FLAC__stream_decoder_init_stream() - * and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \param decoder An uninitialized decoder instance. - * \param filename The name of the file to decode from. The file will - * be opened with fopen(). Use \c NULL to decode from - * \c stdin. Note that \c stdin is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode Ogg FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a plain - * Ogg FLAC file. If POSIX fopen() semantics are not sufficient, (for - * example, with Unicode filenames on Windows), you must use - * FLAC__stream_decoder_init_ogg_FILE(), or FLAC__stream_decoder_init_ogg_stream() - * and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \note Support for Ogg FLAC in the library is optional. If this - * library has been built without support for Ogg FLAC, this function - * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. - * - * \param decoder An uninitialized decoder instance. - * \param filename The name of the file to decode from. The file will - * be opened with fopen(). Use \c NULL to decode from - * \c stdin. Note that \c stdin is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Finish the decoding process. - * Flushes the decoding buffer, releases resources, resets the decoder - * settings to their defaults, and returns the decoder state to - * FLAC__STREAM_DECODER_UNINITIALIZED. - * - * In the event of a prematurely-terminated decode, it is not strictly - * necessary to call this immediately before FLAC__stream_decoder_delete() - * but it is good practice to match every FLAC__stream_decoder_init_*() - * with a FLAC__stream_decoder_finish(). - * - * \param decoder An uninitialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if MD5 checking is on AND a STREAMINFO block was available - * AND the MD5 signature in the STREAMINFO block was non-zero AND the - * signature does not match the one computed by the decoder; else - * \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder); - -/** Flush the stream input. - * The decoder's input buffer will be cleared and the state set to - * \c FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC. This will also turn - * off MD5 checking. - * - * \param decoder A decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false if a memory allocation - * error occurs (in which case the state will be set to - * \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder); - -/** Reset the decoding process. - * The decoder's input buffer will be cleared and the state set to - * \c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA. This is similar to - * FLAC__stream_decoder_finish() except that the settings are - * preserved; there is no need to call FLAC__stream_decoder_init_*() - * before decoding again. MD5 checking will be restored to its original - * setting. - * - * If the decoder is seekable, or was initialized with - * FLAC__stream_decoder_init*_FILE() or FLAC__stream_decoder_init*_file(), - * the decoder will also attempt to seek to the beginning of the file. - * If this rewind fails, this function will return \c false. It follows - * that FLAC__stream_decoder_reset() cannot be used when decoding from - * \c stdin. - * - * If the decoder was initialized with FLAC__stream_encoder_init*_stream() - * and is not seekable (i.e. no seek callback was provided or the seek - * callback returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED), it - * is the duty of the client to start feeding data from the beginning of - * the stream on the next FLAC__stream_decoder_process() or - * FLAC__stream_decoder_process_interleaved() call. - * - * \param decoder A decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false if a memory allocation occurs - * (in which case the state will be set to - * \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR) or a seek error - * occurs (the state will be unchanged). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder); - -/** Decode one metadata block or audio frame. - * This version instructs the decoder to decode a either a single metadata - * block or a single frame and stop, unless the callbacks return a fatal - * error or the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. - * - * As the decoder needs more input it will call the read callback. - * Depending on what was decoded, the metadata or write callback will be - * called with the decoded metadata block or audio frame. - * - * Unless there is a fatal read error or end of stream, this function - * will return once one whole frame is decoded. In other words, if the - * stream is not synchronized or points to a corrupt frame header, the - * decoder will continue to try and resync until it gets to a valid - * frame, then decode one frame, then return. If the decoder points to - * a frame whose frame CRC in the frame footer does not match the - * computed frame CRC, this function will issue a - * FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH error to the - * error callback, and return, having decoded one complete, although - * corrupt, frame. (Such corrupted frames are sent as silence of the - * correct length to the write callback.) - * - * \param decoder An initialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder); - -/** Decode until the end of the metadata. - * This version instructs the decoder to decode from the current position - * and continue until all the metadata has been read, or until the - * callbacks return a fatal error or the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. - * - * As the decoder needs more input it will call the read callback. - * As each metadata block is decoded, the metadata callback will be called - * with the decoded metadata. - * - * \param decoder An initialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder); - -/** Decode until the end of the stream. - * This version instructs the decoder to decode from the current position - * and continue until the end of stream (the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM), or until the - * callbacks return a fatal error. - * - * As the decoder needs more input it will call the read callback. - * As each metadata block and frame is decoded, the metadata or write - * callback will be called with the decoded metadata or frame. - * - * \param decoder An initialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder); - -/** Skip one audio frame. - * This version instructs the decoder to 'skip' a single frame and stop, - * unless the callbacks return a fatal error or the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. - * - * The decoding flow is the same as what occurs when - * FLAC__stream_decoder_process_single() is called to process an audio - * frame, except that this function does not decode the parsed data into - * PCM or call the write callback. The integrity of the frame is still - * checked the same way as in the other process functions. - * - * This function will return once one whole frame is skipped, in the - * same way that FLAC__stream_decoder_process_single() will return once - * one whole frame is decoded. - * - * This function can be used in more quickly determining FLAC frame - * boundaries when decoding of the actual data is not needed, for - * example when an application is separating a FLAC stream into frames - * for editing or storing in a container. To do this, the application - * can use FLAC__stream_decoder_skip_single_frame() to quickly advance - * to the next frame, then use - * FLAC__stream_decoder_get_decode_position() to find the new frame - * boundary. - * - * This function should only be called when the stream has advanced - * past all the metadata, otherwise it will return \c false. - * - * \param decoder An initialized decoder instance not in a metadata - * state. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), or if the decoder - * is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or - * FLAC__STREAM_DECODER_READ_METADATA state, else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder); - -/** Flush the input and seek to an absolute sample. - * Decoding will resume at the given sample. Note that because of - * this, the next write callback may contain a partial block. The - * client must support seeking the input or this function will fail - * and return \c false. Furthermore, if the decoder state is - * \c FLAC__STREAM_DECODER_SEEK_ERROR, then the decoder must be flushed - * with FLAC__stream_decoder_flush() or reset with - * FLAC__stream_decoder_reset() before decoding can continue. - * - * \param decoder A decoder instance. - * \param sample The target sample number to seek to. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/flac/stream_encoder.h b/src/juce_appframework/audio/audio_file_formats/flac/stream_encoder.h deleted file mode 100644 index 7dcf7ed9c2..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/flac/stream_encoder.h +++ /dev/null @@ -1,1768 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__STREAM_ENCODER_H -#define FLAC__STREAM_ENCODER_H - -#include /* for FILE */ -#include "export.h" -#include "format.h" -#include "stream_decoder.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \file include/FLAC/stream_encoder.h - * - * \brief - * This module contains the functions which implement the stream - * encoder. - * - * See the detailed documentation in the - * \link flac_stream_encoder stream encoder \endlink module. - */ - -/** \defgroup flac_encoder FLAC/ \*_encoder.h: encoder interfaces - * \ingroup flac - * - * \brief - * This module describes the encoder layers provided by libFLAC. - * - * The stream encoder can be used to encode complete streams either to the - * client via callbacks, or directly to a file, depending on how it is - * initialized. When encoding via callbacks, the client provides a write - * callback which will be called whenever FLAC data is ready to be written. - * If the client also supplies a seek callback, the encoder will also - * automatically handle the writing back of metadata discovered while - * encoding, like stream info, seek points offsets, etc. When encoding to - * a file, the client needs only supply a filename or open \c FILE* and an - * optional progress callback for periodic notification of progress; the - * write and seek callbacks are supplied internally. For more info see the - * \link flac_stream_encoder stream encoder \endlink module. - */ - -/** \defgroup flac_stream_encoder FLAC/stream_encoder.h: stream encoder interface - * \ingroup flac_encoder - * - * \brief - * This module contains the functions which implement the stream - * encoder. - * - * The stream encoder can encode to native FLAC, and optionally Ogg FLAC - * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files. - * - * The basic usage of this encoder is as follows: - * - The program creates an instance of an encoder using - * FLAC__stream_encoder_new(). - * - The program overrides the default settings using - * FLAC__stream_encoder_set_*() functions. At a minimum, the following - * functions should be called: - * - FLAC__stream_encoder_set_channels() - * - FLAC__stream_encoder_set_bits_per_sample() - * - FLAC__stream_encoder_set_sample_rate() - * - FLAC__stream_encoder_set_ogg_serial_number() (if encoding to Ogg FLAC) - * - FLAC__stream_encoder_set_total_samples_estimate() (if known) - * - If the application wants to control the compression level or set its own - * metadata, then the following should also be called: - * - FLAC__stream_encoder_set_compression_level() - * - FLAC__stream_encoder_set_verify() - * - FLAC__stream_encoder_set_metadata() - * - The rest of the set functions should only be called if the client needs - * exact control over how the audio is compressed; thorough understanding - * of the FLAC format is necessary to achieve good results. - * - The program initializes the instance to validate the settings and - * prepare for encoding using - * - FLAC__stream_encoder_init_stream() or FLAC__stream_encoder_init_FILE() - * or FLAC__stream_encoder_init_file() for native FLAC - * - FLAC__stream_encoder_init_ogg_stream() or FLAC__stream_encoder_init_ogg_FILE() - * or FLAC__stream_encoder_init_ogg_file() for Ogg FLAC - * - The program calls FLAC__stream_encoder_process() or - * FLAC__stream_encoder_process_interleaved() to encode data, which - * subsequently calls the callbacks when there is encoder data ready - * to be written. - * - The program finishes the encoding with FLAC__stream_encoder_finish(), - * which causes the encoder to encode any data still in its input pipe, - * update the metadata with the final encoding statistics if output - * seeking is possible, and finally reset the encoder to the - * uninitialized state. - * - The instance may be used again or deleted with - * FLAC__stream_encoder_delete(). - * - * In more detail, the stream encoder functions similarly to the - * \link flac_stream_decoder stream decoder \endlink, but has fewer - * callbacks and more options. Typically the client will create a new - * instance by calling FLAC__stream_encoder_new(), then set the necessary - * parameters with FLAC__stream_encoder_set_*(), and initialize it by - * calling one of the FLAC__stream_encoder_init_*() functions. - * - * Unlike the decoders, the stream encoder has many options that can - * affect the speed and compression ratio. When setting these parameters - * you should have some basic knowledge of the format (see the - * user-level documentation - * or the formal description). The - * FLAC__stream_encoder_set_*() functions themselves do not validate the - * values as many are interdependent. The FLAC__stream_encoder_init_*() - * functions will do this, so make sure to pay attention to the state - * returned by FLAC__stream_encoder_init_*() to make sure that it is - * FLAC__STREAM_ENCODER_INIT_STATUS_OK. Any parameters that are not set - * before FLAC__stream_encoder_init_*() will take on the defaults from - * the constructor. - * - * There are three initialization functions for native FLAC, one for - * setting up the encoder to encode FLAC data to the client via - * callbacks, and two for encoding directly to a file. - * - * For encoding via callbacks, use FLAC__stream_encoder_init_stream(). - * You must also supply a write callback which will be called anytime - * there is raw encoded data to write. If the client can seek the output - * it is best to also supply seek and tell callbacks, as this allows the - * encoder to go back after encoding is finished to write back - * information that was collected while encoding, like seek point offsets, - * frame sizes, etc. - * - * For encoding directly to a file, use FLAC__stream_encoder_init_FILE() - * or FLAC__stream_encoder_init_file(). Then you must only supply a - * filename or open \c FILE*; the encoder will handle all the callbacks - * internally. You may also supply a progress callback for periodic - * notification of the encoding progress. - * - * There are three similarly-named init functions for encoding to Ogg - * FLAC streams. Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the - * library has been built with Ogg support. - * - * The call to FLAC__stream_encoder_init_*() currently will also immediately - * call the write callback several times, once with the \c fLaC signature, - * and once for each encoded metadata block. Note that for Ogg FLAC - * encoding you will usually get at least twice the number of callbacks than - * with native FLAC, one for the Ogg page header and one for the page body. - * - * After initializing the instance, the client may feed audio data to the - * encoder in one of two ways: - * - * - Channel separate, through FLAC__stream_encoder_process() - The client - * will pass an array of pointers to buffers, one for each channel, to - * the encoder, each of the same length. The samples need not be - * block-aligned, but each channel should have the same number of samples. - * - Channel interleaved, through - * FLAC__stream_encoder_process_interleaved() - The client will pass a single - * pointer to data that is channel-interleaved (i.e. channel0_sample0, - * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). - * Again, the samples need not be block-aligned but they must be - * sample-aligned, i.e. the first value should be channel0_sample0 and - * the last value channelN_sampleM. - * - * Note that for either process call, each sample in the buffers should be a - * signed integer, right-justified to the resolution set by - * FLAC__stream_encoder_set_bits_per_sample(). For example, if the resolution - * is 16 bits per sample, the samples should all be in the range [-32768,32767]. - * - * When the client is finished encoding data, it calls - * FLAC__stream_encoder_finish(), which causes the encoder to encode any - * data still in its input pipe, and call the metadata callback with the - * final encoding statistics. Then the instance may be deleted with - * FLAC__stream_encoder_delete() or initialized again to encode another - * stream. - * - * For programs that write their own metadata, but that do not know the - * actual metadata until after encoding, it is advantageous to instruct - * the encoder to write a PADDING block of the correct size, so that - * instead of rewriting the whole stream after encoding, the program can - * just overwrite the PADDING block. If only the maximum size of the - * metadata is known, the program can write a slightly larger padding - * block, then split it after encoding. - * - * Make sure you understand how lengths are calculated. All FLAC metadata - * blocks have a 4 byte header which contains the type and length. This - * length does not include the 4 bytes of the header. See the format page - * for the specification of metadata blocks and their lengths. - * - * \note - * If you are writing the FLAC data to a file via callbacks, make sure it - * is open for update (e.g. mode "w+" for stdio streams). This is because - * after the first encoding pass, the encoder will try to seek back to the - * beginning of the stream, to the STREAMINFO block, to write some data - * there. (If using FLAC__stream_encoder_init*_file() or - * FLAC__stream_encoder_init*_FILE(), the file is managed internally.) - * - * \note - * The "set" functions may only be called when the encoder is in the - * state FLAC__STREAM_ENCODER_UNINITIALIZED, i.e. after - * FLAC__stream_encoder_new() or FLAC__stream_encoder_finish(), but - * before FLAC__stream_encoder_init_*(). If this is the case they will - * return \c true, otherwise \c false. - * - * \note - * FLAC__stream_encoder_finish() resets all settings to the constructor - * defaults. - * - * \{ - */ - - -/** State values for a FLAC__StreamEncoder. - * - * The encoder's state can be obtained by calling FLAC__stream_encoder_get_state(). - * - * If the encoder gets into any other state besides \c FLAC__STREAM_ENCODER_OK - * or \c FLAC__STREAM_ENCODER_UNINITIALIZED, it becomes invalid for encoding and - * must be deleted with FLAC__stream_encoder_delete(). - */ -typedef enum { - - FLAC__STREAM_ENCODER_OK = 0, - /**< The encoder is in the normal OK state and samples can be processed. */ - - FLAC__STREAM_ENCODER_UNINITIALIZED, - /**< The encoder is in the uninitialized state; one of the - * FLAC__stream_encoder_init_*() functions must be called before samples - * can be processed. - */ - - FLAC__STREAM_ENCODER_OGG_ERROR, - /**< An error occurred in the underlying Ogg layer. */ - - FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR, - /**< An error occurred in the underlying verify stream decoder; - * check FLAC__stream_encoder_get_verify_decoder_state(). - */ - - FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA, - /**< The verify decoder detected a mismatch between the original - * audio signal and the decoded audio signal. - */ - - FLAC__STREAM_ENCODER_CLIENT_ERROR, - /**< One of the callbacks returned a fatal error. */ - - FLAC__STREAM_ENCODER_IO_ERROR, - /**< An I/O error occurred while opening/reading/writing a file. - * Check \c errno. - */ - - FLAC__STREAM_ENCODER_FRAMING_ERROR, - /**< An error occurred while writing the stream; usually, the - * write_callback returned an error. - */ - - FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR - /**< Memory allocation failed. */ - -} FLAC__StreamEncoderState; - -/** Maps a FLAC__StreamEncoderState to a C string. - * - * Using a FLAC__StreamEncoderState as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderStateString[]; - - -/** Possible return values for the FLAC__stream_encoder_init_*() functions. - */ -typedef enum { - - FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0, - /**< Initialization was successful. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR, - /**< General failure to set up encoder; call FLAC__stream_encoder_get_state() for cause. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER, - /**< The library was not compiled with support for the given container - * format. - */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS, - /**< A required callback was not supplied. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS, - /**< The encoder has an invalid setting for number of channels. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE, - /**< The encoder has an invalid setting for bits-per-sample. - * FLAC supports 4-32 bps but the reference encoder currently supports - * only up to 24 bps. - */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE, - /**< The encoder has an invalid setting for the input sample rate. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE, - /**< The encoder has an invalid setting for the block size. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER, - /**< The encoder has an invalid setting for the maximum LPC order. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION, - /**< The encoder has an invalid setting for the precision of the quantized linear predictor coefficients. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER, - /**< The specified block size is less than the maximum LPC order. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE, - /**< The encoder is bound to the Subset but other settings violate it. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA, - /**< The metadata input to the encoder is invalid, in one of the following ways: - * - FLAC__stream_encoder_set_metadata() was called with a null pointer but a block count > 0 - * - One of the metadata blocks contains an undefined type - * - It contains an illegal CUESHEET as checked by FLAC__format_cuesheet_is_legal() - * - It contains an illegal SEEKTABLE as checked by FLAC__format_seektable_is_legal() - * - It contains more than one SEEKTABLE block or more than one VORBIS_COMMENT block - */ - - FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED - /**< FLAC__stream_encoder_init_*() was called when the encoder was - * already initialized, usually because - * FLAC__stream_encoder_finish() was not called. - */ - -} FLAC__StreamEncoderInitStatus; - -/** Maps a FLAC__StreamEncoderInitStatus to a C string. - * - * Using a FLAC__StreamEncoderInitStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[]; - - -/** Return values for the FLAC__StreamEncoder read callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE, - /**< The read was OK and decoding can continue. */ - - FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM, - /**< The read was attempted at the end of the stream. */ - - FLAC__STREAM_ENCODER_READ_STATUS_ABORT, - /**< An unrecoverable error occurred. */ - - FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED - /**< Client does not support reading back from the output. */ - -} FLAC__StreamEncoderReadStatus; - -/** Maps a FLAC__StreamEncoderReadStatus to a C string. - * - * Using a FLAC__StreamEncoderReadStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[]; - - -/** Return values for the FLAC__StreamEncoder write callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0, - /**< The write was OK and encoding can continue. */ - - FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR - /**< An unrecoverable error occurred. The encoder will return from the process call. */ - -} FLAC__StreamEncoderWriteStatus; - -/** Maps a FLAC__StreamEncoderWriteStatus to a C string. - * - * Using a FLAC__StreamEncoderWriteStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[]; - - -/** Return values for the FLAC__StreamEncoder seek callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_SEEK_STATUS_OK, - /**< The seek was OK and encoding can continue. */ - - FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR, - /**< An unrecoverable error occurred. */ - - FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED - /**< Client does not support seeking. */ - -} FLAC__StreamEncoderSeekStatus; - -/** Maps a FLAC__StreamEncoderSeekStatus to a C string. - * - * Using a FLAC__StreamEncoderSeekStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[]; - - -/** Return values for the FLAC__StreamEncoder tell callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_TELL_STATUS_OK, - /**< The tell was OK and encoding can continue. */ - - FLAC__STREAM_ENCODER_TELL_STATUS_ERROR, - /**< An unrecoverable error occurred. */ - - FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED - /**< Client does not support seeking. */ - -} FLAC__StreamEncoderTellStatus; - -/** Maps a FLAC__StreamEncoderTellStatus to a C string. - * - * Using a FLAC__StreamEncoderTellStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[]; - - -/*********************************************************************** - * - * class FLAC__StreamEncoder - * - ***********************************************************************/ - -struct FLAC__StreamEncoderProtected; -struct FLAC__StreamEncoderPrivate; -/** The opaque structure definition for the stream encoder type. - * See the \link flac_stream_encoder stream encoder module \endlink - * for a detailed description. - */ -typedef struct { - struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */ - struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */ -} FLAC__StreamEncoder; - -/** Signature for the read callback. - * - * A function pointer matching this signature must be passed to - * FLAC__stream_encoder_init_ogg_stream() if seeking is supported. - * The supplied function will be called when the encoder needs to read back - * encoded data. This happens during the metadata callback, when the encoder - * has to read, modify, and rewrite the metadata (e.g. seekpoints) gathered - * while encoding. The address of the buffer to be filled is supplied, along - * with the number of bytes the buffer can hold. The callback may choose to - * supply less data and modify the byte count but must be careful not to - * overflow the buffer. The callback then returns a status code chosen from - * FLAC__StreamEncoderReadStatus. - * - * Here is an example of a read callback for stdio streams: - * \code - * FLAC__StreamEncoderReadStatus read_cb(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(*bytes > 0) { - * *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file); - * if(ferror(file)) - * return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; - * else if(*bytes == 0) - * return FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM; - * else - * return FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE; - * } - * else - * return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; - * } - * \endcode - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param buffer A pointer to a location for the callee to store - * data to be encoded. - * \param bytes A pointer to the size of the buffer. On entry - * to the callback, it contains the maximum number - * of bytes that may be stored in \a buffer. The - * callee must set it to the actual number of bytes - * stored (0 in case of error or end-of-stream) before - * returning. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_set_client_data(). - * \retval FLAC__StreamEncoderReadStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data); - -/** Signature for the write callback. - * - * A function pointer matching this signature must be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * by the encoder anytime there is raw encoded data ready to write. It may - * include metadata mixed with encoded audio frames and the data is not - * guaranteed to be aligned on frame or metadata block boundaries. - * - * The only duty of the callback is to write out the \a bytes worth of data - * in \a buffer to the current position in the output stream. The arguments - * \a samples and \a current_frame are purely informational. If \a samples - * is greater than \c 0, then \a current_frame will hold the current frame - * number that is being written; otherwise it indicates that the write - * callback is being called to write metadata. - * - * \note - * Unlike when writing to native FLAC, when writing to Ogg FLAC the - * write callback will be called twice when writing each audio - * frame; once for the page header, and once for the page body. - * When writing the page header, the \a samples argument to the - * write callback will be \c 0. - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param buffer An array of encoded data of length \a bytes. - * \param bytes The byte length of \a buffer. - * \param samples The number of samples encoded by \a buffer. - * \c 0 has a special meaning; see above. - * \param current_frame The number of the current frame being encoded. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - * \retval FLAC__StreamEncoderWriteStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data); - -/** Signature for the seek callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * when the encoder needs to seek the output stream. The encoder will pass - * the absolute byte offset to seek to, 0 meaning the beginning of the stream. - * - * Here is an example of a seek callback for stdio streams: - * \code - * FLAC__StreamEncoderSeekStatus seek_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(file == stdin) - * return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED; - * else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0) - * return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR; - * else - * return FLAC__STREAM_ENCODER_SEEK_STATUS_OK; - * } - * \endcode - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param absolute_byte_offset The offset from the beginning of the stream - * to seek to. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - * \retval FLAC__StreamEncoderSeekStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data); - -/** Signature for the tell callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * when the encoder needs to know the current position of the output stream. - * - * \warning - * The callback must return the true current byte offset of the output to - * which the encoder is writing. If you are buffering the output, make - * sure and take this into account. If you are writing directly to a - * FILE* from your write callback, ftell() is sufficient. If you are - * writing directly to a file descriptor from your write callback, you - * can use lseek(fd, SEEK_CUR, 0). The encoder may later seek back to - * these points to rewrite metadata after encoding. - * - * Here is an example of a tell callback for stdio streams: - * \code - * FLAC__StreamEncoderTellStatus tell_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * off_t pos; - * if(file == stdin) - * return FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED; - * else if((pos = ftello(file)) < 0) - * return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR; - * else { - * *absolute_byte_offset = (FLAC__uint64)pos; - * return FLAC__STREAM_ENCODER_TELL_STATUS_OK; - * } - * } - * \endcode - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param absolute_byte_offset The address at which to store the current - * position of the output. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - * \retval FLAC__StreamEncoderTellStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data); - -/** Signature for the metadata callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * once at the end of encoding with the populated STREAMINFO structure. This - * is so the client can seek back to the beginning of the file and write the - * STREAMINFO block with the correct statistics after encoding (like - * minimum/maximum frame size and total samples). - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param metadata The final populated STREAMINFO block. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - */ -typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data); - -/** Signature for the progress callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE(). - * The supplied function will be called when the encoder has finished - * writing a frame. The \c total_frames_estimate argument to the - * callback will be based on the value from - * FLAC__stream_encoder_set_total_samples_estimate(). - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param bytes_written Bytes written so far. - * \param samples_written Samples written so far. - * \param frames_written Frames written so far. - * \param total_frames_estimate The estimate of the total number of - * frames to be written. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - */ -typedef void (*FLAC__StreamEncoderProgressCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data); - - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ - -/** Create a new stream encoder instance. The instance is created with - * default settings; see the individual FLAC__stream_encoder_set_*() - * functions for each setting's default. - * - * \retval FLAC__StreamEncoder* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void); - -/** Free an encoder instance. Deletes the object pointed to by \a encoder. - * - * \param encoder A pointer to an existing encoder. - * \assert - * \code encoder != NULL \endcode - */ -FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder); - - -/*********************************************************************** - * - * Public class method prototypes - * - ***********************************************************************/ - -/** Set the serial number for the FLAC stream to use in the Ogg container. - * - * \note - * This does not need to be set for native FLAC encoding. - * - * \note - * It is recommended to set a serial number explicitly as the default of '0' - * may collide with other streams. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param serial_number See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number); - -/** Set the "verify" flag. If \c true, the encoder will verify it's own - * encoded output by feeding it through an internal decoder and comparing - * the original signal against the decoded signal. If a mismatch occurs, - * the process call will return \c false. Note that this will slow the - * encoding process by the extra time required for decoding and comparison. - * - * \default \c false - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Set the Subset flag. If \c true, - * the encoder will comply with the Subset and will check the - * settings during FLAC__stream_encoder_init_*() to see if all settings - * comply. If \c false, the settings may take advantage of the full - * range that the format allows. - * - * Make sure you know what it entails before setting this to \c false. - * - * \default \c true - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Set the number of channels to be encoded. - * - * \default \c 2 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set the sample resolution of the input to be encoded. - * - * \warning - * Do not feed the encoder data that is wider than the value you - * set here or you will generate an invalid stream. - * - * \default \c 16 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set the sample rate (in Hz) of the input to be encoded. - * - * \default \c 44100 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set the compression level - * - * The compression level is roughly proportional to the amount of effort - * the encoder expends to compress the file. A higher level usually - * means more computation but higher compression. The default level is - * suitable for most applications. - * - * Currently the levels range from \c 0 (fastest, least compression) to - * \c 8 (slowest, most compression). A value larger than \c 8 will be - * treated as \c 8. - * - * This function automatically calls the following other \c _set_ - * functions with appropriate values, so the client does not need to - * unless it specifically wants to override them: - * - FLAC__stream_encoder_set_do_mid_side_stereo() - * - FLAC__stream_encoder_set_loose_mid_side_stereo() - * - FLAC__stream_encoder_set_apodization() - * - FLAC__stream_encoder_set_max_lpc_order() - * - FLAC__stream_encoder_set_qlp_coeff_precision() - * - FLAC__stream_encoder_set_do_qlp_coeff_prec_search() - * - FLAC__stream_encoder_set_do_escape_coding() - * - FLAC__stream_encoder_set_do_exhaustive_model_search() - * - FLAC__stream_encoder_set_min_residual_partition_order() - * - FLAC__stream_encoder_set_max_residual_partition_order() - * - FLAC__stream_encoder_set_rice_parameter_search_dist() - * - * The actual values set for each level are: - * - * - * - * - * - * - * - * - * - * - * - * - *
level - * do mid-side stereo - * loose mid-side stereo - * apodization - * max lpc order - * qlp coeff precision - * qlp coeff prec search - * escape coding - * exhaustive model search - * min residual partition order - * max residual partition order - * rice parameter search dist - *
0 false false tukey(0.5) 0 0 false false false 0 3 0
1 true true tukey(0.5) 0 0 false false false 0 3 0
2 true false tukey(0.5) 0 0 false false false 0 3 0
3 false false tukey(0.5) 6 0 false false false 0 4 0
4 true true tukey(0.5) 8 0 false false false 0 4 0
5 true false tukey(0.5) 8 0 false false false 0 5 0
6 true false tukey(0.5) 8 0 false false false 0 6 0
7 true false tukey(0.5) 8 0 false false true 0 6 0
8 true false tukey(0.5) 12 0 false false true 0 6 0
- * - * \default \c 5 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set the blocksize to use while encoding. - * - * The number of samples to use per frame. Use \c 0 to let the encoder - * estimate a blocksize; this is usually best. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set to \c true to enable mid-side encoding on stereo input. The - * number of channels must be 2 for this to have any effect. Set to - * \c false to use only independent channel coding. - * - * \default \c false - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Set to \c true to enable adaptive switching between mid-side and - * left-right encoding on stereo input. Set to \c false to use - * exhaustive searching. Setting this to \c true requires - * FLAC__stream_encoder_set_do_mid_side_stereo() to also be set to - * \c true in order to have any effect. - * - * \default \c false - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Sets the apodization function(s) the encoder will use when windowing - * audio data for LPC analysis. - * - * The \a specification is a plain ASCII string which specifies exactly - * which functions to use. There may be more than one (up to 32), - * separated by \c ';' characters. Some functions take one or more - * comma-separated arguments in parentheses. - * - * The available functions are \c bartlett, \c bartlett_hann, - * \c blackman, \c blackman_harris_4term_92db, \c connes, \c flattop, - * \c gauss(STDDEV), \c hamming, \c hann, \c kaiser_bessel, \c nuttall, - * \c rectangle, \c triangle, \c tukey(P), \c welch. - * - * For \c gauss(STDDEV), STDDEV specifies the standard deviation - * (0blocksize / (2 ^ order). - * - * Set both min and max values to \c 0 to force a single context, - * whose Rice parameter is based on the residual signal variance. - * Otherwise, set a min and max order, and the encoder will search - * all orders, using the mean of each context for its Rice parameter, - * and use the best. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set the maximum partition order to search when coding the residual. - * This is used in tandem with - * FLAC__stream_encoder_set_min_residual_partition_order(). - * - * The partition order determines the context size in the residual. - * The context size will be approximately blocksize / (2 ^ order). - * - * Set both min and max values to \c 0 to force a single context, - * whose Rice parameter is based on the residual signal variance. - * Otherwise, set a min and max order, and the encoder will search - * all orders, using the mean of each context for its Rice parameter, - * and use the best. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value); - -/** Deprecated. Setting this value has no effect. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value); - -/** Set an estimate of the total samples that will be encoded. - * This is merely an estimate and may be set to \c 0 if unknown. - * This value will be written to the STREAMINFO block before encoding, - * and can remove the need for the caller to rewrite the value later - * if the value is known before encoding. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value); - -/** Set the metadata blocks to be emitted to the stream before encoding. - * A value of \c NULL, \c 0 implies no metadata; otherwise, supply an - * array of pointers to metadata blocks. The array is non-const since - * the encoder may need to change the \a is_last flag inside them, and - * in some cases update seek point offsets. Otherwise, the encoder will - * not modify or free the blocks. It is up to the caller to free the - * metadata blocks after encoding finishes. - * - * \note - * The encoder stores only copies of the pointers in the \a metadata array; - * the metadata blocks themselves must survive at least until after - * FLAC__stream_encoder_finish() returns. Do not free the blocks until then. - * - * \note - * The STREAMINFO block is always written and no STREAMINFO block may - * occur in the supplied array. - * - * \note - * By default the encoder does not create a SEEKTABLE. If one is supplied - * in the \a metadata array, but the client has specified that it does not - * support seeking, then the SEEKTABLE will be written verbatim. However - * by itself this is not very useful as the client will not know the stream - * offsets for the seekpoints ahead of time. In order to get a proper - * seektable the client must support seeking. See next note. - * - * \note - * SEEKTABLE blocks are handled specially. Since you will not know - * the values for the seek point stream offsets, you should pass in - * a SEEKTABLE 'template', that is, a SEEKTABLE object with the - * required sample numbers (or placeholder points), with \c 0 for the - * \a frame_samples and \a stream_offset fields for each point. If the - * client has specified that it supports seeking by providing a seek - * callback to FLAC__stream_encoder_init_stream() or both seek AND read - * callback to FLAC__stream_encoder_init_ogg_stream() (or by using - * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE()), - * then while it is encoding the encoder will fill the stream offsets in - * for you and when encoding is finished, it will seek back and write the - * real values into the SEEKTABLE block in the stream. There are helper - * routines for manipulating seektable template blocks; see metadata.h: - * FLAC__metadata_object_seektable_template_*(). If the client does - * not support seeking, the SEEKTABLE will have inaccurate offsets which - * will slow down or remove the ability to seek in the FLAC stream. - * - * \note - * The encoder instance \b will modify the first \c SEEKTABLE block - * as it transforms the template to a valid seektable while encoding, - * but it is still up to the caller to free all metadata blocks after - * encoding. - * - * \note - * A VORBIS_COMMENT block may be supplied. The vendor string in it - * will be ignored. libFLAC will use it's own vendor string. libFLAC - * will not modify the passed-in VORBIS_COMMENT's vendor string, it - * will simply write it's own into the stream. If no VORBIS_COMMENT - * block is present in the \a metadata array, libFLAC will write an - * empty one, containing only the vendor string. - * - * \note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be - * the second metadata block of the stream. The encoder already supplies - * the STREAMINFO block automatically. If \a metadata does not contain a - * VORBIS_COMMENT block, the encoder will supply that too. Otherwise, if - * \a metadata does contain a VORBIS_COMMENT block and it is not the - * first, the init function will reorder \a metadata by moving the - * VORBIS_COMMENT block to the front; the relative ordering of the other - * blocks will remain as they were. - * - * \note The Ogg FLAC mapping limits the number of metadata blocks per - * stream to \c 65535. If \a num_blocks exceeds this the function will - * return \c false. - * - * \default \c NULL, 0 - * \param encoder An encoder instance to set. - * \param metadata See above. - * \param num_blocks See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - * \c false if the encoder is already initialized, or if - * \a num_blocks > 65535 if encoding to Ogg FLAC, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks); - -/** Get the current encoder state. - * - * \param encoder An encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__StreamEncoderState - * The current encoder state. - */ -FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder); - -/** Get the state of the verify stream decoder. - * Useful when the stream encoder state is - * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. - * - * \param encoder An encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__StreamDecoderState - * The verify stream decoder state. - */ -FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder); - -/** Get the current encoder state as a C string. - * This version automatically resolves - * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR by getting the - * verify decoder's state. - * - * \param encoder A encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval const char * - * The encoder state as a C string. Do not modify the contents. - */ -FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder); - -/** Get relevant values about the nature of a verify decoder error. - * Useful when the stream encoder state is - * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. The arguments should - * be addresses in which the stats will be returned, or NULL if value - * is not desired. - * - * \param encoder An encoder instance to query. - * \param absolute_sample The absolute sample number of the mismatch. - * \param frame_number The number of the frame in which the mismatch occurred. - * \param channel The channel in which the mismatch occurred. - * \param sample The number of the sample (relative to the frame) in - * which the mismatch occurred. - * \param expected The expected value for the sample in question. - * \param got The actual value returned by the decoder. - * \assert - * \code encoder != NULL \endcode - */ -FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got); - -/** Get the "verify" flag. - * - * \param encoder An encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * See FLAC__stream_encoder_set_verify(). - */ -FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder); - -/** Get the frame header. - * - * \param encoder An initialized encoder instance in the OK state. - * \param buffer An array of pointers to each channel's signal. - * \param samples The number of samples in one channel. - * \assert - * \code encoder != NULL \endcode - * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode - * \retval FLAC__bool - * \c true if successful, else \c false; in this case, check the - * encoder state with FLAC__stream_encoder_get_state() to see what - * went wrong. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples); - -/** Submit data for encoding. - * This version allows you to supply the input data where the channels - * are interleaved into a single array (i.e. channel0_sample0, - * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). - * The samples need not be block-aligned but they must be - * sample-aligned, i.e. the first value should be channel0_sample0 - * and the last value channelN_sampleM. Each sample should be a signed - * integer, right-justified to the resolution set by - * FLAC__stream_encoder_set_bits_per_sample(). For example, if the - * resolution is 16 bits per sample, the samples should all be in the - * range [-32768,32767]. - * - * For applications where channel order is important, channels must - * follow the order as described in the - * frame header. - * - * \param encoder An initialized encoder instance in the OK state. - * \param buffer An array of channel-interleaved data (see above). - * \param samples The number of samples in one channel, the same as for - * FLAC__stream_encoder_process(). For example, if - * encoding two channels, \c 1000 \a samples corresponds - * to a \a buffer of 2000 values. - * \assert - * \code encoder != NULL \endcode - * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode - * \retval FLAC__bool - * \c true if successful, else \c false; in this case, check the - * encoder state with FLAC__stream_encoder_get_state() to see what - * went wrong. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp deleted file mode 100644 index 0a5a199e41..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp +++ /dev/null @@ -1,813 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AiffAudioFormat.h" -#include "../../../juce_core/io/streams/juce_BufferedInputStream.h" -#include "../../../juce_core/misc/juce_PlatformUtilities.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" - - -#undef chunkName -#define chunkName(a) (int)littleEndianInt(a) - -//============================================================================== -#define aiffFormatName TRANS("AIFF file") -static const tchar* const aiffExtensions[] = { T(".aiff"), T(".aif"), 0 }; - - -//============================================================================== -class AiffAudioFormatReader : public AudioFormatReader -{ -public: - int bytesPerFrame; - int64 dataChunkStart; - bool littleEndian; - - //============================================================================== - AiffAudioFormatReader (InputStream* in) - : AudioFormatReader (in, aiffFormatName) - { - if (input->readInt() == chunkName ("FORM")) - { - const int len = input->readIntBigEndian(); - const int64 end = input->getPosition() + len; - - const int nextType = input->readInt(); - if (nextType == chunkName ("AIFF") || nextType == chunkName ("AIFC")) - { - bool hasGotVer = false; - bool hasGotData = false; - bool hasGotType = false; - - while (input->getPosition() < end) - { - const int type = input->readInt(); - const uint32 length = (uint32) input->readIntBigEndian(); - const int64 chunkEnd = input->getPosition() + length; - - if (type == chunkName ("FVER")) - { - hasGotVer = true; - - const int ver = input->readIntBigEndian(); - if (ver != 0 && ver != (int)0xa2805140) - break; - } - else if (type == chunkName ("COMM")) - { - hasGotType = true; - - numChannels = (unsigned int)input->readShortBigEndian(); - lengthInSamples = input->readIntBigEndian(); - bitsPerSample = input->readShortBigEndian(); - bytesPerFrame = (numChannels * bitsPerSample) >> 3; - - unsigned char sampleRateBytes[10]; - input->read (sampleRateBytes, 10); - const int byte0 = sampleRateBytes[0]; - - if ((byte0 & 0x80) != 0 - || byte0 <= 0x3F || byte0 > 0x40 - || (byte0 == 0x40 && sampleRateBytes[1] > 0x1C)) - break; - - unsigned int sampRate = bigEndianInt ((char*) sampleRateBytes + 2); - sampRate >>= (16414 - bigEndianShort ((char*) sampleRateBytes)); - sampleRate = (int)sampRate; - - if (length <= 18) - { - // some types don't have a chunk large enough to include a compression - // type, so assume it's just big-endian pcm - littleEndian = false; - } - else - { - const int compType = input->readInt(); - - if (compType == chunkName ("NONE") || compType == chunkName ("twos")) - { - littleEndian = false; - } - else if (compType == chunkName ("sowt")) - { - littleEndian = true; - } - else - { - sampleRate = 0; - break; - } - } - } - else if (type == chunkName ("SSND")) - { - hasGotData = true; - - const int offset = input->readIntBigEndian(); - dataChunkStart = input->getPosition() + 4 + offset; - lengthInSamples = (bytesPerFrame > 0) ? jmin (lengthInSamples, (int64) (length / bytesPerFrame)) : 0; - } - else if ((hasGotVer && hasGotData && hasGotType) - || chunkEnd < input->getPosition() - || input->isExhausted()) - { - break; - } - - input->setPosition (chunkEnd); - } - } - } - } - - ~AiffAudioFormatReader() - { - } - - //============================================================================== - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - numSamples = (int) jmin ((int64) numSamples, lengthInSamples - startSampleInFile); - - if (numSamples <= 0) - return true; - - input->setPosition (dataChunkStart + startSampleInFile * bytesPerFrame); - - const int tempBufSize = 480 * 3 * 4; // (keep this a multiple of 3) - char tempBuffer [tempBufSize]; - - while (numSamples > 0) - { - int* left = destSamples[0]; - if (left != 0) - left += startOffsetInDestBuffer; - - int* right = numDestChannels > 1 ? destSamples[1] : 0; - if (right != 0) - right += startOffsetInDestBuffer; - - const int numThisTime = jmin (tempBufSize / bytesPerFrame, numSamples); - const int bytesRead = input->read (tempBuffer, numThisTime * bytesPerFrame); - - if (bytesRead < numThisTime * bytesPerFrame) - zeromem (tempBuffer + bytesRead, numThisTime * bytesPerFrame - bytesRead); - - if (bitsPerSample == 16) - { - if (littleEndian) - { - const short* src = (const short*) tempBuffer; - - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *right++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - ++src; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *left++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - *right++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - } - } - } - else - { - const char* src = (const char*) tempBuffer; - - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *right++ = bigEndianShort (src) << 16; - src += 4; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - src += 2; - *left++ = bigEndianShort (src) << 16; - src += 2; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = bigEndianShort (src) << 16; - src += 2; - *right++ = bigEndianShort (src) << 16; - src += 2; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = bigEndianShort (src) << 16; - src += 2; - } - } - } - } - else if (bitsPerSample == 24) - { - const char* src = (const char*)tempBuffer; - - if (littleEndian) - { - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *right++ = littleEndian24Bit (src) << 8; - src += 6; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - src += 3; - *left++ = littleEndian24Bit (src) << 8; - src += 3; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = littleEndian24Bit (src) << 8; - src += 3; - *right++ = littleEndian24Bit (src) << 8; - src += 3; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = littleEndian24Bit (src) << 8; - src += 3; - } - } - } - else - { - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *right++ = bigEndian24Bit (src) << 8; - src += 6; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - src += 3; - *left++ = bigEndian24Bit (src) << 8; - src += 3; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = bigEndian24Bit (src) << 8; - src += 3; - *right++ = bigEndian24Bit (src) << 8; - src += 3; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = bigEndian24Bit (src) << 8; - src += 3; - } - } - } - } - else if (bitsPerSample == 32) - { - const unsigned int* src = (const unsigned int*) tempBuffer; - unsigned int* l = (unsigned int*) left; - unsigned int* r = (unsigned int*) right; - - if (littleEndian) - { - if (numChannels > 1) - { - if (l == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *r++ = swapIfBigEndian (*src++); - } - } - else if (r == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfBigEndian (*src++); - ++src; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfBigEndian (*src++); - *r++ = swapIfBigEndian (*src++); - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfBigEndian (*src++); - } - } - } - else - { - if (numChannels > 1) - { - if (l == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *r++ = swapIfLittleEndian (*src++); - } - } - else if (r == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfLittleEndian (*src++); - ++src; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfLittleEndian (*src++); - *r++ = swapIfLittleEndian (*src++); - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfLittleEndian (*src++); - } - } - } - - left = (int*) l; - right = (int*) r; - } - else if (bitsPerSample == 8) - { - const char* src = (const char*) tempBuffer; - - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *right++ = ((int) *src++) << 24; - ++src; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *left++ = ((int) *src++) << 24; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = ((int) *src++) << 24; - *right++ = ((int) *src++) << 24; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = ((int) *src++) << 24; - } - } - } - - startOffsetInDestBuffer += numThisTime; - numSamples -= numThisTime; - } - - if (numSamples > 0) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != 0) - zeromem (destSamples[i] + startOffsetInDestBuffer, - sizeof (int) * numSamples); - } - - return true; - } - - juce_UseDebuggingNewOperator - -private: - AiffAudioFormatReader (const AiffAudioFormatReader&); - const AiffAudioFormatReader& operator= (const AiffAudioFormatReader&); -}; - -//============================================================================== -class AiffAudioFormatWriter : public AudioFormatWriter -{ - MemoryBlock tempBlock; - uint32 lengthInSamples, bytesWritten; - int64 headerPosition; - bool writeFailed; - - AiffAudioFormatWriter (const AiffAudioFormatWriter&); - const AiffAudioFormatWriter& operator= (const AiffAudioFormatWriter&); - - void writeHeader() - { - const bool couldSeekOk = output->setPosition (headerPosition); - (void) couldSeekOk; - - // if this fails, you've given it an output stream that can't seek! It needs - // to be able to seek back to write the header - jassert (couldSeekOk); - - const int headerLen = 54; - int audioBytes = lengthInSamples * ((bitsPerSample * numChannels) / 8); - audioBytes += (audioBytes & 1); - - output->writeInt (chunkName ("FORM")); - output->writeIntBigEndian (headerLen + audioBytes - 8); - output->writeInt (chunkName ("AIFF")); - output->writeInt (chunkName ("COMM")); - output->writeIntBigEndian (18); - output->writeShortBigEndian ((short) numChannels); - output->writeIntBigEndian (lengthInSamples); - output->writeShortBigEndian ((short) bitsPerSample); - - uint8 sampleRateBytes[10]; - zeromem (sampleRateBytes, 10); - - if (sampleRate <= 1) - { - sampleRateBytes[0] = 0x3f; - sampleRateBytes[1] = 0xff; - sampleRateBytes[2] = 0x80; - } - else - { - int mask = 0x40000000; - sampleRateBytes[0] = 0x40; - - if (sampleRate >= mask) - { - jassertfalse - sampleRateBytes[1] = 0x1d; - } - else - { - int n = (int) sampleRate; - - int i; - for (i = 0; i <= 32 ; ++i) - { - if ((n & mask) != 0) - break; - - mask >>= 1; - } - - n = n << (i + 1); - - sampleRateBytes[1] = (uint8) (29 - i); - sampleRateBytes[2] = (uint8) ((n >> 24) & 0xff); - sampleRateBytes[3] = (uint8) ((n >> 16) & 0xff); - sampleRateBytes[4] = (uint8) ((n >> 8) & 0xff); - sampleRateBytes[5] = (uint8) (n & 0xff); - } - } - - output->write (sampleRateBytes, 10); - - output->writeInt (chunkName ("SSND")); - output->writeIntBigEndian (audioBytes + 8); - output->writeInt (0); - output->writeInt (0); - - jassert (output->getPosition() == headerLen); - } - -public: - //============================================================================== - AiffAudioFormatWriter (OutputStream* out, - const double sampleRate_, - const unsigned int chans, - const int bits) - : AudioFormatWriter (out, - aiffFormatName, - sampleRate_, - chans, - bits), - lengthInSamples (0), - bytesWritten (0), - writeFailed (false) - { - headerPosition = out->getPosition(); - writeHeader(); - } - - ~AiffAudioFormatWriter() - { - if ((bytesWritten & 1) != 0) - output->writeByte (0); - - writeHeader(); - } - - //============================================================================== - bool write (const int** data, int numSamples) - { - if (writeFailed) - return false; - - const int bytes = numChannels * numSamples * bitsPerSample / 8; - tempBlock.ensureSize (bytes, false); - char* buffer = (char*) tempBlock.getData(); - - const int* left = data[0]; - const int* right = data[1]; - if (right == 0) - right = left; - - if (bitsPerSample == 16) - { - short* b = (short*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (short) swapIfLittleEndian ((unsigned short) (*left++ >> 16)); - *b++ = (short) swapIfLittleEndian ((unsigned short) (*right++ >> 16)); - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (short) swapIfLittleEndian ((unsigned short) (*left++ >> 16)); - } - } - } - else if (bitsPerSample == 24) - { - char* b = (char*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - bigEndian24BitToChars (*left++ >> 8, b); - b += 3; - bigEndian24BitToChars (*right++ >> 8, b); - b += 3; - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - bigEndian24BitToChars (*left++ >> 8, b); - b += 3; - } - } - } - else if (bitsPerSample == 32) - { - unsigned int* b = (unsigned int*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - *b++ = swapIfLittleEndian ((unsigned int) *left++); - *b++ = swapIfLittleEndian ((unsigned int) *right++); - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - *b++ = swapIfLittleEndian ((unsigned int) *left++); - } - } - } - else if (bitsPerSample == 8) - { - char* b = (char*)buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (char) (*left++ >> 24); - *b++ = (char) (*right++ >> 24); - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (char) (*left++ >> 24); - } - } - } - - if (bytesWritten + bytes >= (uint32) 0xfff00000 - || ! output->write (buffer, bytes)) - { - // failed to write to disk, so let's try writing the header. - // If it's just run out of disk space, then if it does manage - // to write the header, we'll still have a useable file.. - writeHeader(); - writeFailed = true; - return false; - } - else - { - bytesWritten += bytes; - lengthInSamples += numSamples; - - return true; - } - } - - juce_UseDebuggingNewOperator -}; - -//============================================================================== -AiffAudioFormat::AiffAudioFormat() - : AudioFormat (aiffFormatName, (const tchar**) aiffExtensions) -{ -} - -AiffAudioFormat::~AiffAudioFormat() -{ -} - -const Array AiffAudioFormat::getPossibleSampleRates() -{ - const int rates[] = { 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000, 0 }; - return Array (rates); -} - -const Array AiffAudioFormat::getPossibleBitDepths() -{ - const int depths[] = { 8, 16, 24, 0 }; - return Array (depths); -} - -bool AiffAudioFormat::canDoStereo() -{ - return true; -} - -bool AiffAudioFormat::canDoMono() -{ - return true; -} - -#if JUCE_MAC -bool AiffAudioFormat::canHandleFile (const File& f) -{ - if (AudioFormat::canHandleFile (f)) - return true; - - const OSType type = PlatformUtilities::getTypeOfFile (f.getFullPathName()); - return type == 'AIFF' || type == 'AIFC' - || type == 'aiff' || type == 'aifc'; -} -#endif - -AudioFormatReader* AiffAudioFormat::createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails) -{ - AiffAudioFormatReader* w = new AiffAudioFormatReader (sourceStream); - - if (w->sampleRate == 0) - { - if (! deleteStreamIfOpeningFails) - w->input = 0; - - deleteAndZero (w); - } - - return w; -} - -AudioFormatWriter* AiffAudioFormat::createWriterFor (OutputStream* out, - double sampleRate, - unsigned int chans, - int bitsPerSample, - const StringPairArray& /*metadataValues*/, - int /*qualityOptionIndex*/) -{ - if (getPossibleBitDepths().contains (bitsPerSample)) - { - return new AiffAudioFormatWriter (out, - sampleRate, - chans, - bitsPerSample); - } - - return 0; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.h b/src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.h deleted file mode 100644 index b7150c7481..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AIFFAUDIOFORMAT_JUCEHEADER__ -#define __JUCE_AIFFAUDIOFORMAT_JUCEHEADER__ - -#include "juce_AudioFormat.h" - - -//============================================================================== -/** - Reads and Writes AIFF format audio files. - - @see AudioFormat -*/ -class JUCE_API AiffAudioFormat : public AudioFormat -{ -public: - //============================================================================== - /** Creates an format object. */ - AiffAudioFormat(); - - /** Destructor. */ - ~AiffAudioFormat(); - - //============================================================================== - const Array getPossibleSampleRates(); - const Array getPossibleBitDepths(); - bool canDoStereo(); - bool canDoMono(); -#if JUCE_MAC - bool canHandleFile (const File& fileToTest); -#endif - - //============================================================================== - AudioFormatReader* createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails); - - AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, - double sampleRateToUse, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int qualityOptionIndex); - - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -#endif // __JUCE_AIFFAUDIOFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h deleted file mode 100644 index 90ab41ef84..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOCDBURNER_JUCEHEADER__ -#define __JUCE_AUDIOCDBURNER_JUCEHEADER__ - -#include "juce_AudioFormatReader.h" -#include "../audio_sources/juce_AudioSource.h" - - -//============================================================================== -/** -*/ -class AudioCDBurner -{ -public: - //============================================================================== - /** Returns a list of available optical drives. - - Use openDevice() to open one of the items from this list. - */ - static const StringArray findAvailableDevices(); - - /** Tries to open one of the optical drives. - - The deviceIndex is an index into the array returned by findAvailableDevices(). - */ - static AudioCDBurner* openDevice (const int deviceIndex); - - /** Destructor. */ - ~AudioCDBurner(); - - //============================================================================== - /** Returns true if there's a writable disk in the drive. - */ - bool isDiskPresent() const; - - /** Returns the number of free blocks on the disk. - - There are 75 blocks per second, at 44100Hz. - */ - int getNumAvailableAudioBlocks() const; - - /** Adds a track to be written. - - The source passed-in here will be kept by this object, and it will - be used and deleted at some point in the future, either during the - burn() method or when this AudioCDBurner object is deleted. Your caller - method shouldn't keep a reference to it or use it again after passing - it in here. - */ - bool addAudioTrack (AudioSource* source, int numSamples); - - /** - - Return true to cancel the current burn operation - */ - class BurnProgressListener - { - public: - BurnProgressListener() throw() {} - virtual ~BurnProgressListener() {} - - /** Called at intervals to report on the progress of the AudioCDBurner. - - To cancel the burn, return true from this. - */ - virtual bool audioCDBurnProgress (float proportionComplete) = 0; - }; - - const String burn (BurnProgressListener* listener, - const bool ejectDiscAfterwards, - const bool peformFakeBurnForTesting); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioCDBurner (const int deviceIndex); - - void* internal; -}; - - -#endif // __JUCE_AUDIOCDBURNER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.cpp deleted file mode 100644 index e218ff270f..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#if JUCE_MAC - -//============================================================================== -// Mac version doesn't need any native code because it's all done with files.. -// Windows + Linux versions are in the platform-dependent code sections. - -#include "juce_AudioCDReader.h" -#include "juce_AiffAudioFormat.h" -#include "../../../juce_core/io/files/juce_FileInputStream.h" -#include "../../../juce_core/io/streams/juce_BufferedInputStream.h" - - -static void findCDs (OwnedArray& cds) -{ - File volumes ("/Volumes"); - volumes.findChildFiles (cds, File::findDirectories, false); - - for (int i = cds.size(); --i >= 0;) - if (! cds[i]->getChildFile (".TOC.plist").exists()) - cds.remove (i); -} - -const StringArray AudioCDReader::getAvailableCDNames() -{ - OwnedArray cds; - findCDs (cds); - - StringArray names; - - for (int i = 0; i < cds.size(); ++i) - names.add (cds[i]->getFileName()); - - return names; -} - -AudioCDReader* AudioCDReader::createReaderForCD (const int index) -{ - OwnedArray cds; - findCDs (cds); - - if (cds[index] != 0) - return new AudioCDReader (*cds[index]); - else - return 0; -} - -AudioCDReader::AudioCDReader (const File& volume) - : AudioFormatReader (0, "CD Audio"), - volumeDir (volume), - currentReaderTrack (-1), - reader (0) -{ - sampleRate = 44100.0; - bitsPerSample = 16; - numChannels = 2; - usesFloatingPointData = false; - - refreshTrackLengths(); -} - -AudioCDReader::~AudioCDReader() -{ - if (reader != 0) - delete reader; -} - -static int getTrackNumber (const File& file) -{ - return file.getFileName() - .initialSectionContainingOnly (T("0123456789")) - .getIntValue(); -} - -int AudioCDReader::compareElements (const File* const first, const File* const second) throw() -{ - const int firstTrack = getTrackNumber (*first); - const int secondTrack = getTrackNumber (*second); - - jassert (firstTrack > 0 && secondTrack > 0); - - return firstTrack - secondTrack; -} - -void AudioCDReader::refreshTrackLengths() -{ - tracks.clear(); - trackStartSamples.clear(); - volumeDir.findChildFiles (tracks, File::findFiles | File::ignoreHiddenFiles, false, T("*.aiff")); - - tracks.sort (*this); - - AiffAudioFormat format; - int sample = 0; - - for (int i = 0; i < tracks.size(); ++i) - { - trackStartSamples.add (sample); - - FileInputStream* const in = tracks[i]->createInputStream(); - - if (in != 0) - { - AudioFormatReader* const r = format.createReaderFor (in, true); - - if (r != 0) - { - sample += r->lengthInSamples; - delete r; - } - } - } - - trackStartSamples.add (sample); - lengthInSamples = sample; -} - -bool AudioCDReader::readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) -{ - while (numSamples > 0) - { - int track = -1; - - for (int i = 0; i < trackStartSamples.size() - 1; ++i) - { - if (startSampleInFile < trackStartSamples.getUnchecked (i + 1)) - { - track = i; - break; - } - } - - if (track < 0) - return false; - - if (track != currentReaderTrack) - { - deleteAndZero (reader); - - if (tracks [track] != 0) - { - FileInputStream* const in = tracks [track]->createInputStream(); - - if (in != 0) - { - BufferedInputStream* const bin = new BufferedInputStream (in, 65536, true); - - AiffAudioFormat format; - reader = format.createReaderFor (bin, true); - - if (reader == 0) - currentReaderTrack = -1; - else - currentReaderTrack = track; - } - } - } - - if (reader == 0) - return false; - - const int startPos = (int) (startSampleInFile - trackStartSamples.getUnchecked (track)); - const int numAvailable = (int) jmin ((int64) numSamples, reader->lengthInSamples - startPos); - - reader->readSamples (destSamples, numDestChannels, startOffsetInDestBuffer, startPos, numAvailable); - - numSamples -= numAvailable; - startSampleInFile += numAvailable; - } - - return true; -} - -bool AudioCDReader::isCDStillPresent() const -{ - return volumeDir.exists(); -} - -int AudioCDReader::getNumTracks() const -{ - return tracks.size(); -} - -int AudioCDReader::getPositionOfTrackStart (int trackNum) const -{ - return trackStartSamples [trackNum]; -} - -bool AudioCDReader::isTrackAudio (int trackNum) const -{ - return tracks [trackNum] != 0; -} - -void AudioCDReader::enableIndexScanning (bool b) -{ - // any way to do this on a Mac?? -} - -int AudioCDReader::getLastIndex() const -{ - return 0; -} - -const Array AudioCDReader::findIndexesInTrack (const int trackNumber) -{ - return Array (); -} - -int AudioCDReader::getCDDBId() -{ - return 0; //xxx -} - -#endif - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h deleted file mode 100644 index 4a3db2f654..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOCDREADER_JUCEHEADER__ -#define __JUCE_AUDIOCDREADER_JUCEHEADER__ - -#include "juce_AudioFormatReader.h" -#include "../../../juce_core/text/juce_StringArray.h" -#if JUCE_MAC -#include "../../../juce_core/io/files/juce_File.h" -#endif - -//============================================================================== -/** - A type of AudioFormatReader that reads from an audio CD. - - One of these can be used to read a CD as if it's one big audio stream. Use the - getPositionOfTrackStart() method to find where the individual tracks are - within the stream. - - @see AudioFormatReader -*/ -class JUCE_API AudioCDReader : public AudioFormatReader -{ -public: - //============================================================================== - /** Returns a list of names of Audio CDs currently available for reading. - - If there's a CD drive but no CD in it, this might return an empty list, or - possibly a device that can be opened but which has no tracks, depending - on the platform. - - @see createReaderForCD - */ - static const StringArray getAvailableCDNames(); - - /** Tries to create an AudioFormatReader that can read from an Audio CD. - - @param index the index of one of the available CDs - use getAvailableCDNames() - to find out how many there are. - @returns a new AudioCDReader object, or 0 if it couldn't be created. The - caller will be responsible for deleting the object returned. - */ - static AudioCDReader* createReaderForCD (const int index); - - //============================================================================== - /** Destructor. */ - ~AudioCDReader(); - - /** Implementation of the AudioFormatReader method. */ - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples); - - /** Checks whether the CD has been removed from the drive. - */ - bool isCDStillPresent() const; - - /** Returns the total number of tracks (audio + data). - */ - int getNumTracks() const; - - /** Finds the sample offset of the start of a track. - - @param trackNum the track number, where 0 is the first track. - */ - int getPositionOfTrackStart (int trackNum) const; - - /** Returns true if a given track is an audio track. - - @param trackNum the track number, where 0 is the first track. - */ - bool isTrackAudio (int trackNum) const; - - /** Refreshes the object's table of contents. - - If the disc has been ejected and a different one put in since this - object was created, this will cause it to update its idea of how many tracks - there are, etc. - */ - void refreshTrackLengths(); - - /** Enables scanning for indexes within tracks. - - @see getLastIndex - */ - void enableIndexScanning (bool enabled); - - /** Returns the index number found during the last read() call. - - Index scanning is turned off by default - turn it on with enableIndexScanning(). - - Then when the read() method is called, if it comes across an index within that - block, the index number is stored and returned by this method. - - Some devices might not support indexes, of course. - - (If you don't know what CD indexes are, it's unlikely you'll ever need them). - - @see enableIndexScanning - */ - int getLastIndex() const; - - /** Scans a track to find the position of any indexes within it. - - @param trackNumber the track to look in, where 0 is the first track on the disc - @returns an array of sample positions of any index points found (not including - the index that marks the start of the track) - */ - const Array findIndexesInTrack (const int trackNumber); - - /** Returns the CDDB id number for the CD. - - It's not a great way of identifying a disc, but it's traditional. - */ - int getCDDBId(); - - /** Tries to eject the disk. - - Of course this might not be possible, if some other process is using it. - */ - void ejectDisk(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - -#if JUCE_MAC - File volumeDir; - OwnedArray tracks; - Array trackStartSamples; - int currentReaderTrack; - AudioFormatReader* reader; - AudioCDReader (const File& volume); -public: - static int compareElements (const File* const, const File* const) throw(); -private: - -#elif JUCE_WIN32 - int numTracks; - int trackStarts[100]; - bool audioTracks [100]; - void* handle; - bool indexingEnabled; - int lastIndex, firstFrameInBuffer, samplesInBuffer; - MemoryBlock buffer; - AudioCDReader (void* handle); - int getIndexAt (int samplePos); - -#elif JUCE_LINUX - AudioCDReader(); -#endif - - AudioCDReader (const AudioCDReader&); - const AudioCDReader& operator= (const AudioCDReader&); -}; - -#endif // __JUCE_AUDIOCDREADER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.cpp deleted file mode 100644 index 15056358b5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.cpp +++ /dev/null @@ -1,557 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioFormat.h" -#include "../dsp/juce_AudioSampleBuffer.h" - - -//============================================================================== -AudioFormatReader::AudioFormatReader (InputStream* const in, - const String& formatName_) - : sampleRate (0), - bitsPerSample (0), - lengthInSamples (0), - numChannels (0), - usesFloatingPointData (false), - input (in), - formatName (formatName_) -{ -} - -AudioFormatReader::~AudioFormatReader() -{ - delete input; -} - -bool AudioFormatReader::read (int** destSamples, - int numDestChannels, - int64 startSampleInSource, - int numSamplesToRead, - const bool fillLeftoverChannelsWithCopies) -{ - jassert (numDestChannels > 0); // you have to actually give this some channels to work with! - - int startOffsetInDestBuffer = 0; - - if (startSampleInSource < 0) - { - const int silence = (int) jmin (-startSampleInSource, (int64) numSamplesToRead); - - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != 0) - zeromem (destSamples[i], sizeof (int) * silence); - - startOffsetInDestBuffer += silence; - numSamplesToRead -= silence; - startSampleInSource = 0; - } - - if (numSamplesToRead <= 0) - return true; - - if (! readSamples (destSamples, jmin (numChannels, numDestChannels), startOffsetInDestBuffer, - startSampleInSource, numSamplesToRead)) - return false; - - if (numDestChannels > (int) numChannels) - { - if (fillLeftoverChannelsWithCopies) - { - int* lastFullChannel = destSamples[0]; - - for (int i = numDestChannels; --i > 0;) - { - if (destSamples[i] != 0) - { - lastFullChannel = destSamples[i]; - break; - } - } - - if (lastFullChannel != 0) - for (int i = numChannels; i < numDestChannels; ++i) - if (destSamples[i] != 0) - memcpy (destSamples[i], lastFullChannel, sizeof (int) * numSamplesToRead); - } - else - { - for (int i = numChannels; i < numDestChannels; ++i) - if (destSamples[i] != 0) - zeromem (destSamples[i], sizeof (int) * numSamplesToRead); - } - } - - return true; -} - -static void findMaxMin (const float* src, const int num, - float& maxVal, float& minVal) -{ - float mn = src[0]; - float mx = mn; - - for (int i = 1; i < num; ++i) - { - const float s = src[i]; - if (s > mx) - mx = s; - if (s < mn) - mn = s; - } - - maxVal = mx; - minVal = mn; -} - -void AudioFormatReader::readMaxLevels (int64 startSampleInFile, - int64 numSamples, - float& lowestLeft, float& highestLeft, - float& lowestRight, float& highestRight) -{ - if (numSamples <= 0) - { - lowestLeft = 0; - lowestRight = 0; - highestLeft = 0; - highestRight = 0; - return; - } - - const int bufferSize = (int) jmin (numSamples, (int64) 4096); - MemoryBlock tempSpace (bufferSize * sizeof (int) * 2 + 64); - - int* tempBuffer[3]; - tempBuffer[0] = (int*) tempSpace.getData(); - tempBuffer[1] = ((int*) tempSpace.getData()) + bufferSize; - tempBuffer[2] = 0; - - if (usesFloatingPointData) - { - float lmin = 1.0e6; - float lmax = -lmin; - float rmin = lmin; - float rmax = lmax; - - while (numSamples > 0) - { - const int numToDo = (int) jmin (numSamples, (int64) bufferSize); - read ((int**) tempBuffer, 2, startSampleInFile, numToDo, false); - - numSamples -= numToDo; - - float bufmin, bufmax; - findMaxMin ((float*) tempBuffer[0], numToDo, bufmax, bufmin); - lmin = jmin (lmin, bufmin); - lmax = jmax (lmax, bufmax); - - if (numChannels > 1) - { - findMaxMin ((float*) tempBuffer[1], numToDo, bufmax, bufmin); - rmin = jmin (rmin, bufmin); - rmax = jmax (rmax, bufmax); - } - } - - if (numChannels <= 1) - { - rmax = lmax; - rmin = lmin; - } - - lowestLeft = lmin; - highestLeft = lmax; - lowestRight = rmin; - highestRight = rmax; - } - else - { - int lmax = INT_MIN; - int lmin = INT_MAX; - int rmax = INT_MIN; - int rmin = INT_MAX; - - while (numSamples > 0) - { - const int numToDo = (int) jmin (numSamples, (int64) bufferSize); - read ((int**) tempBuffer, 2, startSampleInFile, numToDo, false); - - numSamples -= numToDo; - - for (int j = numChannels; --j >= 0;) - { - int bufMax = INT_MIN; - int bufMin = INT_MAX; - - const int* const b = tempBuffer[j]; - - for (int i = 0; i < numToDo; ++i) - { - const int samp = b[i]; - - if (samp < bufMin) - bufMin = samp; - - if (samp > bufMax) - bufMax = samp; - } - - if (j == 0) - { - lmax = jmax (lmax, bufMax); - lmin = jmin (lmin, bufMin); - } - else - { - rmax = jmax (rmax, bufMax); - rmin = jmin (rmin, bufMin); - } - } - } - - if (numChannels <= 1) - { - rmax = lmax; - rmin = lmin; - } - - lowestLeft = lmin / (float)INT_MAX; - highestLeft = lmax / (float)INT_MAX; - lowestRight = rmin / (float)INT_MAX; - highestRight = rmax / (float)INT_MAX; - } -} - -int64 AudioFormatReader::searchForLevel (int64 startSample, - int64 numSamplesToSearch, - const double magnitudeRangeMinimum, - const double magnitudeRangeMaximum, - const int minimumConsecutiveSamples) -{ - if (numSamplesToSearch == 0) - return -1; - - const int bufferSize = 4096; - MemoryBlock tempSpace (bufferSize * sizeof (int) * 2 + 64); - - int* tempBuffer[3]; - tempBuffer[0] = (int*) tempSpace.getData(); - tempBuffer[1] = ((int*) tempSpace.getData()) + bufferSize; - tempBuffer[2] = 0; - - int consecutive = 0; - int64 firstMatchPos = -1; - - jassert (magnitudeRangeMaximum > magnitudeRangeMinimum); - - const double doubleMin = jlimit (0.0, (double) INT_MAX, magnitudeRangeMinimum * INT_MAX); - const double doubleMax = jlimit (doubleMin, (double) INT_MAX, magnitudeRangeMaximum * INT_MAX); - const int intMagnitudeRangeMinimum = roundDoubleToInt (doubleMin); - const int intMagnitudeRangeMaximum = roundDoubleToInt (doubleMax); - - while (numSamplesToSearch != 0) - { - const int numThisTime = (int) jmin (abs64 (numSamplesToSearch), (int64) bufferSize); - int64 bufferStart = startSample; - - if (numSamplesToSearch < 0) - bufferStart -= numThisTime; - - if (bufferStart >= (int) lengthInSamples) - break; - - read ((int**) tempBuffer, 2, bufferStart, numThisTime, false); - - int num = numThisTime; - while (--num >= 0) - { - if (numSamplesToSearch < 0) - --startSample; - - bool matches = false; - const int index = (int) (startSample - bufferStart); - - if (usesFloatingPointData) - { - const float sample1 = fabsf (((float*) tempBuffer[0]) [index]); - - if (sample1 >= magnitudeRangeMinimum - && sample1 <= magnitudeRangeMaximum) - { - matches = true; - } - else if (numChannels > 1) - { - const float sample2 = fabsf (((float*) tempBuffer[1]) [index]); - - matches = (sample2 >= magnitudeRangeMinimum - && sample2 <= magnitudeRangeMaximum); - } - } - else - { - const int sample1 = abs (tempBuffer[0] [index]); - - if (sample1 >= intMagnitudeRangeMinimum - && sample1 <= intMagnitudeRangeMaximum) - { - matches = true; - } - else if (numChannels > 1) - { - const int sample2 = abs (tempBuffer[1][index]); - - matches = (sample2 >= intMagnitudeRangeMinimum - && sample2 <= intMagnitudeRangeMaximum); - } - } - - if (matches) - { - if (firstMatchPos < 0) - firstMatchPos = startSample; - - if (++consecutive >= minimumConsecutiveSamples) - { - if (firstMatchPos < 0 || firstMatchPos >= lengthInSamples) - return -1; - - return firstMatchPos; - } - } - else - { - consecutive = 0; - firstMatchPos = -1; - } - - if (numSamplesToSearch > 0) - ++startSample; - } - - if (numSamplesToSearch > 0) - numSamplesToSearch -= numThisTime; - else - numSamplesToSearch += numThisTime; - } - - return -1; -} - -//============================================================================== -AudioFormatWriter::AudioFormatWriter (OutputStream* const out, - const String& formatName_, - const double rate, - const unsigned int numChannels_, - const unsigned int bitsPerSample_) - : sampleRate (rate), - numChannels (numChannels_), - bitsPerSample (bitsPerSample_), - usesFloatingPointData (false), - output (out), - formatName (formatName_) -{ -} - -AudioFormatWriter::~AudioFormatWriter() -{ - delete output; -} - -bool AudioFormatWriter::writeFromAudioReader (AudioFormatReader& reader, - int64 startSample, - int64 numSamplesToRead) -{ - const int bufferSize = 16384; - const int maxChans = 128; - AudioSampleBuffer tempBuffer (reader.numChannels, bufferSize); - int* buffers [maxChans]; - - for (int i = maxChans; --i >= 0;) - buffers[i] = 0; - - if (numSamplesToRead < 0) - numSamplesToRead = reader.lengthInSamples; - - while (numSamplesToRead > 0) - { - const int numToDo = (int) jmin (numSamplesToRead, (int64) bufferSize); - - for (int i = tempBuffer.getNumChannels(); --i >= 0;) - buffers[i] = (int*) tempBuffer.getSampleData (i, 0); - - if (! reader.read (buffers, maxChans, startSample, numToDo, false)) - return false; - - if (reader.usesFloatingPointData != isFloatingPoint()) - { - int** bufferChan = buffers; - - while (*bufferChan != 0) - { - int* b = *bufferChan++; - - if (isFloatingPoint()) - { - // int -> float - const double factor = 1.0 / INT_MAX; - - for (int i = 0; i < numToDo; ++i) - ((float*)b)[i] = (float) (factor * b[i]); - } - else - { - // float -> int - for (int i = 0; i < numToDo; ++i) - { - const double samp = *(const float*) b; - - if (samp <= -1.0) - *b++ = INT_MIN; - else if (samp >= 1.0) - *b++ = INT_MAX; - else - *b++ = roundDoubleToInt (INT_MAX * samp); - } - } - } - } - - if (! write ((const int**) buffers, numToDo)) - return false; - - numSamplesToRead -= numToDo; - startSample += numToDo; - } - - return true; -} - -bool AudioFormatWriter::writeFromAudioSource (AudioSource& source, - int numSamplesToRead, - const int samplesPerBlock) -{ - const int maxChans = 128; - AudioSampleBuffer tempBuffer (getNumChannels(), samplesPerBlock); - int* buffers [maxChans]; - - while (numSamplesToRead > 0) - { - const int numToDo = jmin (numSamplesToRead, samplesPerBlock); - - AudioSourceChannelInfo info; - info.buffer = &tempBuffer; - info.startSample = 0; - info.numSamples = numToDo; - info.clearActiveBufferRegion(); - - source.getNextAudioBlock (info); - - int i; - for (i = maxChans; --i >= 0;) - buffers[i] = 0; - - for (i = tempBuffer.getNumChannels(); --i >= 0;) - buffers[i] = (int*) tempBuffer.getSampleData (i, 0); - - if (! isFloatingPoint()) - { - int** bufferChan = buffers; - - while (*bufferChan != 0) - { - int* b = *bufferChan++; - - // float -> int - for (int j = numToDo; --j >= 0;) - { - const double samp = *(const float*) b; - - if (samp <= -1.0) - *b++ = INT_MIN; - else if (samp >= 1.0) - *b++ = INT_MAX; - else - *b++ = roundDoubleToInt (INT_MAX * samp); - } - } - } - - if (! write ((const int**) buffers, numToDo)) - return false; - - numSamplesToRead -= numToDo; - } - - return true; -} - -//============================================================================== -AudioFormat::AudioFormat (const String& name, - const tchar** const extensions) - : formatName (name), - fileExtensions (extensions) -{ -} - -AudioFormat::~AudioFormat() -{ -} - -//============================================================================== -const String& AudioFormat::getFormatName() const -{ - return formatName; -} - -const StringArray& AudioFormat::getFileExtensions() const -{ - return fileExtensions; -} - -bool AudioFormat::canHandleFile (const File& f) -{ - for (int i = 0; i < fileExtensions.size(); ++i) - if (f.hasFileExtension (fileExtensions[i])) - return true; - - return false; -} - -bool AudioFormat::isCompressed() -{ - return false; -} - -const StringArray AudioFormat::getQualityOptions() -{ - return StringArray(); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.h deleted file mode 100644 index 14c832678e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormat.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOFORMAT_JUCEHEADER__ -#define __JUCE_AUDIOFORMAT_JUCEHEADER__ - -#include "juce_AudioFormatReader.h" -#include "juce_AudioFormatWriter.h" - - -//============================================================================== -/** - Subclasses of AudioFormat are used to read and write different audio - file formats. - - @see AudioFormatReader, AudioFormatWriter, WavAudioFormat, AiffAudioFormat -*/ -class JUCE_API AudioFormat -{ -public: - //============================================================================== - /** Destructor. */ - virtual ~AudioFormat(); - - //============================================================================== - /** Returns the name of this format. - - e.g. "WAV file" or "AIFF file" - */ - const String& getFormatName() const; - - /** Returns all the file extensions that might apply to a file of this format. - - The first item will be the one that's preferred when creating a new file. - - So for a wav file this might just return ".wav"; for an AIFF file it might - return two items, ".aif" and ".aiff" - */ - const StringArray& getFileExtensions() const; - - //============================================================================== - /** Returns true if this the given file can be read by this format. - - Subclasses shouldn't do too much work here, just check the extension or - file type. The base class implementation just checks the file's extension - against one of the ones that was registered in the constructor. - */ - virtual bool canHandleFile (const File& fileToTest); - - /** Returns a set of sample rates that the format can read and write. */ - virtual const Array getPossibleSampleRates() = 0; - - /** Returns a set of bit depths that the format can read and write. */ - virtual const Array getPossibleBitDepths() = 0; - - /** Returns true if the format can do 2-channel audio. */ - virtual bool canDoStereo() = 0; - - /** Returns true if the format can do 1-channel audio. */ - virtual bool canDoMono() = 0; - - /** Returns true if the format uses compressed data. */ - virtual bool isCompressed(); - - /** Returns a list of different qualities that can be used when writing. - - Non-compressed formats will just return an empty array, but for something - like Ogg-Vorbis or MP3, it might return a list of bit-rates, etc. - - When calling createWriterFor(), an index from this array is passed in to - tell the format which option is required. - */ - virtual const StringArray getQualityOptions(); - - //============================================================================== - /** Tries to create an object that can read from a stream containing audio - data in this format. - - The reader object that is returned can be used to read from the stream, and - should then be deleted by the caller. - - @param sourceStream the stream to read from - the AudioFormatReader object - that is returned will delete this stream when it no longer - needs it. - @param deleteStreamIfOpeningFails if no reader can be created, this determines whether this method - should delete the stream object that was passed-in. (If a valid - reader is returned, it will always be in charge of deleting the - stream, so this parameter is ignored) - @see AudioFormatReader - */ - virtual AudioFormatReader* createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails) = 0; - - /** Tries to create an object that can write to a stream with this audio format. - - The writer object that is returned can be used to write to the stream, and - should then be deleted by the caller. - - If the stream can't be created for some reason (e.g. the parameters passed in - here aren't suitable), this will return 0. - - @param streamToWriteTo the stream that the data will go to - this will be - deleted by the AudioFormatWriter object when it's no longer - needed. If no AudioFormatWriter can be created by this method, - the stream will NOT be deleted, so that the caller can re-use it - to try to open a different format, etc - @param sampleRateToUse the sample rate for the file, which must be one of the ones - returned by getPossibleSampleRates() - @param numberOfChannels the number of channels - this must be either 1 or 2, and - the choice will depend on the results of canDoMono() and - canDoStereo() - @param bitsPerSample the bits per sample to use - this must be one of the values - returned by getPossibleBitDepths() - @param metadataValues a set of metadata values that the writer should try to write - to the stream. Exactly what these are depends on the format, - and the subclass doesn't actually have to do anything with - them if it doesn't want to. Have a look at the specific format - implementation classes to see possible values that can be - used - @param qualityOptionIndex the index of one of compression qualities returned by the - getQualityOptions() method. If there aren't any quality options - for this format, just pass 0 in this parameter, as it'll be - ignored - @see AudioFormatWriter - */ - virtual AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, - double sampleRateToUse, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int qualityOptionIndex) = 0; - -protected: - /** Creates an AudioFormat object. - - @param formatName this sets the value that will be returned by getFormatName() - @param fileExtensions a zero-terminated list of file extensions - this is what will - be returned by getFileExtension() - */ - AudioFormat (const String& formatName, - const tchar** const fileExtensions); - -private: - //============================================================================== - String formatName; - StringArray fileExtensions; -}; - - -#endif // __JUCE_AUDIOFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.cpp deleted file mode 100644 index ca957e1e63..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.cpp +++ /dev/null @@ -1,225 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioFormatManager.h" -#include "juce_AiffAudioFormat.h" -#include "juce_WavAudioFormat.h" -#include "juce_FlacAudioFormat.h" -#include "juce_OggVorbisAudioFormat.h" -#include "../../../juce_core/io/files/juce_FileInputStream.h" - - -//============================================================================== -AudioFormatManager::AudioFormatManager() - : knownFormats (4), - defaultFormatIndex (0) -{ -} - -AudioFormatManager::~AudioFormatManager() -{ - clearFormats(); - clearSingletonInstance(); -} - -juce_ImplementSingleton (AudioFormatManager); - - -//============================================================================== -void AudioFormatManager::registerFormat (AudioFormat* newFormat, - const bool makeThisTheDefaultFormat) -{ - jassert (newFormat != 0); - - if (newFormat != 0) - { -#ifdef JUCE_DEBUG - for (int i = getNumKnownFormats(); --i >= 0;) - { - if (getKnownFormat (i)->getFormatName() == newFormat->getFormatName()) - { - jassertfalse // trying to add the same format twice! - } - } -#endif - - if (makeThisTheDefaultFormat) - defaultFormatIndex = knownFormats.size(); - - knownFormats.add (newFormat); - } -} - -void AudioFormatManager::registerBasicFormats() -{ -#if JUCE_MAC - registerFormat (new AiffAudioFormat(), true); - registerFormat (new WavAudioFormat(), false); -#else - registerFormat (new WavAudioFormat(), true); - registerFormat (new AiffAudioFormat(), false); -#endif - -#if JUCE_USE_FLAC - registerFormat (new FlacAudioFormat(), false); -#endif - -#if JUCE_USE_OGGVORBIS - registerFormat (new OggVorbisAudioFormat(), false); -#endif -} - -void AudioFormatManager::clearFormats() -{ - for (int i = getNumKnownFormats(); --i >= 0;) - { - AudioFormat* const af = getKnownFormat(i); - delete af; - } - - knownFormats.clear(); - defaultFormatIndex = 0; -} - -int AudioFormatManager::getNumKnownFormats() const -{ - return knownFormats.size(); -} - -AudioFormat* AudioFormatManager::getKnownFormat (const int index) const -{ - return (AudioFormat*) knownFormats [index]; -} - -AudioFormat* AudioFormatManager::getDefaultFormat() const -{ - return getKnownFormat (defaultFormatIndex); -} - -AudioFormat* AudioFormatManager::findFormatForFileExtension (const String& fileExtension) const -{ - String e (fileExtension); - if (! e.startsWithChar (T('.'))) - e = T(".") + e; - - for (int i = 0; i < getNumKnownFormats(); ++i) - if (getKnownFormat(i)->getFileExtensions().contains (e, true)) - return getKnownFormat(i); - - return 0; -} - -const String AudioFormatManager::getWildcardForAllFormats() const -{ - StringArray allExtensions; - - int i; - for (i = 0; i < getNumKnownFormats(); ++i) - allExtensions.addArray (getKnownFormat (i)->getFileExtensions()); - - allExtensions.trim(); - allExtensions.removeEmptyStrings(); - - String s; - for (i = 0; i < allExtensions.size(); ++i) - { - s << T('*'); - - if (! allExtensions[i].startsWithChar (T('.'))) - s << T('.'); - - s << allExtensions[i]; - - if (i < allExtensions.size() - 1) - s << T(';'); - } - - return s; -} - -//============================================================================== -AudioFormatReader* AudioFormatManager::createReaderFor (const File& file) -{ - // you need to actually register some formats before the manager can - // use them to open a file! - jassert (knownFormats.size() > 0); - - for (int i = 0; i < getNumKnownFormats(); ++i) - { - AudioFormat* const af = getKnownFormat(i); - - if (af->canHandleFile (file)) - { - InputStream* const in = file.createInputStream(); - - if (in != 0) - { - AudioFormatReader* const r = af->createReaderFor (in, true); - - if (r != 0) - return r; - } - } - } - - return 0; -} - -AudioFormatReader* AudioFormatManager::createReaderFor (InputStream* in) -{ - // you need to actually register some formats before the manager can - // use them to open a file! - jassert (knownFormats.size() > 0); - - if (in != 0) - { - const int64 originalStreamPos = in->getPosition(); - - for (int i = 0; i < getNumKnownFormats(); ++i) - { - AudioFormatReader* const r = getKnownFormat(i)->createReaderFor (in, false); - - if (r != 0) - return r; - - in->setPosition (originalStreamPos); - - // the stream that is passed-in must be capable of being repositioned so - // that all the formats can have a go at opening it. - jassert (in->getPosition() == originalStreamPos); - } - - delete in; - } - - return 0; -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.h deleted file mode 100644 index 931537f872..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatManager.h +++ /dev/null @@ -1,144 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOFORMATMANAGER_JUCEHEADER__ -#define __JUCE_AUDIOFORMATMANAGER_JUCEHEADER__ - -#include "juce_AudioFormat.h" -#include "../../../juce_core/basics/juce_Singleton.h" - - -//============================================================================== -/** - A class for keeping a list of available audio formats, and for deciding which - one to use to open a given file. - - You can either use this class as a singleton object, or create instances of it - yourself. Once created, use its registerFormat() method to tell it which - formats it should use. - - @see AudioFormat -*/ -class JUCE_API AudioFormatManager -{ -public: - //============================================================================== - /** Creates an empty format manager. - - Before it'll be any use, you'll need to call registerFormat() with all the - formats you want it to be able to recognise. - */ - AudioFormatManager(); - - /** Destructor. */ - ~AudioFormatManager(); - - juce_DeclareSingleton (AudioFormatManager, false); - - //============================================================================== - /** Adds a format to the manager's list of available file types. - - The object passed-in will be deleted by this object, so don't keep a pointer - to it! - - If makeThisTheDefaultFormat is true, then the getDefaultFormat() method will - return this one when called. - */ - void registerFormat (AudioFormat* newFormat, - const bool makeThisTheDefaultFormat); - - /** Handy method to make it easy to register the formats that come with Juce. - - Currently, this will add WAV and AIFF to the list. - */ - void registerBasicFormats(); - - /** Clears the list of known formats. */ - void clearFormats(); - - /** Returns the number of currently registered file formats. */ - int getNumKnownFormats() const; - - /** Returns one of the registered file formats. */ - AudioFormat* getKnownFormat (const int index) const; - - /** Looks for which of the known formats is listed as being for a given file - extension. - - The extension may have a dot before it, so e.g. ".wav" or "wav" are both ok. - */ - AudioFormat* findFormatForFileExtension (const String& fileExtension) const; - - /** Returns the format which has been set as the default one. - - You can set a format as being the default when it is registered. It's useful - when you want to write to a file, because the best format may change between - platforms, e.g. AIFF is preferred on the Mac, WAV on Windows. - - If none has been set as the default, this method will just return the first - one in the list. - */ - AudioFormat* getDefaultFormat() const; - - /** Returns a set of wildcards for file-matching that contains the extensions for - all known formats. - - E.g. if might return "*.wav;*.aiff" if it just knows about wavs and aiffs. - */ - const String getWildcardForAllFormats() const; - - //============================================================================== - /** Searches through the known formats to try to create a suitable reader for - this file. - - If none of the registered formats can open the file, it'll return 0. If it - returns a reader, it's the caller's responsibility to delete the reader. - */ - AudioFormatReader* createReaderFor (const File& audioFile); - - /** Searches through the known formats to try to create a suitable reader for - this stream. - - The stream object that is passed-in will be deleted by this method or by the - reader that is returned, so the caller should not keep any references to it. - - The stream that is passed-in must be capable of being repositioned so - that all the formats can have a go at opening it. - - If none of the registered formats can open the stream, it'll return 0. If it - returns a reader, it's the caller's responsibility to delete the reader. - */ - AudioFormatReader* createReaderFor (InputStream* audioFileStream); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - VoidArray knownFormats; - int defaultFormatIndex; -}; - - -#endif // __JUCE_AUDIOFORMATMANAGER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatReader.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatReader.h deleted file mode 100644 index 491ca739bb..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatReader.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOFORMATREADER_JUCEHEADER__ -#define __JUCE_AUDIOFORMATREADER_JUCEHEADER__ - -#include "../../../juce_core/io/juce_InputStream.h" -#include "../../../juce_core/text/juce_StringPairArray.h" -class AudioFormat; - - -//============================================================================== -/** - Reads samples from an audio file stream. - - A subclass that reads a specific type of audio format will be created by - an AudioFormat object. - - @see AudioFormat, AudioFormatWriter -*/ -class JUCE_API AudioFormatReader -{ -protected: - //============================================================================== - /** Creates an AudioFormatReader object. - - @param sourceStream the stream to read from - this will be deleted - by this object when it is no longer needed. (Some - specialised readers might not use this parameter and - can leave it as 0). - @param formatName the description that will be returned by the getFormatName() - method - */ - AudioFormatReader (InputStream* const sourceStream, - const String& formatName); - -public: - /** Destructor. */ - virtual ~AudioFormatReader(); - - //============================================================================== - /** Returns a description of what type of format this is. - - E.g. "AIFF" - */ - const String getFormatName() const throw() { return formatName; } - - //============================================================================== - /** Reads samples from the stream. - - @param destSamples an array of buffers into which the sample data for each - channel will be written. - If the format is fixed-point, each channel will be written - as an array of 32-bit signed integers using the full - range -0x80000000 to 0x7fffffff, regardless of the source's - bit-depth. If it is a floating-point format, you should cast - the resulting array to a (float**) to get the values (in the - range -1.0 to 1.0 or beyond) - If the format is stereo, then destSamples[0] is the left channel - data, and destSamples[1] is the right channel. - The numDestChannels parameter indicates how many pointers this array - contains, but some of these pointers can be null if you don't want to - read data for some of the channels - @param numDestChannels the number of array elements in the destChannels array - @param startSampleInSource the position in the audio file or stream at which the samples - should be read, as a number of samples from the start of the - stream. It's ok for this to be beyond the start or end of the - available data - any samples that are out-of-range will be returned - as zeros. - @param numSamplesToRead the number of samples to read. If this is greater than the number - of samples that the file or stream contains. the result will be padded - with zeros - @param fillLeftoverChannelsWithCopies if true, this indicates that if there's no source data available - for some of the channels that you pass in, then they should be filled with - copies of valid source channels. - E.g. if you're reading a mono file and you pass 2 channels to this method, then - if fillLeftoverChannelsWithCopies is true, both destination channels will be filled - with the same data from the file's single channel. If fillLeftoverChannelsWithCopies - was false, then only the first channel would be filled with the file's contents, and - the second would be cleared. If there are many channels, e.g. you try to read 4 channels - from a stereo file, then the last 3 would all end up with copies of the same data. - @returns true if the operation succeeded, false if there was an error. Note - that reading sections of data beyond the extent of the stream isn't an - error - the reader should just return zeros for these regions - @see readMaxLevels - */ - bool read (int** destSamples, - int numDestChannels, - int64 startSampleInSource, - int numSamplesToRead, - const bool fillLeftoverChannelsWithCopies); - - /** Finds the highest and lowest sample levels from a section of the audio stream. - - This will read a block of samples from the stream, and measure the - highest and lowest sample levels from the channels in that section, returning - these as normalised floating-point levels. - - @param startSample the offset into the audio stream to start reading from. It's - ok for this to be beyond the start or end of the stream. - @param numSamples how many samples to read - @param lowestLeft on return, this is the lowest absolute sample from the left channel - @param highestLeft on return, this is the highest absolute sample from the left channel - @param lowestRight on return, this is the lowest absolute sample from the right - channel (if there is one) - @param highestRight on return, this is the highest absolute sample from the right - channel (if there is one) - @see read - */ - virtual void readMaxLevels (int64 startSample, - int64 numSamples, - float& lowestLeft, - float& highestLeft, - float& lowestRight, - float& highestRight); - - /** Scans the source looking for a sample whose magnitude is in a specified range. - - This will read from the source, either forwards or backwards between two sample - positions, until it finds a sample whose magnitude lies between two specified levels. - - If it finds a suitable sample, it returns its position; if not, it will return -1. - - There's also a minimumConsecutiveSamples setting to help avoid spikes or zero-crossing - points when you're searching for a continuous range of samples - - @param startSample the first sample to look at - @param numSamplesToSearch the number of samples to scan. If this value is negative, - the search will go backwards - @param magnitudeRangeMinimum the lowest magnitude (inclusive) that is considered a hit, from 0 to 1.0 - @param magnitudeRangeMaximum the highest magnitude (inclusive) that is considered a hit, from 0 to 1.0 - @param minimumConsecutiveSamples if this is > 0, the method will only look for a sequence - of this many consecutive samples, all of which lie - within the target range. When it finds such a sequence, - it returns the position of the first in-range sample - it found (i.e. the earliest one if scanning forwards, the - latest one if scanning backwards) - */ - int64 searchForLevel (int64 startSample, - int64 numSamplesToSearch, - const double magnitudeRangeMinimum, - const double magnitudeRangeMaximum, - const int minimumConsecutiveSamples); - - //============================================================================== - /** The sample-rate of the stream. */ - double sampleRate; - - /** The number of bits per sample, e.g. 16, 24, 32. */ - unsigned int bitsPerSample; - - /** The total number of samples in the audio stream. */ - int64 lengthInSamples; - - /** The total number of channels in the audio stream. */ - unsigned int numChannels; - - /** Indicates whether the data is floating-point or fixed. */ - bool usesFloatingPointData; - - /** A set of metadata values that the reader has pulled out of the stream. - - Exactly what these values are depends on the format, so you can - check out the format implementation code to see what kind of stuff - they understand. - */ - StringPairArray metadataValues; - - /** The input stream, for use by subclasses. */ - InputStream* input; - - - //============================================================================== - /** Subclasses must implement this method to perform the low-level read operation. - - Callers should use read() instead of calling this directly. - - @param destSamples the array of destination buffers to fill. Some of these - pointers may be null - @param numDestChannels the number of items in the destSamples array. This - value is guaranteed not to be greater than the number of - channels that this reader object contains - @param startOffsetInDestBuffer the number of samples from the start of the - dest data at which to begin writing - @param startSampleInFile the number of samples into the source data at which - to begin reading. This value is guaranteed to be >= 0. - @param numSamples the number of samples to read - */ - virtual bool readSamples (int** destSamples, - int numDestChannels, - int startOffsetInDestBuffer, - int64 startSampleInFile, - int numSamples) = 0; - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - String formatName; - - AudioFormatReader (const AudioFormatReader&); - const AudioFormatReader& operator= (const AudioFormatReader&); -}; - - -#endif // __JUCE_AUDIOFORMATREADER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatWriter.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatWriter.h deleted file mode 100644 index 9ce028f153..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioFormatWriter.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ -#define __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ - -#include "../../../juce_core/io/files/juce_FileOutputStream.h" -#include "juce_AudioFormatReader.h" -#include "../audio_sources/juce_AudioSource.h" - - -//============================================================================== -/** - Writes samples to an audio file stream. - - A subclass that writes a specific type of audio format will be created by - an AudioFormat object. - - After creating one of these with the AudioFormat::createWriterFor() method - you can call its write() method to store the samples, and then delete it. - - @see AudioFormat, AudioFormatReader -*/ -class JUCE_API AudioFormatWriter -{ -protected: - //============================================================================== - /** Creates an AudioFormatWriter object. - - @param destStream the stream to write to - this will be deleted - by this object when it is no longer needed - @param formatName the description that will be returned by the getFormatName() - method - @param sampleRate the sample rate to use - the base class just stores - this value, it doesn't do anything with it - @param numberOfChannels the number of channels to write - the base class just stores - this value, it doesn't do anything with it - @param bitsPerSample the bit depth of the stream - the base class just stores - this value, it doesn't do anything with it - */ - AudioFormatWriter (OutputStream* const destStream, - const String& formatName, - const double sampleRate, - const unsigned int numberOfChannels, - const unsigned int bitsPerSample); - -public: - /** Destructor. */ - virtual ~AudioFormatWriter(); - - //============================================================================== - /** Returns a description of what type of format this is. - - E.g. "AIFF file" - */ - const String getFormatName() const throw() { return formatName; } - - //============================================================================== - /** Writes a set of samples to the audio stream. - - Note that if you're trying to write the contents of an AudioSampleBuffer, you - can use AudioSampleBuffer::writeToAudioWriter(). - - @param samplesToWrite an array of arrays containing the sample data for - each channel to write. This is a zero-terminated - array of arrays, and can contain a different number - of channels than the actual stream uses, and the - writer should do its best to cope with this. - If the format is fixed-point, each channel will be formatted - as an array of signed integers using the full 32-bit - range -0x80000000 to 0x7fffffff, regardless of the source's - bit-depth. If it is a floating-point format, you should treat - the arrays as arrays of floats, and just cast it to an (int**) - to pass it into the method. - @param numSamples the number of samples to write - */ - virtual bool write (const int** samplesToWrite, - int numSamples) = 0; - - //============================================================================== - /** Reads a section of samples from an AudioFormatReader, and writes these to - the output. - - This will take care of any floating-point conversion that's required to convert - between the two formats. It won't deal with sample-rate conversion, though. - - If numSamplesToRead < 0, it will write the entire length of the reader. - - @returns false if it can't read or write properly during the operation - */ - bool writeFromAudioReader (AudioFormatReader& reader, - int64 startSample, - int64 numSamplesToRead); - - /** Reads some samples from an AudioSource, and writes these to the output. - - The source must already have been initialised with the AudioSource::prepareToPlay() method - - @param source the source to read from - @param numSamplesToRead total number of samples to read and write - @param samplesPerBlock the maximum number of samples to fetch from the source - @returns false if it can't read or write properly during the operation - */ - bool writeFromAudioSource (AudioSource& source, - int numSamplesToRead, - const int samplesPerBlock = 2048); - - //============================================================================== - /** Returns the sample rate being used. */ - double getSampleRate() const throw() { return sampleRate; } - - /** Returns the number of channels being written. */ - int getNumChannels() const throw() { return numChannels; } - - /** Returns the bit-depth of the data being written. */ - int getBitsPerSample() const throw() { return bitsPerSample; } - - /** Returns true if it's a floating-point format, false if it's fixed-point. */ - bool isFloatingPoint() const throw() { return usesFloatingPointData; } - - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - /** The sample rate of the stream. */ - double sampleRate; - - /** The number of channels being written to the stream. */ - unsigned int numChannels; - - /** The bit depth of the file. */ - unsigned int bitsPerSample; - - /** True if it's a floating-point format, false if it's fixed-point. */ - bool usesFloatingPointData; - - /** The output stream for Use by subclasses. */ - OutputStream* output; - -private: - String formatName; -}; - - -#endif // __JUCE_AUDIOFORMATWRITER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.cpp deleted file mode 100644 index 5aa747e356..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioSubsectionReader.h" - - -//============================================================================== -AudioSubsectionReader::AudioSubsectionReader (AudioFormatReader* const source_, - const int64 startSample_, - const int64 length_, - const bool deleteSourceWhenDeleted_) - : AudioFormatReader (0, source_->getFormatName()), - source (source_), - startSample (startSample_), - deleteSourceWhenDeleted (deleteSourceWhenDeleted_) -{ - length = jmin (jmax ((int64) 0, source->lengthInSamples - startSample), length_); - - sampleRate = source->sampleRate; - bitsPerSample = source->bitsPerSample; - lengthInSamples = length; - numChannels = source->numChannels; - usesFloatingPointData = source->usesFloatingPointData; -} - -AudioSubsectionReader::~AudioSubsectionReader() -{ - if (deleteSourceWhenDeleted) - delete source; -} - -//============================================================================== -bool AudioSubsectionReader::readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) -{ - if (startSampleInFile + numSamples > length) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != 0) - zeromem (destSamples[i], sizeof (int) * numSamples); - - numSamples = jmin (numSamples, (int) (length - startSampleInFile)); - - if (numSamples <= 0) - return true; - } - - return source->readSamples (destSamples, numDestChannels, startOffsetInDestBuffer, - startSampleInFile + startSample, numSamples); -} - -void AudioSubsectionReader::readMaxLevels (int64 startSampleInFile, - int64 numSamples, - float& lowestLeft, - float& highestLeft, - float& lowestRight, - float& highestRight) -{ - startSampleInFile = jmax ((int64) 0, startSampleInFile); - numSamples = jmax ((int64) 0, jmin (numSamples, length - startSampleInFile)); - - source->readMaxLevels (startSampleInFile + startSample, - numSamples, - lowestLeft, - highestLeft, - lowestRight, - highestRight); -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.h deleted file mode 100644 index 60642bca0b..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioSubsectionReader.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ -#define __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ - -#include "juce_AudioFormatReader.h" - - -//============================================================================== -/** - This class is used to wrap an AudioFormatReader and only read from a - subsection of the file. - - So if you have a reader which can read a 1000 sample file, you could wrap it - in one of these to only access, e.g. samples 100 to 200, and any samples - outside that will come back as 0. Accessing sample 0 from this reader will - actually read the first sample from the other's subsection, which might - be at a non-zero position. - - @see AudioFormatReader -*/ -class JUCE_API AudioSubsectionReader : public AudioFormatReader -{ -public: - //============================================================================== - /** Creates a AudioSubsectionReader for a given data source. - - @param sourceReader the source reader from which we'll be taking data - @param subsectionStartSample the sample within the source reader which will be - mapped onto sample 0 for this reader. - @param subsectionLength the number of samples from the source that will - make up the subsection. If this reader is asked for - any samples beyond this region, it will return zero. - @param deleteSourceWhenDeleted if true, the sourceReader object will be deleted when - this object is deleted. - */ - AudioSubsectionReader (AudioFormatReader* const sourceReader, - const int64 subsectionStartSample, - const int64 subsectionLength, - const bool deleteSourceWhenDeleted); - - /** Destructor. */ - ~AudioSubsectionReader(); - - - //============================================================================== - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples); - - void readMaxLevels (int64 startSample, - int64 numSamples, - float& lowestLeft, - float& highestLeft, - float& lowestRight, - float& highestRight); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioFormatReader* const source; - int64 startSample, length; - const bool deleteSourceWhenDeleted; - - AudioSubsectionReader (const AudioSubsectionReader&); - const AudioSubsectionReader& operator= (const AudioSubsectionReader&); -}; - -#endif // __JUCE_AUDIOSUBSECTIONREADER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.cpp deleted file mode 100644 index e4b753aac5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.cpp +++ /dev/null @@ -1,535 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioThumbnail.h" -#include "juce_AudioThumbnailCache.h" - -const int timeBeforeDeletingReader = 2000; - - -//============================================================================== -struct AudioThumbnailDataFormat -{ - char thumbnailMagic[4]; - int samplesPerThumbSample; - int64 totalSamples; // source samples - int64 numFinishedSamples; // source samples - int numThumbnailSamples; - int numChannels; - int sampleRate; - char future[16]; - char data[1]; -}; - -#if JUCE_BIG_ENDIAN - static void swap (int& n) { n = (int) swapByteOrder ((uint32) n); } - static void swap (int64& n) { n = (int64) swapByteOrder ((uint64) n); } -#endif - -static void swapEndiannessIfNeeded (AudioThumbnailDataFormat* const d) -{ - (void) d; - -#if JUCE_BIG_ENDIAN - swap (d->samplesPerThumbSample); - swap (d->totalSamples); - swap (d->numFinishedSamples); - swap (d->numThumbnailSamples); - swap (d->numChannels); - swap (d->sampleRate); -#endif -} - -//============================================================================== -AudioThumbnail::AudioThumbnail (const int orginalSamplesPerThumbnailSample_, - AudioFormatManager& formatManagerToUse_, - AudioThumbnailCache& cacheToUse) - : formatManagerToUse (formatManagerToUse_), - cache (cacheToUse), - source (0), - reader (0), - orginalSamplesPerThumbnailSample (orginalSamplesPerThumbnailSample_) -{ - clear(); -} - -AudioThumbnail::~AudioThumbnail() -{ - cache.removeThumbnail (this); - - const ScopedLock sl (readerLock); - deleteAndZero (reader); - - delete source; -} - -void AudioThumbnail::setSource (InputSource* const newSource) -{ - cache.removeThumbnail (this); - timerCallback(); // stops the timer and deletes the reader - - delete source; - source = newSource; - - clear(); - - if (newSource != 0 - && ! (cache.loadThumb (*this, newSource->hashCode()) - && isFullyLoaded())) - { - { - const ScopedLock sl (readerLock); - reader = createReader(); - } - - if (reader != 0) - { - initialiseFromAudioFile (*reader); - cache.addThumbnail (this); - } - } - - sendChangeMessage (this); -} - -bool AudioThumbnail::useTimeSlice() -{ - const ScopedLock sl (readerLock); - - if (isFullyLoaded()) - { - if (reader != 0) - startTimer (timeBeforeDeletingReader); - - cache.removeThumbnail (this); - return false; - } - - if (reader == 0) - reader = createReader(); - - if (reader != 0) - { - readNextBlockFromAudioFile (*reader); - stopTimer(); - - sendChangeMessage (this); - - const bool justFinished = isFullyLoaded(); - - if (justFinished) - cache.storeThumb (*this, source->hashCode()); - - return ! justFinished; - } - - return false; -} - -AudioFormatReader* AudioThumbnail::createReader() const -{ - if (source != 0) - { - InputStream* const audioFileStream = source->createInputStream(); - - if (audioFileStream != 0) - return formatManagerToUse.createReaderFor (audioFileStream); - } - - return 0; -} - -void AudioThumbnail::timerCallback() -{ - stopTimer(); - - const ScopedLock sl (readerLock); - deleteAndZero (reader); -} - -void AudioThumbnail::clear() -{ - data.setSize (sizeof (AudioThumbnailDataFormat) + 3); - - AudioThumbnailDataFormat* const d = (AudioThumbnailDataFormat*) data.getData(); - - d->thumbnailMagic[0] = 'j'; - d->thumbnailMagic[1] = 'a'; - d->thumbnailMagic[2] = 't'; - d->thumbnailMagic[3] = 'm'; - - d->samplesPerThumbSample = orginalSamplesPerThumbnailSample; - d->totalSamples = 0; - d->numFinishedSamples = 0; - d->numThumbnailSamples = 0; - d->numChannels = 0; - d->sampleRate = 0; - - numSamplesCached = 0; - cacheNeedsRefilling = true; -} - -void AudioThumbnail::loadFrom (InputStream& input) -{ - data.setSize (0); - input.readIntoMemoryBlock (data); - - AudioThumbnailDataFormat* const d = (AudioThumbnailDataFormat*) data.getData(); - swapEndiannessIfNeeded (d); - - if (! (d->thumbnailMagic[0] == 'j' - && d->thumbnailMagic[1] == 'a' - && d->thumbnailMagic[2] == 't' - && d->thumbnailMagic[3] == 'm')) - { - clear(); - } - - numSamplesCached = 0; - cacheNeedsRefilling = true; -} - -void AudioThumbnail::saveTo (OutputStream& output) const -{ - AudioThumbnailDataFormat* const d = (AudioThumbnailDataFormat*) data.getData(); - swapEndiannessIfNeeded (d); - output.write (data.getData(), data.getSize()); - swapEndiannessIfNeeded (d); -} - -bool AudioThumbnail::initialiseFromAudioFile (AudioFormatReader& reader) -{ - AudioThumbnailDataFormat* d = (AudioThumbnailDataFormat*) data.getData(); - - d->totalSamples = reader.lengthInSamples; - d->numChannels = jmin (2, reader.numChannels); - d->numFinishedSamples = 0; - d->sampleRate = roundDoubleToInt (reader.sampleRate); - d->numThumbnailSamples = (int) (d->totalSamples / d->samplesPerThumbSample) + 1; - - data.setSize (sizeof (AudioThumbnailDataFormat) + 3 + d->numThumbnailSamples * d->numChannels * 2); - - d = (AudioThumbnailDataFormat*) data.getData(); - zeromem (&(d->data[0]), d->numThumbnailSamples * d->numChannels * 2); - - return d->totalSamples > 0; -} - -bool AudioThumbnail::readNextBlockFromAudioFile (AudioFormatReader& reader) -{ - AudioThumbnailDataFormat* const d = (AudioThumbnailDataFormat*) data.getData(); - - if (d->numFinishedSamples < d->totalSamples) - { - const int numToDo = (int) jmin ((int64) 65536, d->totalSamples - d->numFinishedSamples); - - generateSection (reader, - d->numFinishedSamples, - numToDo); - - d->numFinishedSamples += numToDo; - } - - cacheNeedsRefilling = true; - return (d->numFinishedSamples < d->totalSamples); -} - -int AudioThumbnail::getNumChannels() const throw() -{ - const AudioThumbnailDataFormat* const d = (const AudioThumbnailDataFormat*) data.getData(); - jassert (d != 0); - - return d->numChannels; -} - -double AudioThumbnail::getTotalLength() const throw() -{ - const AudioThumbnailDataFormat* const d = (const AudioThumbnailDataFormat*) data.getData(); - jassert (d != 0); - - if (d->sampleRate > 0) - return d->totalSamples / (double)d->sampleRate; - else - return 0.0; -} - -void AudioThumbnail::generateSection (AudioFormatReader& reader, - int64 startSample, - int numSamples) -{ - AudioThumbnailDataFormat* const d = (AudioThumbnailDataFormat*) data.getData(); - jassert (d != 0); - - int firstDataPos = (int) (startSample / d->samplesPerThumbSample); - int lastDataPos = (int) ((startSample + numSamples) / d->samplesPerThumbSample); - - char* l = getChannelData (0); - char* r = getChannelData (1); - - for (int i = firstDataPos; i < lastDataPos; ++i) - { - const int sourceStart = i * d->samplesPerThumbSample; - const int sourceEnd = sourceStart + d->samplesPerThumbSample; - - float lowestLeft, highestLeft, lowestRight, highestRight; - - reader.readMaxLevels (sourceStart, - sourceEnd - sourceStart, - lowestLeft, - highestLeft, - lowestRight, - highestRight); - - int n = i * 2; - - if (r != 0) - { - l [n] = (char) jlimit (-128.0f, 127.0f, lowestLeft * 127.0f); - r [n++] = (char) jlimit (-128.0f, 127.0f, lowestRight * 127.0f); - l [n] = (char) jlimit (-128.0f, 127.0f, highestLeft * 127.0f); - r [n++] = (char) jlimit (-128.0f, 127.0f, highestRight * 127.0f); - } - else - { - l [n++] = (char) jlimit (-128.0f, 127.0f, lowestLeft * 127.0f); - l [n++] = (char) jlimit (-128.0f, 127.0f, highestLeft * 127.0f); - } - } -} - -char* AudioThumbnail::getChannelData (int channel) const -{ - AudioThumbnailDataFormat* const d = (AudioThumbnailDataFormat*) data.getData(); - jassert (d != 0); - - if (channel >= 0 && channel < d->numChannels) - return d->data + (channel * 2 * d->numThumbnailSamples); - - return 0; -} - -bool AudioThumbnail::isFullyLoaded() const throw() -{ - const AudioThumbnailDataFormat* const d = (const AudioThumbnailDataFormat*) data.getData(); - jassert (d != 0); - - return d->numFinishedSamples >= d->totalSamples; -} - -void AudioThumbnail::refillCache (const int numSamples, - double startTime, - const double timePerPixel) -{ - const AudioThumbnailDataFormat* const d = (const AudioThumbnailDataFormat*) data.getData(); - jassert (d != 0); - - if (numSamples <= 0 - || timePerPixel <= 0.0 - || d->sampleRate <= 0) - { - numSamplesCached = 0; - cacheNeedsRefilling = true; - return; - } - - if (numSamples == numSamplesCached - && numChannelsCached == d->numChannels - && startTime == cachedStart - && timePerPixel == cachedTimePerPixel - && ! cacheNeedsRefilling) - { - return; - } - - numSamplesCached = numSamples; - numChannelsCached = d->numChannels; - cachedStart = startTime; - cachedTimePerPixel = timePerPixel; - - cachedLevels.ensureSize (2 * numChannelsCached * numSamples); - - const bool needExtraDetail = (timePerPixel * d->sampleRate <= d->samplesPerThumbSample); - - const ScopedLock sl (readerLock); - - cacheNeedsRefilling = false; - - if (needExtraDetail && reader == 0) - reader = createReader(); - - if (reader != 0 && timePerPixel * d->sampleRate <= d->samplesPerThumbSample) - { - startTimer (timeBeforeDeletingReader); - - char* cacheData = (char*) cachedLevels.getData(); - int sample = roundDoubleToInt (startTime * d->sampleRate); - - for (int i = numSamples; --i >= 0;) - { - const int nextSample = roundDoubleToInt ((startTime + timePerPixel) * d->sampleRate); - - if (sample >= 0) - { - if (sample >= reader->lengthInSamples) - break; - - float lmin, lmax, rmin, rmax; - - reader->readMaxLevels (sample, - jmax (1, nextSample - sample), - lmin, lmax, rmin, rmax); - - cacheData[0] = (char) jlimit (-128, 127, roundFloatToInt (lmin * 127.0f)); - cacheData[1] = (char) jlimit (-128, 127, roundFloatToInt (lmax * 127.0f)); - - if (numChannelsCached > 1) - { - cacheData[2] = (char) jlimit (-128, 127, roundFloatToInt (rmin * 127.0f)); - cacheData[3] = (char) jlimit (-128, 127, roundFloatToInt (rmax * 127.0f)); - } - - cacheData += 2 * numChannelsCached; - } - - startTime += timePerPixel; - sample = nextSample; - } - } - else - { - for (int channelNum = 0; channelNum < numChannelsCached; ++channelNum) - { - char* const data = getChannelData (channelNum); - char* cacheData = ((char*) cachedLevels.getData()) + channelNum * 2; - - const double timeToThumbSampleFactor = d->sampleRate / (double) d->samplesPerThumbSample; - - startTime = cachedStart; - int sample = roundDoubleToInt (startTime * timeToThumbSampleFactor); - const int numFinished = (int) (d->numFinishedSamples / d->samplesPerThumbSample); - - for (int i = numSamples; --i >= 0;) - { - const int nextSample = roundDoubleToInt ((startTime + timePerPixel) * timeToThumbSampleFactor); - - if (sample >= 0 && data != 0) - { - char mx = -128; - char mn = 127; - - while (sample <= nextSample) - { - if (sample >= numFinished) - break; - - const int n = sample << 1; - const char sampMin = data [n]; - const char sampMax = data [n + 1]; - - if (sampMin < mn) - mn = sampMin; - - if (sampMax > mx) - mx = sampMax; - - ++sample; - } - - if (mn <= mx) - { - cacheData[0] = mn; - cacheData[1] = mx; - } - else - { - cacheData[0] = 1; - cacheData[1] = 0; - } - } - else - { - cacheData[0] = 1; - cacheData[1] = 0; - } - - cacheData += numChannelsCached * 2; - startTime += timePerPixel; - sample = nextSample; - } - } - } -} - -void AudioThumbnail::drawChannel (Graphics& g, - int x, int y, int w, int h, - double startTime, - double endTime, - int channelNum, - const float verticalZoomFactor) -{ - refillCache (w, startTime, (endTime - startTime) / w); - - if (numSamplesCached >= w - && channelNum >= 0 - && channelNum < numChannelsCached) - { - const float topY = (float) y; - const float bottomY = topY + h; - const float midY = topY + h * 0.5f; - const float vscale = verticalZoomFactor * h / 256.0f; - - const Rectangle clip (g.getClipBounds()); - const int skipLeft = jlimit (0, w, clip.getX() - x); - w -= skipLeft; - x += skipLeft; - - const char* cacheData = ((const char*) cachedLevels.getData()) - + (channelNum << 1) - + skipLeft * (numChannelsCached << 1); - - while (--w >= 0) - { - const char mn = cacheData[0]; - const char mx = cacheData[1]; - cacheData += numChannelsCached << 1; - - if (mn <= mx) // if the wrong way round, signifies that the sample's not yet known - g.drawLine ((float) x, jmax (midY - mx * vscale - 0.3f, topY), - (float) x, jmin (midY - mn * vscale + 0.3f, bottomY)); - - ++x; - - if (x >= clip.getRight()) - break; - } - } -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.h deleted file mode 100644 index 882a56a060..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnail.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ -#define __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ - -#include "../../../juce_core/threads/juce_TimeSliceThread.h" -#include "../../../juce_core/io/streams/juce_InputSource.h" -#include "../../../juce_core/io/juce_OutputStream.h" -#include "../../events/juce_ChangeBroadcaster.h" -#include "../../events/juce_Timer.h" -#include "../../gui/graphics/contexts/juce_Graphics.h" -#include "juce_AudioFormatReader.h" -#include "juce_AudioFormatManager.h" - -class AudioThumbnailCache; - - -//============================================================================== -/** - Makes it easy to quickly draw scaled views of the waveform shape of an - audio file. - - To use this class, just create an AudioThumbNail class for the file you want - to draw, call setSource to tell it which file or resource to use, then call - drawChannel() to draw it. - - The class will asynchronously scan the wavefile to create its scaled-down view, - so you should make your UI repaint itself as this data comes in. To do this, the - AudioThumbnail is a ChangeBroadcaster, and will broadcast a message when its - listeners should repaint themselves. - - The thumbnail stores an internal low-res version of the wave data, and this can - be loaded and saved to avoid having to scan the file again. - - @see AudioThumbnailCache -*/ -class JUCE_API AudioThumbnail : public ChangeBroadcaster, - public TimeSliceClient, - private Timer -{ -public: - //============================================================================== - /** Creates an audio thumbnail. - - @param sourceSamplesPerThumbnailSample when creating a stored, low-res version - of the audio data, this is the scale at which it should be done - @param formatManagerToUse the audio format manager that is used to open the file - @param cacheToUse an instance of an AudioThumbnailCache - this provides a background - thread and storage that is used to by the thumbnail, and the cache - object can be shared between multiple thumbnails - */ - AudioThumbnail (const int sourceSamplesPerThumbnailSample, - AudioFormatManager& formatManagerToUse, - AudioThumbnailCache& cacheToUse); - - /** Destructor. */ - ~AudioThumbnail(); - - //============================================================================== - /** Specifies the file or stream that contains the audio file. - - For a file, just call - @code - setSource (new FileInputSource (file)) - @endcode - - You can pass a zero in here to clear the thumbnail. - - The source that is passed in will be deleted by this object when it is no - longer needed - */ - void setSource (InputSource* const newSource); - - /** Reloads the low res thumbnail data from an input stream. - - The thumb will automatically attempt to reload itself from its - AudioThumbnailCache. - */ - void loadFrom (InputStream& input); - - /** Saves the low res thumbnail data to an output stream. - - The thumb will automatically attempt to save itself to its - AudioThumbnailCache after it finishes scanning the wave file. - */ - void saveTo (OutputStream& output) const; - - //============================================================================== - /** Returns the number of channels in the file. - */ - int getNumChannels() const throw(); - - /** Returns the length of the audio file. - */ - double getTotalLength() const throw(); - - /** Renders the waveform shape for a channel. - - The waveform will be drawn within the specified rectangle, where startTime - and endTime specify the times within the audio file that should be positioned - at the left and right edges of the rectangle. - - The waveform will be scaled vertically so that a full-volume sample will fill - the rectangle vertically, but you can also specify an extra vertical scale factor - with the verticalZoomFactor parameter. - */ - void drawChannel (Graphics& g, - int x, int y, int w, int h, - double startTime, - double endTime, - int channelNum, - const float verticalZoomFactor); - - /** Returns true if the low res preview is fully generated. - */ - bool isFullyLoaded() const throw(); - - //============================================================================== - /** @internal */ - bool useTimeSlice(); - /** @internal */ - void timerCallback(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioFormatManager& formatManagerToUse; - AudioThumbnailCache& cache; - InputSource* source; - - CriticalSection readerLock; - AudioFormatReader* reader; - - MemoryBlock data, cachedLevels; - int orginalSamplesPerThumbnailSample; - - int numChannelsCached, numSamplesCached; - double cachedStart, cachedTimePerPixel; - bool cacheNeedsRefilling; - - void clear(); - - AudioFormatReader* createReader() const; - - void generateSection (AudioFormatReader& reader, - int64 startSample, - int numSamples); - - char* getChannelData (int channel) const; - - void refillCache (const int numSamples, - double startTime, - const double timePerPixel); - - friend class AudioThumbnailCache; - - // true if it needs more callbacks from the readNextBlockFromAudioFile() method - bool initialiseFromAudioFile (AudioFormatReader& reader); - - // returns true if more needs to be read - bool readNextBlockFromAudioFile (AudioFormatReader& reader); -}; - - -#endif // __JUCE_AUDIOTHUMBNAIL_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.cpp b/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.cpp deleted file mode 100644 index 5ec176d2c5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioThumbnailCache.h" -#include "../../../juce_core/io/streams/juce_MemoryInputStream.h" -#include "../../../juce_core/io/streams/juce_MemoryOutputStream.h" - - -//============================================================================== -struct ThumbnailCacheEntry -{ - int64 hash; - uint32 lastUsed; - MemoryBlock data; - - juce_UseDebuggingNewOperator -}; - -//============================================================================== -AudioThumbnailCache::AudioThumbnailCache (const int maxNumThumbsToStore_) - : TimeSliceThread (T("thumb cache")), - maxNumThumbsToStore (maxNumThumbsToStore_) -{ - startThread (2); -} - -AudioThumbnailCache::~AudioThumbnailCache() -{ -} - -bool AudioThumbnailCache::loadThumb (AudioThumbnail& thumb, const int64 hashCode) -{ - for (int i = thumbs.size(); --i >= 0;) - { - if (thumbs[i]->hash == hashCode) - { - MemoryInputStream in ((const char*) thumbs[i]->data.getData(), - thumbs[i]->data.getSize(), - false); - - thumb.loadFrom (in); - - thumbs[i]->lastUsed = Time::getMillisecondCounter(); - return true; - } - } - - return false; -} - -void AudioThumbnailCache::storeThumb (const AudioThumbnail& thumb, - const int64 hashCode) -{ - MemoryOutputStream out; - thumb.saveTo (out); - - ThumbnailCacheEntry* te = 0; - - for (int i = thumbs.size(); --i >= 0;) - { - if (thumbs[i]->hash == hashCode) - { - te = thumbs[i]; - break; - } - } - - if (te == 0) - { - te = new ThumbnailCacheEntry(); - te->hash = hashCode; - - if (thumbs.size() < maxNumThumbsToStore) - { - thumbs.add (te); - } - else - { - int oldest = 0; - unsigned int oldestTime = Time::getMillisecondCounter() + 1; - - int i; - for (i = thumbs.size(); --i >= 0;) - if (thumbs[i]->lastUsed < oldestTime) - oldest = i; - - thumbs.set (i, te); - } - } - - te->lastUsed = Time::getMillisecondCounter(); - te->data.setSize (0); - te->data.append (out.getData(), out.getDataSize()); -} - -void AudioThumbnailCache::clear() -{ - thumbs.clear(); -} - -//============================================================================== -void AudioThumbnailCache::addThumbnail (AudioThumbnail* const thumb) -{ - addTimeSliceClient (thumb); -} - -void AudioThumbnailCache::removeThumbnail (AudioThumbnail* const thumb) -{ - removeTimeSliceClient (thumb); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.h b/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.h deleted file mode 100644 index 4d0c72b84f..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_AudioThumbnailCache.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ -#define __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ - -#include "juce_AudioThumbnail.h" -struct ThumbnailCacheEntry; - - -//============================================================================== -/** - An instance of this class is used to manage multiple AudioThumbnail objects. - - The cache runs a single background thread that is shared by all the thumbnails - that need it, and it maintains a set of low-res previews in memory, to avoid - having to re-scan audio files too often. - - @see AudioThumbnail -*/ -class JUCE_API AudioThumbnailCache : public TimeSliceThread -{ -public: - //============================================================================== - /** Creates a cache object. - - The maxNumThumbsToStore parameter lets you specify how many previews should - be kept in memory at once. - */ - AudioThumbnailCache (const int maxNumThumbsToStore); - - /** Destructor. */ - ~AudioThumbnailCache(); - - //============================================================================== - /** Clears out any stored thumbnails. - */ - void clear(); - - /** Reloads the specified thumb if this cache contains the appropriate stored - data. - - This is called automatically by the AudioThumbnail class, so you shouldn't - normally need to call it directly. - */ - bool loadThumb (AudioThumbnail& thumb, const int64 hashCode); - - /** Stores the cachable data from the specified thumb in this cache. - - This is called automatically by the AudioThumbnail class, so you shouldn't - normally need to call it directly. - */ - void storeThumb (const AudioThumbnail& thumb, const int64 hashCode); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - OwnedArray thumbs; - int maxNumThumbsToStore; - - friend class AudioThumbnail; - void addThumbnail (AudioThumbnail* const thumb); - void removeThumbnail (AudioThumbnail* const thumb); -}; - - -#endif // __JUCE_AUDIOTHUMBNAILCACHE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.cpp b/src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.cpp deleted file mode 100644 index 051731c8be..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.cpp +++ /dev/null @@ -1,554 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../../juce_Config.h" -#ifdef _MSC_VER - #include -#endif - -#if JUCE_USE_FLAC - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -#ifdef _MSC_VER - #pragma warning (disable : 4505) - #pragma warning (push) -#endif - -namespace FlacNamespace -{ -#if JUCE_INCLUDE_FLAC_CODE - #define FLAC__NO_DLL 1 - - #if ! defined (SIZE_MAX) - #define SIZE_MAX 0xffffffff - #endif - - #define __STDC_LIMIT_MACROS 1 - #include "flac/all.h" - #include "flac/libFLAC/bitmath.c" - #include "flac/libFLAC/bitreader.c" - #include "flac/libFLAC/bitwriter.c" - #include "flac/libFLAC/cpu.c" - #include "flac/libFLAC/crc.c" - #include "flac/libFLAC/fixed.c" - #include "flac/libFLAC/float.c" - #include "flac/libFLAC/format.c" - #include "flac/libFLAC/lpc_flac.c" - #include "flac/libFLAC/md5.c" - #include "flac/libFLAC/memory.c" - #include "flac/libFLAC/stream_decoder.c" - #include "flac/libFLAC/stream_encoder.c" - #include "flac/libFLAC/stream_encoder_framing.c" - #include "flac/libFLAC/window_flac.c" -#else - #include -#endif -} - -#ifdef _MSC_VER - #pragma warning (pop) -#endif - -BEGIN_JUCE_NAMESPACE - -#include "juce_FlacAudioFormat.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" - -using namespace FlacNamespace; - -//============================================================================== -#define flacFormatName TRANS("FLAC file") -static const tchar* const flacExtensions[] = { T(".flac"), 0 }; - - -//============================================================================== -class FlacReader : public AudioFormatReader -{ - FLAC__StreamDecoder* decoder; - AudioSampleBuffer reservoir; - int reservoirStart, samplesInReservoir; - bool ok, scanningForLength; - -public: - //============================================================================== - FlacReader (InputStream* const in) - : AudioFormatReader (in, flacFormatName), - reservoir (2, 0), - reservoirStart (0), - samplesInReservoir (0), - scanningForLength (false) - { - using namespace FlacNamespace; - lengthInSamples = 0; - - decoder = FLAC__stream_decoder_new(); - - ok = FLAC__stream_decoder_init_stream (decoder, - readCallback_, seekCallback_, tellCallback_, lengthCallback_, - eofCallback_, writeCallback_, metadataCallback_, errorCallback_, - (void*) this) == FLAC__STREAM_DECODER_INIT_STATUS_OK; - - if (ok) - { - FLAC__stream_decoder_process_until_end_of_metadata (decoder); - - if (lengthInSamples == 0 && sampleRate > 0) - { - // the length hasn't been stored in the metadata, so we'll need to - // work it out the length the hard way, by scanning the whole file.. - scanningForLength = true; - FLAC__stream_decoder_process_until_end_of_stream (decoder); - scanningForLength = false; - const int64 tempLength = lengthInSamples; - - FLAC__stream_decoder_reset (decoder); - FLAC__stream_decoder_process_until_end_of_metadata (decoder); - lengthInSamples = tempLength; - } - } - } - - ~FlacReader() - { - FLAC__stream_decoder_delete (decoder); - } - - void useMetadata (const FLAC__StreamMetadata_StreamInfo& info) - { - sampleRate = info.sample_rate; - bitsPerSample = info.bits_per_sample; - lengthInSamples = (unsigned int) info.total_samples; - numChannels = info.channels; - - reservoir.setSize (numChannels, 2 * info.max_blocksize, false, false, true); - } - - // returns the number of samples read - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - using namespace FlacNamespace; - - if (! ok) - return false; - - while (numSamples > 0) - { - if (startSampleInFile >= reservoirStart - && startSampleInFile < reservoirStart + samplesInReservoir) - { - const int num = (int) jmin ((int64) numSamples, - reservoirStart + samplesInReservoir - startSampleInFile); - - jassert (num > 0); - - for (int i = jmin (numDestChannels, reservoir.getNumChannels()); --i >= 0;) - if (destSamples[i] != 0) - memcpy (destSamples[i] + startOffsetInDestBuffer, - reservoir.getSampleData (i, (int) (startSampleInFile - reservoirStart)), - sizeof (int) * num); - - startOffsetInDestBuffer += num; - startSampleInFile += num; - numSamples -= num; - } - else - { - if (startSampleInFile < reservoirStart - || startSampleInFile > reservoirStart + jmax (samplesInReservoir, 511)) - { - if (startSampleInFile >= (int) lengthInSamples) - { - samplesInReservoir = 0; - break; - } - - // had some problems with flac crashing if the read pos is aligned more - // accurately than this. Probably fixed in newer versions of the library, though. - reservoirStart = (int) (startSampleInFile & ~511); - FLAC__stream_decoder_seek_absolute (decoder, (FLAC__uint64) reservoirStart); - } - else - { - reservoirStart += samplesInReservoir; - } - - samplesInReservoir = 0; - - FLAC__stream_decoder_process_single (decoder); - - if (samplesInReservoir == 0) - break; - } - } - - if (numSamples > 0) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != 0) - zeromem (destSamples[i] + startOffsetInDestBuffer, - sizeof (int) * numSamples); - } - - return true; - } - - void useSamples (const FLAC__int32* const buffer[], int numSamples) - { - if (scanningForLength) - { - lengthInSamples += numSamples; - } - else - { - if (numSamples > reservoir.getNumSamples()) - reservoir.setSize (numChannels, numSamples, false, false, true); - - const int bitsToShift = 32 - bitsPerSample; - - for (int i = 0; i < (int) numChannels; ++i) - { - const FLAC__int32* src = buffer[i]; - - int n = i; - while (src == 0 && n > 0) - src = buffer [--n]; - - if (src != 0) - { - int* dest = (int*) reservoir.getSampleData(i); - - for (int j = 0; j < numSamples; ++j) - dest[j] = src[j] << bitsToShift; - } - } - - samplesInReservoir = numSamples; - } - } - - //============================================================================== - static FLAC__StreamDecoderReadStatus readCallback_ (const FLAC__StreamDecoder*, FLAC__byte buffer[], size_t* bytes, void* client_data) - { - *bytes = (unsigned int) ((const FlacReader*) client_data)->input->read (buffer, (int) *bytes); - return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; - } - - static FLAC__StreamDecoderSeekStatus seekCallback_ (const FLAC__StreamDecoder*, FLAC__uint64 absolute_byte_offset, void* client_data) - { - ((const FlacReader*) client_data)->input->setPosition ((int) absolute_byte_offset); - return FLAC__STREAM_DECODER_SEEK_STATUS_OK; - } - - static FLAC__StreamDecoderTellStatus tellCallback_ (const FLAC__StreamDecoder*, FLAC__uint64* absolute_byte_offset, void* client_data) - { - *absolute_byte_offset = ((const FlacReader*) client_data)->input->getPosition(); - return FLAC__STREAM_DECODER_TELL_STATUS_OK; - } - - static FLAC__StreamDecoderLengthStatus lengthCallback_ (const FLAC__StreamDecoder*, FLAC__uint64* stream_length, void* client_data) - { - *stream_length = ((const FlacReader*) client_data)->input->getTotalLength(); - return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; - } - - static FLAC__bool eofCallback_ (const FLAC__StreamDecoder*, void* client_data) - { - return ((const FlacReader*) client_data)->input->isExhausted(); - } - - static FLAC__StreamDecoderWriteStatus writeCallback_ (const FLAC__StreamDecoder*, - const FLAC__Frame* frame, - const FLAC__int32* const buffer[], - void* client_data) - { - ((FlacReader*) client_data)->useSamples (buffer, frame->header.blocksize); - return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; - } - - static void metadataCallback_ (const FLAC__StreamDecoder*, - const FLAC__StreamMetadata* metadata, - void* client_data) - { - ((FlacReader*) client_data)->useMetadata (metadata->data.stream_info); - } - - static void errorCallback_ (const FLAC__StreamDecoder*, FLAC__StreamDecoderErrorStatus, void*) - { - } - - juce_UseDebuggingNewOperator -}; - - -//============================================================================== -class FlacWriter : public AudioFormatWriter -{ - FLAC__StreamEncoder* encoder; - MemoryBlock temp; - -public: - bool ok; - - //============================================================================== - FlacWriter (OutputStream* const out, - const double sampleRate, - const int numChannels, - const int bitsPerSample_) - : AudioFormatWriter (out, flacFormatName, - sampleRate, - numChannels, - bitsPerSample_) - { - using namespace FlacNamespace; - encoder = FLAC__stream_encoder_new(); - - FLAC__stream_encoder_set_do_mid_side_stereo (encoder, numChannels == 2); - FLAC__stream_encoder_set_loose_mid_side_stereo (encoder, numChannels == 2); - FLAC__stream_encoder_set_channels (encoder, numChannels); - FLAC__stream_encoder_set_bits_per_sample (encoder, jmin (24, bitsPerSample)); - FLAC__stream_encoder_set_sample_rate (encoder, (unsigned int) sampleRate); - FLAC__stream_encoder_set_blocksize (encoder, 2048); - FLAC__stream_encoder_set_do_escape_coding (encoder, true); - - ok = FLAC__stream_encoder_init_stream (encoder, - encodeWriteCallback, encodeSeekCallback, - encodeTellCallback, encodeMetadataCallback, - (void*) this) == FLAC__STREAM_ENCODER_INIT_STATUS_OK; - } - - ~FlacWriter() - { - if (ok) - { - FLAC__stream_encoder_finish (encoder); - output->flush(); - } - else - { - output = 0; // to stop the base class deleting this, as it needs to be returned - // to the caller of createWriter() - } - - FLAC__stream_encoder_delete (encoder); - } - - //============================================================================== - bool write (const int** samplesToWrite, int numSamples) - { - if (! ok) - return false; - - int* buf[3]; - const int bitsToShift = 32 - bitsPerSample; - - if (bitsToShift > 0) - { - const int numChannels = (samplesToWrite[1] == 0) ? 1 : 2; - temp.setSize (sizeof (int) * numSamples * numChannels); - - buf[0] = (int*) temp.getData(); - buf[1] = buf[0] + numSamples; - buf[2] = 0; - - for (int i = numChannels; --i >= 0;) - { - if (samplesToWrite[i] != 0) - { - for (int j = 0; j < numSamples; ++j) - buf [i][j] = (samplesToWrite [i][j] >> bitsToShift); - } - } - - samplesToWrite = (const int**) buf; - } - - return FLAC__stream_encoder_process (encoder, - (const FLAC__int32**) samplesToWrite, - numSamples) != 0; - } - - bool writeData (const void* const data, const int size) const - { - return output->write (data, size); - } - - static void packUint32 (FLAC__uint32 val, FLAC__byte* b, const int bytes) - { - b += bytes; - - for (int i = 0; i < bytes; ++i) - { - *(--b) = (FLAC__byte) (val & 0xff); - val >>= 8; - } - } - - void writeMetaData (const FLAC__StreamMetadata* metadata) - { - using namespace FlacNamespace; - const FLAC__StreamMetadata_StreamInfo& info = metadata->data.stream_info; - - unsigned char buffer [FLAC__STREAM_METADATA_STREAMINFO_LENGTH]; - const unsigned int channelsMinus1 = info.channels - 1; - const unsigned int bitsMinus1 = info.bits_per_sample - 1; - - packUint32 (info.min_blocksize, buffer, 2); - packUint32 (info.max_blocksize, buffer + 2, 2); - packUint32 (info.min_framesize, buffer + 4, 3); - packUint32 (info.max_framesize, buffer + 7, 3); - buffer[10] = (uint8) ((info.sample_rate >> 12) & 0xff); - buffer[11] = (uint8) ((info.sample_rate >> 4) & 0xff); - buffer[12] = (uint8) (((info.sample_rate & 0x0f) << 4) | (channelsMinus1 << 1) | (bitsMinus1 >> 4)); - buffer[13] = (FLAC__byte) (((bitsMinus1 & 0x0f) << 4) | (unsigned int) ((info.total_samples >> 32) & 0x0f)); - packUint32 ((FLAC__uint32) info.total_samples, buffer + 14, 4); - memcpy (buffer + 18, info.md5sum, 16); - - const bool ok = output->setPosition (4); - (void) ok; - - // if this fails, you've given it an output stream that can't seek! It needs - // to be able to seek back to write the header - jassert (ok); - - output->writeIntBigEndian (FLAC__STREAM_METADATA_STREAMINFO_LENGTH); - output->write (buffer, FLAC__STREAM_METADATA_STREAMINFO_LENGTH); - } - - //============================================================================== - static FLAC__StreamEncoderWriteStatus encodeWriteCallback (const FLAC__StreamEncoder*, - const FLAC__byte buffer[], - size_t bytes, - unsigned int /*samples*/, - unsigned int /*current_frame*/, - void* client_data) - { - using namespace FlacNamespace; - return ((FlacWriter*) client_data)->writeData (buffer, (int) bytes) - ? FLAC__STREAM_ENCODER_WRITE_STATUS_OK - : FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; - } - - static FLAC__StreamEncoderSeekStatus encodeSeekCallback (const FLAC__StreamEncoder*, FLAC__uint64, void*) - { - return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED; - } - - static FLAC__StreamEncoderTellStatus encodeTellCallback (const FLAC__StreamEncoder*, FLAC__uint64*, void*) - { - return FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED; - } - - static void encodeMetadataCallback (const FLAC__StreamEncoder*, - const FLAC__StreamMetadata* metadata, - void* client_data) - { - ((FlacWriter*) client_data)->writeMetaData (metadata); - } - - juce_UseDebuggingNewOperator -}; - - -//============================================================================== -FlacAudioFormat::FlacAudioFormat() - : AudioFormat (flacFormatName, (const tchar**) flacExtensions) -{ -} - -FlacAudioFormat::~FlacAudioFormat() -{ -} - -const Array FlacAudioFormat::getPossibleSampleRates() -{ - const int rates[] = { 22050, 32000, 44100, 48000, 88200, 96000, 0 }; - return Array (rates); -} - -const Array FlacAudioFormat::getPossibleBitDepths() -{ - const int depths[] = { 16, 24, 0 }; - return Array (depths); -} - -bool FlacAudioFormat::canDoStereo() -{ - return true; -} - -bool FlacAudioFormat::canDoMono() -{ - return true; -} - -bool FlacAudioFormat::isCompressed() -{ - return true; -} - -AudioFormatReader* FlacAudioFormat::createReaderFor (InputStream* in, - const bool deleteStreamIfOpeningFails) -{ - FlacReader* r = new FlacReader (in); - - if (r->sampleRate == 0) - { - if (! deleteStreamIfOpeningFails) - r->input = 0; - - deleteAndZero (r); - } - - return r; -} - -AudioFormatWriter* FlacAudioFormat::createWriterFor (OutputStream* out, - double sampleRate, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& /*metadataValues*/, - int /*qualityOptionIndex*/) -{ - if (getPossibleBitDepths().contains (bitsPerSample)) - { - FlacWriter* w = new FlacWriter (out, - sampleRate, - numberOfChannels, - bitsPerSample); - - if (! w->ok) - deleteAndZero (w); - - return w; - } - - return 0; -} - -END_JUCE_NAMESPACE - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.h b/src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.h deleted file mode 100644 index 73a1f993cc..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_FlacAudioFormat.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ -#define __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ - -#include "juce_AudioFormat.h" // (must keep this outside the conditional define) - -#if JUCE_USE_FLAC || defined (DOXYGEN) - - -//============================================================================== -/** - Reads and writes the lossless-compression FLAC audio format. - - To compile this, you'll need to set the JUCE_USE_FLAC flag in juce_Config.h, - and make sure your include search path and library search path are set up to find - the FLAC header files and static libraries. - - @see AudioFormat -*/ -class JUCE_API FlacAudioFormat : public AudioFormat -{ -public: - //============================================================================== - FlacAudioFormat(); - ~FlacAudioFormat(); - - //============================================================================== - const Array getPossibleSampleRates(); - const Array getPossibleBitDepths(); - bool canDoStereo(); - bool canDoMono(); - bool isCompressed(); - - //============================================================================== - AudioFormatReader* createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails); - - AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, - double sampleRateToUse, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int qualityOptionIndex); - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -#endif -#endif // __JUCE_FLACAUDIOFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp b/src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp deleted file mode 100644 index a30a391064..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.cpp +++ /dev/null @@ -1,504 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../../juce_Config.h" - -#if JUCE_USE_OGGVORBIS - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -#if JUCE_MAC - #define __MACOSX__ 1 -#endif - - -namespace OggVorbisNamespace -{ -#if JUCE_INCLUDE_OGGVORBIS_CODE - #include "oggvorbis/vorbisenc.h" - #include "oggvorbis/codec.h" - #include "oggvorbis/vorbisfile.h" - - #include "oggvorbis/bitwise.c" - #include "oggvorbis/framing.c" - #include "oggvorbis/libvorbis-1.1.2/lib/analysis.c" - #include "oggvorbis/libvorbis-1.1.2/lib/bitrate.c" - #include "oggvorbis/libvorbis-1.1.2/lib/block.c" - #include "oggvorbis/libvorbis-1.1.2/lib/codebook.c" - #include "oggvorbis/libvorbis-1.1.2/lib/envelope.c" - #include "oggvorbis/libvorbis-1.1.2/lib/floor0.c" - #include "oggvorbis/libvorbis-1.1.2/lib/floor1.c" - #include "oggvorbis/libvorbis-1.1.2/lib/info.c" - #include "oggvorbis/libvorbis-1.1.2/lib/lpc.c" - #include "oggvorbis/libvorbis-1.1.2/lib/lsp.c" - #include "oggvorbis/libvorbis-1.1.2/lib/mapping0.c" - #include "oggvorbis/libvorbis-1.1.2/lib/mdct.c" - #include "oggvorbis/libvorbis-1.1.2/lib/psy.c" - #include "oggvorbis/libvorbis-1.1.2/lib/registry.c" - #include "oggvorbis/libvorbis-1.1.2/lib/res0.c" - #include "oggvorbis/libvorbis-1.1.2/lib/sharedbook.c" - #include "oggvorbis/libvorbis-1.1.2/lib/smallft.c" - #include "oggvorbis/libvorbis-1.1.2/lib/synthesis.c" - #include "oggvorbis/libvorbis-1.1.2/lib/vorbisenc.c" - #include "oggvorbis/libvorbis-1.1.2/lib/vorbisfile.c" - #include "oggvorbis/libvorbis-1.1.2/lib/window.c" -#else - #include - #include - #include -#endif -} - -BEGIN_JUCE_NAMESPACE - -#include "juce_OggVorbisAudioFormat.h" -#include "../../application/juce_Application.h" -#include "../../../juce_core/basics/juce_Random.h" -#include "../../../juce_core/io/files/juce_FileInputStream.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" - -using namespace OggVorbisNamespace; - -//============================================================================== -#define oggFormatName TRANS("Ogg-Vorbis file") -static const tchar* const oggExtensions[] = { T(".ogg"), 0 }; - - -//============================================================================== -class OggReader : public AudioFormatReader -{ - OggVorbis_File ovFile; - ov_callbacks callbacks; - AudioSampleBuffer reservoir; - int reservoirStart, samplesInReservoir; - -public: - //============================================================================== - OggReader (InputStream* const inp) - : AudioFormatReader (inp, oggFormatName), - reservoir (2, 4096), - reservoirStart (0), - samplesInReservoir (0) - { - sampleRate = 0; - usesFloatingPointData = true; - - callbacks.read_func = &oggReadCallback; - callbacks.seek_func = &oggSeekCallback; - callbacks.close_func = &oggCloseCallback; - callbacks.tell_func = &oggTellCallback; - - const int err = ov_open_callbacks (input, &ovFile, 0, 0, callbacks); - - if (err == 0) - { - vorbis_info* info = ov_info (&ovFile, -1); - lengthInSamples = (uint32) ov_pcm_total (&ovFile, -1); - numChannels = info->channels; - bitsPerSample = 16; - sampleRate = info->rate; - - reservoir.setSize (numChannels, - (int) jmin (lengthInSamples, (int64) reservoir.getNumSamples())); - } - } - - ~OggReader() - { - ov_clear (&ovFile); - } - - //============================================================================== - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - while (numSamples > 0) - { - const int numAvailable = reservoirStart + samplesInReservoir - startSampleInFile; - - if (startSampleInFile >= reservoirStart && numAvailable > 0) - { - // got a few samples overlapping, so use them before seeking.. - - const int numToUse = jmin (numSamples, numAvailable); - - for (int i = jmin (numDestChannels, reservoir.getNumChannels()); --i >= 0;) - if (destSamples[i] != 0) - memcpy (destSamples[i] + startOffsetInDestBuffer, - reservoir.getSampleData (i, (int) (startSampleInFile - reservoirStart)), - sizeof (float) * numToUse); - - startSampleInFile += numToUse; - numSamples -= numToUse; - startOffsetInDestBuffer += numToUse; - - if (numSamples == 0) - break; - } - - if (startSampleInFile < reservoirStart - || startSampleInFile + numSamples > reservoirStart + samplesInReservoir) - { - // buffer miss, so refill the reservoir - int bitStream = 0; - - reservoirStart = jmax (0, (int) startSampleInFile); - samplesInReservoir = reservoir.getNumSamples(); - - if (reservoirStart != (int) ov_pcm_tell (&ovFile)) - ov_pcm_seek (&ovFile, reservoirStart); - - int offset = 0; - int numToRead = samplesInReservoir; - - while (numToRead > 0) - { - float** dataIn = 0; - - const int samps = ov_read_float (&ovFile, &dataIn, numToRead, &bitStream); - if (samps == 0) - break; - - jassert (samps <= numToRead); - - for (int i = jmin (numChannels, reservoir.getNumChannels()); --i >= 0;) - { - memcpy (reservoir.getSampleData (i, offset), - dataIn[i], - sizeof (float) * samps); - } - - numToRead -= samps; - offset += samps; - } - - if (numToRead > 0) - reservoir.clear (offset, numToRead); - } - } - - if (numSamples > 0) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != 0) - zeromem (destSamples[i] + startOffsetInDestBuffer, - sizeof (int) * numSamples); - } - - return true; - } - - //============================================================================== - static size_t oggReadCallback (void* ptr, size_t size, size_t nmemb, void* datasource) - { - return (size_t) (((InputStream*) datasource)->read (ptr, (int) (size * nmemb)) / size); - } - - static int oggSeekCallback (void* datasource, ogg_int64_t offset, int whence) - { - InputStream* const in = (InputStream*) datasource; - - if (whence == SEEK_CUR) - offset += in->getPosition(); - else if (whence == SEEK_END) - offset += in->getTotalLength(); - - in->setPosition (offset); - return 0; - } - - static int oggCloseCallback (void*) - { - return 0; - } - - static long oggTellCallback (void* datasource) - { - return (long) ((InputStream*) datasource)->getPosition(); - } - - juce_UseDebuggingNewOperator -}; - -//============================================================================== -class OggWriter : public AudioFormatWriter -{ - ogg_stream_state os; - ogg_page og; - ogg_packet op; - vorbis_info vi; - vorbis_comment vc; - vorbis_dsp_state vd; - vorbis_block vb; - -public: - bool ok; - - //============================================================================== - OggWriter (OutputStream* const out, - const double sampleRate, - const int numChannels, - const int bitsPerSample, - const int qualityIndex) - : AudioFormatWriter (out, oggFormatName, - sampleRate, - numChannels, - bitsPerSample) - { - ok = false; - - vorbis_info_init (&vi); - - if (vorbis_encode_init_vbr (&vi, - numChannels, - (int) sampleRate, - jlimit (0.0f, 1.0f, qualityIndex * 0.5f)) == 0) - { - vorbis_comment_init (&vc); - - if (JUCEApplication::getInstance() != 0) - vorbis_comment_add_tag (&vc, "ENCODER", - (char*) (const char*) JUCEApplication::getInstance()->getApplicationName()); - - vorbis_analysis_init (&vd, &vi); - vorbis_block_init (&vd, &vb); - - ogg_stream_init (&os, Random::getSystemRandom().nextInt()); - - ogg_packet header; - ogg_packet header_comm; - ogg_packet header_code; - - vorbis_analysis_headerout (&vd, &vc, &header, &header_comm, &header_code); - - ogg_stream_packetin (&os, &header); - ogg_stream_packetin (&os, &header_comm); - ogg_stream_packetin (&os, &header_code); - - for (;;) - { - if (ogg_stream_flush (&os, &og) == 0) - break; - - output->write (og.header, og.header_len); - output->write (og.body, og.body_len); - } - - ok = true; - } - } - - ~OggWriter() - { - if (ok) - { - // write a zero-length packet to show ogg that we're finished.. - write (0, 0); - - ogg_stream_clear (&os); - vorbis_block_clear (&vb); - vorbis_dsp_clear (&vd); - vorbis_comment_clear (&vc); - - vorbis_info_clear (&vi); - output->flush(); - } - else - { - vorbis_info_clear (&vi); - output = 0; // to stop the base class deleting this, as it needs to be returned - // to the caller of createWriter() - } - } - - //============================================================================== - bool write (const int** samplesToWrite, int numSamples) - { - if (! ok) - return false; - - if (numSamples > 0) - { - const double gain = 1.0 / 0x80000000u; - float** const vorbisBuffer = vorbis_analysis_buffer (&vd, numSamples); - - for (int i = numChannels; --i >= 0;) - { - float* const dst = vorbisBuffer[i]; - const int* const src = samplesToWrite [i]; - - if (src != 0 && dst != 0) - { - for (int j = 0; j < numSamples; ++j) - dst[j] = (float) (src[j] * gain); - } - } - } - - vorbis_analysis_wrote (&vd, numSamples); - - while (vorbis_analysis_blockout (&vd, &vb) == 1) - { - vorbis_analysis (&vb, 0); - vorbis_bitrate_addblock (&vb); - - while (vorbis_bitrate_flushpacket (&vd, &op)) - { - ogg_stream_packetin (&os, &op); - - for (;;) - { - if (ogg_stream_pageout (&os, &og) == 0) - break; - - output->write (og.header, og.header_len); - output->write (og.body, og.body_len); - - if (ogg_page_eos (&og)) - break; - } - } - } - - return true; - } - - juce_UseDebuggingNewOperator -}; - - -//============================================================================== -OggVorbisAudioFormat::OggVorbisAudioFormat() - : AudioFormat (oggFormatName, (const tchar**) oggExtensions) -{ -} - -OggVorbisAudioFormat::~OggVorbisAudioFormat() -{ -} - -const Array OggVorbisAudioFormat::getPossibleSampleRates() -{ - const int rates[] = { 22050, 32000, 44100, 48000, 0 }; - return Array (rates); -} - -const Array OggVorbisAudioFormat::getPossibleBitDepths() -{ - Array depths; - depths.add (32); - return depths; -} - -bool OggVorbisAudioFormat::canDoStereo() -{ - return true; -} - -bool OggVorbisAudioFormat::canDoMono() -{ - return true; -} - -AudioFormatReader* OggVorbisAudioFormat::createReaderFor (InputStream* in, - const bool deleteStreamIfOpeningFails) -{ - OggReader* r = new OggReader (in); - - if (r->sampleRate == 0) - { - if (! deleteStreamIfOpeningFails) - r->input = 0; - - deleteAndZero (r); - } - - return r; -} - -AudioFormatWriter* OggVorbisAudioFormat::createWriterFor (OutputStream* out, - double sampleRate, - unsigned int numChannels, - int bitsPerSample, - const StringPairArray& /*metadataValues*/, - int qualityOptionIndex) -{ - OggWriter* w = new OggWriter (out, - sampleRate, - numChannels, - bitsPerSample, - qualityOptionIndex); - - if (! w->ok) - deleteAndZero (w); - - return w; -} - -bool OggVorbisAudioFormat::isCompressed() -{ - return true; -} - -const StringArray OggVorbisAudioFormat::getQualityOptions() -{ - StringArray s; - s.add ("Low Quality"); - s.add ("Medium Quality"); - s.add ("High Quality"); - return s; -} - -int OggVorbisAudioFormat::estimateOggFileQuality (const File& source) -{ - FileInputStream* const in = source.createInputStream(); - - if (in != 0) - { - AudioFormatReader* const r = createReaderFor (in, true); - - if (r != 0) - { - const int64 numSamps = r->lengthInSamples; - delete r; - - const int64 fileNumSamps = source.getSize() / 4; - const double ratio = numSamps / (double) fileNumSamps; - - if (ratio > 12.0) - return 0; - else if (ratio > 6.0) - return 1; - else - return 2; - } - } - - return 1; -} - -END_JUCE_NAMESPACE - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.h b/src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.h deleted file mode 100644 index 7c54b3ac29..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_OggVorbisAudioFormat.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ -#define __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ - -#include "juce_AudioFormat.h" // (must keep this outside the conditional define) - -#if JUCE_USE_OGGVORBIS || defined (DOXYGEN) - - -//============================================================================== -/** - Reads and writes the Ogg-Vorbis audio format. - - To compile this, you'll need to set the JUCE_USE_OGGVORBIS flag in juce_Config.h, - and make sure your include search path and library search path are set up to find - the Vorbis and Ogg header files and static libraries. - - @see AudioFormat, -*/ -class JUCE_API OggVorbisAudioFormat : public AudioFormat -{ -public: - //============================================================================== - OggVorbisAudioFormat(); - ~OggVorbisAudioFormat(); - - //============================================================================== - const Array getPossibleSampleRates(); - const Array getPossibleBitDepths(); - bool canDoStereo(); - bool canDoMono(); - bool isCompressed(); - const StringArray getQualityOptions(); - - //============================================================================== - /** Tries to estimate the quality level of an ogg file based on its size. - - If it can't read the file for some reason, this will just return 1 (medium quality), - otherwise it will return the approximate quality setting that would have been used - to create the file. - - @see getQualityOptions - */ - int estimateOggFileQuality (const File& source); - - - //============================================================================== - AudioFormatReader* createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails); - - AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, - double sampleRateToUse, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int qualityOptionIndex); - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -#endif -#endif // __JUCE_OGGVORBISAUDIOFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp b/src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp deleted file mode 100644 index 1591ec636d..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.cpp +++ /dev/null @@ -1,407 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../../juce_Config.h" - -#if JUCE_QUICKTIME - -#if ! defined (_WIN32) - #include - #include - #include - #include - #include -#else - #ifdef _MSC_VER - #pragma warning (push) - #pragma warning (disable : 4100) - #endif - - /* If you've got an include error here, you probably need to install the QuickTime SDK and - add its header directory to your include path. - - Alternatively, if you don't need any QuickTime services, just turn off the JUC_QUICKTIME - flag in juce_Config.h - */ - #include - #include - #include - #include - #include - - #ifdef _MSC_VER - #pragma warning (pop) - #endif -#endif - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -#if ! (JUCE_MAC && JUCE_64BIT) - -BEGIN_JUCE_NAMESPACE - -#include "juce_QuickTimeAudioFormat.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" -#include "../../../juce_core/threads/juce_Thread.h" -#include "../../../juce_core/io/network/juce_URL.h" - -bool juce_OpenQuickTimeMovieFromStream (InputStream* input, Movie& movie, Handle& dataHandle); - -#define quickTimeFormatName TRANS("QuickTime file") -static const tchar* const quickTimeExtensions[] = { T(".mov"), T(".mp3"), T(".mp4"), 0 }; - -//============================================================================== -class QTAudioReader : public AudioFormatReader -{ -public: - QTAudioReader (InputStream* const input_, const int trackNum_) - : AudioFormatReader (input_, quickTimeFormatName), - ok (false), - movie (0), - trackNum (trackNum_), - extractor (0), - lastSampleRead (0), - lastThreadId (0), - dataHandle (0) - { - bufferList = (AudioBufferList*) juce_calloc (256); - -#ifdef WIN32 - if (InitializeQTML (0) != noErr) - return; -#endif - if (EnterMovies() != noErr) - return; - - bool opened = juce_OpenQuickTimeMovieFromStream (input_, movie, dataHandle); - - if (! opened) - return; - - { - const int numTracks = GetMovieTrackCount (movie); - int trackCount = 0; - - for (int i = 1; i <= numTracks; ++i) - { - track = GetMovieIndTrack (movie, i); - media = GetTrackMedia (track); - - OSType mediaType; - GetMediaHandlerDescription (media, &mediaType, 0, 0); - - if (mediaType == SoundMediaType - && trackCount++ == trackNum_) - { - ok = true; - break; - } - } - } - - if (! ok) - return; - - ok = false; - - lengthInSamples = GetMediaDecodeDuration (media); - usesFloatingPointData = false; - - samplesPerFrame = (int) (GetMediaDecodeDuration (media) / GetMediaSampleCount (media)); - - trackUnitsPerFrame = GetMovieTimeScale (movie) * samplesPerFrame - / GetMediaTimeScale (media); - - OSStatus err = MovieAudioExtractionBegin (movie, 0, &extractor); - - unsigned long output_layout_size; - err = MovieAudioExtractionGetPropertyInfo (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - 0, &output_layout_size, 0); - if (err != noErr) - return; - - AudioChannelLayout* const qt_audio_channel_layout - = (AudioChannelLayout*) juce_calloc (output_layout_size); - - err = MovieAudioExtractionGetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - output_layout_size, qt_audio_channel_layout, 0); - - qt_audio_channel_layout->mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; - - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioChannelLayout, - sizeof (qt_audio_channel_layout), - qt_audio_channel_layout); - - juce_free (qt_audio_channel_layout); - - err = MovieAudioExtractionGetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription, - sizeof (inputStreamDesc), - &inputStreamDesc, 0); - if (err != noErr) - return; - - inputStreamDesc.mFormatFlags = kAudioFormatFlagIsSignedInteger - | kAudioFormatFlagIsPacked - | kAudioFormatFlagsNativeEndian; - inputStreamDesc.mBitsPerChannel = sizeof (SInt16) * 8; - inputStreamDesc.mChannelsPerFrame = jmin (2, inputStreamDesc.mChannelsPerFrame); - inputStreamDesc.mBytesPerFrame = sizeof (SInt16) * inputStreamDesc.mChannelsPerFrame; - inputStreamDesc.mBytesPerPacket = inputStreamDesc.mBytesPerFrame; - - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Audio, - kQTMovieAudioExtractionAudioPropertyID_AudioStreamBasicDescription, - sizeof (inputStreamDesc), - &inputStreamDesc); - if (err != noErr) - return; - - Boolean allChannelsDiscrete = false; - err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Movie, - kQTMovieAudioExtractionMoviePropertyID_AllChannelsDiscrete, - sizeof (allChannelsDiscrete), - &allChannelsDiscrete); - - if (err != noErr) - return; - - bufferList->mNumberBuffers = 1; - bufferList->mBuffers[0].mNumberChannels = inputStreamDesc.mChannelsPerFrame; - bufferList->mBuffers[0].mDataByteSize = (UInt32) (samplesPerFrame * inputStreamDesc.mBytesPerFrame) + 16; - bufferList->mBuffers[0].mData = malloc (bufferList->mBuffers[0].mDataByteSize); - - sampleRate = inputStreamDesc.mSampleRate; - bitsPerSample = 16; - numChannels = inputStreamDesc.mChannelsPerFrame; - - detachThread(); - ok = true; - } - - ~QTAudioReader() - { - if (dataHandle != 0) - DisposeHandle (dataHandle); - - if (extractor != 0) - { - MovieAudioExtractionEnd (extractor); - extractor = 0; - } - - checkThreadIsAttached(); - DisposeMovie (movie); - - juce_free (bufferList->mBuffers[0].mData); - juce_free (bufferList); - -#if JUCE_MAC - ExitMoviesOnThread (); -#endif - } - - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - checkThreadIsAttached(); - - while (numSamples > 0) - { - if (! loadFrame ((int) startSampleInFile)) - return false; - - const int numToDo = jmin (numSamples, samplesPerFrame); - - for (int j = numDestChannels; --j >= 0;) - { - if (destSamples[j] != 0) - { - const short* const src = ((const short*) bufferList->mBuffers[0].mData) + j; - - for (int i = 0; i < numToDo; ++i) - destSamples[j][startOffsetInDestBuffer + i] = src [i << 1] << 16; - } - } - - startOffsetInDestBuffer += numToDo; - startSampleInFile += numToDo; - numSamples -= numToDo; - } - - detachThread(); - return true; - } - - bool loadFrame (const int sampleNum) - { - if (lastSampleRead != sampleNum) - { - TimeRecord time; - time.scale = (TimeScale) inputStreamDesc.mSampleRate; - time.base = 0; - time.value.hi = 0; - time.value.lo = (UInt32) sampleNum; - - OSStatus err = MovieAudioExtractionSetProperty (extractor, - kQTPropertyClass_MovieAudioExtraction_Movie, - kQTMovieAudioExtractionMoviePropertyID_CurrentTime, - sizeof (time), &time); - - if (err != noErr) - return false; - } - - bufferList->mBuffers[0].mDataByteSize = inputStreamDesc.mBytesPerFrame * samplesPerFrame; - - UInt32 outFlags = 0; - UInt32 actualNumSamples = samplesPerFrame; - OSStatus err = MovieAudioExtractionFillBuffer (extractor, &actualNumSamples, - bufferList, &outFlags); - - lastSampleRead = sampleNum + samplesPerFrame; - - return err == noErr; - } - - juce_UseDebuggingNewOperator - - bool ok; - -private: - Movie movie; - Media media; - Track track; - const int trackNum; - double trackUnitsPerFrame; - int samplesPerFrame; - int lastSampleRead; - Thread::ThreadID lastThreadId; - MovieAudioExtractionRef extractor; - AudioStreamBasicDescription inputStreamDesc; - AudioBufferList* bufferList; - Handle dataHandle; - - /*OSErr readMovieStream (long offset, long size, void* dataPtr) - { - input->setPosition (offset); - input->read (dataPtr, size); - return noErr; - } - - static OSErr readMovieStreamProc (long offset, long size, void* dataPtr, void* userRef) - { - return ((QTAudioReader*) userRef)->readMovieStream (offset, size, dataPtr); - }*/ - - //============================================================================== - void checkThreadIsAttached() - { -#if JUCE_MAC - if (Thread::getCurrentThreadId() != lastThreadId) - EnterMoviesOnThread (0); - AttachMovieToCurrentThread (movie); -#endif - } - - void detachThread() - { -#if JUCE_MAC - DetachMovieFromCurrentThread (movie); -#endif - } -}; - - -//============================================================================== -QuickTimeAudioFormat::QuickTimeAudioFormat() - : AudioFormat (quickTimeFormatName, (const tchar**) quickTimeExtensions) -{ -} - -QuickTimeAudioFormat::~QuickTimeAudioFormat() -{ -} - -const Array QuickTimeAudioFormat::getPossibleSampleRates() -{ - return Array(); -} - -const Array QuickTimeAudioFormat::getPossibleBitDepths() -{ - return Array(); -} - -bool QuickTimeAudioFormat::canDoStereo() -{ - return true; -} - -bool QuickTimeAudioFormat::canDoMono() -{ - return true; -} - -//============================================================================== -AudioFormatReader* QuickTimeAudioFormat::createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails) -{ - QTAudioReader* r = new QTAudioReader (sourceStream, 0); - - if (! r->ok) - { - if (! deleteStreamIfOpeningFails) - r->input = 0; - - deleteAndZero (r); - } - - return r; -} - -AudioFormatWriter* QuickTimeAudioFormat::createWriterFor (OutputStream* /*streamToWriteTo*/, - double /*sampleRateToUse*/, - unsigned int /*numberOfChannels*/, - int /*bitsPerSample*/, - const StringPairArray& /*metadataValues*/, - int /*qualityOptionIndex*/) -{ - jassertfalse // not yet implemented! - return 0; -} - -END_JUCE_NAMESPACE - -#endif -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h b/src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h deleted file mode 100644 index 2660b26d25..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_QuickTimeAudioFormat.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ -#define __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ - -#include "juce_AudioFormat.h" -#if JUCE_QUICKTIME - - -//============================================================================== -/** - Uses QuickTime to read the audio track a movie or media file. - - As well as QuickTime movies, this should also manage to open other audio - files that quicktime can understand, like mp3, m4a, etc. - - @see AudioFormat -*/ -class JUCE_API QuickTimeAudioFormat : public AudioFormat -{ -public: - //============================================================================== - /** Creates a format object. */ - QuickTimeAudioFormat(); - - /** Destructor. */ - ~QuickTimeAudioFormat(); - - //============================================================================== - const Array getPossibleSampleRates(); - const Array getPossibleBitDepths(); - bool canDoStereo(); - bool canDoMono(); - - //============================================================================== - AudioFormatReader* createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails); - - AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, - double sampleRateToUse, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int qualityOptionIndex); - - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -#endif -#endif // __JUCE_QUICKTIMEAUDIOFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.cpp b/src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.cpp deleted file mode 100644 index 846772cc33..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.cpp +++ /dev/null @@ -1,863 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_WavAudioFormat.h" -#include "../../../juce_core/io/streams/juce_BufferedInputStream.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" -#include "../../../juce_core/io/files/juce_FileInputStream.h" -#include "../../../juce_core/io/files/juce_FileOutputStream.h" - - -//============================================================================== -#define wavFormatName TRANS("WAV file") -static const tchar* const wavExtensions[] = { T(".wav"), T(".bwf"), 0 }; - - -//============================================================================== -const tchar* const WavAudioFormat::bwavDescription = T("bwav description"); -const tchar* const WavAudioFormat::bwavOriginator = T("bwav originator"); -const tchar* const WavAudioFormat::bwavOriginatorRef = T("bwav originator ref"); -const tchar* const WavAudioFormat::bwavOriginationDate = T("bwav origination date"); -const tchar* const WavAudioFormat::bwavOriginationTime = T("bwav origination time"); -const tchar* const WavAudioFormat::bwavTimeReference = T("bwav time reference"); -const tchar* const WavAudioFormat::bwavCodingHistory = T("bwav coding history"); - -const StringPairArray WavAudioFormat::createBWAVMetadata (const String& description, - const String& originator, - const String& originatorRef, - const Time& date, - const int64 timeReferenceSamples, - const String& codingHistory) -{ - StringPairArray m; - - m.set (bwavDescription, description); - m.set (bwavOriginator, originator); - m.set (bwavOriginatorRef, originatorRef); - m.set (bwavOriginationDate, date.formatted (T("%Y-%m-%d"))); - m.set (bwavOriginationTime, date.formatted (T("%H:%M:%S"))); - m.set (bwavTimeReference, String (timeReferenceSamples)); - m.set (bwavCodingHistory, codingHistory); - - return m; -} - - -//============================================================================== -#if JUCE_MSVC - #pragma pack (push, 1) - #define PACKED -#elif defined (JUCE_GCC) - #define PACKED __attribute__((packed)) -#else - #define PACKED -#endif - -struct BWAVChunk -{ - uint8 description [256]; - uint8 originator [32]; - uint8 originatorRef [32]; - uint8 originationDate [10]; - uint8 originationTime [8]; - uint32 timeRefLow; - uint32 timeRefHigh; - uint16 version; - uint8 umid[64]; - uint8 reserved[190]; - uint8 codingHistory[1]; - - void copyTo (StringPairArray& values) const - { - values.set (WavAudioFormat::bwavDescription, String::fromUTF8 (description, 256)); - values.set (WavAudioFormat::bwavOriginator, String::fromUTF8 (originator, 32)); - values.set (WavAudioFormat::bwavOriginatorRef, String::fromUTF8 (originatorRef, 32)); - values.set (WavAudioFormat::bwavOriginationDate, String::fromUTF8 (originationDate, 10)); - values.set (WavAudioFormat::bwavOriginationTime, String::fromUTF8 (originationTime, 8)); - - const uint32 timeLow = swapIfBigEndian (timeRefLow); - const uint32 timeHigh = swapIfBigEndian (timeRefHigh); - const int64 time = (((int64)timeHigh) << 32) + timeLow; - - values.set (WavAudioFormat::bwavTimeReference, String (time)); - values.set (WavAudioFormat::bwavCodingHistory, String::fromUTF8 (codingHistory)); - } - - static MemoryBlock createFrom (const StringPairArray& values) - { - const int sizeNeeded = sizeof (BWAVChunk) + values [WavAudioFormat::bwavCodingHistory].copyToUTF8 (0) - 1; - MemoryBlock data ((sizeNeeded + 3) & ~3); - data.fillWith (0); - - BWAVChunk* b = (BWAVChunk*) data.getData(); - - // Allow these calls to overwrite an extra byte at the end, which is fine as long - // as they get called in the right order.. - values [WavAudioFormat::bwavDescription].copyToUTF8 (b->description, 257); - values [WavAudioFormat::bwavOriginator].copyToUTF8 (b->originator, 33); - values [WavAudioFormat::bwavOriginatorRef].copyToUTF8 (b->originatorRef, 33); - values [WavAudioFormat::bwavOriginationDate].copyToUTF8 (b->originationDate, 11); - values [WavAudioFormat::bwavOriginationTime].copyToUTF8 (b->originationTime, 9); - - const int64 time = values [WavAudioFormat::bwavTimeReference].getLargeIntValue(); - b->timeRefLow = swapIfBigEndian ((uint32) (time & 0xffffffff)); - b->timeRefHigh = swapIfBigEndian ((uint32) (time >> 32)); - - values [WavAudioFormat::bwavCodingHistory].copyToUTF8 (b->codingHistory); - - if (b->description[0] != 0 - || b->originator[0] != 0 - || b->originationDate[0] != 0 - || b->originationTime[0] != 0 - || b->codingHistory[0] != 0 - || time != 0) - { - return data; - } - - return MemoryBlock(); - } - -} PACKED; - - -//============================================================================== -struct SMPLChunk -{ - struct SampleLoop - { - uint32 identifier; - uint32 type; - uint32 start; - uint32 end; - uint32 fraction; - uint32 playCount; - } PACKED; - - uint32 manufacturer; - uint32 product; - uint32 samplePeriod; - uint32 midiUnityNote; - uint32 midiPitchFraction; - uint32 smpteFormat; - uint32 smpteOffset; - uint32 numSampleLoops; - uint32 samplerData; - SampleLoop loops[1]; - - void copyTo (StringPairArray& values, const int totalSize) const - { - values.set (T("Manufacturer"), String (swapIfBigEndian (manufacturer))); - values.set (T("Product"), String (swapIfBigEndian (product))); - values.set (T("SamplePeriod"), String (swapIfBigEndian (samplePeriod))); - values.set (T("MidiUnityNote"), String (swapIfBigEndian (midiUnityNote))); - values.set (T("MidiPitchFraction"), String (swapIfBigEndian (midiPitchFraction))); - values.set (T("SmpteFormat"), String (swapIfBigEndian (smpteFormat))); - values.set (T("SmpteOffset"), String (swapIfBigEndian (smpteOffset))); - values.set (T("NumSampleLoops"), String (swapIfBigEndian (numSampleLoops))); - values.set (T("SamplerData"), String (swapIfBigEndian (samplerData))); - - for (uint32 i = 0; i < numSampleLoops; ++i) - { - if ((uint8*) (loops + (i + 1)) > ((uint8*) this) + totalSize) - break; - - values.set (String::formatted (T("Loop%dIdentifier"), i), String (swapIfBigEndian (loops[i].identifier))); - values.set (String::formatted (T("Loop%dType"), i), String (swapIfBigEndian (loops[i].type))); - values.set (String::formatted (T("Loop%dStart"), i), String (swapIfBigEndian (loops[i].start))); - values.set (String::formatted (T("Loop%dEnd"), i), String (swapIfBigEndian (loops[i].end))); - values.set (String::formatted (T("Loop%dFraction"), i), String (swapIfBigEndian (loops[i].fraction))); - values.set (String::formatted (T("Loop%dPlayCount"), i), String (swapIfBigEndian (loops[i].playCount))); - } - } -} PACKED; - -#if JUCE_MSVC - #pragma pack (pop) -#endif - -#undef PACKED - -#undef chunkName -#define chunkName(a) ((int) littleEndianInt(a)) - -//============================================================================== -class WavAudioFormatReader : public AudioFormatReader -{ - int bytesPerFrame; - int64 dataChunkStart, dataLength; - - WavAudioFormatReader (const WavAudioFormatReader&); - const WavAudioFormatReader& operator= (const WavAudioFormatReader&); - -public: - int64 bwavChunkStart, bwavSize; - - //============================================================================== - WavAudioFormatReader (InputStream* const in) - : AudioFormatReader (in, wavFormatName), - dataLength (0), - bwavChunkStart (0), - bwavSize (0) - { - if (input->readInt() == chunkName ("RIFF")) - { - const uint32 len = (uint32) input->readInt(); - const int64 end = input->getPosition() + len; - bool hasGotType = false; - bool hasGotData = false; - - if (input->readInt() == chunkName ("WAVE")) - { - while (input->getPosition() < end - && ! input->isExhausted()) - { - const int chunkType = input->readInt(); - uint32 length = (uint32) input->readInt(); - const int64 chunkEnd = input->getPosition() + length + (length & 1); - - if (chunkType == chunkName ("fmt ")) - { - // read the format chunk - const short format = input->readShort(); - const short numChans = input->readShort(); - sampleRate = input->readInt(); - const int bytesPerSec = input->readInt(); - - numChannels = numChans; - bytesPerFrame = bytesPerSec / (int)sampleRate; - bitsPerSample = 8 * bytesPerFrame / numChans; - - if (format == 3) - usesFloatingPointData = true; - else if (format != 1) - bytesPerFrame = 0; - - hasGotType = true; - } - else if (chunkType == chunkName ("data")) - { - // get the data chunk's position - dataLength = length; - dataChunkStart = input->getPosition(); - lengthInSamples = (bytesPerFrame > 0) ? (dataLength / bytesPerFrame) : 0; - - hasGotData = true; - } - else if (chunkType == chunkName ("bext")) - { - bwavChunkStart = input->getPosition(); - bwavSize = length; - - // Broadcast-wav extension chunk.. - BWAVChunk* const bwav = (BWAVChunk*) juce_calloc (jmax (length + 1, (int) sizeof (BWAVChunk))); - input->read (bwav, length); - bwav->copyTo (metadataValues); - juce_free (bwav); - } - else if (chunkType == chunkName ("smpl")) - { - SMPLChunk* const smpl = (SMPLChunk*) juce_calloc (jmax (length + 1, (int) sizeof (SMPLChunk))); - input->read (smpl, length); - smpl->copyTo (metadataValues, length); - juce_free (smpl); - } - else if (chunkEnd <= input->getPosition()) - { - break; - } - - input->setPosition (chunkEnd); - } - } - } - } - - ~WavAudioFormatReader() - { - } - - //============================================================================== - bool readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, - int64 startSampleInFile, int numSamples) - { - numSamples = (int) jmin ((int64) numSamples, lengthInSamples - startSampleInFile); - - if (numSamples <= 0) - return true; - - input->setPosition (dataChunkStart + startSampleInFile * bytesPerFrame); - - const int tempBufSize = 480 * 3 * 4; // (keep this a multiple of 3) - char tempBuffer [tempBufSize]; - - while (numSamples > 0) - { - int* left = destSamples[0]; - if (left != 0) - left += startOffsetInDestBuffer; - - int* right = numDestChannels > 1 ? destSamples[1] : 0; - if (right != 0) - right += startOffsetInDestBuffer; - - const int numThisTime = jmin (tempBufSize / bytesPerFrame, numSamples); - const int bytesRead = input->read (tempBuffer, numThisTime * bytesPerFrame); - - if (bytesRead < numThisTime * bytesPerFrame) - zeromem (tempBuffer + bytesRead, numThisTime * bytesPerFrame - bytesRead); - - if (bitsPerSample == 16) - { - const short* src = (const short*) tempBuffer; - - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *right++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - ++src; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - *right++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = (int) swapIfBigEndian ((unsigned short) *src++) << 16; - } - } - } - else if (bitsPerSample == 24) - { - const char* src = (const char*) tempBuffer; - - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - src += 3; - *right++ = littleEndian24Bit (src) << 8; - src += 3; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = littleEndian24Bit (src) << 8; - src += 6; - } - } - else - { - for (int i = 0; i < numThisTime; ++i) - { - *left++ = littleEndian24Bit (src) << 8; - src += 3; - *right++ = littleEndian24Bit (src) << 8; - src += 3; - } - } - } - else - { - for (int i = 0; i < numThisTime; ++i) - { - *left++ = littleEndian24Bit (src) << 8; - src += 3; - } - } - } - else if (bitsPerSample == 32) - { - const unsigned int* src = (const unsigned int*) tempBuffer; - unsigned int* l = (unsigned int*) left; - unsigned int* r = (unsigned int*) right; - - if (numChannels > 1) - { - if (l == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *r++ = swapIfBigEndian (*src++); - } - } - else if (r == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfBigEndian (*src++); - ++src; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfBigEndian (*src++); - *r++ = swapIfBigEndian (*src++); - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *l++ = swapIfBigEndian (*src++); - } - } - - left = (int*)l; - right = (int*)r; - } - else if (bitsPerSample == 8) - { - const unsigned char* src = (const unsigned char*) tempBuffer; - - if (numChannels > 1) - { - if (left == 0) - { - for (int i = numThisTime; --i >= 0;) - { - ++src; - *right++ = ((int) *src++ - 128) << 24; - } - } - else if (right == 0) - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = ((int) *src++ - 128) << 24; - ++src; - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = ((int) *src++ - 128) << 24; - *right++ = ((int) *src++ - 128) << 24; - } - } - } - else - { - for (int i = numThisTime; --i >= 0;) - { - *left++ = ((int)*src++ - 128) << 24; - } - } - } - - startOffsetInDestBuffer += numThisTime; - numSamples -= numThisTime; - } - - if (numSamples > 0) - { - for (int i = numDestChannels; --i >= 0;) - if (destSamples[i] != 0) - zeromem (destSamples[i] + startOffsetInDestBuffer, - sizeof (int) * numSamples); - } - - return true; - } - - juce_UseDebuggingNewOperator -}; - -//============================================================================== -class WavAudioFormatWriter : public AudioFormatWriter -{ - MemoryBlock tempBlock, bwavChunk; - uint32 lengthInSamples, bytesWritten; - int64 headerPosition; - bool writeFailed; - - WavAudioFormatWriter (const WavAudioFormatWriter&); - const WavAudioFormatWriter& operator= (const WavAudioFormatWriter&); - - void writeHeader() - { - const bool seekedOk = output->setPosition (headerPosition); - (void) seekedOk; - - // if this fails, you've given it an output stream that can't seek! It needs - // to be able to seek back to write the header - jassert (seekedOk); - - const int bytesPerFrame = numChannels * bitsPerSample / 8; - output->writeInt (chunkName ("RIFF")); - output->writeInt (lengthInSamples * bytesPerFrame - + ((bwavChunk.getSize() > 0) ? (44 + bwavChunk.getSize()) : 36)); - - output->writeInt (chunkName ("WAVE")); - output->writeInt (chunkName ("fmt ")); - output->writeInt (16); - output->writeShort ((bitsPerSample < 32) ? (short) 1 /*WAVE_FORMAT_PCM*/ - : (short) 3 /*WAVE_FORMAT_IEEE_FLOAT*/); - output->writeShort ((short) numChannels); - output->writeInt ((int) sampleRate); - output->writeInt (bytesPerFrame * (int) sampleRate); - output->writeShort ((short) bytesPerFrame); - output->writeShort ((short) bitsPerSample); - - if (bwavChunk.getSize() > 0) - { - output->writeInt (chunkName ("bext")); - output->writeInt (bwavChunk.getSize()); - output->write (bwavChunk.getData(), bwavChunk.getSize()); - } - - output->writeInt (chunkName ("data")); - output->writeInt (lengthInSamples * bytesPerFrame); - - usesFloatingPointData = (bitsPerSample == 32); - } - -public: - //============================================================================== - WavAudioFormatWriter (OutputStream* const out, - const double sampleRate, - const unsigned int numChannels_, - const int bits, - const StringPairArray& metadataValues) - : AudioFormatWriter (out, - wavFormatName, - sampleRate, - numChannels_, - bits), - lengthInSamples (0), - bytesWritten (0), - writeFailed (false) - { - if (metadataValues.size() > 0) - bwavChunk = BWAVChunk::createFrom (metadataValues); - - headerPosition = out->getPosition(); - writeHeader(); - } - - ~WavAudioFormatWriter() - { - writeHeader(); - } - - //============================================================================== - bool write (const int** data, int numSamples) - { - if (writeFailed) - return false; - - const int bytes = numChannels * numSamples * bitsPerSample / 8; - tempBlock.ensureSize (bytes, false); - char* buffer = (char*) tempBlock.getData(); - - const int* left = data[0]; - const int* right = data[1]; - if (right == 0) - right = left; - - if (bitsPerSample == 16) - { - short* b = (short*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (short) swapIfBigEndian ((unsigned short) (*left++ >> 16)); - *b++ = (short) swapIfBigEndian ((unsigned short) (*right++ >> 16)); - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (short) swapIfBigEndian ((unsigned short) (*left++ >> 16)); - } - } - } - else if (bitsPerSample == 24) - { - char* b = (char*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - littleEndian24BitToChars ((*left++) >> 8, b); - b += 3; - littleEndian24BitToChars ((*right++) >> 8, b); - b += 3; - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - littleEndian24BitToChars ((*left++) >> 8, b); - b += 3; - } - } - } - else if (bitsPerSample == 32) - { - unsigned int* b = (unsigned int*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - *b++ = swapIfBigEndian ((unsigned int) *left++); - *b++ = swapIfBigEndian ((unsigned int) *right++); - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - *b++ = swapIfBigEndian ((unsigned int) *left++); - } - } - } - else if (bitsPerSample == 8) - { - unsigned char* b = (unsigned char*) buffer; - - if (numChannels > 1) - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (unsigned char) (128 + (*left++ >> 24)); - *b++ = (unsigned char) (128 + (*right++ >> 24)); - } - } - else - { - for (int i = numSamples; --i >= 0;) - { - *b++ = (unsigned char) (128 + (*left++ >> 24)); - } - } - } - - if (bytesWritten + bytes >= (uint32) 0xfff00000 - || ! output->write (buffer, bytes)) - { - // failed to write to disk, so let's try writing the header. - // If it's just run out of disk space, then if it does manage - // to write the header, we'll still have a useable file.. - writeHeader(); - writeFailed = true; - return false; - } - else - { - bytesWritten += bytes; - lengthInSamples += numSamples; - - return true; - } - } - - juce_UseDebuggingNewOperator -}; - -//============================================================================== -WavAudioFormat::WavAudioFormat() - : AudioFormat (wavFormatName, (const tchar**) wavExtensions) -{ -} - -WavAudioFormat::~WavAudioFormat() -{ -} - -const Array WavAudioFormat::getPossibleSampleRates() -{ - const int rates[] = { 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000, 0 }; - return Array (rates); -} - -const Array WavAudioFormat::getPossibleBitDepths() -{ - const int depths[] = { 8, 16, 24, 32, 0 }; - return Array (depths); -} - -bool WavAudioFormat::canDoStereo() -{ - return true; -} - -bool WavAudioFormat::canDoMono() -{ - return true; -} - -AudioFormatReader* WavAudioFormat::createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails) -{ - WavAudioFormatReader* r = new WavAudioFormatReader (sourceStream); - - if (r->sampleRate == 0) - { - if (! deleteStreamIfOpeningFails) - r->input = 0; - - deleteAndZero (r); - } - - return r; -} - -AudioFormatWriter* WavAudioFormat::createWriterFor (OutputStream* out, - double sampleRate, - unsigned int numChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int /*qualityOptionIndex*/) -{ - if (getPossibleBitDepths().contains (bitsPerSample)) - { - return new WavAudioFormatWriter (out, - sampleRate, - numChannels, - bitsPerSample, - metadataValues); - } - - return 0; -} - -static bool juce_slowCopyOfWavFileWithNewMetadata (const File& file, const StringPairArray& metadata) -{ - bool ok = false; - WavAudioFormat wav; - - const File dest (file.getNonexistentSibling()); - - OutputStream* outStream = dest.createOutputStream(); - - if (outStream != 0) - { - AudioFormatReader* reader = wav.createReaderFor (file.createInputStream(), true); - - if (reader != 0) - { - AudioFormatWriter* writer = wav.createWriterFor (outStream, reader->sampleRate, - reader->numChannels, reader->bitsPerSample, - metadata, 0); - - if (writer != 0) - { - ok = writer->writeFromAudioReader (*reader, 0, -1); - - outStream = 0; - delete writer; - } - - delete reader; - } - - delete outStream; - } - - if (ok) - ok = dest.moveFileTo (file); - - if (! ok) - dest.deleteFile(); - - return ok; -} - -bool WavAudioFormat::replaceMetadataInFile (const File& wavFile, const StringPairArray& newMetadata) -{ - WavAudioFormatReader* reader = (WavAudioFormatReader*) createReaderFor (wavFile.createInputStream(), true); - - if (reader != 0) - { - const int64 bwavPos = reader->bwavChunkStart; - const int64 bwavSize = reader->bwavSize; - delete reader; - - if (bwavSize > 0) - { - MemoryBlock chunk = BWAVChunk::createFrom (newMetadata); - - if (chunk.getSize() <= bwavSize) - { - // the new one will fit in the space available, so write it directly.. - const int64 oldSize = wavFile.getSize(); - - FileOutputStream* out = wavFile.createOutputStream(); - out->setPosition (bwavPos); - out->write (chunk.getData(), chunk.getSize()); - out->setPosition (oldSize); - delete out; - - jassert (wavFile.getSize() == oldSize); - - return true; - } - } - } - - return juce_slowCopyOfWavFileWithNewMetadata (wavFile, newMetadata); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h b/src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h deleted file mode 100644 index 4de53e39b2..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/juce_WavAudioFormat.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ -#define __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ - -#include "juce_AudioFormat.h" - - -//============================================================================== -/** - Reads and Writes WAV format audio files. - - @see AudioFormat -*/ -class JUCE_API WavAudioFormat : public AudioFormat -{ -public: - //============================================================================== - /** Creates a format object. */ - WavAudioFormat(); - - /** Destructor. */ - ~WavAudioFormat(); - - //============================================================================== - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavDescription; - - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavOriginator; - - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavOriginatorRef; - - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - Date format is: yyyy-mm-dd - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavOriginationDate; - - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - Time format is: hh-mm-ss - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavOriginationTime; - - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - This is the number of samples from the start of an edit that the - file is supposed to begin at. Seems like an obvious mistake to - only allow a file to occur in an edit once, but that's the way - it is.. - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavTimeReference; - - /** Metadata property name used by wav readers and writers for adding - a BWAV chunk to the file. - - This is a - - @see AudioFormatReader::metadataValues, createWriterFor - */ - static const tchar* const bwavCodingHistory; - - /** Utility function to fill out the appropriate metadata for a BWAV file. - - This just makes it easier than using the property names directly, and it - fills out the time and date in the right format. - */ - static const StringPairArray createBWAVMetadata (const String& description, - const String& originator, - const String& originatorRef, - const Time& dateAndTime, - const int64 timeReferenceSamples, - const String& codingHistory); - - //============================================================================== - const Array getPossibleSampleRates(); - const Array getPossibleBitDepths(); - bool canDoStereo(); - bool canDoMono(); - - //============================================================================== - AudioFormatReader* createReaderFor (InputStream* sourceStream, - const bool deleteStreamIfOpeningFails); - - AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo, - double sampleRateToUse, - unsigned int numberOfChannels, - int bitsPerSample, - const StringPairArray& metadataValues, - int qualityOptionIndex); - - //============================================================================== - /** Utility function to replace the metadata in a wav file with a new set of values. - - If possible, this cheats by overwriting just the metadata region of the file, rather - than by copying the whole file again. - */ - bool replaceMetadataInFile (const File& wavFile, const StringPairArray& newMetadata); - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -#endif // __JUCE_WAVAUDIOFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/Ogg Vorbis Licence.txt b/src/juce_appframework/audio/audio_file_formats/oggvorbis/Ogg Vorbis Licence.txt deleted file mode 100644 index 254dd52763..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/Ogg Vorbis Licence.txt +++ /dev/null @@ -1,47 +0,0 @@ -===================================================================== - -I've incorporated Ogg-Vorbis directly into the Juce codebase because it makes -things much easier than having to make all your builds link correctly to -the appropriate libraries on every different platform. - -I've made minimal changes to the Ogg-Vorbis code - just tweaked a few include -paths to make it build smoothly, and added some headers to allow you to exclude -it from the build. - -===================================================================== - -The following license is the BSD-style license that comes with the -Ogg-Vorbis distribution, and which applies just to the header files I've -included in this directory. For more info, and to get the rest of the -distribution, visit the Ogg-Vorbis homepage: www.vorbis.com - -===================================================================== - -Copyright (c) 2002-2004 Xiph.org Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -- Neither the name of the Xiph.org Foundation nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/bitwise.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/bitwise.c deleted file mode 100644 index c114662c62..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/bitwise.c +++ /dev/null @@ -1,789 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: packing variable sized words into an octet stream - last mod: $Id: bitwise.c,v 1.1 2007/06/07 17:48:18 jules_rms Exp $ - - ********************************************************************/ - -/* We're 'LSb' endian; if we write a word but read individual bits, - then we'll read the lsb first */ - -#include "juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include "ogg.h" - -#define BUFFER_INCREMENT 256 - -static const unsigned long mask[]= -{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f, - 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff, - 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff, - 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, - 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff, - 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff, - 0x3fffffff,0x7fffffff,0xffffffff }; - -static const unsigned int mask8B[]= -{0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; - -void oggpack_writeinit(oggpack_buffer *b){ - memset(b,0,sizeof(*b)); - b->ptr=b->buffer=(unsigned char*) _ogg_malloc(BUFFER_INCREMENT); - b->buffer[0]='\0'; - b->storage=BUFFER_INCREMENT; -} - -void oggpackB_writeinit(oggpack_buffer *b){ - oggpack_writeinit(b); -} - -void oggpack_writetrunc(oggpack_buffer *b,long bits){ - long bytes=bits>>3; - bits-=bytes*8; - b->ptr=b->buffer+bytes; - b->endbit=bits; - b->endbyte=bytes; - *b->ptr&=mask[bits]; -} - -void oggpackB_writetrunc(oggpack_buffer *b,long bits){ - long bytes=bits>>3; - bits-=bytes*8; - b->ptr=b->buffer+bytes; - b->endbit=bits; - b->endbyte=bytes; - *b->ptr&=mask8B[bits]; -} - -/* Takes only up to 32 bits. */ -void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){ - if(b->endbyte+4>=b->storage){ - b->buffer=(unsigned char*) _ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT); - b->storage+=BUFFER_INCREMENT; - b->ptr=b->buffer+b->endbyte; - } - - value&=mask[bits]; - bits+=b->endbit; - - b->ptr[0]|=value<endbit; - - if(bits>=8){ - b->ptr[1]=(unsigned char)(value>>(8-b->endbit)); - if(bits>=16){ - b->ptr[2]=(unsigned char)(value>>(16-b->endbit)); - if(bits>=24){ - b->ptr[3]=(unsigned char)(value>>(24-b->endbit)); - if(bits>=32){ - if(b->endbit) - b->ptr[4]=(unsigned char)(value>>(32-b->endbit)); - else - b->ptr[4]=0; - } - } - } - } - - b->endbyte+=bits/8; - b->ptr+=bits/8; - b->endbit=bits&7; -} - -/* Takes only up to 32 bits. */ -void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){ - if(b->endbyte+4>=b->storage){ - b->buffer=(unsigned char*) _ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT); - b->storage+=BUFFER_INCREMENT; - b->ptr=b->buffer+b->endbyte; - } - - value=(value&mask[bits])<<(32-bits); - bits+=b->endbit; - - b->ptr[0]|=value>>(24+b->endbit); - - if(bits>=8){ - b->ptr[1]=(unsigned char)(value>>(16+b->endbit)); - if(bits>=16){ - b->ptr[2]=(unsigned char)(value>>(8+b->endbit)); - if(bits>=24){ - b->ptr[3]=(unsigned char)(value>>(b->endbit)); - if(bits>=32){ - if(b->endbit) - b->ptr[4]=(unsigned char)(value<<(8-b->endbit)); - else - b->ptr[4]=0; - } - } - } - } - - b->endbyte+=bits/8; - b->ptr+=bits/8; - b->endbit=bits&7; -} - -void oggpack_writealign(oggpack_buffer *b){ - int bits=8-b->endbit; - if(bits<8) - oggpack_write(b,0,bits); -} - -void oggpackB_writealign(oggpack_buffer *b){ - int bits=8-b->endbit; - if(bits<8) - oggpackB_write(b,0,bits); -} - -static void oggpack_writecopy_helper(oggpack_buffer *b, - void *source, - long bits, - void (*w)(oggpack_buffer *, - unsigned long, - int), - int msb){ - unsigned char *ptr=(unsigned char *)source; - - long bytes=bits/8; - bits-=bytes*8; - - if(b->endbit){ - int i; - /* unaligned copy. Do it the hard way. */ - for(i=0;iendbyte+bytes+1>=b->storage){ - b->storage=b->endbyte+bytes+BUFFER_INCREMENT; - b->buffer=(unsigned char*) _ogg_realloc(b->buffer,b->storage); - b->ptr=b->buffer+b->endbyte; - } - - memmove(b->ptr,source,bytes); - b->ptr+=bytes; - b->endbyte+=bytes; - *b->ptr=0; - - } - if(bits){ - if(msb) - w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits); - else - w(b,(unsigned long)(ptr[bytes]),bits); - } -} - -void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){ - oggpack_writecopy_helper(b,source,bits,oggpack_write,0); -} - -void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){ - oggpack_writecopy_helper(b,source,bits,oggpackB_write,1); -} - -void oggpack_reset(oggpack_buffer *b){ - b->ptr=b->buffer; - b->buffer[0]=0; - b->endbit=b->endbyte=0; -} - -void oggpackB_reset(oggpack_buffer *b){ - oggpack_reset(b); -} - -void oggpack_writeclear(oggpack_buffer *b){ - _ogg_free(b->buffer); - memset(b,0,sizeof(*b)); -} - -void oggpackB_writeclear(oggpack_buffer *b){ - oggpack_writeclear(b); -} - -void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){ - memset(b,0,sizeof(*b)); - b->buffer=b->ptr=buf; - b->storage=bytes; -} - -void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){ - oggpack_readinit(b,buf,bytes); -} - -/* Read in bits without advancing the bitptr; bits <= 32 */ -long oggpack_look(oggpack_buffer *b,int bits){ - unsigned long ret; - unsigned long m=mask[bits]; - - bits+=b->endbit; - - if(b->endbyte+4>=b->storage){ - /* not the main path */ - if(b->endbyte*8+bits>b->storage*8)return(-1); - } - - ret=b->ptr[0]>>b->endbit; - if(bits>8){ - ret|=b->ptr[1]<<(8-b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(16-b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(24-b->endbit); - if(bits>32 && b->endbit) - ret|=b->ptr[4]<<(32-b->endbit); - } - } - } - return(m&ret); -} - -/* Read in bits without advancing the bitptr; bits <= 32 */ -long oggpackB_look(oggpack_buffer *b,int bits){ - unsigned long ret; - int m=32-bits; - - bits+=b->endbit; - - if(b->endbyte+4>=b->storage){ - /* not the main path */ - if(b->endbyte*8+bits>b->storage*8)return(-1); - } - - ret=b->ptr[0]<<(24+b->endbit); - if(bits>8){ - ret|=b->ptr[1]<<(16+b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(8+b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(b->endbit); - if(bits>32 && b->endbit) - ret|=b->ptr[4]>>(8-b->endbit); - } - } - } - return ((ret&0xffffffff)>>(m>>1))>>((m+1)>>1); -} - -long oggpack_look1(oggpack_buffer *b){ - if(b->endbyte>=b->storage)return(-1); - return((b->ptr[0]>>b->endbit)&1); -} - -long oggpackB_look1(oggpack_buffer *b){ - if(b->endbyte>=b->storage)return(-1); - return((b->ptr[0]>>(7-b->endbit))&1); -} - -void oggpack_adv(oggpack_buffer *b,int bits){ - bits+=b->endbit; - b->ptr+=bits/8; - b->endbyte+=bits/8; - b->endbit=bits&7; -} - -void oggpackB_adv(oggpack_buffer *b,int bits){ - oggpack_adv(b,bits); -} - -void oggpack_adv1(oggpack_buffer *b){ - if(++(b->endbit)>7){ - b->endbit=0; - b->ptr++; - b->endbyte++; - } -} - -void oggpackB_adv1(oggpack_buffer *b){ - oggpack_adv1(b); -} - -/* bits <= 32 */ -long oggpack_read(oggpack_buffer *b,int bits){ - long ret; - unsigned long m=mask[bits]; - - bits+=b->endbit; - - if(b->endbyte+4>=b->storage){ - /* not the main path */ - ret=-1L; - if(b->endbyte*8+bits>b->storage*8)goto overflow; - } - - ret=b->ptr[0]>>b->endbit; - if(bits>8){ - ret|=b->ptr[1]<<(8-b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(16-b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(24-b->endbit); - if(bits>32 && b->endbit){ - ret|=b->ptr[4]<<(32-b->endbit); - } - } - } - } - ret&=m; - - overflow: - - b->ptr+=bits/8; - b->endbyte+=bits/8; - b->endbit=bits&7; - return(ret); -} - -/* bits <= 32 */ -long oggpackB_read(oggpack_buffer *b,int bits){ - long ret; - long m=32-bits; - - bits+=b->endbit; - - if(b->endbyte+4>=b->storage){ - /* not the main path */ - ret=-1L; - if(b->endbyte*8+bits>b->storage*8)goto overflow; - } - - ret=b->ptr[0]<<(24+b->endbit); - if(bits>8){ - ret|=b->ptr[1]<<(16+b->endbit); - if(bits>16){ - ret|=b->ptr[2]<<(8+b->endbit); - if(bits>24){ - ret|=b->ptr[3]<<(b->endbit); - if(bits>32 && b->endbit) - ret|=b->ptr[4]>>(8-b->endbit); - } - } - } - ret=((ret&0xffffffffUL)>>(m>>1))>>((m+1)>>1); - - overflow: - - b->ptr+=bits/8; - b->endbyte+=bits/8; - b->endbit=bits&7; - return(ret); -} - -long oggpack_read1(oggpack_buffer *b){ - long ret; - - if(b->endbyte>=b->storage){ - /* not the main path */ - ret=-1L; - goto overflow; - } - - ret=(b->ptr[0]>>b->endbit)&1; - - overflow: - - b->endbit++; - if(b->endbit>7){ - b->endbit=0; - b->ptr++; - b->endbyte++; - } - return(ret); -} - -long oggpackB_read1(oggpack_buffer *b){ - long ret; - - if(b->endbyte>=b->storage){ - /* not the main path */ - ret=-1L; - goto overflow; - } - - ret=(b->ptr[0]>>(7-b->endbit))&1; - - overflow: - - b->endbit++; - if(b->endbit>7){ - b->endbit=0; - b->ptr++; - b->endbyte++; - } - return(ret); -} - -long oggpack_bytes(oggpack_buffer *b){ - return(b->endbyte+(b->endbit+7)/8); -} - -long oggpack_bits(oggpack_buffer *b){ - return(b->endbyte*8+b->endbit); -} - -long oggpackB_bytes(oggpack_buffer *b){ - return oggpack_bytes(b); -} - -long oggpackB_bits(oggpack_buffer *b){ - return oggpack_bits(b); -} - -unsigned char *oggpack_get_buffer(oggpack_buffer *b){ - return(b->buffer); -} - -unsigned char *oggpackB_get_buffer(oggpack_buffer *b){ - return oggpack_get_buffer(b); -} - -/* Self test of the bitwise routines; everything else is based on - them, so they damned well better be solid. */ - -#ifdef _V_SELFTEST -#include - -static int ilog(unsigned int v){ - int ret=0; - while(v){ - ret++; - v>>=1; - } - return(ret); -} - -oggpack_buffer o; -oggpack_buffer r; - -void report(char *in){ - fprintf(stderr,"%s",in); - exit(1); -} - -void cliptest(unsigned long *b,int vals,int bits,int *comp,int compsize){ - long bytes,i; - unsigned char *buffer; - - oggpack_reset(&o); - for(i=0;i -#include -#include "ogg.h" - -/* A complete description of Ogg framing exists in docs/framing.html */ - -int ogg_page_version(ogg_page *og){ - return((int)(og->header[4])); -} - -int ogg_page_continued(ogg_page *og){ - return((int)(og->header[5]&0x01)); -} - -int ogg_page_bos(ogg_page *og){ - return((int)(og->header[5]&0x02)); -} - -int ogg_page_eos(ogg_page *og){ - return((int)(og->header[5]&0x04)); -} - -ogg_int64_t ogg_page_granulepos(ogg_page *og){ - unsigned char *page=og->header; - ogg_int64_t granulepos=page[13]&(0xff); - granulepos= (granulepos<<8)|(page[12]&0xff); - granulepos= (granulepos<<8)|(page[11]&0xff); - granulepos= (granulepos<<8)|(page[10]&0xff); - granulepos= (granulepos<<8)|(page[9]&0xff); - granulepos= (granulepos<<8)|(page[8]&0xff); - granulepos= (granulepos<<8)|(page[7]&0xff); - granulepos= (granulepos<<8)|(page[6]&0xff); - return(granulepos); -} - -int ogg_page_serialno(ogg_page *og){ - return(og->header[14] | - (og->header[15]<<8) | - (og->header[16]<<16) | - (og->header[17]<<24)); -} - -long ogg_page_pageno(ogg_page *og){ - return(og->header[18] | - (og->header[19]<<8) | - (og->header[20]<<16) | - (og->header[21]<<24)); -} - - - -/* returns the number of packets that are completed on this page (if - the leading packet is begun on a previous page, but ends on this - page, it's counted */ - -/* NOTE: -If a page consists of a packet begun on a previous page, and a new -packet begun (but not completed) on this page, the return will be: - ogg_page_packets(page) ==1, - ogg_page_continued(page) !=0 - -If a page happens to be a single packet that was begun on a -previous page, and spans to the next page (in the case of a three or -more page packet), the return will be: - ogg_page_packets(page) ==0, - ogg_page_continued(page) !=0 -*/ - -int ogg_page_packets(ogg_page *og){ - int i,n=og->header[26],count=0; - for(i=0;iheader[27+i]<255)count++; - return(count); -} - - -#if 0 -/* helper to initialize lookup for direct-table CRC (illustrative; we - use the static init below) */ - -static ogg_uint32_t _ogg_crc_entry(unsigned long index){ - int i; - unsigned long r; - - r = index << 24; - for (i=0; i<8; i++) - if (r & 0x80000000UL) - r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator - polynomial, although we use an - unreflected alg and an init/final - of 0, not 0xffffffff */ - else - r<<=1; - return (r & 0xffffffffUL); -} -#endif - -static const ogg_uint32_t crc_lookup[256]={ - 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9, - 0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005, - 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61, - 0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd, - 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9, - 0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75, - 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011, - 0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd, - 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039, - 0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5, - 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81, - 0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d, - 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49, - 0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95, - 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1, - 0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d, - 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae, - 0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072, - 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16, - 0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca, - 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde, - 0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02, - 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066, - 0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba, - 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e, - 0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692, - 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6, - 0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a, - 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e, - 0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2, - 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686, - 0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a, - 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637, - 0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb, - 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f, - 0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53, - 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47, - 0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b, - 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff, - 0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623, - 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7, - 0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b, - 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f, - 0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3, - 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7, - 0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b, - 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f, - 0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3, - 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640, - 0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c, - 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8, - 0x68860bfd,0x6c47164a,0x61043093,0x65c52d24, - 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30, - 0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec, - 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088, - 0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654, - 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0, - 0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c, - 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18, - 0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4, - 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0, - 0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c, - 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668, - 0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4}; - -/* init the encode/decode logical stream state */ - -int ogg_stream_init(ogg_stream_state *os,int serialno){ - if(os){ - memset(os,0,sizeof(*os)); - os->body_storage=16*1024; - os->body_data=(unsigned char*) _ogg_malloc(os->body_storage*sizeof(*os->body_data)); - - os->lacing_storage=1024; - os->lacing_vals=(int*) _ogg_malloc(os->lacing_storage*sizeof(*os->lacing_vals)); - os->granule_vals=(ogg_int64_t*) _ogg_malloc(os->lacing_storage*sizeof(*os->granule_vals)); - - os->serialno=serialno; - - return(0); - } - return(-1); -} - -/* _clear does not free os, only the non-flat storage within */ -int ogg_stream_clear(ogg_stream_state *os){ - if(os){ - if(os->body_data)_ogg_free(os->body_data); - if(os->lacing_vals)_ogg_free(os->lacing_vals); - if(os->granule_vals)_ogg_free(os->granule_vals); - - memset(os,0,sizeof(*os)); - } - return(0); -} - -int ogg_stream_destroy(ogg_stream_state *os){ - if(os){ - ogg_stream_clear(os); - _ogg_free(os); - } - return(0); -} - -/* Helpers for ogg_stream_encode; this keeps the structure and - what's happening fairly clear */ - -static void _os_body_expand(ogg_stream_state *os,int needed){ - if(os->body_storage<=os->body_fill+needed){ - os->body_storage+=(needed+1024); - os->body_data=(unsigned char*) _ogg_realloc(os->body_data,os->body_storage*sizeof(*os->body_data)); - } -} - -static void _os_lacing_expand(ogg_stream_state *os,int needed){ - if(os->lacing_storage<=os->lacing_fill+needed){ - os->lacing_storage+=(needed+32); - os->lacing_vals=(int*)_ogg_realloc(os->lacing_vals,os->lacing_storage*sizeof(*os->lacing_vals)); - os->granule_vals=(ogg_int64_t*)_ogg_realloc(os->granule_vals,os->lacing_storage*sizeof(*os->granule_vals)); - } -} - -/* checksum the page */ -/* Direct table CRC; note that this will be faster in the future if we - perform the checksum silmultaneously with other copies */ - -void ogg_page_checksum_set(ogg_page *og){ - if(og){ - ogg_uint32_t crc_reg=0; - int i; - - /* safety; needed for API behavior, but not framing code */ - og->header[22]=0; - og->header[23]=0; - og->header[24]=0; - og->header[25]=0; - - for(i=0;iheader_len;i++) - crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]]; - for(i=0;ibody_len;i++) - crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]]; - - og->header[22]=(unsigned char)(crc_reg&0xff); - og->header[23]=(unsigned char)((crc_reg>>8)&0xff); - og->header[24]=(unsigned char)((crc_reg>>16)&0xff); - og->header[25]=(unsigned char)((crc_reg>>24)&0xff); - } -} - -/* submit data to the internal buffer of the framing engine */ -int ogg_stream_packetin(ogg_stream_state *os,ogg_packet *op){ - int lacing_vals=op->bytes/255+1,i; - - if(os->body_returned){ - /* advance packet data according to the body_returned pointer. We - had to keep it around to return a pointer into the buffer last - call */ - - os->body_fill-=os->body_returned; - if(os->body_fill) - memmove(os->body_data,os->body_data+os->body_returned, - os->body_fill); - os->body_returned=0; - } - - /* make sure we have the buffer storage */ - _os_body_expand(os,op->bytes); - _os_lacing_expand(os,lacing_vals); - - /* Copy in the submitted packet. Yes, the copy is a waste; this is - the liability of overly clean abstraction for the time being. It - will actually be fairly easy to eliminate the extra copy in the - future */ - - memcpy(os->body_data+os->body_fill,op->packet,op->bytes); - os->body_fill+=op->bytes; - - /* Store lacing vals for this packet */ - for(i=0;ilacing_vals[os->lacing_fill+i]=255; - os->granule_vals[os->lacing_fill+i]=os->granulepos; - } - os->lacing_vals[os->lacing_fill+i]=(op->bytes)%255; - os->granulepos=os->granule_vals[os->lacing_fill+i]=op->granulepos; - - /* flag the first segment as the beginning of the packet */ - os->lacing_vals[os->lacing_fill]|= 0x100; - - os->lacing_fill+=lacing_vals; - - /* for the sake of completeness */ - os->packetno++; - - if(op->e_o_s)os->e_o_s=1; - - return(0); -} - -/* This will flush remaining packets into a page (returning nonzero), - even if there is not enough data to trigger a flush normally - (undersized page). If there are no packets or partial packets to - flush, ogg_stream_flush returns 0. Note that ogg_stream_flush will - try to flush a normal sized page like ogg_stream_pageout; a call to - ogg_stream_flush does not guarantee that all packets have flushed. - Only a return value of 0 from ogg_stream_flush indicates all packet - data is flushed into pages. - - since ogg_stream_flush will flush the last page in a stream even if - it's undersized, you almost certainly want to use ogg_stream_pageout - (and *not* ogg_stream_flush) unless you specifically need to flush - an page regardless of size in the middle of a stream. */ - -int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){ - int i; - int vals=0; - int maxvals=(os->lacing_fill>255?255:os->lacing_fill); - int bytes=0; - long acc=0; - ogg_int64_t granule_pos=-1; - - if(maxvals==0)return(0); - - /* construct a page */ - /* decide how many segments to include */ - - /* If this is the initial header case, the first page must only include - the initial header packet */ - if(os->b_o_s==0){ /* 'initial header page' case */ - granule_pos=0; - for(vals=0;valslacing_vals[vals]&0x0ff)<255){ - vals++; - break; - } - } - }else{ - for(vals=0;vals4096)break; - acc+=os->lacing_vals[vals]&0x0ff; - if((os->lacing_vals[vals]&0xff)<255) - granule_pos=os->granule_vals[vals]; - } - } - - /* construct the header in temp storage */ - memcpy(os->header,"OggS",4); - - /* stream structure version */ - os->header[4]=0x00; - - /* continued packet flag? */ - os->header[5]=0x00; - if((os->lacing_vals[0]&0x100)==0)os->header[5]|=0x01; - /* first page flag? */ - if(os->b_o_s==0)os->header[5]|=0x02; - /* last page flag? */ - if(os->e_o_s && os->lacing_fill==vals)os->header[5]|=0x04; - os->b_o_s=1; - - /* 64 bits of PCM position */ - for(i=6;i<14;i++){ - os->header[i]=(unsigned char)(granule_pos&0xff); - granule_pos>>=8; - } - - /* 32 bits of stream serial number */ - { - long serialno=os->serialno; - for(i=14;i<18;i++){ - os->header[i]=(unsigned char)(serialno&0xff); - serialno>>=8; - } - } - - /* 32 bits of page counter (we have both counter and page header - because this val can roll over) */ - if(os->pageno==-1)os->pageno=0; /* because someone called - stream_reset; this would be a - strange thing to do in an - encode stream, but it has - plausible uses */ - { - long pageno=os->pageno++; - for(i=18;i<22;i++){ - os->header[i]=(unsigned char)(pageno&0xff); - pageno>>=8; - } - } - - /* zero for computation; filled in later */ - os->header[22]=0; - os->header[23]=0; - os->header[24]=0; - os->header[25]=0; - - /* segment table */ - os->header[26]=(unsigned char)(vals&0xff); - for(i=0;iheader[i+27]=(unsigned char)(os->lacing_vals[i]&0xff); - - /* set pointers in the ogg_page struct */ - og->header=os->header; - og->header_len=os->header_fill=vals+27; - og->body=os->body_data+os->body_returned; - og->body_len=bytes; - - /* advance the lacing data and set the body_returned pointer */ - - os->lacing_fill-=vals; - memmove(os->lacing_vals,os->lacing_vals+vals,os->lacing_fill*sizeof(*os->lacing_vals)); - memmove(os->granule_vals,os->granule_vals+vals,os->lacing_fill*sizeof(*os->granule_vals)); - os->body_returned+=bytes; - - /* calculate the checksum */ - - ogg_page_checksum_set(og); - - /* done */ - return(1); -} - - -/* This constructs pages from buffered packet segments. The pointers -returned are to static buffers; do not free. The returned buffers are -good only until the next call (using the same ogg_stream_state) */ - -int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og){ - - if((os->e_o_s&&os->lacing_fill) || /* 'were done, now flush' case */ - os->body_fill-os->body_returned > 4096 ||/* 'page nominal size' case */ - os->lacing_fill>=255 || /* 'segment table full' case */ - (os->lacing_fill&&!os->b_o_s)){ /* 'initial header page' case */ - - return(ogg_stream_flush(os,og)); - } - - /* not enough data to construct a page and not end of stream */ - return(0); -} - -int ogg_stream_eos(ogg_stream_state *os){ - return os->e_o_s; -} - -/* DECODING PRIMITIVES: packet streaming layer **********************/ - -/* This has two layers to place more of the multi-serialno and paging - control in the application's hands. First, we expose a data buffer - using ogg_sync_buffer(). The app either copies into the - buffer, or passes it directly to read(), etc. We then call - ogg_sync_wrote() to tell how many bytes we just added. - - Pages are returned (pointers into the buffer in ogg_sync_state) - by ogg_sync_pageout(). The page is then submitted to - ogg_stream_pagein() along with the appropriate - ogg_stream_state* (ie, matching serialno). We then get raw - packets out calling ogg_stream_packetout() with a - ogg_stream_state. */ - -/* initialize the struct to a known state */ -int ogg_sync_init(ogg_sync_state *oy){ - if(oy){ - memset(oy,0,sizeof(*oy)); - } - return(0); -} - -/* clear non-flat storage within */ -int ogg_sync_clear(ogg_sync_state *oy){ - if(oy){ - if(oy->data)_ogg_free(oy->data); - ogg_sync_init(oy); - } - return(0); -} - -int ogg_sync_destroy(ogg_sync_state *oy){ - if(oy){ - ogg_sync_clear(oy); - _ogg_free(oy); - } - return(0); -} - -char *ogg_sync_buffer(ogg_sync_state *oy, long size){ - - /* first, clear out any space that has been previously returned */ - if(oy->returned){ - oy->fill-=oy->returned; - if(oy->fill>0) - memmove(oy->data,oy->data+oy->returned,oy->fill); - oy->returned=0; - } - - if(size>oy->storage-oy->fill){ - /* We need to extend the internal buffer */ - long newsize=size+oy->fill+4096; /* an extra page to be nice */ - - if(oy->data) - oy->data=(unsigned char*) _ogg_realloc(oy->data,newsize); - else - oy->data=(unsigned char*) _ogg_malloc(newsize); - oy->storage=newsize; - } - - /* expose a segment at least as large as requested at the fill mark */ - return((char *)oy->data+oy->fill); -} - -int ogg_sync_wrote(ogg_sync_state *oy, long bytes){ - if(oy->fill+bytes>oy->storage)return(-1); - oy->fill+=bytes; - return(0); -} - -/* sync the stream. This is meant to be useful for finding page - boundaries. - - return values for this: - -n) skipped n bytes - 0) page not ready; more data (no bytes skipped) - n) page synced at current location; page length n bytes - -*/ - -long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){ - unsigned char *page=oy->data+oy->returned; - unsigned char *next; - long bytes=oy->fill-oy->returned; - - if(oy->headerbytes==0){ - int headerbytes,i; - if(bytes<27)return(0); /* not enough for a header */ - - /* verify capture pattern */ - if(memcmp(page,"OggS",4))goto sync_fail; - - headerbytes=page[26]+27; - if(bytesbodybytes+=page[27+i]; - oy->headerbytes=headerbytes; - } - - if(oy->bodybytes+oy->headerbytes>bytes)return(0); - - /* The whole test page is buffered. Verify the checksum */ - { - /* Grab the checksum bytes, set the header field to zero */ - char chksum[4]; - ogg_page log; - - memcpy(chksum,page+22,4); - memset(page+22,0,4); - - /* set up a temp page struct and recompute the checksum */ - log.header=page; - log.header_len=oy->headerbytes; - log.body=page+oy->headerbytes; - log.body_len=oy->bodybytes; - ogg_page_checksum_set(&log); - - /* Compare */ - if(memcmp(chksum,page+22,4)){ - /* D'oh. Mismatch! Corrupt page (or miscapture and not a page - at all) */ - /* replace the computed checksum with the one actually read in */ - memcpy(page+22,chksum,4); - - /* Bad checksum. Lose sync */ - goto sync_fail; - } - } - - /* yes, have a whole page all ready to go */ - { - unsigned char *page=oy->data+oy->returned; - long bytes; - - if(og){ - og->header=page; - og->header_len=oy->headerbytes; - og->body=page+oy->headerbytes; - og->body_len=oy->bodybytes; - } - - oy->unsynced=0; - oy->returned+=(bytes=oy->headerbytes+oy->bodybytes); - oy->headerbytes=0; - oy->bodybytes=0; - return(bytes); - } - - sync_fail: - - oy->headerbytes=0; - oy->bodybytes=0; - - /* search for possible capture */ - next=(unsigned char*)memchr(page+1,'O',bytes-1); - if(!next) - next=oy->data+oy->fill; - - oy->returned=next-oy->data; - return(-(next-page)); -} - -/* sync the stream and get a page. Keep trying until we find a page. - Supress 'sync errors' after reporting the first. - - return values: - -1) recapture (hole in data) - 0) need more data - 1) page returned - - Returns pointers into buffered data; invalidated by next call to - _stream, _clear, _init, or _buffer */ - -int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){ - - /* all we need to do is verify a page at the head of the stream - buffer. If it doesn't verify, we look for the next potential - frame */ - - for(;;){ - long ret=ogg_sync_pageseek(oy,og); - if(ret>0){ - /* have a page */ - return(1); - } - if(ret==0){ - /* need more data */ - return(0); - } - - /* head did not start a synced page... skipped some bytes */ - if(!oy->unsynced){ - oy->unsynced=1; - return(-1); - } - - /* loop. keep looking */ - - } -} - -/* add the incoming page to the stream state; we decompose the page - into packet segments here as well. */ - -int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){ - unsigned char *header=og->header; - unsigned char *body=og->body; - long bodysize=og->body_len; - int segptr=0; - - int version=ogg_page_version(og); - int continued=ogg_page_continued(og); - int bos=ogg_page_bos(og); - int eos=ogg_page_eos(og); - ogg_int64_t granulepos=ogg_page_granulepos(og); - int serialno=ogg_page_serialno(og); - long pageno=ogg_page_pageno(og); - int segments=header[26]; - - /* clean up 'returned data' */ - { - long lr=os->lacing_returned; - long br=os->body_returned; - - /* body data */ - if(br){ - os->body_fill-=br; - if(os->body_fill) - memmove(os->body_data,os->body_data+br,os->body_fill); - os->body_returned=0; - } - - if(lr){ - /* segment table */ - if(os->lacing_fill-lr){ - memmove(os->lacing_vals,os->lacing_vals+lr, - (os->lacing_fill-lr)*sizeof(*os->lacing_vals)); - memmove(os->granule_vals,os->granule_vals+lr, - (os->lacing_fill-lr)*sizeof(*os->granule_vals)); - } - os->lacing_fill-=lr; - os->lacing_packet-=lr; - os->lacing_returned=0; - } - } - - /* check the serial number */ - if(serialno!=os->serialno)return(-1); - if(version>0)return(-1); - - _os_lacing_expand(os,segments+1); - - /* are we in sequence? */ - if(pageno!=os->pageno){ - int i; - - /* unroll previous partial packet (if any) */ - for(i=os->lacing_packet;ilacing_fill;i++) - os->body_fill-=os->lacing_vals[i]&0xff; - os->lacing_fill=os->lacing_packet; - - /* make a note of dropped data in segment table */ - if(os->pageno!=-1){ - os->lacing_vals[os->lacing_fill++]=0x400; - os->lacing_packet++; - } - } - - /* are we a 'continued packet' page? If so, we may need to skip - some segments */ - if(continued){ - if(os->lacing_fill<1 || - os->lacing_vals[os->lacing_fill-1]==0x400){ - bos=0; - for(;segptrbody_data+os->body_fill,body,bodysize); - os->body_fill+=bodysize; - } - - { - int saved=-1; - while(segptrlacing_vals[os->lacing_fill]=val; - os->granule_vals[os->lacing_fill]=-1; - - if(bos){ - os->lacing_vals[os->lacing_fill]|=0x100; - bos=0; - } - - if(val<255)saved=os->lacing_fill; - - os->lacing_fill++; - segptr++; - - if(val<255)os->lacing_packet=os->lacing_fill; - } - - /* set the granulepos on the last granuleval of the last full packet */ - if(saved!=-1){ - os->granule_vals[saved]=granulepos; - } - - } - - if(eos){ - os->e_o_s=1; - if(os->lacing_fill>0) - os->lacing_vals[os->lacing_fill-1]|=0x200; - } - - os->pageno=pageno+1; - - return(0); -} - -/* clear things to an initial state. Good to call, eg, before seeking */ -int ogg_sync_reset(ogg_sync_state *oy){ - oy->fill=0; - oy->returned=0; - oy->unsynced=0; - oy->headerbytes=0; - oy->bodybytes=0; - return(0); -} - -int ogg_stream_reset(ogg_stream_state *os){ - os->body_fill=0; - os->body_returned=0; - - os->lacing_fill=0; - os->lacing_packet=0; - os->lacing_returned=0; - - os->header_fill=0; - - os->e_o_s=0; - os->b_o_s=0; - os->pageno=-1; - os->packetno=0; - os->granulepos=0; - - return(0); -} - -int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){ - ogg_stream_reset(os); - os->serialno=serialno; - return(0); -} - -static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){ - - /* The last part of decode. We have the stream broken into packet - segments. Now we need to group them into packets (or return the - out of sync markers) */ - - int ptr=os->lacing_returned; - - if(os->lacing_packet<=ptr)return(0); - - if(os->lacing_vals[ptr]&0x400){ - /* we need to tell the codec there's a gap; it might need to - handle previous packet dependencies. */ - os->lacing_returned++; - os->packetno++; - return(-1); - } - - if(!op && !adv)return(1); /* just using peek as an inexpensive way - to ask if there's a whole packet - waiting */ - - /* Gather the whole packet. We'll have no holes or a partial packet */ - { - int size=os->lacing_vals[ptr]&0xff; - int bytes=size; - int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */ - int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */ - - while(size==255){ - int val=os->lacing_vals[++ptr]; - size=val&0xff; - if(val&0x200)eos=0x200; - bytes+=size; - } - - if(op){ - op->e_o_s=eos; - op->b_o_s=bos; - op->packet=os->body_data+os->body_returned; - op->packetno=os->packetno; - op->granulepos=os->granule_vals[ptr]; - op->bytes=bytes; - } - - if(adv){ - os->body_returned+=bytes; - os->lacing_returned=ptr+1; - os->packetno++; - } - } - return(1); -} - -int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){ - return _packetout(os,op,1); -} - -int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){ - return _packetout(os,op,0); -} - -void ogg_packet_clear(ogg_packet *op) { - _ogg_free(op->packet); - memset(op, 0, sizeof(*op)); -} - -#ifdef _V_SELFTEST -#include - -ogg_stream_state os_en, os_de; -ogg_sync_state oy; - -void checkpacket(ogg_packet *op,int len, int no, int pos){ - long j; - static int sequence=0; - static int lastno=0; - - if(op->bytes!=len){ - fprintf(stderr,"incorrect packet length!\n"); - exit(1); - } - if(op->granulepos!=pos){ - fprintf(stderr,"incorrect packet position!\n"); - exit(1); - } - - /* packet number just follows sequence/gap; adjust the input number - for that */ - if(no==0){ - sequence=0; - }else{ - sequence++; - if(no>lastno+1) - sequence++; - } - lastno=no; - if(op->packetno!=sequence){ - fprintf(stderr,"incorrect packet sequence %ld != %d\n", - (long)(op->packetno),sequence); - exit(1); - } - - /* Test data */ - for(j=0;jbytes;j++) - if(op->packet[j]!=((j+no)&0xff)){ - fprintf(stderr,"body data mismatch (1) at pos %ld: %x!=%lx!\n\n", - j,op->packet[j],(j+no)&0xff); - exit(1); - } -} - -void check_page(unsigned char *data,const int *header,ogg_page *og){ - long j; - /* Test data */ - for(j=0;jbody_len;j++) - if(og->body[j]!=data[j]){ - fprintf(stderr,"body data mismatch (2) at pos %ld: %x!=%x!\n\n", - j,data[j],og->body[j]); - exit(1); - } - - /* Test header */ - for(j=0;jheader_len;j++){ - if(og->header[j]!=header[j]){ - fprintf(stderr,"header content mismatch at pos %ld:\n",j); - for(j=0;jheader[j]); - fprintf(stderr,"\n"); - exit(1); - } - } - if(og->header_len!=header[26]+27){ - fprintf(stderr,"header length incorrect! (%ld!=%d)\n", - og->header_len,header[26]+27); - exit(1); - } -} - -void print_header(ogg_page *og){ - int j; - fprintf(stderr,"\nHEADER:\n"); - fprintf(stderr," capture: %c %c %c %c version: %d flags: %x\n", - og->header[0],og->header[1],og->header[2],og->header[3], - (int)og->header[4],(int)og->header[5]); - - fprintf(stderr," granulepos: %d serialno: %d pageno: %ld\n", - (og->header[9]<<24)|(og->header[8]<<16)| - (og->header[7]<<8)|og->header[6], - (og->header[17]<<24)|(og->header[16]<<16)| - (og->header[15]<<8)|og->header[14], - ((long)(og->header[21])<<24)|(og->header[20]<<16)| - (og->header[19]<<8)|og->header[18]); - - fprintf(stderr," checksum: %02x:%02x:%02x:%02x\n segments: %d (", - (int)og->header[22],(int)og->header[23], - (int)og->header[24],(int)og->header[25], - (int)og->header[26]); - - for(j=27;jheader_len;j++) - fprintf(stderr,"%d ",(int)og->header[j]); - fprintf(stderr,")\n\n"); -} - -void copy_page(ogg_page *og){ - unsigned char *temp=_ogg_malloc(og->header_len); - memcpy(temp,og->header,og->header_len); - og->header=temp; - - temp=_ogg_malloc(og->body_len); - memcpy(temp,og->body,og->body_len); - og->body=temp; -} - -void free_page(ogg_page *og){ - _ogg_free (og->header); - _ogg_free (og->body); -} - -void error(void){ - fprintf(stderr,"error!\n"); - exit(1); -} - -/* 17 only */ -const int head1_0[] = {0x4f,0x67,0x67,0x53,0,0x06, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0x15,0xed,0xec,0x91, - 1, - 17}; - -/* 17, 254, 255, 256, 500, 510, 600 byte, pad */ -const int head1_1[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0x59,0x10,0x6c,0x2c, - 1, - 17}; -const int head2_1[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x89,0x33,0x85,0xce, - 13, - 254,255,0,255,1,255,245,255,255,0, - 255,255,90}; - -/* nil packets; beginning,middle,end */ -const int head1_2[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; -const int head2_2[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x28,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x5c,0x3f,0x66,0xcb, - 17, - 17,254,255,0,0,255,1,0,255,245,255,255,0, - 255,255,90,0}; - -/* large initial packet */ -const int head1_3[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0x01,0x27,0x31,0xaa, - 18, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,10}; - -const int head2_3[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x7f,0x4e,0x8a,0xd2, - 4, - 255,4,255,0}; - - -/* continuing packet test */ -const int head1_4[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_4[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x54,0x05,0x51,0xc8, - 17, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255}; - -const int head3_4[] = {0x4f,0x67,0x67,0x53,0,0x05, - 0x07,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0xc8,0xc3,0xcb,0xed, - 5, - 10,255,4,255,0}; - - -/* page with the 255 segment limit */ -const int head1_5[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_5[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0xfc,0x03,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0xed,0x2a,0x2e,0xa7, - 255, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10}; - -const int head3_5[] = {0x4f,0x67,0x67,0x53,0,0x04, - 0x07,0x00,0x04,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0x6c,0x3b,0x82,0x3d, - 1, - 50}; - - -/* packet that overspans over an entire page */ -const int head1_6[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_6[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x3c,0xd9,0x4d,0x3f, - 17, - 100,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255}; - -const int head3_6[] = {0x4f,0x67,0x67,0x53,0,0x01, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0x01,0xd2,0xe5,0xe5, - 17, - 255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255}; - -const int head4_6[] = {0x4f,0x67,0x67,0x53,0,0x05, - 0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,3,0,0,0, - 0xef,0xdd,0x88,0xde, - 7, - 255,255,75,255,4,255,0}; - -/* packet that overspans over an entire page */ -const int head1_7[] = {0x4f,0x67,0x67,0x53,0,0x02, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,0,0,0,0, - 0xff,0x7b,0x23,0x17, - 1, - 0}; - -const int head2_7[] = {0x4f,0x67,0x67,0x53,0,0x00, - 0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,1,0,0,0, - 0x3c,0xd9,0x4d,0x3f, - 17, - 100,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255}; - -const int head3_7[] = {0x4f,0x67,0x67,0x53,0,0x05, - 0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x02,0x03,0x04,2,0,0,0, - 0xd4,0xe0,0x60,0xe5, - 1,0}; - -void test_pack(const int *pl, const int **headers, int byteskip, - int pageskip, int packetskip){ - unsigned char *data=_ogg_malloc(1024*1024); /* for scripted test cases only */ - long inptr=0; - long outptr=0; - long deptr=0; - long depacket=0; - long granule_pos=7,pageno=0; - int i,j,packets,pageout=pageskip; - int eosflag=0; - int bosflag=0; - - int byteskipcount=0; - - ogg_stream_reset(&os_en); - ogg_stream_reset(&os_de); - ogg_sync_reset(&oy); - - for(packets=0;packetsbyteskip){ - memcpy(next,og.header,byteskipcount-byteskip); - next+=byteskipcount-byteskip; - byteskipcount=byteskip; - } - - byteskipcount+=og.body_len; - if(byteskipcount>byteskip){ - memcpy(next,og.body,byteskipcount-byteskip); - next+=byteskipcount-byteskip; - byteskipcount=byteskip; - } - - ogg_sync_wrote(&oy,next-buf); - - while(1){ - int ret=ogg_sync_pageout(&oy,&og_de); - if(ret==0)break; - if(ret<0)continue; - /* got a page. Happy happy. Verify that it's good. */ - - fprintf(stderr,"(%ld), ",pageout); - - check_page(data+deptr,headers[pageout],&og_de); - deptr+=og_de.body_len; - pageout++; - - /* submit it to deconstitution */ - ogg_stream_pagein(&os_de,&og_de); - - /* packets out? */ - while(ogg_stream_packetpeek(&os_de,&op_de2)>0){ - ogg_stream_packetpeek(&os_de,NULL); - ogg_stream_packetout(&os_de,&op_de); /* just catching them all */ - - /* verify peek and out match */ - if(memcmp(&op_de,&op_de2,sizeof(op_de))){ - fprintf(stderr,"packetout != packetpeek! pos=%ld\n", - depacket); - exit(1); - } - - /* verify the packet! */ - /* check data */ - if(memcmp(data+depacket,op_de.packet,op_de.bytes)){ - fprintf(stderr,"packet data mismatch in decode! pos=%ld\n", - depacket); - exit(1); - } - /* check bos flag */ - if(bosflag==0 && op_de.b_o_s==0){ - fprintf(stderr,"b_o_s flag not set on packet!\n"); - exit(1); - } - if(bosflag && op_de.b_o_s){ - fprintf(stderr,"b_o_s flag incorrectly set on packet!\n"); - exit(1); - } - bosflag=1; - depacket+=op_de.bytes; - - /* check eos flag */ - if(eosflag){ - fprintf(stderr,"Multiple decoded packets with eos flag!\n"); - exit(1); - } - - if(op_de.e_o_s)eosflag=1; - - /* check granulepos flag */ - if(op_de.granulepos!=-1){ - fprintf(stderr," granule:%ld ",(long)op_de.granulepos); - } - } - } - } - } - } - } - _ogg_free(data); - if(headers[pageno]!=NULL){ - fprintf(stderr,"did not write last page!\n"); - exit(1); - } - if(headers[pageout]!=NULL){ - fprintf(stderr,"did not decode last page!\n"); - exit(1); - } - if(inptr!=outptr){ - fprintf(stderr,"encoded page data incomplete!\n"); - exit(1); - } - if(inptr!=deptr){ - fprintf(stderr,"decoded page data incomplete!\n"); - exit(1); - } - if(inptr!=depacket){ - fprintf(stderr,"decoded packet data incomplete!\n"); - exit(1); - } - if(!eosflag){ - fprintf(stderr,"Never got a packet with EOS set!\n"); - exit(1); - } - fprintf(stderr,"ok.\n"); -} - -int main(void){ - - ogg_stream_init(&os_en,0x04030201); - ogg_stream_init(&os_de,0x04030201); - ogg_sync_init(&oy); - - /* Exercise each code path in the framing code. Also verify that - the checksums are working. */ - - { - /* 17 only */ - const int packets[]={17, -1}; - const int *headret[]={head1_0,NULL}; - - fprintf(stderr,"testing single page encoding... "); - test_pack(packets,headret,0,0,0); - } - - { - /* 17, 254, 255, 256, 500, 510, 600 byte, pad */ - const int packets[]={17, 254, 255, 256, 500, 510, 600, -1}; - const int *headret[]={head1_1,head2_1,NULL}; - - fprintf(stderr,"testing basic page encoding... "); - test_pack(packets,headret,0,0,0); - } - - { - /* nil packets; beginning,middle,end */ - const int packets[]={0,17, 254, 255, 0, 256, 0, 500, 510, 600, 0, -1}; - const int *headret[]={head1_2,head2_2,NULL}; - - fprintf(stderr,"testing basic nil packets... "); - test_pack(packets,headret,0,0,0); - } - - { - /* large initial packet */ - const int packets[]={4345,259,255,-1}; - const int *headret[]={head1_3,head2_3,NULL}; - - fprintf(stderr,"testing initial-packet lacing > 4k... "); - test_pack(packets,headret,0,0,0); - } - - { - /* continuing packet test */ - const int packets[]={0,4345,259,255,-1}; - const int *headret[]={head1_4,head2_4,head3_4,NULL}; - - fprintf(stderr,"testing single packet page span... "); - test_pack(packets,headret,0,0,0); - } - - /* page with the 255 segment limit */ - { - - const int packets[]={0,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,50,-1}; - const int *headret[]={head1_5,head2_5,head3_5,NULL}; - - fprintf(stderr,"testing max packet segments... "); - test_pack(packets,headret,0,0,0); - } - - { - /* packet that overspans over an entire page */ - const int packets[]={0,100,9000,259,255,-1}; - const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL}; - - fprintf(stderr,"testing very large packets... "); - test_pack(packets,headret,0,0,0); - } - - { - /* test for the libogg 1.1.1 resync in large continuation bug - found by Josh Coalson) */ - const int packets[]={0,100,9000,259,255,-1}; - const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL}; - - fprintf(stderr,"testing continuation resync in very large packets... "); - test_pack(packets,headret,100,2,3); - } - - { - /* term only page. why not? */ - const int packets[]={0,100,4080,-1}; - const int *headret[]={head1_7,head2_7,head3_7,NULL}; - - fprintf(stderr,"testing zero data page (1 nil packet)... "); - test_pack(packets,headret,0,0,0); - } - - - - { - /* build a bunch of pages for testing */ - unsigned char *data=_ogg_malloc(1024*1024); - int pl[]={0,100,4079,2956,2057,76,34,912,0,234,1000,1000,1000,300,-1}; - int inptr=0,i,j; - ogg_page og[5]; - - ogg_stream_reset(&os_en); - - for(i=0;pl[i]!=-1;i++){ - ogg_packet op; - int len=pl[i]; - - op.packet=data+inptr; - op.bytes=len; - op.e_o_s=(pl[i+1]<0?1:0); - op.granulepos=(i+1)*1000; - - for(j=0;j0)error(); - - /* Test fractional page inputs: incomplete fixed header */ - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+3, - 20); - ogg_sync_wrote(&oy,20); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - /* Test fractional page inputs: incomplete header */ - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+23, - 5); - ogg_sync_wrote(&oy,5); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - /* Test fractional page inputs: incomplete body */ - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+28, - og[1].header_len-28); - ogg_sync_wrote(&oy,og[1].header_len-28); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,1000); - ogg_sync_wrote(&oy,1000); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body+1000, - og[1].body_len-1000); - ogg_sync_wrote(&oy,og[1].body_len-1000); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Test fractional page inputs: page + incomplete capture */ - { - ogg_page og_de; - fprintf(stderr,"Testing sync on 1+partial inputs... "); - ogg_sync_reset(&oy); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - og[1].header_len); - ogg_sync_wrote(&oy,og[1].header_len); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - 20); - ogg_sync_wrote(&oy,20); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+20, - og[1].header_len-20); - ogg_sync_wrote(&oy,og[1].header_len-20); - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Test recapture: garbage + page */ - { - ogg_page og_de; - fprintf(stderr,"Testing search for capture... "); - ogg_sync_reset(&oy); - - /* 'garbage' */ - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - og[1].header_len); - ogg_sync_wrote(&oy,og[1].header_len); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header, - 20); - ogg_sync_wrote(&oy,20); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header+20, - og[2].header_len-20); - ogg_sync_wrote(&oy,og[2].header_len-20); - memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body, - og[2].body_len); - ogg_sync_wrote(&oy,og[2].body_len); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Test recapture: page + garbage + page */ - { - ogg_page og_de; - fprintf(stderr,"Testing recapture... "); - ogg_sync_reset(&oy); - - memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header, - og[1].header_len); - ogg_sync_wrote(&oy,og[1].header_len); - - memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body, - og[1].body_len); - ogg_sync_wrote(&oy,og[1].body_len); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header, - og[2].header_len); - ogg_sync_wrote(&oy,og[2].header_len); - - memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header, - og[2].header_len); - ogg_sync_wrote(&oy,og[2].header_len); - - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body, - og[2].body_len-5); - ogg_sync_wrote(&oy,og[2].body_len-5); - - memcpy(ogg_sync_buffer(&oy,og[3].header_len),og[3].header, - og[3].header_len); - ogg_sync_wrote(&oy,og[3].header_len); - - memcpy(ogg_sync_buffer(&oy,og[3].body_len),og[3].body, - og[3].body_len); - ogg_sync_wrote(&oy,og[3].body_len); - - if(ogg_sync_pageout(&oy,&og_de)>0)error(); - if(ogg_sync_pageout(&oy,&og_de)<=0)error(); - - fprintf(stderr,"ok.\n"); - } - - /* Free page data that was previously copied */ - { - for(i=0;i<5;i++){ - free_page(&og[i]); - } - } - } - - return(0); -} - -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/juce_OggVorbisHeader.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/juce_OggVorbisHeader.h deleted file mode 100644 index b38bae2850..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/juce_OggVorbisHeader.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -// This file is included at the start of each Ogg-Vorbis .c file, just to do a few housekeeping -// tasks.. - - -#include "../../../../../juce_Config.h" - -#ifdef _MSC_VER - #pragma warning (disable: 4267 4127 4244 4996 4100 4701 4702 4013 4133 4206 4305 4189 4706) -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/AUTHORS b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/AUTHORS deleted file mode 100644 index 0da10363c0..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Monty - -and the rest of the Xiph.org Foundation. diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/COPYING b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/COPYING deleted file mode 100644 index 7cf076b68f..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/COPYING +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2002-2004 Xiph.org Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -- Neither the name of the Xiph.org Foundation nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/README b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/README deleted file mode 100644 index 79178e7fdd..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/README +++ /dev/null @@ -1,132 +0,0 @@ -******************************************************************** -* * -* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * -* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * -* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * -* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * -* * -* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2004 * -* by the Xiph.org Foundation, http://www.xiph.org/ * -* * -******************************************************************** - -Vorbis is a general purpose audio and music encoding format -contemporary to MPEG-4's AAC and TwinVQ, the next generation beyond -MPEG audio layer 3. Unlike the MPEG sponsored formats (and other -proprietary formats such as RealAudio G2 and Windows' flavor of the -month), the Vorbis CODEC specification belongs to the public domain. -All the technical details are published and documented, and any -software entity may make full use of the format without license -fee, royalty or patent concerns. - -This package contains: - -* libvorbis, a BSD-style license software implementation of - the Vorbis specification by the Xiph.Org Foundation - (http://www.xiph.org/) - -* libvorbisfile, a BSD-style license convenience library - built on Vorbis designed to simplify common uses - -* libvorbisenc, a BSD-style license library that provides a simple, - programmatic encoding setup interface - -* example code making use of libogg, libvorbis, libvorbisfile and - libvorbisenc - -WHAT'S HERE: - -This source distribution includes libvorbis and an example -encoder/player to demonstrate use of libvorbis as well as -documentation on the Ogg Vorbis audio coding format. - -You'll need libogg (distributed separately) to compile this library. -A more comprehensive set of utilities is available in the vorbis-tools -package. - -Directory: - -./lib The source for the libraries, a BSD-license implementation - of the public domain Ogg Vorbis audio encoding format. - -./include Library API headers - -./debian Rules/spec files for building Debian .deb packages - -./doc Vorbis documentation - -./examples Example code illustrating programmatic use of libvorbis, - libvorbisfile and libvorbisenc - -./mac Codewarrior project files and build tweaks for MacOS. - -./macosx Project files for MacOS X. - -./win32 Win32 projects files and build automation - -./vq Internal utilities for training/building new LSP/residue - and auxiliary codebooks. - -CONTACT: - -The Ogg homepage is located at 'http://www.xiph.org/ogg/'. -Vorbis's homepage is located at 'http://www.xiph.org/vorbis/'. -Up to date technical documents, contact information, source code and -pre-built utilities may be found there. - -The user website for Ogg Vorbis software and audio is http://vorbis.com/ - -BUILDING FROM TRUNK: - -Development source is under subversion revision control at -http://svn.xiph.org/trunk/vorbis/. You will also need the -newest versions of autoconf, automake, and libtool in order -to compile vorbis from development source. A configure script -is provided for you in the source tarball distributions. - - [update or checkout latest source] - ./autogen.sh - make - -and as root if desired: - - make install - -This will install the vorbis libraries (static and shared) into -/usr/local/lib, includes into /usr/local/include and API manpages -(once we write some) into /usr/local/man. - -BUILDING FROM TARBALL DISTRIBUTIONS: - - ./configure - make - -and optionally (as root): - make install - -BUILDING RPMS: - -after normal configuring: - - make dist - rpm -ta libvorbis-.tar.gz - -BUILDING ON MACOS 9: - -Vorbis on MacOS 9 is built using Metroworks CodeWarrior. To build it, -first verify that the Ogg libraries are already built following the -instructions in the Ogg module README. Open vorbis/mac/libvorbis.mcp, -switch to the "Targets" pane, select everything, and make the project. -Do the same thing to build libvorbisenc.mcp, and libvorbisfile.mcp (in -that order). In vorbis/mac/Output you will now have both debug and final -versions of Vorbis shared libraries to link your projects against. - -To build a project using Ogg Vorbis, add access paths to your -CodeWarrior project for the ogg/include, ogg/mac/Output, -vorbis/include, and vorbis/mac/Output folders. Be sure that -"interpret DOS and Unix paths" is turned on in your project; it can -be found in the "access paths" pane in your project settings. Now -simply add the shared libraries you need to your project (OggLib and -VorbisLib at least) and #include "ogg/ogg.h" and "vorbis/codec.h" -wherever you need to access Ogg and Vorbis functionality. - diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/analysis.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/analysis.c deleted file mode 100644 index a8d244dee2..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/analysis.c +++ /dev/null @@ -1,113 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: single-block PCM analysis mode dispatch - last mod: $Id: analysis.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "registry.h" -#include "scales.h" -#include "os.h" -#include "misc.h" - -int analysis_noisy=1; - -/* decides between modes, dispatches to the appropriate mapping. */ -int vorbis_analysis(vorbis_block *vb, ogg_packet *op){ - int ret,i; - vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal; - - vb->glue_bits=0; - vb->time_bits=0; - vb->floor_bits=0; - vb->res_bits=0; - - /* first things first. Make sure encode is ready */ - for(i=0;ipacketblob[i]); - - /* we only have one mapping type (0), and we let the mapping code - itself figure out what soft mode to use. This allows easier - bitrate management */ - - if((ret=_mapping_P[0]->forward(vb))) - return(ret); - - if(op){ - if(vorbis_bitrate_managed(vb)) - /* The app is using a bitmanaged mode... but not using the - bitrate management interface. */ - return(OV_EINVAL); - - op->packet=oggpack_get_buffer(&vb->opb); - op->bytes=oggpack_bytes(&vb->opb); - op->b_o_s=0; - op->e_o_s=vb->eofflag; - op->granulepos=vb->granulepos; - op->packetno=vb->sequence; /* for sake of completeness */ - } - return(0); -} - -/* there was no great place to put this.... */ -void _analysis_output_always(const char *base,int i,float *v,int n,int bark,int dB,ogg_int64_t off){ - int j; - FILE *of; - char buffer[80]; - - /* if(i==5870){*/ - sprintf(buffer,"%s_%d.m",base,i); - of=fopen(buffer,"w"); - - if(!of)perror("failed to open data dump file"); - - for(j=0;j -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "os.h" -#include "misc.h" -#include "bitrate.h" - -/* compute bitrate tracking setup */ -void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){ - codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; - bitrate_manager_info *bi=&ci->bi; - - memset(bm,0,sizeof(*bm)); - - if(bi && (bi->reservoir_bits>0)){ - long ratesamples=vi->rate; - int halfsamples=ci->blocksizes[0]>>1; - - bm->short_per_long=ci->blocksizes[1]/ci->blocksizes[0]; - bm->managed=1; - - bm->avg_bitsper= rint(1.*bi->avg_rate*halfsamples/ratesamples); - bm->min_bitsper= rint(1.*bi->min_rate*halfsamples/ratesamples); - bm->max_bitsper= rint(1.*bi->max_rate*halfsamples/ratesamples); - - bm->avgfloat=PACKETBLOBS/2; - - /* not a necessary fix, but one that leads to a more balanced - typical initialization */ - { - long desired_fill=bi->reservoir_bits*bi->reservoir_bias; - bm->minmax_reservoir=desired_fill; - bm->avg_reservoir=desired_fill; - } - - } -} - -void vorbis_bitrate_clear(bitrate_manager_state *bm){ - memset(bm,0,sizeof(*bm)); - return; -} - -int vorbis_bitrate_managed(vorbis_block *vb){ - vorbis_dsp_state *vd=vb->vd; - private_state *b=(private_state*)vd->backend_state; - bitrate_manager_state *bm=&b->bms; - - if(bm && bm->managed)return(1); - return(0); -} - -/* finish taking in the block we just processed */ -int vorbis_bitrate_addblock(vorbis_block *vb){ - vorbis_block_internal *vbi=(vorbis_block_internal*)vb->internal; - vorbis_dsp_state *vd=vb->vd; - private_state *b=(private_state*)vd->backend_state; - bitrate_manager_state *bm=&b->bms; - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - bitrate_manager_info *bi=&ci->bi; - - int choice=rint(bm->avgfloat); - long this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - long min_target_bits=(vb->W?bm->min_bitsper*bm->short_per_long:bm->min_bitsper); - long max_target_bits=(vb->W?bm->max_bitsper*bm->short_per_long:bm->max_bitsper); - int samples=ci->blocksizes[vb->W]>>1; - long desired_fill=bi->reservoir_bits*bi->reservoir_bias; - if(!bm->managed){ - /* not a bitrate managed stream, but for API simplicity, we'll - buffer the packet to keep the code path clean */ - - if(bm->vb)return(-1); /* one has been submitted without - being claimed */ - bm->vb=vb; - return(0); - } - - bm->vb=vb; - - /* look ahead for avg floater */ - if(bm->avg_bitsper>0){ - double slew=0.; - long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper); - double slewlimit= 15./bi->slew_damp; - - /* choosing a new floater: - if we're over target, we slew down - if we're under target, we slew up - - choose slew as follows: look through packetblobs of this frame - and set slew as the first in the appropriate direction that - gives us the slew we want. This may mean no slew if delta is - already favorable. - - Then limit slew to slew max */ - - if(bm->avg_reservoir+(this_bits-avg_target_bits)>desired_fill){ - while(choice>0 && this_bits>avg_target_bits && - bm->avg_reservoir+(this_bits-avg_target_bits)>desired_fill){ - choice--; - this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - } - }else if(bm->avg_reservoir+(this_bits-avg_target_bits)avg_reservoir+(this_bits-avg_target_bits)packetblob[choice])*8; - } - } - - slew=rint(choice-bm->avgfloat)/samples*vi->rate; - if(slew<-slewlimit)slew=-slewlimit; - if(slew>slewlimit)slew=slewlimit; - choice=rint(bm->avgfloat+= slew/vi->rate*samples); - this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - } - - - - /* enforce min(if used) on the current floater (if used) */ - if(bm->min_bitsper>0){ - /* do we need to force the bitrate up? */ - if(this_bitsminmax_reservoir-(min_target_bits-this_bits)<0){ - choice++; - if(choice>=PACKETBLOBS)break; - this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - } - } - } - - /* enforce max (if used) on the current floater (if used) */ - if(bm->max_bitsper>0){ - /* do we need to force the bitrate down? */ - if(this_bits>max_target_bits){ - while(bm->minmax_reservoir+(this_bits-max_target_bits)>bi->reservoir_bits){ - choice--; - if(choice<0)break; - this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - } - } - } - - /* Choice of packetblobs now made based on floater, and min/max - requirements. Now boundary check extreme choices */ - - if(choice<0){ - /* choosing a smaller packetblob is insufficient to trim bitrate. - frame will need to be truncated */ - long maxsize=(max_target_bits+(bi->reservoir_bits-bm->minmax_reservoir))/8; - bm->choice=choice=0; - - if(oggpack_bytes(vbi->packetblob[choice])>maxsize){ - - oggpack_writetrunc(vbi->packetblob[choice],maxsize*8); - this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - } - }else{ - long minsize=(min_target_bits-bm->minmax_reservoir+7)/8; - if(choice>=PACKETBLOBS) - choice=PACKETBLOBS-1; - - bm->choice=choice; - - /* prop up bitrate according to demand. pad this frame out with zeroes */ - minsize-=oggpack_bytes(vbi->packetblob[choice]); - while(minsize-->0)oggpack_write(vbi->packetblob[choice],0,8); - this_bits=oggpack_bytes(vbi->packetblob[choice])*8; - - } - - /* now we have the final packet and the final packet size. Update statistics */ - /* min and max reservoir */ - if(bm->min_bitsper>0 || bm->max_bitsper>0){ - - if(max_target_bits>0 && this_bits>max_target_bits){ - bm->minmax_reservoir+=(this_bits-max_target_bits); - }else if(min_target_bits>0 && this_bitsminmax_reservoir+=(this_bits-min_target_bits); - }else{ - /* inbetween; we want to take reservoir toward but not past desired_fill */ - if(bm->minmax_reservoir>desired_fill){ - if(max_target_bits>0){ /* logical bulletproofing against initialization state */ - bm->minmax_reservoir+=(this_bits-max_target_bits); - if(bm->minmax_reservoirminmax_reservoir=desired_fill; - }else{ - bm->minmax_reservoir=desired_fill; - } - }else{ - if(min_target_bits>0){ /* logical bulletproofing against initialization state */ - bm->minmax_reservoir+=(this_bits-min_target_bits); - if(bm->minmax_reservoir>desired_fill)bm->minmax_reservoir=desired_fill; - }else{ - bm->minmax_reservoir=desired_fill; - } - } - } - } - - /* avg reservoir */ - if(bm->avg_bitsper>0){ - long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper); - bm->avg_reservoir+=this_bits-avg_target_bits; - } - - return(0); -} - -int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){ - private_state *b=(private_state*)vd->backend_state; - bitrate_manager_state *bm=&b->bms; - vorbis_block *vb=bm->vb; - int choice=PACKETBLOBS/2; - if(!vb)return 0; - - if(op){ - vorbis_block_internal *vbi=(vorbis_block_internal*)vb->internal; - - if(vorbis_bitrate_managed(vb)) - choice=bm->choice; - - op->packet=oggpack_get_buffer(vbi->packetblob[choice]); - op->bytes=oggpack_bytes(vbi->packetblob[choice]); - op->b_o_s=0; - op->e_o_s=vb->eofflag; - op->granulepos=vb->granulepos; - op->packetno=vb->sequence; /* for sake of completeness */ - } - - bm->vb=0; - return(1); -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/bitrate.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/bitrate.h deleted file mode 100644 index 04380e5b87..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/bitrate.h +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: bitrate tracking and management - last mod: $Id: bitrate.h,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_BITRATE_H_ -#define _V_BITRATE_H_ - -#include "../../codec.h" -#include "codec_internal.h" -#include "os.h" - -/* encode side bitrate tracking */ -typedef struct bitrate_manager_state { - int managed; - - long avg_reservoir; - long minmax_reservoir; - long avg_bitsper; - long min_bitsper; - long max_bitsper; - - long short_per_long; - double avgfloat; - - vorbis_block *vb; - int choice; -} bitrate_manager_state; - -typedef struct bitrate_manager_info{ - long avg_rate; - long min_rate; - long max_rate; - long reservoir_bits; - double reservoir_bias; - - double slew_damp; - -} bitrate_manager_info; - -extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs); -extern void vorbis_bitrate_clear(bitrate_manager_state *bs); -extern int vorbis_bitrate_managed(vorbis_block *vb); -extern int vorbis_bitrate_addblock(vorbis_block *vb); -extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/block.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/block.c deleted file mode 100644 index f6125b0210..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/block.c +++ /dev/null @@ -1,983 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2003 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: PCM data vector blocking, windowing and dis/reassembly - last mod: $Id: block.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - Handle windowing, overlap-add, etc of the PCM vectors. This is made - more amusing by Vorbis' current two allowed block sizes. - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" - -#include "window.h" -#include "mdct.h" -#include "lpc.h" -#include "registry.h" -#include "misc.h" - -/* pcm accumulator examples (not exhaustive): - - <-------------- lW ----------------> - <--------------- W ----------------> -: .....|..... _______________ | -: .''' | '''_--- | |\ | -:.....''' |_____--- '''......| | \_______| -:.................|__________________|_______|__|______| - |<------ Sl ------>| > Sr < |endW - |beginSl |endSl | |endSr - |beginW |endlW |beginSr - - - |< lW >| - <--------------- W ----------------> - | | .. ______________ | - | | ' `/ | ---_ | - |___.'___/`. | ---_____| - |_______|__|_______|_________________| - | >|Sl|< |<------ Sr ----->|endW - | | |endSl |beginSr |endSr - |beginW | |endlW - mult[0] |beginSl mult[n] - - <-------------- lW -----------------> - |<--W-->| -: .............. ___ | | -: .''' |`/ \ | | -:.....''' |/`....\|...| -:.........................|___|___|___| - |Sl |Sr |endW - | | |endSr - | |beginSr - | |endSl - |beginSl - |beginW -*/ - -/* block abstraction setup *********************************************/ - -#ifndef WORD_ALIGN -#define WORD_ALIGN 8 -#endif - -int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){ - int i; - memset(vb,0,sizeof(*vb)); - vb->vd=v; - vb->localalloc=0; - vb->localstore=NULL; - if(v->analysisp){ - vorbis_block_internal *vbi=(vorbis_block_internal*) - (vb->internal=(vorbis_block_internal*)_ogg_calloc(1,sizeof(vorbis_block_internal))); - vbi->ampmax=-9999; - - for(i=0;ipacketblob[i]=&vb->opb; - }else{ - vbi->packetblob[i]= - (oggpack_buffer*) _ogg_calloc(1,sizeof(oggpack_buffer)); - } - oggpack_writeinit(vbi->packetblob[i]); - } - } - - return(0); -} - -void *_vorbis_block_alloc(vorbis_block *vb,long bytes){ - bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1); - if(bytes+vb->localtop>vb->localalloc){ - /* can't just _ogg_realloc... there are outstanding pointers */ - if(vb->localstore){ - struct alloc_chain *link=(struct alloc_chain*)_ogg_malloc(sizeof(*link)); - vb->totaluse+=vb->localtop; - link->next=vb->reap; - link->ptr=vb->localstore; - vb->reap=link; - } - /* highly conservative */ - vb->localalloc=bytes; - vb->localstore=_ogg_malloc(vb->localalloc); - vb->localtop=0; - } - { - void *ret=(void *)(((char *)vb->localstore)+vb->localtop); - vb->localtop+=bytes; - return ret; - } -} - -/* reap the chain, pull the ripcord */ -void _vorbis_block_ripcord(vorbis_block *vb){ - /* reap the chain */ - struct alloc_chain *reap=vb->reap; - while(reap){ - struct alloc_chain *next=reap->next; - _ogg_free(reap->ptr); - memset(reap,0,sizeof(*reap)); - _ogg_free(reap); - reap=next; - } - /* consolidate storage */ - if(vb->totaluse){ - vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc); - vb->localalloc+=vb->totaluse; - vb->totaluse=0; - } - - /* pull the ripcord */ - vb->localtop=0; - vb->reap=NULL; -} - -int vorbis_block_clear(vorbis_block *vb){ - int i; - vorbis_block_internal *vbi=(vorbis_block_internal*)vb->internal; - - _vorbis_block_ripcord(vb); - if(vb->localstore)_ogg_free(vb->localstore); - - if(vbi){ - for(i=0;ipacketblob[i]); - if(i!=PACKETBLOBS/2)_ogg_free(vbi->packetblob[i]); - } - _ogg_free(vbi); - } - memset(vb,0,sizeof(*vb)); - return(0); -} - -/* Analysis side code, but directly related to blocking. Thus it's - here and not in analysis.c (which is for analysis transforms only). - The init is here because some of it is shared */ - -static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){ - int i; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - private_state *b=NULL; - int hs; - - if(ci==NULL) return 1; - hs=ci->halfrate_flag; - - memset(v,0,sizeof(*v)); - b=(private_state*) (v->backend_state=(private_state*)_ogg_calloc(1,sizeof(*b))); - - v->vi=vi; - b->modebits=ilog2(ci->modes); - - b->transform[0]=(vorbis_look_transform**)_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[0])); - b->transform[1]=(vorbis_look_transform**)_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[1])); - - /* MDCT is tranform 0 */ - - b->transform[0][0]=_ogg_calloc(1,sizeof(mdct_lookup)); - b->transform[1][0]=_ogg_calloc(1,sizeof(mdct_lookup)); - mdct_init((mdct_lookup*)b->transform[0][0],ci->blocksizes[0]>>hs); - mdct_init((mdct_lookup*)b->transform[1][0],ci->blocksizes[1]>>hs); - - /* Vorbis I uses only window type 0 */ - b->window[0]=ilog2(ci->blocksizes[0])-6; - b->window[1]=ilog2(ci->blocksizes[1])-6; - - if(encp){ /* encode/decode differ here */ - - /* analysis always needs an fft */ - drft_init(&b->fft_look[0],ci->blocksizes[0]); - drft_init(&b->fft_look[1],ci->blocksizes[1]); - - /* finish the codebooks */ - if(!ci->fullbooks){ - ci->fullbooks=(codebook*) _ogg_calloc(ci->books,sizeof(*ci->fullbooks)); - for(i=0;ibooks;i++) - vorbis_book_init_encode(ci->fullbooks+i,ci->book_param[i]); - } - - b->psy=(vorbis_look_psy*)_ogg_calloc(ci->psys,sizeof(*b->psy)); - for(i=0;ipsys;i++){ - _vp_psy_init(b->psy+i, - ci->psy_param[i], - &ci->psy_g_param, - ci->blocksizes[ci->psy_param[i]->blockflag]/2, - vi->rate); - } - - v->analysisp=1; - }else{ - /* finish the codebooks */ - if(!ci->fullbooks){ - ci->fullbooks=(codebook*) _ogg_calloc(ci->books,sizeof(*ci->fullbooks)); - for(i=0;ibooks;i++){ - vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]); - /* decode codebooks are now standalone after init */ - vorbis_staticbook_destroy(ci->book_param[i]); - ci->book_param[i]=NULL; - } - } - } - - /* initialize the storage vectors. blocksize[1] is small for encode, - but the correct size for decode */ - v->pcm_storage=ci->blocksizes[1]; - v->pcm=(float**)_ogg_malloc(vi->channels*sizeof(*v->pcm)); - v->pcmret=(float**)_ogg_malloc(vi->channels*sizeof(*v->pcmret)); - { - int i; - for(i=0;ichannels;i++) - v->pcm[i]=(float*)_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i])); - } - - /* all 1 (large block) or 0 (small block) */ - /* explicitly set for the sake of clarity */ - v->lW=0; /* previous window size */ - v->W=0; /* current window size */ - - /* all vector indexes */ - v->centerW=ci->blocksizes[1]/2; - - v->pcm_current=v->centerW; - - /* initialize all the backend lookups */ - b->flr=(vorbis_look_floor**)_ogg_calloc(ci->floors,sizeof(*b->flr)); - b->residue=(vorbis_look_residue**)_ogg_calloc(ci->residues,sizeof(*b->residue)); - - for(i=0;ifloors;i++) - b->flr[i]=_floor_P[ci->floor_type[i]]-> - look(v,ci->floor_param[i]); - - for(i=0;iresidues;i++) - b->residue[i]=_residue_P[ci->residue_type[i]]-> - look(v,ci->residue_param[i]); - - return 0; -} - -/* arbitrary settings and spec-mandated numbers get filled in here */ -int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi){ - private_state *b=NULL; - - if(_vds_shared_init(v,vi,1))return 1; - b=(private_state*)v->backend_state; - b->psy_g_look=_vp_global_look(vi); - - /* Initialize the envelope state storage */ - b->ve=(envelope_lookup*)_ogg_calloc(1,sizeof(*b->ve)); - _ve_envelope_init(b->ve,vi); - - vorbis_bitrate_init(vi,&b->bms); - - /* compressed audio packets start after the headers - with sequence number 3 */ - v->sequence=3; - - return(0); -} - -void vorbis_dsp_clear(vorbis_dsp_state *v){ - int i; - if(v){ - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info*)(vi?vi->codec_setup:NULL); - private_state *b=(private_state*)v->backend_state; - - if(b){ - - if(b->ve){ - _ve_envelope_clear(b->ve); - _ogg_free(b->ve); - } - - if(b->transform[0]){ - mdct_clear((mdct_lookup*) b->transform[0][0]); - _ogg_free(b->transform[0][0]); - _ogg_free(b->transform[0]); - } - if(b->transform[1]){ - mdct_clear((mdct_lookup*) b->transform[1][0]); - _ogg_free(b->transform[1][0]); - _ogg_free(b->transform[1]); - } - - if(b->flr){ - for(i=0;ifloors;i++) - _floor_P[ci->floor_type[i]]-> - free_look(b->flr[i]); - _ogg_free(b->flr); - } - if(b->residue){ - for(i=0;iresidues;i++) - _residue_P[ci->residue_type[i]]-> - free_look(b->residue[i]); - _ogg_free(b->residue); - } - if(b->psy){ - for(i=0;ipsys;i++) - _vp_psy_clear(b->psy+i); - _ogg_free(b->psy); - } - - if(b->psy_g_look)_vp_global_free(b->psy_g_look); - vorbis_bitrate_clear(&b->bms); - - drft_clear(&b->fft_look[0]); - drft_clear(&b->fft_look[1]); - - } - - if(v->pcm){ - for(i=0;ichannels;i++) - if(v->pcm[i])_ogg_free(v->pcm[i]); - _ogg_free(v->pcm); - if(v->pcmret)_ogg_free(v->pcmret); - } - - if(b){ - /* free header, header1, header2 */ - if(b->header)_ogg_free(b->header); - if(b->header1)_ogg_free(b->header1); - if(b->header2)_ogg_free(b->header2); - _ogg_free(b); - } - - memset(v,0,sizeof(*v)); - } -} - -float **vorbis_analysis_buffer(vorbis_dsp_state *v, int vals){ - int i; - vorbis_info *vi=v->vi; - private_state *b=(private_state*)v->backend_state; - - /* free header, header1, header2 */ - if(b->header)_ogg_free(b->header);b->header=NULL; - if(b->header1)_ogg_free(b->header1);b->header1=NULL; - if(b->header2)_ogg_free(b->header2);b->header2=NULL; - - /* Do we have enough storage space for the requested buffer? If not, - expand the PCM (and envelope) storage */ - - if(v->pcm_current+vals>=v->pcm_storage){ - v->pcm_storage=v->pcm_current+vals*2; - - for(i=0;ichannels;i++){ - v->pcm[i]=(float*)_ogg_realloc(v->pcm[i],v->pcm_storage*sizeof(*v->pcm[i])); - } - } - - for(i=0;ichannels;i++) - v->pcmret[i]=v->pcm[i]+v->pcm_current; - - return(v->pcmret); -} - -static void _preextrapolate_helper(vorbis_dsp_state *v){ - int i; - int order=32; - float *lpc=(float*)alloca(order*sizeof(*lpc)); - float *work=(float*)alloca(v->pcm_current*sizeof(*work)); - long j; - v->preextrapolate=1; - - if(v->pcm_current-v->centerW>order*2){ /* safety */ - for(i=0;ivi->channels;i++){ - /* need to run the extrapolation in reverse! */ - for(j=0;jpcm_current;j++) - work[j]=v->pcm[i][v->pcm_current-j-1]; - - /* prime as above */ - vorbis_lpc_from_data(work,lpc,v->pcm_current-v->centerW,order); - - /* run the predictor filter */ - vorbis_lpc_predict(lpc,work+v->pcm_current-v->centerW-order, - order, - work+v->pcm_current-v->centerW, - v->centerW); - - for(j=0;jpcm_current;j++) - v->pcm[i][v->pcm_current-j-1]=work[j]; - - } - } -} - - -/* call with val<=0 to set eof */ - -int vorbis_analysis_wrote(vorbis_dsp_state *v, int vals){ - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - - if(vals<=0){ - int order=32; - int i; - float *lpc=(float*) alloca(order*sizeof(*lpc)); - - /* if it wasn't done earlier (very short sample) */ - if(!v->preextrapolate) - _preextrapolate_helper(v); - - /* We're encoding the end of the stream. Just make sure we have - [at least] a few full blocks of zeroes at the end. */ - /* actually, we don't want zeroes; that could drop a large - amplitude off a cliff, creating spread spectrum noise that will - suck to encode. Extrapolate for the sake of cleanliness. */ - - vorbis_analysis_buffer(v,ci->blocksizes[1]*3); - v->eofflag=v->pcm_current; - v->pcm_current+=ci->blocksizes[1]*3; - - for(i=0;ichannels;i++){ - if(v->eofflag>order*2){ - /* extrapolate with LPC to fill in */ - long n; - - /* make a predictor filter */ - n=v->eofflag; - if(n>ci->blocksizes[1])n=ci->blocksizes[1]; - vorbis_lpc_from_data(v->pcm[i]+v->eofflag-n,lpc,n,order); - - /* run the predictor filter */ - vorbis_lpc_predict(lpc,v->pcm[i]+v->eofflag-order,order, - v->pcm[i]+v->eofflag,v->pcm_current-v->eofflag); - }else{ - /* not enough data to extrapolate (unlikely to happen due to - guarding the overlap, but bulletproof in case that - assumtion goes away). zeroes will do. */ - memset(v->pcm[i]+v->eofflag,0, - (v->pcm_current-v->eofflag)*sizeof(*v->pcm[i])); - - } - } - }else{ - - if(v->pcm_current+vals>v->pcm_storage) - return(OV_EINVAL); - - v->pcm_current+=vals; - - /* we may want to reverse extrapolate the beginning of a stream - too... in case we're beginning on a cliff! */ - /* clumsy, but simple. It only runs once, so simple is good. */ - if(!v->preextrapolate && v->pcm_current-v->centerW>ci->blocksizes[1]) - _preextrapolate_helper(v); - - } - return(0); -} - -/* do the deltas, envelope shaping, pre-echo and determine the size of - the next block on which to continue analysis */ -int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb){ - int i; - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - private_state *b=(private_state*)v->backend_state; - vorbis_look_psy_global *g=b->psy_g_look; - long beginW=v->centerW-ci->blocksizes[v->W]/2,centerNext; - vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal; - - /* check to see if we're started... */ - if(!v->preextrapolate)return(0); - - /* check to see if we're done... */ - if(v->eofflag==-1)return(0); - - /* By our invariant, we have lW, W and centerW set. Search for - the next boundary so we can determine nW (the next window size) - which lets us compute the shape of the current block's window */ - - /* we do an envelope search even on a single blocksize; we may still - be throwing more bits at impulses, and envelope search handles - marking impulses too. */ - { - long bp=_ve_envelope_search(v); - if(bp==-1){ - - if(v->eofflag==0)return(0); /* not enough data currently to search for a - full long block */ - v->nW=0; - }else{ - - if(ci->blocksizes[0]==ci->blocksizes[1]) - v->nW=0; - else - v->nW=bp; - } - } - - centerNext=v->centerW+ci->blocksizes[v->W]/4+ci->blocksizes[v->nW]/4; - - { - /* center of next block + next block maximum right side. */ - - long blockbound=centerNext+ci->blocksizes[v->nW]/2; - if(v->pcm_currentlW=v->lW; - vb->W=v->W; - vb->nW=v->nW; - - if(v->W){ - if(!v->lW || !v->nW){ - vbi->blocktype=BLOCKTYPE_TRANSITION; - /*fprintf(stderr,"-");*/ - }else{ - vbi->blocktype=BLOCKTYPE_LONG; - /*fprintf(stderr,"_");*/ - } - }else{ - if(_ve_envelope_mark(v)){ - vbi->blocktype=BLOCKTYPE_IMPULSE; - /*fprintf(stderr,"|");*/ - - }else{ - vbi->blocktype=BLOCKTYPE_PADDING; - /*fprintf(stderr,".");*/ - - } - } - - vb->vd=v; - vb->sequence=v->sequence++; - vb->granulepos=v->granulepos; - vb->pcmend=ci->blocksizes[v->W]; - - /* copy the vectors; this uses the local storage in vb */ - - /* this tracks 'strongest peak' for later psychoacoustics */ - /* moved to the global psy state; clean this mess up */ - if(vbi->ampmax>g->ampmax)g->ampmax=vbi->ampmax; - g->ampmax=_vp_ampmax_decay(g->ampmax,v); - vbi->ampmax=g->ampmax; - - vb->pcm=(float**)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels); - vbi->pcmdelay=(float**)_vorbis_block_alloc(vb,sizeof(*vbi->pcmdelay)*vi->channels); - for(i=0;ichannels;i++){ - vbi->pcmdelay[i]= - (float*) _vorbis_block_alloc(vb,(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i])); - memcpy(vbi->pcmdelay[i],v->pcm[i],(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i])); - vb->pcm[i]=vbi->pcmdelay[i]+beginW; - - /* before we added the delay - vb->pcm[i]=_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i])); - memcpy(vb->pcm[i],v->pcm[i]+beginW,ci->blocksizes[v->W]*sizeof(*vb->pcm[i])); - */ - - } - - /* handle eof detection: eof==0 means that we've not yet received EOF - eof>0 marks the last 'real' sample in pcm[] - eof<0 'no more to do'; doesn't get here */ - - if(v->eofflag){ - if(v->centerW>=v->eofflag){ - v->eofflag=-1; - vb->eofflag=1; - return(1); - } - } - - /* advance storage vectors and clean up */ - { - int new_centerNext=ci->blocksizes[1]/2; - int movementW=centerNext-new_centerNext; - - if(movementW>0){ - - _ve_envelope_shift(b->ve,movementW); - v->pcm_current-=movementW; - - for(i=0;ichannels;i++) - memmove(v->pcm[i],v->pcm[i]+movementW, - v->pcm_current*sizeof(*v->pcm[i])); - - - v->lW=v->W; - v->W=v->nW; - v->centerW=new_centerNext; - - if(v->eofflag){ - v->eofflag-=movementW; - if(v->eofflag<=0)v->eofflag=-1; - /* do not add padding to end of stream! */ - if(v->centerW>=v->eofflag){ - v->granulepos+=movementW-(v->centerW-v->eofflag); - }else{ - v->granulepos+=movementW; - } - }else{ - v->granulepos+=movementW; - } - } - } - - /* done */ - return(1); -} - -int vorbis_synthesis_restart(vorbis_dsp_state *v){ - vorbis_info *vi=v->vi; - codec_setup_info *ci; - int hs; - - if(!v->backend_state)return -1; - if(!vi)return -1; - ci=(codec_setup_info*) vi->codec_setup; - if(!ci)return -1; - hs=ci->halfrate_flag; - - v->centerW=ci->blocksizes[1]>>(hs+1); - v->pcm_current=v->centerW>>hs; - - v->pcm_returned=-1; - v->granulepos=-1; - v->sequence=-1; - v->eofflag=0; - ((private_state *)(v->backend_state))->sample_count=-1; - - return(0); -} - -int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){ - if(_vds_shared_init(v,vi,0)) return 1; - vorbis_synthesis_restart(v); - - return 0; -} - -/* Unlike in analysis, the window is only partially applied for each - block. The time domain envelope is not yet handled at the point of - calling (as it relies on the previous block). */ - -int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){ - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - private_state *b=(private_state*)v->backend_state; - int hs=ci->halfrate_flag; - int i,j; - - if(!vb)return(OV_EINVAL); - if(v->pcm_current>v->pcm_returned && v->pcm_returned!=-1)return(OV_EINVAL); - - v->lW=v->W; - v->W=vb->W; - v->nW=-1; - - if((v->sequence==-1)|| - (v->sequence+1 != vb->sequence)){ - v->granulepos=-1; /* out of sequence; lose count */ - b->sample_count=-1; - } - - v->sequence=vb->sequence; - - if(vb->pcm){ /* no pcm to process if vorbis_synthesis_trackonly - was called on block */ - int n=ci->blocksizes[v->W]>>(hs+1); - int n0=ci->blocksizes[0]>>(hs+1); - int n1=ci->blocksizes[1]>>(hs+1); - - int thisCenter; - int prevCenter; - - v->glue_bits+=vb->glue_bits; - v->time_bits+=vb->time_bits; - v->floor_bits+=vb->floor_bits; - v->res_bits+=vb->res_bits; - - if(v->centerW){ - thisCenter=n1; - prevCenter=0; - }else{ - thisCenter=0; - prevCenter=n1; - } - - /* v->pcm is now used like a two-stage double buffer. We don't want - to have to constantly shift *or* adjust memory usage. Don't - accept a new block until the old is shifted out */ - - for(j=0;jchannels;j++){ - /* the overlap/add section */ - if(v->lW){ - if(v->W){ - /* large/large */ - float *w=_vorbis_window_get(b->window[1]-hs); - float *pcm=v->pcm[j]+prevCenter; - float *p=vb->pcm[j]; - for(i=0;iwindow[0]-hs); - float *pcm=v->pcm[j]+prevCenter+n1/2-n0/2; - float *p=vb->pcm[j]; - for(i=0;iW){ - /* small/large */ - float *w=_vorbis_window_get(b->window[0]-hs); - float *pcm=v->pcm[j]+prevCenter; - float *p=vb->pcm[j]+n1/2-n0/2; - for(i=0;iwindow[0]-hs); - float *pcm=v->pcm[j]+prevCenter; - float *p=vb->pcm[j]; - for(i=0;ipcm[j]+thisCenter; - float *p=vb->pcm[j]+n; - for(i=0;icenterW) - v->centerW=0; - else - v->centerW=n1; - - /* deal with initial packet state; we do this using the explicit - pcm_returned==-1 flag otherwise we're sensitive to first block - being short or long */ - - if(v->pcm_returned==-1){ - v->pcm_returned=thisCenter; - v->pcm_current=thisCenter; - }else{ - v->pcm_returned=prevCenter; - v->pcm_current=prevCenter+ - ((ci->blocksizes[v->lW]/4+ - ci->blocksizes[v->W]/4)>>hs); - } - - } - - /* track the frame number... This is for convenience, but also - making sure our last packet doesn't end with added padding. If - the last packet is partial, the number of samples we'll have to - return will be past the vb->granulepos. - - This is not foolproof! It will be confused if we begin - decoding at the last page after a seek or hole. In that case, - we don't have a starting point to judge where the last frame - is. For this reason, vorbisfile will always try to make sure - it reads the last two marked pages in proper sequence */ - - if(b->sample_count==-1){ - b->sample_count=0; - }else{ - b->sample_count+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4; - } - - if(v->granulepos==-1){ - if(vb->granulepos!=-1){ /* only set if we have a position to set to */ - - v->granulepos=vb->granulepos; - - /* is this a short page? */ - if(b->sample_count>v->granulepos){ - /* corner case; if this is both the first and last audio page, - then spec says the end is cut, not beginning */ - if(vb->eofflag){ - /* trim the end */ - /* no preceeding granulepos; assume we started at zero (we'd - have to in a short single-page stream) */ - /* granulepos could be -1 due to a seek, but that would result - in a long count, not short count */ - - v->pcm_current-=(b->sample_count-v->granulepos)>>hs; - }else{ - /* trim the beginning */ - v->pcm_returned+=(b->sample_count-v->granulepos)>>hs; - if(v->pcm_returned>v->pcm_current) - v->pcm_returned=v->pcm_current; - } - - } - - } - }else{ - v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4; - if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){ - - if(v->granulepos>vb->granulepos){ - long extra=v->granulepos-vb->granulepos; - - if(extra) - if(vb->eofflag){ - /* partial last frame. Strip the extra samples off */ - v->pcm_current-=extra>>hs; - } /* else {Shouldn't happen *unless* the bitstream is out of - spec. Either way, believe the bitstream } */ - } /* else {Shouldn't happen *unless* the bitstream is out of - spec. Either way, believe the bitstream } */ - v->granulepos=vb->granulepos; - } - } - - /* Update, cleanup */ - - if(vb->eofflag)v->eofflag=1; - return(0); - -} - -/* pcm==NULL indicates we just want the pending samples, no more */ -int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm){ - vorbis_info *vi=v->vi; - - if(v->pcm_returned>-1 && v->pcm_returnedpcm_current){ - if(pcm){ - int i; - for(i=0;ichannels;i++) - v->pcmret[i]=v->pcm[i]+v->pcm_returned; - *pcm=v->pcmret; - } - return(v->pcm_current-v->pcm_returned); - } - return(0); -} - -int vorbis_synthesis_read(vorbis_dsp_state *v,int n){ - if(n && v->pcm_returned+n>v->pcm_current)return(OV_EINVAL); - v->pcm_returned+=n; - return(0); -} - -/* intended for use with a specific vorbisfile feature; we want access - to the [usually synthetic/postextrapolated] buffer and lapping at - the end of a decode cycle, specifically, a half-short-block worth. - This funtion works like pcmout above, except it will also expose - this implicit buffer data not normally decoded. */ -int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm){ - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; - int hs=ci->halfrate_flag; - - int n=ci->blocksizes[v->W]>>(hs+1); - int n0=ci->blocksizes[0]>>(hs+1); - int n1=ci->blocksizes[1]>>(hs+1); - int i,j; - - if(v->pcm_returned<0)return 0; - - /* our returned data ends at pcm_returned; because the synthesis pcm - buffer is a two-fragment ring, that means our data block may be - fragmented by buffering, wrapping or a short block not filling - out a buffer. To simplify things, we unfragment if it's at all - possibly needed. Otherwise, we'd need to call lapout more than - once as well as hold additional dsp state. Opt for - simplicity. */ - - /* centerW was advanced by blockin; it would be the center of the - *next* block */ - if(v->centerW==n1){ - /* the data buffer wraps; swap the halves */ - /* slow, sure, small */ - for(j=0;jchannels;j++){ - float *p=v->pcm[j]; - for(i=0;ipcm_current-=n1; - v->pcm_returned-=n1; - v->centerW=0; - } - - /* solidify buffer into contiguous space */ - if((v->lW^v->W)==1){ - /* long/short or short/long */ - for(j=0;jchannels;j++){ - float *s=v->pcm[j]; - float *d=v->pcm[j]+(n1-n0)/2; - for(i=(n1+n0)/2-1;i>=0;--i) - d[i]=s[i]; - } - v->pcm_returned+=(n1-n0)/2; - v->pcm_current+=(n1-n0)/2; - }else{ - if(v->lW==0){ - /* short/short */ - for(j=0;jchannels;j++){ - float *s=v->pcm[j]; - float *d=v->pcm[j]+n1-n0; - for(i=n0-1;i>=0;--i) - d[i]=s[i]; - } - v->pcm_returned+=n1-n0; - v->pcm_current+=n1-n0; - } - } - - if(pcm){ - int i; - for(i=0;ichannels;i++) - v->pcmret[i]=v->pcm[i]+v->pcm_returned; - *pcm=v->pcmret; - } - - return(n1+n-v->pcm_returned); - -} - -float *vorbis_window(vorbis_dsp_state *v,int W){ - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - int hs=ci->halfrate_flag; - private_state *b=(private_state*)v->backend_state; - - if(b->window[W]-1<0)return NULL; - return _vorbis_window_get(b->window[W]-hs); -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/coupled/res_books_stereo.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/coupled/res_books_stereo.h deleted file mode 100644 index ca50b0c501..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/coupled/res_books_stereo.h +++ /dev/null @@ -1,20988 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: static codebooks autogenerated by huff/huffbuld - last modified: $Id: res_books_stereo.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../codebook.h" -static long _vq_quantlist__16c0_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c0_s_p1_0[] = { - 1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, - 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0, - 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, 0, - 0, 0, 0, 9, 9,12, 0, 0, 0, 0, 0, 0,10,12,11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, - 0, 0, 0, 0, 9,12,10, 0, 0, 0, 0, 0, 0,10,11,12, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, - 0, 0, 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,12,11, 0, - 0, 0, 0, 0, 0, 9,10,12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,12, - 0, 0, 0, 0, 0, 0, 9,12, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c0_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16c0_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p1_0 = { - _vq_quantthresh__16c0_s_p1_0, - _vq_quantmap__16c0_s_p1_0, - 3, - 3 -}; - -static static_codebook _16c0_s_p1_0 = { - 8, 6561, - _vq_lengthlist__16c0_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16c0_s_p1_0, - NULL, - &_vq_auxt__16c0_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c0_s_p2_0[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c0_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c0_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p2_0 = { - _vq_quantthresh__16c0_s_p2_0, - _vq_quantmap__16c0_s_p2_0, - 5, - 5 -}; - -static static_codebook _16c0_s_p2_0 = { - 4, 625, - _vq_lengthlist__16c0_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c0_s_p2_0, - NULL, - &_vq_auxt__16c0_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c0_s_p3_0[] = { - 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 7, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 6, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c0_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c0_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p3_0 = { - _vq_quantthresh__16c0_s_p3_0, - _vq_quantmap__16c0_s_p3_0, - 5, - 5 -}; - -static static_codebook _16c0_s_p3_0 = { - 4, 625, - _vq_lengthlist__16c0_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c0_s_p3_0, - NULL, - &_vq_auxt__16c0_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16c0_s_p4_0[] = { - 1, 3, 2, 7, 8, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c0_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16c0_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p4_0 = { - _vq_quantthresh__16c0_s_p4_0, - _vq_quantmap__16c0_s_p4_0, - 9, - 9 -}; - -static static_codebook _16c0_s_p4_0 = { - 2, 81, - _vq_lengthlist__16c0_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16c0_s_p4_0, - NULL, - &_vq_auxt__16c0_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16c0_s_p5_0[] = { - 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7, - 8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 8, 0, 0, 0, 7, 7, - 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0, 0, 0, - 8, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__16c0_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16c0_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p5_0 = { - _vq_quantthresh__16c0_s_p5_0, - _vq_quantmap__16c0_s_p5_0, - 9, - 9 -}; - -static static_codebook _16c0_s_p5_0 = { - 2, 81, - _vq_lengthlist__16c0_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16c0_s_p5_0, - NULL, - &_vq_auxt__16c0_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__16c0_s_p6_0[] = { - 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11, - 11,11, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11, - 11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10, - 11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10, - 10,11,11,12,12,12,13, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10,10,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,11,11,12,12,13,13,13,14, 0, 0, 0, 0, 0, - 10,10,10,11,11,11,12,12,13,13,13,14, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,13,13,14,14, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,12,12,13,13,14,15,14, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,14,14,15, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,13,14, - 14, -}; - -static float _vq_quantthresh__16c0_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__16c0_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p6_0 = { - _vq_quantthresh__16c0_s_p6_0, - _vq_quantmap__16c0_s_p6_0, - 17, - 17 -}; - -static static_codebook _16c0_s_p6_0 = { - 2, 289, - _vq_lengthlist__16c0_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__16c0_s_p6_0, - NULL, - &_vq_auxt__16c0_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c0_s_p7_0[] = { - 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,11,10,10,11, - 11,10, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11, - 11,11,11,10, 6, 9, 9,11,12,12,11, 9, 9, 6, 9,10, - 11,12,12,11, 9,10, 7,11,11,11,11,11,12,13,12, 6, - 9,10,11,10,10,12,13,13, 6,10, 9,11,10,10,11,12, - 13, -}; - -static float _vq_quantthresh__16c0_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__16c0_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p7_0 = { - _vq_quantthresh__16c0_s_p7_0, - _vq_quantmap__16c0_s_p7_0, - 3, - 3 -}; - -static static_codebook _16c0_s_p7_0 = { - 4, 81, - _vq_lengthlist__16c0_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__16c0_s_p7_0, - NULL, - &_vq_auxt__16c0_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16c0_s_p7_1[] = { - 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, - 8, 8, 8, 9, 9, 9,10,10,10, 6, 7, 8, 8, 8, 8, 9, - 8,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, 7, - 7, 8, 8, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9, 9, - 9, 9,11,11,11, 8, 8, 9, 9, 9, 9, 9,10,10,11,11, - 9, 9, 9, 9, 9, 9, 9,10,11,11,11,10,11, 9, 9, 9, - 9,10, 9,11,11,11,10,11,10,10, 9, 9,10,10,11,11, - 11,11,11, 9, 9, 9, 9,10,10, -}; - -static float _vq_quantthresh__16c0_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16c0_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p7_1 = { - _vq_quantthresh__16c0_s_p7_1, - _vq_quantmap__16c0_s_p7_1, - 11, - 11 -}; - -static static_codebook _16c0_s_p7_1 = { - 2, 121, - _vq_lengthlist__16c0_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16c0_s_p7_1, - NULL, - &_vq_auxt__16c0_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16c0_s_p8_0[] = { - 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8,10,10, 6, 5, 6, - 8, 8, 8, 8, 8, 8, 8, 9,10,10, 7, 6, 6, 8, 8, 8, - 8, 8, 8, 8, 8,10,10, 0, 8, 8, 8, 8, 9, 8, 9, 9, - 9,10,10,10, 0, 9, 8, 8, 8, 9, 9, 8, 8, 9, 9,10, - 10, 0,12,11, 8, 8, 9, 9, 9, 9,10,10,11,10, 0,12, - 13, 8, 8, 9,10, 9, 9,11,11,11,12, 0, 0, 0, 8, 8, - 8, 8,10, 9,12,13,12,14, 0, 0, 0, 8, 8, 8, 9,10, - 10,12,12,13,14, 0, 0, 0,13,13, 9, 9,11,11, 0, 0, - 14, 0, 0, 0, 0,14,14,10,10,12,11,12,14,14,14, 0, - 0, 0, 0, 0,11,11,13,13,14,13,14,14, 0, 0, 0, 0, - 0,12,13,13,12,13,14,14,14, -}; - -static float _vq_quantthresh__16c0_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__16c0_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p8_0 = { - _vq_quantthresh__16c0_s_p8_0, - _vq_quantmap__16c0_s_p8_0, - 13, - 13 -}; - -static static_codebook _16c0_s_p8_0 = { - 2, 169, - _vq_lengthlist__16c0_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__16c0_s_p8_0, - NULL, - &_vq_auxt__16c0_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c0_s_p8_1[] = { - 1, 4, 3, 5, 5, 7, 7, 7, 6, 6, 7, 7, 7, 5, 5, 7, - 7, 7, 6, 6, 7, 7, 7, 6, 6, -}; - -static float _vq_quantthresh__16c0_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c0_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p8_1 = { - _vq_quantthresh__16c0_s_p8_1, - _vq_quantmap__16c0_s_p8_1, - 5, - 5 -}; - -static static_codebook _16c0_s_p8_1 = { - 2, 25, - _vq_lengthlist__16c0_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c0_s_p8_1, - NULL, - &_vq_auxt__16c0_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p9_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c0_s_p9_0[] = { - 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__16c0_s_p9_0[] = { - -157.5, 157.5, -}; - -static long _vq_quantmap__16c0_s_p9_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p9_0 = { - _vq_quantthresh__16c0_s_p9_0, - _vq_quantmap__16c0_s_p9_0, - 3, - 3 -}; - -static static_codebook _16c0_s_p9_0 = { - 4, 81, - _vq_lengthlist__16c0_s_p9_0, - 1, -518803456, 1628680192, 2, 0, - _vq_quantlist__16c0_s_p9_0, - NULL, - &_vq_auxt__16c0_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16c0_s_p9_1[] = { - 1, 5, 5, 5, 5, 9,11,11,10,10,10,10,10,10,10, 7, - 6, 6, 6, 6,10,10,10,10,10,10,10,10,10,10, 7, 6, - 6, 6, 6,10, 9,10,10,10,10,10,10,10,10,10, 7, 7, - 8, 9,10,10,10,10,10,10,10,10,10,10,10, 8, 7,10, - 10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__16c0_s_p9_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__16c0_s_p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p9_1 = { - _vq_quantthresh__16c0_s_p9_1, - _vq_quantmap__16c0_s_p9_1, - 15, - 15 -}; - -static static_codebook _16c0_s_p9_1 = { - 2, 225, - _vq_lengthlist__16c0_s_p9_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__16c0_s_p9_1, - NULL, - &_vq_auxt__16c0_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c0_s_p9_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__16c0_s_p9_2[] = { - 1, 5, 5, 7, 8, 8, 7, 9, 9, 9,12,12,11,12,12,10, - 10,11,12,12,12,11,12,12, 8, 9, 8, 7, 9,10,10,11, - 11,10,11,12,10,12,10,12,12,12,11,12,11, 9, 8, 8, - 9,10, 9, 8, 9,10,12,12,11,11,12,11,10,11,12,11, - 12,12, 8, 9, 9, 9,10,11,12,11,12,11,11,11,11,12, - 12,11,11,12,12,11,11, 9, 9, 8, 9, 9,11, 9, 9,10, - 9,11,11,11,11,12,11,11,10,12,12,12, 9,12,11,10, - 11,11,11,11,12,12,12,11,11,11,12,10,12,12,12,10, - 10, 9,10, 9,10,10, 9, 9, 9,10,10,12,10,11,11, 9, - 11,11,10,11,11,11,10,10,10, 9, 9,10,10, 9, 9,10, - 11,11,10,11,10,11,10,11,11,10,11,11,11,10, 9,10, - 10, 9,10, 9, 9,11, 9, 9,11,10,10,11,11,10,10,11, - 10,11, 8, 9,11,11,10, 9,10,11,11,10,11,11,10,10, - 10,11,10, 9,10,10,11, 9,10,10, 9,11,10,10,10,10, - 11,10,11,11, 9,11,10,11,10,10,11,11,10,10,10, 9, - 10,10,11,11,11, 9,10,10,10,10,10,11,10,10,10, 9, - 10,10,11,10,10,10,10,10, 9,10,11,10,10,10,10,11, - 11,11,10,10,10,10,10,11,10,11,10,11,10,10,10, 9, - 11,11,10,10,10,11,11,10,10,10,10,10,10,10,10,11, - 11, 9,10,10,10,11,10,11,10,10,10,11, 9,10,11,10, - 11,10,10, 9,10,10,10,11,10,11,10,10,10,10,10,11, - 11,10,11,11,10,10,11,11,10, 9, 9,10,10,10,10,10, - 9,11, 9,10,10,10,11,11,10,10,10,10,11,11,11,10, - 9, 9,10,10,11,10,10,10,10,10,11,11,11,10,10,10, - 11,11,11, 9,10,10,10,10, 9,10, 9,10,11,10,11,10, - 10,11,11,10,11,11,11,11,11,10,11,10,10,10, 9,11, - 11,10,11,11,11,11,11,11,11,11,11,10,11,10,10,10, - 10,11,10,10,11, 9,10,10,10, -}; - -static float _vq_quantthresh__16c0_s_p9_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__16c0_s_p9_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__16c0_s_p9_2 = { - _vq_quantthresh__16c0_s_p9_2, - _vq_quantmap__16c0_s_p9_2, - 21, - 21 -}; - -static static_codebook _16c0_s_p9_2 = { - 2, 441, - _vq_lengthlist__16c0_s_p9_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__16c0_s_p9_2, - NULL, - &_vq_auxt__16c0_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__16c0_s_single[] = { - 3, 4,19, 7, 9, 7, 8,11, 9,12, 4, 1,19, 6, 7, 7, - 8,10,11,13,18,18,18,18,18,18,18,18,18,18, 8, 6, - 18, 8, 9, 9,11,12,14,18, 9, 6,18, 9, 7, 8, 9,11, - 12,18, 7, 6,18, 8, 7, 7, 7, 9,11,17, 8, 8,18, 9, - 7, 6, 6, 8,11,17,10,10,18,12, 9, 8, 7, 9,12,18, - 13,15,18,15,13,11,10,11,15,18,14,18,18,18,18,18, - 16,16,18,18, -}; - -static static_codebook _huff_book__16c0_s_single = { - 2, 100, - _huff_lengthlist__16c0_s_single, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__16c1_s_long[] = { - 2, 5,20, 7,10, 7, 8,10,11,11, 4, 2,20, 5, 8, 6, - 7, 9,10,10,20,20,20,20,19,19,19,19,19,19, 7, 5, - 19, 6,10, 7, 9,11,13,17,11, 8,19,10, 7, 7, 8,10, - 11,15, 7, 5,19, 7, 7, 5, 6, 9,11,16, 7, 6,19, 8, - 7, 6, 6, 7, 9,13, 9, 9,19,11, 9, 8, 6, 7, 8,13, - 12,14,19,16,13,10, 9, 8, 9,13,14,17,19,18,18,17, - 12,11,11,13, -}; - -static static_codebook _huff_book__16c1_s_long = { - 2, 100, - _huff_lengthlist__16c1_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c1_s_p1_0[] = { - 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0, - 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0, - 0, 0, 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,11, - 0, 0, 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c1_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16c1_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p1_0 = { - _vq_quantthresh__16c1_s_p1_0, - _vq_quantmap__16c1_s_p1_0, - 3, - 3 -}; - -static static_codebook _16c1_s_p1_0 = { - 8, 6561, - _vq_lengthlist__16c1_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16c1_s_p1_0, - NULL, - &_vq_auxt__16c1_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c1_s_p2_0[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c1_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c1_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p2_0 = { - _vq_quantthresh__16c1_s_p2_0, - _vq_quantmap__16c1_s_p2_0, - 5, - 5 -}; - -static static_codebook _16c1_s_p2_0 = { - 4, 625, - _vq_lengthlist__16c1_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c1_s_p2_0, - NULL, - &_vq_auxt__16c1_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c1_s_p3_0[] = { - 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c1_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c1_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p3_0 = { - _vq_quantthresh__16c1_s_p3_0, - _vq_quantmap__16c1_s_p3_0, - 5, - 5 -}; - -static static_codebook _16c1_s_p3_0 = { - 4, 625, - _vq_lengthlist__16c1_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c1_s_p3_0, - NULL, - &_vq_auxt__16c1_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16c1_s_p4_0[] = { - 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c1_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16c1_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p4_0 = { - _vq_quantthresh__16c1_s_p4_0, - _vq_quantmap__16c1_s_p4_0, - 9, - 9 -}; - -static static_codebook _16c1_s_p4_0 = { - 2, 81, - _vq_lengthlist__16c1_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16c1_s_p4_0, - NULL, - &_vq_auxt__16c1_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16c1_s_p5_0[] = { - 1, 3, 3, 5, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7, - 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 8, 8, - 8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0, - 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__16c1_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16c1_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p5_0 = { - _vq_quantthresh__16c1_s_p5_0, - _vq_quantmap__16c1_s_p5_0, - 9, - 9 -}; - -static static_codebook _16c1_s_p5_0 = { - 2, 81, - _vq_lengthlist__16c1_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16c1_s_p5_0, - NULL, - &_vq_auxt__16c1_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__16c1_s_p6_0[] = { - 1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,12, - 12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11, - 12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11, - 11,12,12, 0, 0, 0, 8, 8, 8, 9,10, 9,10,10,10,10, - 11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,11, - 11,11,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10, - 11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10, - 10,11,11,12,12,13,13, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,11,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14, - 14, -}; - -static float _vq_quantthresh__16c1_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__16c1_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p6_0 = { - _vq_quantthresh__16c1_s_p6_0, - _vq_quantmap__16c1_s_p6_0, - 17, - 17 -}; - -static static_codebook _16c1_s_p6_0 = { - 2, 289, - _vq_lengthlist__16c1_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__16c1_s_p6_0, - NULL, - &_vq_auxt__16c1_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c1_s_p7_0[] = { - 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9,10,10, - 10, 9, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11, - 11,11,10,10, 6,10, 9,11,11,11,11,10,10, 6,10,10, - 11,11,11,11,10,10, 7,11,11,11,11,11,12,12,11, 6, - 10,10,11,10,10,11,11,11, 6,10,10,10,11,10,11,11, - 11, -}; - -static float _vq_quantthresh__16c1_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__16c1_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p7_0 = { - _vq_quantthresh__16c1_s_p7_0, - _vq_quantmap__16c1_s_p7_0, - 3, - 3 -}; - -static static_codebook _16c1_s_p7_0 = { - 4, 81, - _vq_lengthlist__16c1_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__16c1_s_p7_0, - NULL, - &_vq_auxt__16c1_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16c1_s_p7_1[] = { - 2, 3, 3, 5, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6, - 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8, - 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8, - 8, 9, 9,10,10,10,10,10, 9, 9, 8, 8, 9, 9,10,10, - 10,10,10, 8, 8, 8, 8, 9, 9, -}; - -static float _vq_quantthresh__16c1_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16c1_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p7_1 = { - _vq_quantthresh__16c1_s_p7_1, - _vq_quantmap__16c1_s_p7_1, - 11, - 11 -}; - -static static_codebook _16c1_s_p7_1 = { - 2, 121, - _vq_lengthlist__16c1_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16c1_s_p7_1, - NULL, - &_vq_auxt__16c1_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16c1_s_p8_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5, - 7, 8, 8, 9, 8, 8, 9, 9,10,11, 6, 5, 5, 8, 8, 9, - 9, 8, 8, 9,10,10,11, 0, 8, 8, 8, 9, 9, 9, 9, 9, - 10,10,11,11, 0, 9, 9, 9, 8, 9, 9, 9, 9,10,10,11, - 11, 0,13,13, 9, 9,10,10,10,10,11,11,12,12, 0,14, - 13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10, - 9, 9,11,11,12,12,13,12, 0, 0, 0,10,10, 9, 9,10, - 10,12,12,13,13, 0, 0, 0,13,14,11,10,11,11,12,12, - 13,14, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0, - 0, 0, 0, 0,12,12,12,12,13,13,14,15, 0, 0, 0, 0, - 0,12,12,12,12,13,13,14,15, -}; - -static float _vq_quantthresh__16c1_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__16c1_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p8_0 = { - _vq_quantthresh__16c1_s_p8_0, - _vq_quantmap__16c1_s_p8_0, - 13, - 13 -}; - -static static_codebook _16c1_s_p8_0 = { - 2, 169, - _vq_lengthlist__16c1_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__16c1_s_p8_0, - NULL, - &_vq_auxt__16c1_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c1_s_p8_1[] = { - 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__16c1_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c1_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p8_1 = { - _vq_quantthresh__16c1_s_p8_1, - _vq_quantmap__16c1_s_p8_1, - 5, - 5 -}; - -static static_codebook _16c1_s_p8_1 = { - 2, 25, - _vq_lengthlist__16c1_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c1_s_p8_1, - NULL, - &_vq_auxt__16c1_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16c1_s_p9_0[] = { - 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__16c1_s_p9_0[] = { - -1732.5, -1417.5, -1102.5, -787.5, -472.5, -157.5, 157.5, 472.5, - 787.5, 1102.5, 1417.5, 1732.5, -}; - -static long _vq_quantmap__16c1_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p9_0 = { - _vq_quantthresh__16c1_s_p9_0, - _vq_quantmap__16c1_s_p9_0, - 13, - 13 -}; - -static static_codebook _16c1_s_p9_0 = { - 2, 169, - _vq_lengthlist__16c1_s_p9_0, - 1, -513964032, 1628680192, 4, 0, - _vq_quantlist__16c1_s_p9_0, - NULL, - &_vq_auxt__16c1_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16c1_s_p9_1[] = { - 1, 4, 4, 4, 4, 8, 8,12,13,14,14,14,14,14,14, 6, - 6, 6, 6, 6,10, 9,14,14,14,14,14,14,14,14, 7, 6, - 5, 6, 6,10, 9,12,13,13,13,13,13,13,13,13, 7, 7, - 9, 9,11,11,12,13,13,13,13,13,13,13,13, 7, 7, 8, - 8,11,12,13,13,13,13,13,13,13,13,13,12,12,10,10, - 13,12,13,13,13,13,13,13,13,13,13,12,12,10,10,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,12,13,12, - 13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13, -}; - -static float _vq_quantthresh__16c1_s_p9_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__16c1_s_p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p9_1 = { - _vq_quantthresh__16c1_s_p9_1, - _vq_quantmap__16c1_s_p9_1, - 15, - 15 -}; - -static static_codebook _16c1_s_p9_1 = { - 2, 225, - _vq_lengthlist__16c1_s_p9_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__16c1_s_p9_1, - NULL, - &_vq_auxt__16c1_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c1_s_p9_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__16c1_s_p9_2[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9,10, - 10,10, 9,10,10,11,12,12, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,10,10,10,11,11,10,12,11,11,13,11, 7, 7, 8, - 8, 8, 8, 9, 9, 9,10,10,10,10, 9,10,10,11,11,12, - 11,11, 8, 8, 8, 8, 9, 9,10,10,10,10,11,11,11,11, - 11,11,11,12,11,12,12, 8, 8, 9, 9, 9, 9, 9,10,10, - 10,10,10,10,11,11,11,11,11,11,12,11, 9, 9, 9, 9, - 10,10,10,10,11,10,11,11,11,11,11,11,12,12,12,12, - 11, 9, 9, 9, 9,10,10,10,10,11,11,11,11,11,11,11, - 11,11,12,12,12,13, 9,10,10, 9,11,10,10,10,10,11, - 11,11,11,11,10,11,12,11,12,12,11,12,11,10, 9,10, - 10,11,10,11,11,11,11,11,11,11,11,11,12,12,11,12, - 12,12,10,10,10,11,10,11,11,11,11,11,11,11,11,11, - 11,11,12,13,12,12,11, 9,10,10,11,11,10,11,11,11, - 12,11,11,11,11,11,12,12,13,13,12,13,10,10,12,10, - 11,11,11,11,11,11,11,11,11,12,12,11,13,12,12,12, - 12,13,12,11,11,11,11,11,11,12,11,12,11,11,11,11, - 12,12,13,12,11,12,12,11,11,11,11,11,12,11,11,11, - 11,12,11,11,12,11,12,13,13,12,12,12,12,11,11,11, - 11,11,12,11,11,12,11,12,11,11,11,11,13,12,12,12, - 12,13,11,11,11,12,12,11,11,11,12,11,12,12,12,11, - 12,13,12,11,11,12,12,11,12,11,11,11,12,12,11,12, - 11,11,11,12,12,12,12,13,12,13,12,12,12,12,11,11, - 12,11,11,11,11,11,11,12,12,12,13,12,11,13,13,12, - 12,11,12,10,11,11,11,11,12,11,12,12,11,12,12,13, - 12,12,13,12,12,12,12,12,11,12,12,12,11,12,11,11, - 11,12,13,12,13,13,13,13,13,12,13,13,12,12,13,11, - 11,11,11,11,12,11,11,12,11, -}; - -static float _vq_quantthresh__16c1_s_p9_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__16c1_s_p9_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__16c1_s_p9_2 = { - _vq_quantthresh__16c1_s_p9_2, - _vq_quantmap__16c1_s_p9_2, - 21, - 21 -}; - -static static_codebook _16c1_s_p9_2 = { - 2, 441, - _vq_lengthlist__16c1_s_p9_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__16c1_s_p9_2, - NULL, - &_vq_auxt__16c1_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__16c1_s_short[] = { - 5, 6,17, 8,12, 9,10,10,12,13, 5, 2,17, 4, 9, 5, - 7, 8,11,13,16,16,16,16,16,16,16,16,16,16, 6, 4, - 16, 5,10, 5, 7,10,14,16,13, 9,16,11, 8, 7, 8, 9, - 13,16, 7, 4,16, 5, 7, 4, 6, 8,11,13, 8, 6,16, 7, - 8, 5, 5, 7, 9,13, 9, 8,16, 9, 8, 6, 6, 7, 9,13, - 11,11,16,10,10, 7, 7, 7, 9,13,13,13,16,13,13, 9, - 9, 9,10,13, -}; - -static static_codebook _huff_book__16c1_s_short = { - 2, 100, - _huff_lengthlist__16c1_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__16c2_s_long[] = { - 4, 7, 9, 9, 9, 8, 9,10,15,19, 5, 4, 5, 6, 7, 7, - 8, 9,14,16, 6, 5, 4, 5, 6, 7, 8,10,12,19, 7, 6, - 5, 4, 5, 6, 7, 9,11,18, 8, 7, 6, 5, 5, 5, 7, 9, - 10,17, 8, 7, 7, 5, 5, 5, 6, 7,12,18, 8, 8, 8, 7, - 7, 5, 5, 7,12,18, 8, 9,10, 9, 9, 7, 6, 7,12,17, - 14,18,16,16,15,12,11,10,12,18,15,17,18,18,18,15, - 14,14,16,18, -}; - -static static_codebook _huff_book__16c2_s_long = { - 2, 100, - _huff_lengthlist__16c2_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c2_s_p1_0[] = { - 1, 3, 3, 0, 0, 0, 0, 0, 0, 4, 5, 5, 0, 0, 0, 0, - 0, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c2_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16c2_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p1_0 = { - _vq_quantthresh__16c2_s_p1_0, - _vq_quantmap__16c2_s_p1_0, - 3, - 3 -}; - -static static_codebook _16c2_s_p1_0 = { - 4, 81, - _vq_lengthlist__16c2_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16c2_s_p1_0, - NULL, - &_vq_auxt__16c2_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c2_s_p2_0[] = { - 2, 4, 3, 7, 7, 0, 0, 0, 7, 8, 0, 0, 0, 8, 8, 0, - 0, 0, 8, 8, 0, 0, 0, 8, 8, 4, 5, 4, 8, 8, 0, 0, - 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, - 9, 9, 4, 4, 5, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, - 8, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 7, 8, 8,10,10, - 0, 0, 0,12,11, 0, 0, 0,11,11, 0, 0, 0,14,13, 0, - 0, 0,14,13, 7, 8, 8, 9,10, 0, 0, 0,11,12, 0, 0, - 0,11,11, 0, 0, 0,14,14, 0, 0, 0,13,14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8,11,11, 0, 0, 0, - 11,11, 0, 0, 0,12,11, 0, 0, 0,12,12, 0, 0, 0,13, - 13, 8, 8, 8,11,11, 0, 0, 0,11,11, 0, 0, 0,11,12, - 0, 0, 0,12,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8, 8, 8,12,11, 0, 0, 0,12,11, 0, - 0, 0,11,11, 0, 0, 0,13,13, 0, 0, 0,13,12, 8, 8, - 8,11,12, 0, 0, 0,11,12, 0, 0, 0,11,11, 0, 0, 0, - 13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 9, 9,14,13, 0, 0, 0,13,12, 0, 0, 0,13, - 13, 0, 0, 0,13,12, 0, 0, 0,13,13, 8, 9, 9,13,14, - 0, 0, 0,12,13, 0, 0, 0,13,13, 0, 0, 0,12,13, 0, - 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, - 9, 9,14,13, 0, 0, 0,13,13, 0, 0, 0,13,12, 0, 0, - 0,13,13, 0, 0, 0,13,12, 8, 9, 9,14,14, 0, 0, 0, - 13,13, 0, 0, 0,12,13, 0, 0, 0,13,13, 0, 0, 0,12, - 13, -}; - -static float _vq_quantthresh__16c2_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c2_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p2_0 = { - _vq_quantthresh__16c2_s_p2_0, - _vq_quantmap__16c2_s_p2_0, - 5, - 5 -}; - -static static_codebook _16c2_s_p2_0 = { - 4, 625, - _vq_lengthlist__16c2_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c2_s_p2_0, - NULL, - &_vq_auxt__16c2_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16c2_s_p3_0[] = { - 1, 3, 3, 6, 6, 7, 7, 8, 8, 0, 0, 0, 6, 6, 7, 7, - 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0, 7, 7, - 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0, - 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 9, 9,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c2_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16c2_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p3_0 = { - _vq_quantthresh__16c2_s_p3_0, - _vq_quantmap__16c2_s_p3_0, - 9, - 9 -}; - -static static_codebook _16c2_s_p3_0 = { - 2, 81, - _vq_lengthlist__16c2_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16c2_s_p3_0, - NULL, - &_vq_auxt__16c2_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__16c2_s_p4_0[] = { - 2, 3, 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9,10, - 10, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10, - 11,11, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10, - 10,10,11, 0, 0, 0, 6, 6, 8, 8, 8, 8, 9, 9,10,10, - 10,11,11,11, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10, - 10,11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9, - 10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, - 9,10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, - 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8, 9, - 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__16c2_s_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__16c2_s_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p4_0 = { - _vq_quantthresh__16c2_s_p4_0, - _vq_quantmap__16c2_s_p4_0, - 17, - 17 -}; - -static static_codebook _16c2_s_p4_0 = { - 2, 289, - _vq_lengthlist__16c2_s_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__16c2_s_p4_0, - NULL, - &_vq_auxt__16c2_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16c2_s_p5_0[] = { - 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6,10,10,10,10, - 10,10, 4, 7, 6,10,10,10,10,10,10, 5, 9, 9, 9,12, - 11,10,11,12, 7,10,10,12,12,12,12,12,12, 7,10,10, - 11,12,12,12,12,13, 6,10,10,10,12,12,10,12,12, 7, - 10,10,11,13,12,12,12,12, 7,10,10,11,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__16c2_s_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__16c2_s_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p5_0 = { - _vq_quantthresh__16c2_s_p5_0, - _vq_quantmap__16c2_s_p5_0, - 3, - 3 -}; - -static static_codebook _16c2_s_p5_0 = { - 4, 81, - _vq_lengthlist__16c2_s_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__16c2_s_p5_0, - NULL, - &_vq_auxt__16c2_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16c2_s_p5_1[] = { - 2, 3, 3, 6, 6, 7, 7, 7, 7, 8, 8,11,11,11, 6, 6, - 7, 7, 8, 8, 8, 8,11,11,11, 6, 6, 7, 7, 8, 8, 8, - 8,11,11,11, 6, 6, 8, 8, 8, 8, 9, 9,11,11,11, 6, - 6, 8, 8, 8, 8, 9, 9,11,11,11, 7, 7, 8, 8, 8, 8, - 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 8, 9,11,11,11, - 8, 8, 8, 8, 8, 8, 8, 8,11,11,11,11,11, 8, 8, 8, - 8, 8, 8,11,11,11,11,11, 8, 8, 8, 8, 8, 8,11,11, - 11,11,11, 7, 7, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__16c2_s_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16c2_s_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p5_1 = { - _vq_quantthresh__16c2_s_p5_1, - _vq_quantmap__16c2_s_p5_1, - 11, - 11 -}; - -static static_codebook _16c2_s_p5_1 = { - 2, 121, - _vq_lengthlist__16c2_s_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16c2_s_p5_1, - NULL, - &_vq_auxt__16c2_s_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16c2_s_p6_0[] = { - 1, 4, 4, 7, 6, 8, 8, 9, 9,10,10,11,11, 5, 5, 5, - 7, 7, 9, 9, 9, 9,11,11,12,12, 6, 5, 5, 7, 7, 9, - 9,10,10,11,11,12,12, 0, 6, 6, 7, 7, 9, 9,10,10, - 11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,12,12, - 12, 0,11,11, 8, 8,10,10,11,11,12,12,13,13, 0,11, - 12, 8, 8,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__16c2_s_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__16c2_s_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p6_0 = { - _vq_quantthresh__16c2_s_p6_0, - _vq_quantmap__16c2_s_p6_0, - 13, - 13 -}; - -static static_codebook _16c2_s_p6_0 = { - 2, 169, - _vq_lengthlist__16c2_s_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__16c2_s_p6_0, - NULL, - &_vq_auxt__16c2_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16c2_s_p6_1[] = { - 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__16c2_s_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16c2_s_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p6_1 = { - _vq_quantthresh__16c2_s_p6_1, - _vq_quantmap__16c2_s_p6_1, - 5, - 5 -}; - -static static_codebook _16c2_s_p6_1 = { - 2, 25, - _vq_lengthlist__16c2_s_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16c2_s_p6_1, - NULL, - &_vq_auxt__16c2_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16c2_s_p7_0[] = { - 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 5, 5, - 8, 8, 9, 9,10,10,11,11,12,12, 6, 5, 5, 8, 8, 9, - 9,10,10,11,11,12,13,18, 6, 6, 7, 7, 9, 9,10,10, - 12,12,13,13,18, 6, 6, 7, 7, 9, 9,10,10,12,12,13, - 13,18,11,10, 8, 8,10,10,11,11,12,12,13,13,18,11, - 11, 8, 8,10,10,11,11,12,13,13,13,18,18,18,10,11, - 11,11,12,12,13,13,14,14,18,18,18,11,11,11,11,12, - 12,13,13,14,14,18,18,18,14,14,12,12,12,12,14,14, - 15,14,18,18,18,15,15,11,12,12,12,13,13,15,15,18, - 18,18,18,18,13,13,13,13,13,14,17,16,18,18,18,18, - 18,13,14,13,13,14,13,15,14, -}; - -static float _vq_quantthresh__16c2_s_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__16c2_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p7_0 = { - _vq_quantthresh__16c2_s_p7_0, - _vq_quantmap__16c2_s_p7_0, - 13, - 13 -}; - -static static_codebook _16c2_s_p7_0 = { - 2, 169, - _vq_lengthlist__16c2_s_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__16c2_s_p7_0, - NULL, - &_vq_auxt__16c2_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16c2_s_p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 9, 9, 6, 6, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 6, 6, 7, 7, 8, 8, 8, - 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, - 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, - 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, - 7, 7, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 9, 7, 7, 7, - 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7, 7, 8, 8, 9, 9, - 9, 9, 9, 7, 7, 7, 7, 8, 8, -}; - -static float _vq_quantthresh__16c2_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16c2_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p7_1 = { - _vq_quantthresh__16c2_s_p7_1, - _vq_quantmap__16c2_s_p7_1, - 11, - 11 -}; - -static static_codebook _16c2_s_p7_1 = { - 2, 121, - _vq_lengthlist__16c2_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16c2_s_p7_1, - NULL, - &_vq_auxt__16c2_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16c2_s_p8_0[] = { - 1, 4, 4, 7, 6, 7, 7, 6, 6, 8, 8, 9, 9,10,10, 6, - 6, 6, 8, 8, 9, 8, 8, 8, 9, 9,11,10,11,11, 7, 6, - 6, 8, 8, 9, 8, 7, 7, 9, 9,10,10,12,11,14, 8, 8, - 8, 9, 9, 9, 9, 9,10, 9,10,10,11,13,14, 8, 8, 8, - 8, 9, 9, 8, 8, 9, 9,10,10,11,12,14,13,11, 9, 9, - 9, 9, 9, 9, 9,10,11,10,13,12,14,11,13, 8, 9, 9, - 9, 9, 9,10,10,11,10,13,12,14,14,14, 8, 9, 9, 9, - 11,11,11,11,11,12,13,13,14,14,14, 9, 8, 9, 9,10, - 10,12,10,11,12,12,14,14,14,14,11,12,10,10,12,12, - 12,12,13,14,12,12,14,14,14,12,12, 9,10,11,11,12, - 14,12,14,14,14,14,14,14,14,14,11,11,12,11,12,14, - 14,14,14,14,14,14,14,14,14,12,11,11,11,11,14,14, - 14,14,14,14,14,14,14,14,14,14,13,12,14,14,14,14, - 14,14,14,14,14,14,14,14,14,12,12,12,13,14,14,13, - 13, -}; - -static float _vq_quantthresh__16c2_s_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__16c2_s_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p8_0 = { - _vq_quantthresh__16c2_s_p8_0, - _vq_quantmap__16c2_s_p8_0, - 15, - 15 -}; - -static static_codebook _16c2_s_p8_0 = { - 2, 225, - _vq_lengthlist__16c2_s_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__16c2_s_p8_0, - NULL, - &_vq_auxt__16c2_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__16c2_s_p8_1[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8,11,12,11, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10, 9, 9,11,11,10, 7, 7, 8, - 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, - 11,11, 8, 7, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 9,10, - 10, 9,10,10,11,11,12, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9,10, 9,10,10,10,10,11,11,11, 8, 8, 9, 9, - 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,11, - 11, 8, 8, 9, 8, 9, 9, 9, 9,10, 9, 9, 9,10,10,10, - 10, 9,10,11,11,11, 9, 9, 9, 9,10, 9, 9, 9,10,10, - 9,10, 9,10,10,10,10,10,11,12,11,11,11, 9, 9, 9, - 9, 9,10,10, 9,10,10,10,10,10,10,10,10,12,11,13, - 13,11, 9, 9, 9, 9,10,10, 9,10,10,10,10,11,10,10, - 10,10,11,12,11,12,11, 9, 9, 9,10,10, 9,10,10,10, - 10,10,10,10,10,10,10,11,11,11,12,11, 9,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,11,12,12,12, - 11,11,11,10, 9,10,10,10,10,10,10,10,10,11,10,10, - 10,11,11,11,11,11,11,11,10,10,10,11,10,10,10,10, - 10,10,10,10,10,10,11,11,11,11,12,12,11,10,10,10, - 10,10,10,10,10,11,10,10,10,11,10,12,11,11,12,11, - 11,11,10,10,10,10,10,11,10,10,10,10,10,11,10,10, - 11,11,11,12,11,12,11,11,12,10,10,10,10,10,10,10, - 11,10,10,11,10,12,11,11,11,12,11,11,11,11,10,10, - 10,10,10,10,10,11,11,11,10,11,12,11,11,11,12,11, - 12,11,12,10,11,10,10,10,10,11,10,10,10,10,10,10, - 12,11,11,11,11,11,12,12,10,10,10,10,10,11,10,10, - 11,10,11,11,11,11,11,11,11,11,11,11,11,11,12,11, - 10,11,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__16c2_s_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__16c2_s_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p8_1 = { - _vq_quantthresh__16c2_s_p8_1, - _vq_quantmap__16c2_s_p8_1, - 21, - 21 -}; - -static static_codebook _16c2_s_p8_1 = { - 2, 441, - _vq_lengthlist__16c2_s_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__16c2_s_p8_1, - NULL, - &_vq_auxt__16c2_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16c2_s_p9_0[] = { - 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__16c2_s_p9_0[] = { - -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -465.5, 465.5, 1396.5, - 2327.5, 3258.5, 4189.5, 5120.5, -}; - -static long _vq_quantmap__16c2_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p9_0 = { - _vq_quantthresh__16c2_s_p9_0, - _vq_quantmap__16c2_s_p9_0, - 13, - 13 -}; - -static static_codebook _16c2_s_p9_0 = { - 2, 169, - _vq_lengthlist__16c2_s_p9_0, - 1, -510275072, 1631393792, 4, 0, - _vq_quantlist__16c2_s_p9_0, - NULL, - &_vq_auxt__16c2_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p9_1[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__16c2_s_p9_1[] = { - 1, 5, 5, 9, 8, 7, 7, 7, 6,10,11,11,11,11,11,11, - 11, 8, 7, 6, 8, 8,10, 9,10,10,10, 9,11,10,10,10, - 10,10, 8, 6, 6, 8, 8, 9, 8, 9, 8, 9,10,10,10,10, - 10,10,10,10, 8,10, 9, 9, 9, 9,10,10,10,10,10,10, - 10,10,10,10,10, 8, 9, 9, 9,10,10, 9,10,10,10,10, - 10,10,10,10,10,10,10,10, 9, 8, 9, 9,10,10,10,10, - 10,10,10,10,10,10,10,10, 9, 8, 8, 9, 9,10,10,10, - 10,10,10,10,10,10,10,10,10,10, 9,10, 9, 9,10,10, - 10,10,10,10,10,10,10,10,10,10,10, 9, 8, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10, 9,10, 9,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__16c2_s_p9_1[] = { - -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, -24.5, - 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, 367.5, -}; - -static long _vq_quantmap__16c2_s_p9_1[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p9_1 = { - _vq_quantthresh__16c2_s_p9_1, - _vq_quantmap__16c2_s_p9_1, - 17, - 17 -}; - -static static_codebook _16c2_s_p9_1 = { - 2, 289, - _vq_lengthlist__16c2_s_p9_1, - 1, -518488064, 1622704128, 5, 0, - _vq_quantlist__16c2_s_p9_1, - NULL, - &_vq_auxt__16c2_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__16c2_s_p9_2[] = { - 13, - 12, - 14, - 11, - 15, - 10, - 16, - 9, - 17, - 8, - 18, - 7, - 19, - 6, - 20, - 5, - 21, - 4, - 22, - 3, - 23, - 2, - 24, - 1, - 25, - 0, - 26, -}; - -static long _vq_lengthlist__16c2_s_p9_2[] = { - 1, 4, 4, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 8, 7, 8, 7, 7, 4, 4, -}; - -static float _vq_quantthresh__16c2_s_p9_2[] = { - -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, - 11.5, 12.5, -}; - -static long _vq_quantmap__16c2_s_p9_2[] = { - 25, 23, 21, 19, 17, 15, 13, 11, - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, 12, 14, 16, 18, 20, - 22, 24, 26, -}; - -static encode_aux_threshmatch _vq_auxt__16c2_s_p9_2 = { - _vq_quantthresh__16c2_s_p9_2, - _vq_quantmap__16c2_s_p9_2, - 27, - 27 -}; - -static static_codebook _16c2_s_p9_2 = { - 1, 27, - _vq_lengthlist__16c2_s_p9_2, - 1, -528875520, 1611661312, 5, 0, - _vq_quantlist__16c2_s_p9_2, - NULL, - &_vq_auxt__16c2_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__16c2_s_short[] = { - 7,10,11,11,11,14,15,15,17,14, 8, 6, 7, 7, 8, 9, - 11,11,14,17, 9, 6, 6, 6, 7, 7,10,11,15,16, 9, 6, - 6, 4, 4, 5, 8, 9,12,16,10, 6, 6, 4, 4, 4, 6, 9, - 13,16,10, 7, 6, 5, 4, 3, 5, 7,13,16,11, 9, 8, 7, - 6, 5, 5, 6,12,15,10,10,10, 9, 7, 6, 6, 7,11,15, - 13,13,13,13,11,10,10, 9,12,16,16,16,16,14,16,15, - 15,12,14,14, -}; - -static static_codebook _huff_book__16c2_s_short = { - 2, 100, - _huff_lengthlist__16c2_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8c0_s_p1_0[] = { - 1, 5, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0, - 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0, 0, - 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 9,11,11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,10, 0, 0, - 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 9,11,11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,11, 0, - 0, 0, 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,11,11, - 0, 0, 0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c0_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__8c0_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p1_0 = { - _vq_quantthresh__8c0_s_p1_0, - _vq_quantmap__8c0_s_p1_0, - 3, - 3 -}; - -static static_codebook _8c0_s_p1_0 = { - 8, 6561, - _vq_lengthlist__8c0_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__8c0_s_p1_0, - NULL, - &_vq_auxt__8c0_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8c0_s_p2_0[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c0_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8c0_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p2_0 = { - _vq_quantthresh__8c0_s_p2_0, - _vq_quantmap__8c0_s_p2_0, - 5, - 5 -}; - -static static_codebook _8c0_s_p2_0 = { - 4, 625, - _vq_lengthlist__8c0_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8c0_s_p2_0, - NULL, - &_vq_auxt__8c0_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8c0_s_p3_0[] = { - 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 8, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 7, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c0_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8c0_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p3_0 = { - _vq_quantthresh__8c0_s_p3_0, - _vq_quantmap__8c0_s_p3_0, - 5, - 5 -}; - -static static_codebook _8c0_s_p3_0 = { - 4, 625, - _vq_lengthlist__8c0_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8c0_s_p3_0, - NULL, - &_vq_auxt__8c0_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8c0_s_p4_0[] = { - 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c0_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8c0_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p4_0 = { - _vq_quantthresh__8c0_s_p4_0, - _vq_quantmap__8c0_s_p4_0, - 9, - 9 -}; - -static static_codebook _8c0_s_p4_0 = { - 2, 81, - _vq_lengthlist__8c0_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8c0_s_p4_0, - NULL, - &_vq_auxt__8c0_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8c0_s_p5_0[] = { - 1, 3, 3, 5, 5, 7, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7, - 8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 9, 0, 0, 0, 8, 8, - 8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8, 9, 9, 0, 0, 0, - 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__8c0_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8c0_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p5_0 = { - _vq_quantthresh__8c0_s_p5_0, - _vq_quantmap__8c0_s_p5_0, - 9, - 9 -}; - -static static_codebook _8c0_s_p5_0 = { - 2, 81, - _vq_lengthlist__8c0_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8c0_s_p5_0, - NULL, - &_vq_auxt__8c0_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__8c0_s_p6_0[] = { - 1, 3, 3, 6, 6, 8, 8, 9, 9, 8, 8,10, 9,10,10,11, - 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11, - 11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11, - 11,12,11, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,11, - 10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,10, - 11,11,11,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10, - 10,11,11,12,12,13,13, 0, 0, 0,10,10,10,10,11,11, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10, 9,10, - 11,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10, 9,10,11,12,12,13,13,14,13, 0, 0, 0, 0, 0, 9, - 9, 9,10,10,10,11,11,13,12,13,13, 0, 0, 0, 0, 0, - 10,10,10,10,11,11,12,12,13,13,14,14, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,13,13,13,14, 0, 0, 0, - 0, 0, 0, 0,11,11,11,11,12,12,13,14,14,14, 0, 0, - 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,13, 0, - 0, 0, 0, 0, 0, 0,11,11,12,12,13,13,14,14,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__8c0_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__8c0_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p6_0 = { - _vq_quantthresh__8c0_s_p6_0, - _vq_quantmap__8c0_s_p6_0, - 17, - 17 -}; - -static static_codebook _8c0_s_p6_0 = { - 2, 289, - _vq_lengthlist__8c0_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__8c0_s_p6_0, - NULL, - &_vq_auxt__8c0_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8c0_s_p7_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,11, 9,10,12, - 9,10, 4, 7, 7,10,10,10,11, 9, 9, 6,11,10,11,11, - 12,11,11,11, 6,10,10,11,11,12,11,10,10, 6, 9,10, - 11,11,11,11,10,10, 7,10,11,12,11,11,12,11,12, 6, - 9, 9,10, 9, 9,11,10,10, 6, 9, 9,10,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__8c0_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__8c0_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p7_0 = { - _vq_quantthresh__8c0_s_p7_0, - _vq_quantmap__8c0_s_p7_0, - 3, - 3 -}; - -static static_codebook _8c0_s_p7_0 = { - 4, 81, - _vq_lengthlist__8c0_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__8c0_s_p7_0, - NULL, - &_vq_auxt__8c0_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__8c0_s_p7_1[] = { - 1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10, 7, 7, - 8, 8, 9, 9, 9, 9,10,10, 9, 7, 7, 8, 8, 9, 9, 9, - 9,10,10,10, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10, 8, - 8, 9, 9, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9,10, - 10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10,11,10,11, - 9, 9, 9, 9,10,10,10,10,11,11,11,10,10, 9, 9,10, - 10,10, 9,11,10,10,10,10,10,10, 9, 9,10,10,11,11, - 10,10,10, 9, 9, 9,10,10,10, -}; - -static float _vq_quantthresh__8c0_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__8c0_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p7_1 = { - _vq_quantthresh__8c0_s_p7_1, - _vq_quantmap__8c0_s_p7_1, - 11, - 11 -}; - -static static_codebook _8c0_s_p7_1 = { - 2, 121, - _vq_lengthlist__8c0_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__8c0_s_p7_1, - NULL, - &_vq_auxt__8c0_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__8c0_s_p8_0[] = { - 1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 6, 6, - 7, 7, 8, 8, 7, 7, 8, 9,10,10, 7, 6, 6, 7, 7, 8, - 7, 7, 7, 9, 9,10,12, 0, 8, 8, 8, 8, 8, 9, 8, 8, - 9, 9,10,10, 0, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9,11, - 10, 0, 0,13, 9, 8, 9, 9, 9, 9,10,10,11,11, 0,13, - 0, 9, 9, 9, 9, 9, 9,11,10,11,11, 0, 0, 0, 8, 9, - 10, 9,10,10,13,11,12,12, 0, 0, 0, 8, 9, 9, 9,10, - 10,13,12,12,13, 0, 0, 0,12, 0,10,10,12,11,10,11, - 12,12, 0, 0, 0,13,13,10,10,10,11,12, 0,13, 0, 0, - 0, 0, 0, 0,13,11, 0,12,12,12,13,12, 0, 0, 0, 0, - 0, 0,13,13,11,13,13,11,12, -}; - -static float _vq_quantthresh__8c0_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__8c0_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p8_0 = { - _vq_quantthresh__8c0_s_p8_0, - _vq_quantmap__8c0_s_p8_0, - 13, - 13 -}; - -static static_codebook _8c0_s_p8_0 = { - 2, 169, - _vq_lengthlist__8c0_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__8c0_s_p8_0, - NULL, - &_vq_auxt__8c0_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8c0_s_p8_1[] = { - 1, 3, 4, 5, 5, 7, 6, 6, 6, 5, 7, 7, 7, 6, 6, 7, - 7, 7, 6, 6, 7, 7, 7, 6, 6, -}; - -static float _vq_quantthresh__8c0_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8c0_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p8_1 = { - _vq_quantthresh__8c0_s_p8_1, - _vq_quantmap__8c0_s_p8_1, - 5, - 5 -}; - -static static_codebook _8c0_s_p8_1 = { - 2, 25, - _vq_lengthlist__8c0_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8c0_s_p8_1, - NULL, - &_vq_auxt__8c0_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p9_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8c0_s_p9_0[] = { - 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__8c0_s_p9_0[] = { - -157.5, 157.5, -}; - -static long _vq_quantmap__8c0_s_p9_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p9_0 = { - _vq_quantthresh__8c0_s_p9_0, - _vq_quantmap__8c0_s_p9_0, - 3, - 3 -}; - -static static_codebook _8c0_s_p9_0 = { - 4, 81, - _vq_lengthlist__8c0_s_p9_0, - 1, -518803456, 1628680192, 2, 0, - _vq_quantlist__8c0_s_p9_0, - NULL, - &_vq_auxt__8c0_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__8c0_s_p9_1[] = { - 1, 4, 4, 5, 5,10, 8,11,11,11,11,11,11,11,11, 6, - 6, 6, 7, 6,11,10,11,11,11,11,11,11,11,11, 7, 5, - 6, 6, 6, 8, 7,11,11,11,11,11,11,11,11,11, 7, 8, - 8, 8, 9, 9,11,11,11,11,11,11,11,11,11, 9, 8, 7, - 8, 9,11,11,11,11,11,11,11,11,11,11,11,10,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11, -}; - -static float _vq_quantthresh__8c0_s_p9_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__8c0_s_p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p9_1 = { - _vq_quantthresh__8c0_s_p9_1, - _vq_quantmap__8c0_s_p9_1, - 15, - 15 -}; - -static static_codebook _8c0_s_p9_1 = { - 2, 225, - _vq_lengthlist__8c0_s_p9_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__8c0_s_p9_1, - NULL, - &_vq_auxt__8c0_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__8c0_s_p9_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__8c0_s_p9_2[] = { - 1, 5, 5, 7, 7, 8, 7, 8, 8,10,10, 9, 9,10,10,10, - 11,11,10,12,11,12,12,12, 9, 8, 8, 8, 8, 8, 9,10, - 10,10,10,11,11,11,10,11,11,12,12,11,12, 8, 8, 7, - 7, 8, 9,10,10,10, 9,10,10, 9,10,10,11,11,11,11, - 11,11, 9, 9, 9, 9, 8, 9,10,10,11,10,10,11,11,12, - 10,10,12,12,11,11,10, 9, 9,10, 8, 9,10,10,10, 9, - 10,10,11,11,10,11,10,10,10,12,12,12, 9,10, 9,10, - 9, 9,10,10,11,11,11,11,10,10,10,11,12,11,12,11, - 12,10,11,10,11, 9,10, 9,10, 9,10,10, 9,10,10,11, - 10,11,11,11,11,12,11, 9,10,10,10,10,11,11,11,11, - 11,10,11,11,11,11,10,12,10,12,12,11,12,10,10,11, - 10, 9,11,10,11, 9,10,11,10,10,10,11,11,11,11,12, - 12,10, 9, 9,11,10, 9,12,11,10,12,12,11,11,11,11, - 10,11,11,12,11,10,12, 9,11,10,11,10,10,11,10,11, - 9,10,10,10,11,12,11,11,12,11,10,10,11,11, 9,10, - 10,12,10,11,10,10,10, 9,10,10,10,10, 9,10,10,11, - 11,11,11,12,11,10,10,10,10,11,11,10,11,11, 9,11, - 10,12,10,12,11,10,11,10,10,10,11,10,10,11,11,10, - 11,10,10,10,10,11,11,12,10,10,10,11,10,11,12,11, - 10,11,10,10,11,11,10,12,10, 9,10,10,11,11,11,10, - 12,10,10,11,11,11,10,10,11,10,10,10,11,10,11,10, - 12,11,11,10,10,10,12,10,10,11, 9,10,11,11,11,10, - 10,11,10,10, 9,11,11,12,12,11,12,11,11,11,11,11, - 11, 9,10,11,10,12,10,10,10,10,11,10,10,11,10,10, - 12,10,10,10,10,10, 9,12,10,10,10,10,12, 9,11,10, - 10,11,10,12,12,10,12,12,12,10,10,10,10, 9,10,11, - 10,10,12,10,10,12,11,10,11,10,10,12,11,10,12,10, - 10,11, 9,11,10, 9,10, 9,10, -}; - -static float _vq_quantthresh__8c0_s_p9_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__8c0_s_p9_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__8c0_s_p9_2 = { - _vq_quantthresh__8c0_s_p9_2, - _vq_quantmap__8c0_s_p9_2, - 21, - 21 -}; - -static static_codebook _8c0_s_p9_2 = { - 2, 441, - _vq_lengthlist__8c0_s_p9_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__8c0_s_p9_2, - NULL, - &_vq_auxt__8c0_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__8c0_s_single[] = { - 4, 5,18, 7,10, 6, 7, 8, 9,10, 5, 2,18, 5, 7, 5, - 6, 7, 8,11,17,17,17,17,17,17,17,17,17,17, 7, 4, - 17, 6, 9, 6, 8,10,12,15,11, 7,17, 9, 6, 6, 7, 9, - 11,15, 6, 4,17, 6, 6, 4, 5, 8,11,16, 6, 6,17, 8, - 6, 5, 6, 9,13,16, 8, 9,17,11, 9, 8, 8,11,13,17, - 9,12,17,15,14,13,12,13,14,17,12,15,17,17,17,17, - 17,16,17,17, -}; - -static static_codebook _huff_book__8c0_s_single = { - 2, 100, - _huff_lengthlist__8c0_s_single, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8c1_s_p1_0[] = { - 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, - 0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0, - 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 8, 8,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 8,10, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c1_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__8c1_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p1_0 = { - _vq_quantthresh__8c1_s_p1_0, - _vq_quantmap__8c1_s_p1_0, - 3, - 3 -}; - -static static_codebook _8c1_s_p1_0 = { - 8, 6561, - _vq_lengthlist__8c1_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__8c1_s_p1_0, - NULL, - &_vq_auxt__8c1_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8c1_s_p2_0[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c1_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8c1_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p2_0 = { - _vq_quantthresh__8c1_s_p2_0, - _vq_quantmap__8c1_s_p2_0, - 5, - 5 -}; - -static static_codebook _8c1_s_p2_0 = { - 4, 625, - _vq_lengthlist__8c1_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8c1_s_p2_0, - NULL, - &_vq_auxt__8c1_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8c1_s_p3_0[] = { - 2, 4, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c1_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8c1_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p3_0 = { - _vq_quantthresh__8c1_s_p3_0, - _vq_quantmap__8c1_s_p3_0, - 5, - 5 -}; - -static static_codebook _8c1_s_p3_0 = { - 4, 625, - _vq_lengthlist__8c1_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8c1_s_p3_0, - NULL, - &_vq_auxt__8c1_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8c1_s_p4_0[] = { - 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__8c1_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8c1_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p4_0 = { - _vq_quantthresh__8c1_s_p4_0, - _vq_quantmap__8c1_s_p4_0, - 9, - 9 -}; - -static static_codebook _8c1_s_p4_0 = { - 2, 81, - _vq_lengthlist__8c1_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8c1_s_p4_0, - NULL, - &_vq_auxt__8c1_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8c1_s_p5_0[] = { - 1, 3, 3, 4, 5, 6, 6, 8, 8, 0, 0, 0, 8, 8, 7, 7, - 9, 9, 0, 0, 0, 8, 8, 7, 7, 9, 9, 0, 0, 0, 9,10, - 8, 8, 9, 9, 0, 0, 0,10,10, 8, 8, 9, 9, 0, 0, 0, - 11,10, 8, 8,10,10, 0, 0, 0,11,11, 8, 8,10,10, 0, - 0, 0,12,12, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__8c1_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8c1_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p5_0 = { - _vq_quantthresh__8c1_s_p5_0, - _vq_quantmap__8c1_s_p5_0, - 9, - 9 -}; - -static static_codebook _8c1_s_p5_0 = { - 2, 81, - _vq_lengthlist__8c1_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8c1_s_p5_0, - NULL, - &_vq_auxt__8c1_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__8c1_s_p6_0[] = { - 1, 3, 3, 5, 5, 8, 8, 8, 8, 9, 9,10,10,11,11,11, - 11, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11, - 12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,11, - 12,12,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11, - 11,12,12,12,12, 0, 0, 0,10,10, 9, 9,10,10,10,10, - 11,11,12,12,13,13, 0, 0, 0,10,10, 9, 9,10,10,10, - 10,11,11,12,12,13,13, 0, 0, 0,11,11, 9, 9,10,10, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,11,11,12,11,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,11,11,11,11,12,12,13,12,13,13, 0, 0, 0, 0, - 0, 0, 0,11,10,11,11,12,12,13,13,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,13, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14, - 14, -}; - -static float _vq_quantthresh__8c1_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__8c1_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p6_0 = { - _vq_quantthresh__8c1_s_p6_0, - _vq_quantmap__8c1_s_p6_0, - 17, - 17 -}; - -static static_codebook _8c1_s_p6_0 = { - 2, 289, - _vq_lengthlist__8c1_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__8c1_s_p6_0, - NULL, - &_vq_auxt__8c1_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8c1_s_p7_0[] = { - 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10, - 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10, - 10,11,10,10, 6, 9, 9,10, 9,10,11,10,10, 6, 9, 9, - 10, 9, 9,11, 9,10, 7,10,10,11,11,11,11,10,10, 6, - 9, 9,10,10,10,11, 9, 9, 6, 9, 9,10,10,10,10, 9, - 9, -}; - -static float _vq_quantthresh__8c1_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__8c1_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p7_0 = { - _vq_quantthresh__8c1_s_p7_0, - _vq_quantmap__8c1_s_p7_0, - 3, - 3 -}; - -static static_codebook _8c1_s_p7_0 = { - 4, 81, - _vq_lengthlist__8c1_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__8c1_s_p7_0, - NULL, - &_vq_auxt__8c1_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__8c1_s_p7_1[] = { - 2, 3, 3, 5, 5, 7, 7, 7, 7, 7, 7,10,10, 9, 7, 7, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8, - 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, - 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 8, 8, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__8c1_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__8c1_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p7_1 = { - _vq_quantthresh__8c1_s_p7_1, - _vq_quantmap__8c1_s_p7_1, - 11, - 11 -}; - -static static_codebook _8c1_s_p7_1 = { - 2, 121, - _vq_lengthlist__8c1_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__8c1_s_p7_1, - NULL, - &_vq_auxt__8c1_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__8c1_s_p8_0[] = { - 1, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, - 7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8, - 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9, 9, 9,10, 9,10,11,11,11, 0,13, - 12, 9, 8, 9, 9,10,10,11,11,12,11, 0, 0, 0, 9, 9, - 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 9,10, - 10,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,12,11, - 13,12, 0, 0, 0,14,14,10,10,11,10,11,11,12,12, 0, - 0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0, - 0,12,12,11,10,12,11,13,12, -}; - -static float _vq_quantthresh__8c1_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__8c1_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p8_0 = { - _vq_quantthresh__8c1_s_p8_0, - _vq_quantmap__8c1_s_p8_0, - 13, - 13 -}; - -static static_codebook _8c1_s_p8_0 = { - 2, 169, - _vq_lengthlist__8c1_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__8c1_s_p8_0, - NULL, - &_vq_auxt__8c1_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8c1_s_p8_1[] = { - 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__8c1_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8c1_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p8_1 = { - _vq_quantthresh__8c1_s_p8_1, - _vq_quantmap__8c1_s_p8_1, - 5, - 5 -}; - -static static_codebook _8c1_s_p8_1 = { - 2, 25, - _vq_lengthlist__8c1_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8c1_s_p8_1, - NULL, - &_vq_auxt__8c1_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__8c1_s_p9_0[] = { - 1, 3, 3,10,10,10,10,10,10,10,10,10,10, 5, 6, 6, - 10,10,10,10,10,10,10,10,10,10, 6, 7, 8,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__8c1_s_p9_0[] = { - -1732.5, -1417.5, -1102.5, -787.5, -472.5, -157.5, 157.5, 472.5, - 787.5, 1102.5, 1417.5, 1732.5, -}; - -static long _vq_quantmap__8c1_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p9_0 = { - _vq_quantthresh__8c1_s_p9_0, - _vq_quantmap__8c1_s_p9_0, - 13, - 13 -}; - -static static_codebook _8c1_s_p9_0 = { - 2, 169, - _vq_lengthlist__8c1_s_p9_0, - 1, -513964032, 1628680192, 4, 0, - _vq_quantlist__8c1_s_p9_0, - NULL, - &_vq_auxt__8c1_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__8c1_s_p9_1[] = { - 1, 4, 4, 5, 5, 7, 7, 9, 9,11,11,12,12,13,13, 6, - 5, 5, 6, 6, 9, 9,10,10,12,12,12,13,15,14, 6, 5, - 5, 7, 7, 9, 9,10,10,12,12,12,13,14,13,17, 7, 7, - 8, 8,10,10,11,11,12,13,13,13,13,13,17, 7, 7, 8, - 8,10,10,11,11,13,13,13,13,14,14,17,11,11, 9, 9, - 11,11,12,12,12,13,13,14,15,13,17,12,12, 9, 9,11, - 11,12,12,13,13,13,13,14,16,17,17,17,11,12,12,12, - 13,13,13,14,15,14,15,15,17,17,17,12,12,11,11,13, - 13,14,14,15,14,15,15,17,17,17,15,15,13,13,14,14, - 15,14,15,15,16,15,17,17,17,15,15,13,13,13,14,14, - 15,15,15,15,16,17,17,17,17,16,14,15,14,14,15,14, - 14,15,15,15,17,17,17,17,17,14,14,16,14,15,15,15, - 15,15,15,17,17,17,17,17,17,16,16,15,17,15,15,14, - 17,15,17,16,17,17,17,17,16,15,14,15,15,15,15,15, - 15, -}; - -static float _vq_quantthresh__8c1_s_p9_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__8c1_s_p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p9_1 = { - _vq_quantthresh__8c1_s_p9_1, - _vq_quantmap__8c1_s_p9_1, - 15, - 15 -}; - -static static_codebook _8c1_s_p9_1 = { - 2, 225, - _vq_lengthlist__8c1_s_p9_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__8c1_s_p9_1, - NULL, - &_vq_auxt__8c1_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__8c1_s_p9_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__8c1_s_p9_2[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9, - 9, 9, 9, 9, 9,11,11,12, 7, 7, 7, 7, 8, 8, 9, 9, - 9, 9,10,10,10,10,10,10,10,10,11,11,11, 7, 7, 7, - 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,11, - 11,12, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10, - 10,10,10,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9, - 9,10,10,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11, - 11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10, - 10,10,10,11,12,11, 9, 9, 8, 9, 9, 9, 9, 9,10,10, - 10,10,10,10,10,10,10,10,11,11,11,11,11, 8, 8, 9, - 9, 9, 9,10,10,10,10,10,10,10,10,10,10,11,12,11, - 12,11, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10, - 10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10, - 10,10,10,10,10,10,10,12,11,12,11,11, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10,12,11,11,11, - 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10, - 11,11,11,12,11,11,12,11,10,10,10,10,10,10,10,10, - 10,10,10,10,11,10,11,11,11,11,11,11,11,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,11,11,12,11,12, - 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 11,11,12,11,12,11,11,11,11,10,10,10,10,10,10,10, - 10,10,10,10,10,11,11,12,11,11,12,11,11,12,10,10, - 11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, - 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,12, - 12,11,12,11,11,12,12,12,11,11,10,10,10,10,10,10, - 10,10,10,11,12,12,11,12,12,11,12,11,11,11,11,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__8c1_s_p9_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__8c1_s_p9_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__8c1_s_p9_2 = { - _vq_quantthresh__8c1_s_p9_2, - _vq_quantmap__8c1_s_p9_2, - 21, - 21 -}; - -static static_codebook _8c1_s_p9_2 = { - 2, 441, - _vq_lengthlist__8c1_s_p9_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__8c1_s_p9_2, - NULL, - &_vq_auxt__8c1_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__8c1_s_single[] = { - 4, 6,18, 8,11, 8, 8, 9, 9,10, 4, 4,18, 5, 9, 5, - 6, 7, 8,10,18,18,18,18,17,17,17,17,17,17, 7, 5, - 17, 6,11, 6, 7, 8, 9,12,12, 9,17,12, 8, 8, 9,10, - 10,13, 7, 5,17, 6, 8, 4, 5, 6, 8,10, 6, 5,17, 6, - 8, 5, 4, 5, 7, 9, 7, 7,17, 8, 9, 6, 5, 5, 6, 8, - 8, 8,17, 9,11, 8, 6, 6, 6, 7, 9,10,17,12,12,10, - 9, 7, 7, 8, -}; - -static static_codebook _huff_book__8c1_s_single = { - 2, 100, - _huff_lengthlist__8c1_s_single, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c2_s_long[] = { - 6, 6,12,10,10,10, 9,10,12,12, 6, 1,10, 5, 6, 6, - 7, 9,11,14,12, 9, 8,11, 7, 8, 9,11,13,15,10, 5, - 12, 7, 8, 7, 9,12,14,15,10, 6, 7, 8, 5, 6, 7, 9, - 12,14, 9, 6, 8, 7, 6, 6, 7, 9,12,12, 9, 7, 9, 9, - 7, 6, 6, 7,10,10,10, 9,10,11, 8, 7, 6, 6, 8,10, - 12,11,13,13,11,10, 8, 8, 8,10,11,13,15,15,14,13, - 10, 8, 8, 9, -}; - -static static_codebook _huff_book__44c2_s_long = { - 2, 100, - _huff_lengthlist__44c2_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c2_s_p1_0[] = { - 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, - 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c2_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c2_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p1_0 = { - _vq_quantthresh__44c2_s_p1_0, - _vq_quantmap__44c2_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c2_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44c2_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c2_s_p1_0, - NULL, - &_vq_auxt__44c2_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c2_s_p2_0[] = { - 1, 4, 4, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, - 8, 8, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8, - 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 4, 6, 6, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,11,11, 0, 0, - 0,11,11, 0, 0, 0,12,11, 0, 0, 0, 0, 0, 0, 0, 7, - 8, 8, 0, 0, 0,10,11, 0, 0, 0,11,11, 0, 0, 0,11, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0,11,11, 0, 0, 0,11,11, - 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, - 0, 0,10,11, 0, 0, 0,10,11, 0, 0, 0,11,11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 9, 9, 0, 0, 0,11,12, 0, 0, 0,11,12, 0, 0, 0, - 12,11, 0, 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0,12, - 11, 0, 0, 0,12,11, 0, 0, 0,11,12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c2_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c2_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p2_0 = { - _vq_quantthresh__44c2_s_p2_0, - _vq_quantmap__44c2_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c2_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c2_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c2_s_p2_0, - NULL, - &_vq_auxt__44c2_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c2_s_p3_0[] = { - 2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c2_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c2_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p3_0 = { - _vq_quantthresh__44c2_s_p3_0, - _vq_quantmap__44c2_s_p3_0, - 5, - 5 -}; - -static static_codebook _44c2_s_p3_0 = { - 4, 625, - _vq_lengthlist__44c2_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c2_s_p3_0, - NULL, - &_vq_auxt__44c2_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c2_s_p4_0[] = { - 1, 3, 3, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 0, 0, - 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 7, 7, 6, 6, - 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0, - 7, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c2_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c2_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p4_0 = { - _vq_quantthresh__44c2_s_p4_0, - _vq_quantmap__44c2_s_p4_0, - 9, - 9 -}; - -static static_codebook _44c2_s_p4_0 = { - 2, 81, - _vq_lengthlist__44c2_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c2_s_p4_0, - NULL, - &_vq_auxt__44c2_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c2_s_p5_0[] = { - 1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 7, 7, 7, 7, 7, 7, - 9, 9, 0, 7, 7, 7, 7, 7, 7, 9, 9, 0, 8, 8, 7, 7, - 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0, - 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11, - 11, -}; - -static float _vq_quantthresh__44c2_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c2_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p5_0 = { - _vq_quantthresh__44c2_s_p5_0, - _vq_quantmap__44c2_s_p5_0, - 9, - 9 -}; - -static static_codebook _44c2_s_p5_0 = { - 2, 81, - _vq_lengthlist__44c2_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c2_s_p5_0, - NULL, - &_vq_auxt__44c2_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c2_s_p6_0[] = { - 1, 4, 3, 6, 6, 8, 8, 9, 9, 9, 9, 9, 9,10,10,11, - 11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11, - 12,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11, - 11,11,12, 0, 8, 8, 7, 7, 9, 9,10,10, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10, 9,10, - 10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10, - 11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10, - 10,11,11,12,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,10,10,11,11,12,12,13,12,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14, - 14, -}; - -static float _vq_quantthresh__44c2_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c2_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p6_0 = { - _vq_quantthresh__44c2_s_p6_0, - _vq_quantmap__44c2_s_p6_0, - 17, - 17 -}; - -static static_codebook _44c2_s_p6_0 = { - 2, 289, - _vq_lengthlist__44c2_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c2_s_p6_0, - NULL, - &_vq_auxt__44c2_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c2_s_p7_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,10, 9, 9, 7,10,10,11,10, - 11,11,10,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9, - 11,10,11,11,10,10, 7,11,10,11,11,11,12,11,11, 6, - 9, 9,11,10,10,11,11,10, 6, 9, 9,11,10,10,12,10, - 11, -}; - -static float _vq_quantthresh__44c2_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c2_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p7_0 = { - _vq_quantthresh__44c2_s_p7_0, - _vq_quantmap__44c2_s_p7_0, - 3, - 3 -}; - -static static_codebook _44c2_s_p7_0 = { - 4, 81, - _vq_lengthlist__44c2_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c2_s_p7_0, - NULL, - &_vq_auxt__44c2_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c2_s_p7_1[] = { - 2, 3, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 7, 7, 6, 6, - 7, 7, 8, 8, 8, 8, 9, 6, 6, 6, 6, 7, 7, 8, 8, 8, - 8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 8, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c2_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c2_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p7_1 = { - _vq_quantthresh__44c2_s_p7_1, - _vq_quantmap__44c2_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c2_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c2_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c2_s_p7_1, - NULL, - &_vq_auxt__44c2_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c2_s_p8_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 5, 7, 7, 8, - 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13, - 13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10, - 10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11, - 11,12,12,12,12, 0, 0, 0,14,14,10,11,11,11,12,12, - 13,13, 0, 0, 0,14,14,11,10,11,11,13,12,13,13, 0, - 0, 0, 0, 0,12,12,11,12,13,12,14,14, 0, 0, 0, 0, - 0,12,12,12,12,13,12,14,14, -}; - -static float _vq_quantthresh__44c2_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c2_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p8_0 = { - _vq_quantthresh__44c2_s_p8_0, - _vq_quantmap__44c2_s_p8_0, - 13, - 13 -}; - -static static_codebook _44c2_s_p8_0 = { - 2, 169, - _vq_lengthlist__44c2_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c2_s_p8_0, - NULL, - &_vq_auxt__44c2_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c2_s_p8_1[] = { - 2, 4, 4, 5, 4, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c2_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c2_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p8_1 = { - _vq_quantthresh__44c2_s_p8_1, - _vq_quantmap__44c2_s_p8_1, - 5, - 5 -}; - -static static_codebook _44c2_s_p8_1 = { - 2, 25, - _vq_lengthlist__44c2_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c2_s_p8_1, - NULL, - &_vq_auxt__44c2_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c2_s_p9_0[] = { - 1, 5, 4,12,12,12,12,12,12,12,12,12,12, 4, 9, 8, - 11,11,11,11,11,11,11,11,11,11, 2, 8, 7,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11, -}; - -static float _vq_quantthresh__44c2_s_p9_0[] = { - -1215.5, -994.5, -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, - 552.5, 773.5, 994.5, 1215.5, -}; - -static long _vq_quantmap__44c2_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p9_0 = { - _vq_quantthresh__44c2_s_p9_0, - _vq_quantmap__44c2_s_p9_0, - 13, - 13 -}; - -static static_codebook _44c2_s_p9_0 = { - 2, 169, - _vq_lengthlist__44c2_s_p9_0, - 1, -514541568, 1627103232, 4, 0, - _vq_quantlist__44c2_s_p9_0, - NULL, - &_vq_auxt__44c2_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p9_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c2_s_p9_1[] = { - 1, 4, 4, 6, 6, 7, 6, 8, 8,10, 9,10,10, 6, 5, 5, - 7, 7, 8, 7,10, 9,11,11,12,13, 6, 5, 5, 7, 7, 8, - 8,10,10,11,11,13,13,18, 8, 8, 8, 8, 9, 9,10,10, - 12,12,12,13,18, 8, 8, 8, 8, 9, 9,10,10,12,12,13, - 13,18,11,11, 8, 8,10,10,11,11,12,11,13,12,18,11, - 11, 9, 7,10,10,11,11,11,12,12,13,17,17,17,10,10, - 11,11,12,12,12,10,12,12,17,17,17,11,10,11,10,13, - 12,11,12,12,12,17,17,17,15,14,11,11,12,11,13,10, - 13,12,17,17,17,14,14,12,10,11,11,13,13,13,13,17, - 17,16,17,16,13,13,12,10,13,10,14,13,17,16,17,16, - 17,13,12,12,10,13,11,14,14, -}; - -static float _vq_quantthresh__44c2_s_p9_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44c2_s_p9_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p9_1 = { - _vq_quantthresh__44c2_s_p9_1, - _vq_quantmap__44c2_s_p9_1, - 13, - 13 -}; - -static static_codebook _44c2_s_p9_1 = { - 2, 169, - _vq_lengthlist__44c2_s_p9_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44c2_s_p9_1, - NULL, - &_vq_auxt__44c2_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c2_s_p9_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c2_s_p9_2[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, - 8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9,10, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 8, 7, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9,10, 9, 9, 9,10,11,10, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9,10,10,10,10,11,10, 8, 8, 9, 9, 9, 9, - 9, 9,10, 9, 9,10, 9,10,11,10,11,11,11, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9,10,10,11,11,11,11,11, 9, 9, - 9, 9, 9, 9,10, 9, 9, 9,10,10,11,11,11,11,11, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,11,11,11,11,11, - 9, 9, 9, 9,10,10, 9, 9, 9,10,10,10,11,11,11,11, - 11,11,11, 9, 9, 9,10, 9, 9,10,10,10,10,11,11,10, - 11,11,11,11,10, 9,10,10, 9, 9, 9, 9,10,10,11,10, - 11,11,11,11,11, 9, 9, 9, 9,10, 9,10,10,10,10,11, - 10,11,11,11,11,11,10,10, 9, 9,10, 9,10,10,10,10, - 10,10,10,11,11,11,11,11,11, 9, 9,10, 9,10, 9,10, - 10, -}; - -static float _vq_quantthresh__44c2_s_p9_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c2_s_p9_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c2_s_p9_2 = { - _vq_quantthresh__44c2_s_p9_2, - _vq_quantmap__44c2_s_p9_2, - 17, - 17 -}; - -static static_codebook _44c2_s_p9_2 = { - 2, 289, - _vq_lengthlist__44c2_s_p9_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c2_s_p9_2, - NULL, - &_vq_auxt__44c2_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c2_s_short[] = { - 11, 9,13,12,12,11,12,12,13,15, 8, 2,11, 4, 8, 5, - 7,10,12,15,13, 7,10, 9, 8, 8,10,13,17,17,11, 4, - 12, 5, 9, 5, 8,11,14,16,12, 6, 8, 7, 6, 6, 8,11, - 13,16,11, 4, 9, 5, 6, 4, 6,10,13,16,11, 6,11, 7, - 7, 6, 7,10,13,15,13, 9,12, 9, 8, 6, 8,10,12,14, - 14,10,10, 8, 6, 5, 6, 9,11,13,15,11,11, 9, 6, 5, - 6, 8, 9,12, -}; - -static static_codebook _huff_book__44c2_s_short = { - 2, 100, - _huff_lengthlist__44c2_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c3_s_long[] = { - 5, 6,11,11,11,11,10,10,12,11, 5, 2,11, 5, 6, 6, - 7, 9,11,13,13,10, 7,11, 6, 7, 8, 9,10,12,11, 5, - 11, 6, 8, 7, 9,11,14,15,11, 6, 6, 8, 4, 5, 7, 8, - 10,13,10, 5, 7, 7, 5, 5, 6, 8,10,11,10, 7, 7, 8, - 6, 5, 5, 7, 9, 9,11, 8, 8,11, 8, 7, 6, 6, 7, 9, - 12,11,10,13, 9, 9, 7, 7, 7, 9,11,13,12,15,12,11, - 9, 8, 8, 8, -}; - -static static_codebook _huff_book__44c3_s_long = { - 2, 100, - _huff_lengthlist__44c3_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c3_s_p1_0[] = { - 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0, - 0, 0, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, - 0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c3_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c3_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p1_0 = { - _vq_quantthresh__44c3_s_p1_0, - _vq_quantmap__44c3_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c3_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44c3_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c3_s_p1_0, - NULL, - &_vq_auxt__44c3_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c3_s_p2_0[] = { - 2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, - 7, 8, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7, - 7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0, - 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, - 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, - 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, - 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, - 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0, - 10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0, 9, - 9, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c3_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c3_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p2_0 = { - _vq_quantthresh__44c3_s_p2_0, - _vq_quantmap__44c3_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c3_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c3_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c3_s_p2_0, - NULL, - &_vq_auxt__44c3_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c3_s_p3_0[] = { - 2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c3_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c3_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p3_0 = { - _vq_quantthresh__44c3_s_p3_0, - _vq_quantmap__44c3_s_p3_0, - 5, - 5 -}; - -static static_codebook _44c3_s_p3_0 = { - 4, 625, - _vq_lengthlist__44c3_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c3_s_p3_0, - NULL, - &_vq_auxt__44c3_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c3_s_p4_0[] = { - 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6, - 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, - 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c3_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c3_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p4_0 = { - _vq_quantthresh__44c3_s_p4_0, - _vq_quantmap__44c3_s_p4_0, - 9, - 9 -}; - -static static_codebook _44c3_s_p4_0 = { - 2, 81, - _vq_lengthlist__44c3_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c3_s_p4_0, - NULL, - &_vq_auxt__44c3_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c3_s_p5_0[] = { - 1, 3, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 7, 8, - 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8, - 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0, - 9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0, - 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11, - 11, -}; - -static float _vq_quantthresh__44c3_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c3_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p5_0 = { - _vq_quantthresh__44c3_s_p5_0, - _vq_quantmap__44c3_s_p5_0, - 9, - 9 -}; - -static static_codebook _44c3_s_p5_0 = { - 2, 81, - _vq_lengthlist__44c3_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c3_s_p5_0, - NULL, - &_vq_auxt__44c3_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c3_s_p6_0[] = { - 2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 10, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10, - 11,11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, - 10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,11,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, - 9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,10,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 8, - 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, - 8, 9, 9,10,10,11,11,12,11,12,12, 0, 0, 0, 0, 0, - 9,10,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0, - 0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, - 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13, - 13, -}; - -static float _vq_quantthresh__44c3_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c3_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p6_0 = { - _vq_quantthresh__44c3_s_p6_0, - _vq_quantmap__44c3_s_p6_0, - 17, - 17 -}; - -static static_codebook _44c3_s_p6_0 = { - 2, 289, - _vq_lengthlist__44c3_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c3_s_p6_0, - NULL, - &_vq_auxt__44c3_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c3_s_p7_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11, - 10,12,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9, - 11,10,10,11,10,10, 7,11,11,11,11,11,12,11,11, 6, - 9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__44c3_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c3_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p7_0 = { - _vq_quantthresh__44c3_s_p7_0, - _vq_quantmap__44c3_s_p7_0, - 3, - 3 -}; - -static static_codebook _44c3_s_p7_0 = { - 4, 81, - _vq_lengthlist__44c3_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c3_s_p7_0, - NULL, - &_vq_auxt__44c3_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c3_s_p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, - 7, 8, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 8, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c3_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c3_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p7_1 = { - _vq_quantthresh__44c3_s_p7_1, - _vq_quantmap__44c3_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c3_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c3_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c3_s_p7_1, - NULL, - &_vq_auxt__44c3_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c3_s_p8_0[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8, - 8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,12, 0,13, - 13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10, - 10,10,11,11,12,12,12,12, 0, 0, 0,10,10,10,10,11, - 11,12,12,12,12, 0, 0, 0,14,14,11,11,11,11,12,12, - 13,13, 0, 0, 0,14,14,11,11,11,11,12,12,13,13, 0, - 0, 0, 0, 0,12,12,12,12,13,13,14,13, 0, 0, 0, 0, - 0,13,13,12,12,13,12,14,13, -}; - -static float _vq_quantthresh__44c3_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c3_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p8_0 = { - _vq_quantthresh__44c3_s_p8_0, - _vq_quantmap__44c3_s_p8_0, - 13, - 13 -}; - -static static_codebook _44c3_s_p8_0 = { - 2, 169, - _vq_lengthlist__44c3_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c3_s_p8_0, - NULL, - &_vq_auxt__44c3_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c3_s_p8_1[] = { - 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c3_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c3_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p8_1 = { - _vq_quantthresh__44c3_s_p8_1, - _vq_quantmap__44c3_s_p8_1, - 5, - 5 -}; - -static static_codebook _44c3_s_p8_1 = { - 2, 25, - _vq_lengthlist__44c3_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c3_s_p8_1, - NULL, - &_vq_auxt__44c3_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c3_s_p9_0[] = { - 1, 4, 4,12,12,12,12,12,12,12,12,12,12, 4, 9, 8, - 12,12,12,12,12,12,12,12,12,12, 2, 9, 7,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11, -}; - -static float _vq_quantthresh__44c3_s_p9_0[] = { - -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, - 637.5, 892.5, 1147.5, 1402.5, -}; - -static long _vq_quantmap__44c3_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p9_0 = { - _vq_quantthresh__44c3_s_p9_0, - _vq_quantmap__44c3_s_p9_0, - 13, - 13 -}; - -static static_codebook _44c3_s_p9_0 = { - 2, 169, - _vq_lengthlist__44c3_s_p9_0, - 1, -514332672, 1627381760, 4, 0, - _vq_quantlist__44c3_s_p9_0, - NULL, - &_vq_auxt__44c3_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c3_s_p9_1[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 9,10,10,10,10, 6, - 5, 5, 7, 7, 8, 8,10, 8,11,10,12,12,13,13, 6, 5, - 5, 7, 7, 8, 8,10, 9,11,11,12,12,13,12,18, 8, 8, - 8, 8, 9, 9,10, 9,11,10,12,12,13,13,18, 8, 8, 8, - 8, 9, 9,10,10,11,11,13,12,14,13,18,11,11, 9, 9, - 10,10,11,11,11,12,13,12,13,14,18,11,11, 9, 8,11, - 10,11,11,11,11,12,12,14,13,18,18,18,10,11,10,11, - 12,12,12,12,13,12,14,13,18,18,18,10,11,11, 9,12, - 11,12,12,12,13,13,13,18,18,17,14,14,11,11,12,12, - 13,12,14,12,14,13,18,18,18,14,14,11,10,12, 9,12, - 13,13,13,13,13,18,18,17,16,18,13,13,12,12,13,11, - 14,12,14,14,17,18,18,17,18,13,12,13,10,12,11,14, - 14,14,14,17,18,18,18,18,15,16,12,12,13,10,14,12, - 14,15,18,18,18,16,17,16,14,12,11,13,10,13,13,14, - 15, -}; - -static float _vq_quantthresh__44c3_s_p9_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__44c3_s_p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p9_1 = { - _vq_quantthresh__44c3_s_p9_1, - _vq_quantmap__44c3_s_p9_1, - 15, - 15 -}; - -static static_codebook _44c3_s_p9_1 = { - 2, 225, - _vq_lengthlist__44c3_s_p9_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__44c3_s_p9_1, - NULL, - &_vq_auxt__44c3_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c3_s_p9_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c3_s_p9_2[] = { - 2, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, - 8,10, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9,10, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,11, 9, 9, - 9, 9, 9, 9,10,10, 9, 9,10, 9,11,10,11,11,11, 9, - 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,11,11,11,11,11, - 9, 9, 9, 9,10,10, 9, 9, 9, 9,10, 9,11,11,11,11, - 11,11,11, 9, 9, 9, 9, 9, 9,10,10,10,10,11,11,11, - 11,11,11,11,10, 9,10,10, 9,10, 9, 9,10, 9,11,10, - 10,11,11,11,11, 9,10, 9, 9, 9, 9,10,10,10,10,11, - 11,11,11,11,11,10,10,10, 9, 9,10, 9,10, 9,10,10, - 10,10,11,11,11,11,11,11,11, 9, 9, 9, 9, 9,10,10, - 10, -}; - -static float _vq_quantthresh__44c3_s_p9_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c3_s_p9_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c3_s_p9_2 = { - _vq_quantthresh__44c3_s_p9_2, - _vq_quantmap__44c3_s_p9_2, - 17, - 17 -}; - -static static_codebook _44c3_s_p9_2 = { - 2, 289, - _vq_lengthlist__44c3_s_p9_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c3_s_p9_2, - NULL, - &_vq_auxt__44c3_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c3_s_short[] = { - 10, 9,13,11,14,10,12,13,13,14, 7, 2,12, 5,10, 5, - 7,10,12,14,12, 6, 9, 8, 7, 7, 9,11,13,16,10, 4, - 12, 5,10, 6, 8,12,14,16,12, 6, 8, 7, 6, 5, 7,11, - 12,16,10, 4, 8, 5, 6, 4, 6, 9,13,16,10, 6,10, 7, - 7, 6, 7, 9,13,15,12, 9,11, 9, 8, 6, 7,10,12,14, - 14,11,10, 9, 6, 5, 6, 9,11,13,15,13,11,10, 6, 5, - 6, 8, 9,11, -}; - -static static_codebook _huff_book__44c3_s_short = { - 2, 100, - _huff_lengthlist__44c3_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c4_s_long[] = { - 4, 7,11,11,11,11,10,11,12,11, 5, 2,11, 5, 6, 6, - 7, 9,11,12,11, 9, 6,10, 6, 7, 8, 9,10,11,11, 5, - 11, 7, 8, 8, 9,11,13,14,11, 6, 5, 8, 4, 5, 7, 8, - 10,11,10, 6, 7, 7, 5, 5, 6, 8, 9,11,10, 7, 8, 9, - 6, 6, 6, 7, 8, 9,11, 9, 9,11, 7, 7, 6, 6, 7, 9, - 12,12,10,13, 9, 8, 7, 7, 7, 8,11,13,11,14,11,10, - 9, 8, 7, 7, -}; - -static static_codebook _huff_book__44c4_s_long = { - 2, 100, - _huff_lengthlist__44c4_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c4_s_p1_0[] = { - 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, - 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c4_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c4_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p1_0 = { - _vq_quantthresh__44c4_s_p1_0, - _vq_quantmap__44c4_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c4_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44c4_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c4_s_p1_0, - NULL, - &_vq_auxt__44c4_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c4_s_p2_0[] = { - 2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7, - 7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0, - 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 7, 7, 0, 0, - 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, - 7, 8, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, - 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, - 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0, - 10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0, 9, - 9, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c4_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c4_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p2_0 = { - _vq_quantthresh__44c4_s_p2_0, - _vq_quantmap__44c4_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c4_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c4_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c4_s_p2_0, - NULL, - &_vq_auxt__44c4_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c4_s_p3_0[] = { - 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c4_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c4_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p3_0 = { - _vq_quantthresh__44c4_s_p3_0, - _vq_quantmap__44c4_s_p3_0, - 5, - 5 -}; - -static static_codebook _44c4_s_p3_0 = { - 4, 625, - _vq_lengthlist__44c4_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c4_s_p3_0, - NULL, - &_vq_auxt__44c4_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c4_s_p4_0[] = { - 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6, - 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, - 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c4_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c4_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p4_0 = { - _vq_quantthresh__44c4_s_p4_0, - _vq_quantmap__44c4_s_p4_0, - 9, - 9 -}; - -static static_codebook _44c4_s_p4_0 = { - 2, 81, - _vq_lengthlist__44c4_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c4_s_p4_0, - NULL, - &_vq_auxt__44c4_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c4_s_p5_0[] = { - 2, 3, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7, - 9, 9, 0, 4, 5, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7, - 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10, 9, 0, 0, 0, - 9, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__44c4_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c4_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p5_0 = { - _vq_quantthresh__44c4_s_p5_0, - _vq_quantmap__44c4_s_p5_0, - 9, - 9 -}; - -static static_codebook _44c4_s_p5_0 = { - 2, 81, - _vq_lengthlist__44c4_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c4_s_p5_0, - NULL, - &_vq_auxt__44c4_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c4_s_p6_0[] = { - 2, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11, - 11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11, - 11,11, 0, 4, 4, 7, 6, 8, 8, 9, 9, 9, 9,10,10,11, - 11,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, - 9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9, - 9,10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, - 9, 9, 9,10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, - 10,10,10,10,11,11,11,11,12,12,13,12, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,11,11,12,12,12,12, 0, 0, 0, - 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0, - 0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,12,12,13,13,13,13, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13, - 13, -}; - -static float _vq_quantthresh__44c4_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c4_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p6_0 = { - _vq_quantthresh__44c4_s_p6_0, - _vq_quantmap__44c4_s_p6_0, - 17, - 17 -}; - -static static_codebook _44c4_s_p6_0 = { - 2, 289, - _vq_lengthlist__44c4_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c4_s_p6_0, - NULL, - &_vq_auxt__44c4_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c4_s_p7_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11, - 10,11,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9, - 11,10,10,11,10,10, 7,11,11,12,11,11,12,11,11, 6, - 9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__44c4_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c4_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p7_0 = { - _vq_quantthresh__44c4_s_p7_0, - _vq_quantmap__44c4_s_p7_0, - 3, - 3 -}; - -static static_codebook _44c4_s_p7_0 = { - 4, 81, - _vq_lengthlist__44c4_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c4_s_p7_0, - NULL, - &_vq_auxt__44c4_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c4_s_p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, - 7, 8, 8, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10, - 10,10,10, 8, 8, 8, 8, 9, 9, -}; - -static float _vq_quantthresh__44c4_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c4_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p7_1 = { - _vq_quantthresh__44c4_s_p7_1, - _vq_quantmap__44c4_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c4_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c4_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c4_s_p7_1, - NULL, - &_vq_auxt__44c4_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c4_s_p8_0[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5, - 7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8, - 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9, 9, 9,10,10,10,10,11,11, 0,13, - 13, 9, 9,10, 9,10,10,11,11,11,12, 0, 0, 0,10,10, - 10,10,10,10,11,11,12,12, 0, 0, 0,10,10,10,10,10, - 10,11,11,12,12, 0, 0, 0,14,14,11,11,11,11,12,12, - 12,12, 0, 0, 0,14,14,11,11,11,11,12,12,12,13, 0, - 0, 0, 0, 0,12,12,12,12,12,12,13,13, 0, 0, 0, 0, - 0,13,12,12,12,12,12,13,13, -}; - -static float _vq_quantthresh__44c4_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c4_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p8_0 = { - _vq_quantthresh__44c4_s_p8_0, - _vq_quantmap__44c4_s_p8_0, - 13, - 13 -}; - -static static_codebook _44c4_s_p8_0 = { - 2, 169, - _vq_lengthlist__44c4_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c4_s_p8_0, - NULL, - &_vq_auxt__44c4_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c4_s_p8_1[] = { - 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 5, 4, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c4_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c4_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p8_1 = { - _vq_quantthresh__44c4_s_p8_1, - _vq_quantmap__44c4_s_p8_1, - 5, - 5 -}; - -static static_codebook _44c4_s_p8_1 = { - 2, 25, - _vq_lengthlist__44c4_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c4_s_p8_1, - NULL, - &_vq_auxt__44c4_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c4_s_p9_0[] = { - 1, 3, 3,12,12,12,12,12,12,12,12,12,12, 4, 7, 7, - 12,12,12,12,12,12,12,12,12,12, 3, 8, 8,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12, -}; - -static float _vq_quantthresh__44c4_s_p9_0[] = { - -1732.5, -1417.5, -1102.5, -787.5, -472.5, -157.5, 157.5, 472.5, - 787.5, 1102.5, 1417.5, 1732.5, -}; - -static long _vq_quantmap__44c4_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p9_0 = { - _vq_quantthresh__44c4_s_p9_0, - _vq_quantmap__44c4_s_p9_0, - 13, - 13 -}; - -static static_codebook _44c4_s_p9_0 = { - 2, 169, - _vq_lengthlist__44c4_s_p9_0, - 1, -513964032, 1628680192, 4, 0, - _vq_quantlist__44c4_s_p9_0, - NULL, - &_vq_auxt__44c4_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c4_s_p9_1[] = { - 1, 4, 4, 5, 5, 7, 7, 9, 8,10, 9,10,10,10,10, 6, - 5, 5, 7, 7, 9, 8,10, 9,11,10,12,12,13,13, 6, 5, - 5, 7, 7, 9, 9,10,10,11,11,12,12,12,13,19, 8, 8, - 8, 8, 9, 9,10,10,12,11,12,12,13,13,19, 8, 8, 8, - 8, 9, 9,11,11,12,12,13,13,13,13,19,12,12, 9, 9, - 11,11,11,11,12,11,13,12,13,13,18,12,12, 9, 9,11, - 10,11,11,12,12,12,13,13,14,19,18,18,11,11,11,11, - 12,12,13,12,13,13,14,14,16,18,18,11,11,11,10,12, - 11,13,13,13,13,13,14,17,18,18,14,15,11,12,12,13, - 13,13,13,14,14,14,18,18,18,15,15,12,10,13,10,13, - 13,13,13,13,14,18,17,18,17,18,12,13,12,13,13,13, - 14,14,16,14,18,17,18,18,17,13,12,13,10,12,12,14, - 14,14,14,17,18,18,18,18,14,15,12,12,13,12,14,14, - 15,15,18,18,18,17,18,15,14,12,11,12,12,14,14,14, - 15, -}; - -static float _vq_quantthresh__44c4_s_p9_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44c4_s_p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p9_1 = { - _vq_quantthresh__44c4_s_p9_1, - _vq_quantmap__44c4_s_p9_1, - 15, - 15 -}; - -static static_codebook _44c4_s_p9_1 = { - 2, 225, - _vq_lengthlist__44c4_s_p9_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44c4_s_p9_1, - NULL, - &_vq_auxt__44c4_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c4_s_p9_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44c4_s_p9_2[] = { - 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, - 8, 9, 9, 9, 9,11, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10,10,11, 6, 6, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,11, - 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10,10,10,12,11,11, 7, 7, 8, 8, 9, 9, 9, 9, 9, - 9,10,10,10,10,10,10,10,10,12,11,12, 8, 8, 8, 8, - 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,11, - 11, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,10,10,10, - 10,10,10,11,11,12, 9, 9, 9, 9, 9, 9,10, 9,10,10, - 10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9, - 9,10,10,10,10,10,10,10,10,10,10,10,10,11,12,11, - 11,11, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, - 10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10, - 10,10,10,10,10,10,10,11,11,11,12,12,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,11,12,11,12, - 11,11,11, 9,10,10,10,10,10,10,10,10,10,10,10,10, - 10,11,12,11,11,11,11,11,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,11,11,11,12,11,11,11,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,12,11,11,12,11, - 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10, - 10,10,10,10,10,11,11,11,11,12,12,11,11,11,11,11, - 11,11,10,10,10,10,10,10,10,10,12,12,12,11,11,11, - 12,11,11,11,10,10,10,10,10,10,10,10,10,10,10,12, - 11,12,12,12,12,12,11,12,11,11,10,10,10,10,10,10, - 10,10,10,10,12,12,12,12,11,11,11,11,11,11,11,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44c4_s_p9_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44c4_s_p9_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44c4_s_p9_2 = { - _vq_quantthresh__44c4_s_p9_2, - _vq_quantmap__44c4_s_p9_2, - 21, - 21 -}; - -static static_codebook _44c4_s_p9_2 = { - 2, 441, - _vq_lengthlist__44c4_s_p9_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44c4_s_p9_2, - NULL, - &_vq_auxt__44c4_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c4_s_short[] = { - 4, 7,14,10,15,10,12,15,16,15, 4, 2,11, 5,10, 6, - 8,11,14,14,14,10, 7,11, 6, 8,10,11,13,15, 9, 4, - 11, 5, 9, 6, 9,12,14,15,14, 9, 6, 9, 4, 5, 7,10, - 12,13, 9, 5, 7, 6, 5, 5, 7,10,13,13,10, 8, 9, 8, - 7, 6, 8,10,14,14,13,11,10,10, 7, 7, 8,11,14,15, - 13,12, 9, 9, 6, 5, 7,10,14,17,15,13,11,10, 6, 6, - 7, 9,12,17, -}; - -static static_codebook _huff_book__44c4_s_short = { - 2, 100, - _huff_lengthlist__44c4_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c5_s_long[] = { - 3, 8, 9,13,10,12,12,12,12,12, 6, 4, 6, 8, 6, 8, - 10,10,11,12, 8, 5, 4,10, 4, 7, 8, 9,10,11,13, 8, - 10, 8, 9, 9,11,12,13,14,10, 6, 4, 9, 3, 5, 6, 8, - 10,11,11, 8, 6, 9, 5, 5, 6, 7, 9,11,12, 9, 7,11, - 6, 6, 6, 7, 8,10,12,11, 9,12, 7, 7, 6, 6, 7, 9, - 13,12,10,13, 9, 8, 7, 7, 7, 8,11,15,11,15,11,10, - 9, 8, 7, 7, -}; - -static static_codebook _huff_book__44c5_s_long = { - 2, 100, - _huff_lengthlist__44c5_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c5_s_p1_0[] = { - 2, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0, - 0, 0, 4, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0, - 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0, - 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c5_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c5_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p1_0 = { - _vq_quantthresh__44c5_s_p1_0, - _vq_quantmap__44c5_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c5_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44c5_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c5_s_p1_0, - NULL, - &_vq_auxt__44c5_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c5_s_p2_0[] = { - 2, 4, 4, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, - 8, 7, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8, - 8, 0, 0, 0, 8, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0, - 0, 0, 4, 6, 6, 0, 0, 0, 8, 8, 0, 0, 0, 7, 8, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 8, 8, 0, 0, - 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 5, - 7, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10, - 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, - 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, - 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8,10,10, 0, 0, 0,10,10, 0, 0, 0, 9,10, 0, 0, 0, - 11,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0,10, - 10, 0, 0, 0,10,10, 0, 0, 0,10,11, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c5_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c5_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p2_0 = { - _vq_quantthresh__44c5_s_p2_0, - _vq_quantmap__44c5_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c5_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c5_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c5_s_p2_0, - NULL, - &_vq_auxt__44c5_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c5_s_p3_0[] = { - 2, 4, 3, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 5, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 6, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c5_s_p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c5_s_p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p3_0 = { - _vq_quantthresh__44c5_s_p3_0, - _vq_quantmap__44c5_s_p3_0, - 5, - 5 -}; - -static static_codebook _44c5_s_p3_0 = { - 4, 625, - _vq_lengthlist__44c5_s_p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c5_s_p3_0, - NULL, - &_vq_auxt__44c5_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c5_s_p4_0[] = { - 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6, - 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c5_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c5_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p4_0 = { - _vq_quantthresh__44c5_s_p4_0, - _vq_quantmap__44c5_s_p4_0, - 9, - 9 -}; - -static static_codebook _44c5_s_p4_0 = { - 2, 81, - _vq_lengthlist__44c5_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c5_s_p4_0, - NULL, - &_vq_auxt__44c5_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c5_s_p5_0[] = { - 2, 4, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7, - 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7, - 7, 7, 9, 9, 0, 0, 0, 7, 6, 7, 7, 9, 9, 0, 0, 0, - 8, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, - 0, 0, 9, 9, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__44c5_s_p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c5_s_p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p5_0 = { - _vq_quantthresh__44c5_s_p5_0, - _vq_quantmap__44c5_s_p5_0, - 9, - 9 -}; - -static static_codebook _44c5_s_p5_0 = { - 2, 81, - _vq_lengthlist__44c5_s_p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c5_s_p5_0, - NULL, - &_vq_auxt__44c5_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p6_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c5_s_p6_0[] = { - 2, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,11, - 11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11, - 12,12, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11, - 11,12,12, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10,10, - 11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 9,10,10,10, - 10,11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10, - 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9, - 10,10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, - 9, 9,10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, - 10,10,10,10,11,11,11,12,12,12,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,11,11,12,12,12,13,13,13, 0, 0, - 0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,13,12,13,13,13,13, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13, - 13, -}; - -static float _vq_quantthresh__44c5_s_p6_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c5_s_p6_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p6_0 = { - _vq_quantthresh__44c5_s_p6_0, - _vq_quantmap__44c5_s_p6_0, - 17, - 17 -}; - -static static_codebook _44c5_s_p6_0 = { - 2, 289, - _vq_lengthlist__44c5_s_p6_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c5_s_p6_0, - NULL, - &_vq_auxt__44c5_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c5_s_p7_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11, - 10,11,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9, - 11,10,10,11,10,10, 7,11,11,12,11,11,12,11,11, 6, - 9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__44c5_s_p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c5_s_p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p7_0 = { - _vq_quantthresh__44c5_s_p7_0, - _vq_quantmap__44c5_s_p7_0, - 3, - 3 -}; - -static static_codebook _44c5_s_p7_0 = { - 4, 81, - _vq_lengthlist__44c5_s_p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c5_s_p7_0, - NULL, - &_vq_auxt__44c5_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c5_s_p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, - 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 9,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c5_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c5_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p7_1 = { - _vq_quantthresh__44c5_s_p7_1, - _vq_quantmap__44c5_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c5_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c5_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c5_s_p7_1, - NULL, - &_vq_auxt__44c5_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c5_s_p8_0[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5, - 7, 7, 8, 8, 8, 9,10,10,10,10, 7, 5, 5, 7, 7, 8, - 8, 9, 9,10,10,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9, 9,10,10,10,10,10,11,11, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0,10,10, - 10,10,10,10,11,11,11,11, 0, 0, 0,10,10,10,10,10, - 10,11,11,12,12, 0, 0, 0,14,14,11,11,11,11,12,12, - 12,12, 0, 0, 0,14,14,11,11,11,11,12,12,12,12, 0, - 0, 0, 0, 0,12,12,12,12,12,12,13,13, 0, 0, 0, 0, - 0,12,12,12,12,12,12,13,13, -}; - -static float _vq_quantthresh__44c5_s_p8_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c5_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p8_0 = { - _vq_quantthresh__44c5_s_p8_0, - _vq_quantmap__44c5_s_p8_0, - 13, - 13 -}; - -static static_codebook _44c5_s_p8_0 = { - 2, 169, - _vq_lengthlist__44c5_s_p8_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c5_s_p8_0, - NULL, - &_vq_auxt__44c5_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p8_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c5_s_p8_1[] = { - 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c5_s_p8_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c5_s_p8_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p8_1 = { - _vq_quantthresh__44c5_s_p8_1, - _vq_quantmap__44c5_s_p8_1, - 5, - 5 -}; - -static static_codebook _44c5_s_p8_1 = { - 2, 25, - _vq_lengthlist__44c5_s_p8_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c5_s_p8_1, - NULL, - &_vq_auxt__44c5_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p9_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c5_s_p9_0[] = { - 1, 3, 3,13,13,13,13,13,13,13,13,13,13,13,13, 4, - 7, 7,13,13,13,13,13,13,13,13,13,13,13,13, 3, 8, - 6,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44c5_s_p9_0[] = { - -2320.5, -1963.5, -1606.5, -1249.5, -892.5, -535.5, -178.5, 178.5, - 535.5, 892.5, 1249.5, 1606.5, 1963.5, 2320.5, -}; - -static long _vq_quantmap__44c5_s_p9_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p9_0 = { - _vq_quantthresh__44c5_s_p9_0, - _vq_quantmap__44c5_s_p9_0, - 15, - 15 -}; - -static static_codebook _44c5_s_p9_0 = { - 2, 225, - _vq_lengthlist__44c5_s_p9_0, - 1, -512522752, 1628852224, 4, 0, - _vq_quantlist__44c5_s_p9_0, - NULL, - &_vq_auxt__44c5_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p9_1[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c5_s_p9_1[] = { - 1, 4, 4, 5, 5, 7, 7, 9, 8,10, 9,10,10,11,10,11, - 11, 6, 5, 5, 7, 7, 8, 9,10,10,11,10,12,11,12,11, - 13,12, 6, 5, 5, 7, 7, 9, 9,10,10,11,11,12,12,13, - 12,13,13,18, 8, 8, 8, 8, 9, 9,10,11,11,11,12,11, - 13,11,13,12,18, 8, 8, 8, 8,10,10,11,11,12,12,13, - 13,13,13,13,14,18,12,12, 9, 9,11,11,11,11,12,12, - 13,12,13,12,13,13,20,13,12, 9, 9,11,11,11,11,12, - 12,13,13,13,14,14,13,20,18,19,11,12,11,11,12,12, - 13,13,13,13,13,13,14,13,18,19,19,12,11,11,11,12, - 12,13,12,13,13,13,14,14,13,18,17,19,14,15,12,12, - 12,13,13,13,14,14,14,14,14,14,19,19,19,16,15,12, - 11,13,12,14,14,14,13,13,14,14,14,19,18,19,18,19, - 13,13,13,13,14,14,14,13,14,14,14,14,18,17,19,19, - 19,13,13,13,11,13,11,13,14,14,14,14,14,19,17,17, - 18,18,16,16,13,13,13,13,14,13,15,15,14,14,19,19, - 17,17,18,16,16,13,11,14,10,13,12,14,14,14,14,19, - 19,19,19,19,18,17,13,14,13,11,14,13,14,14,15,15, - 19,19,19,17,19,18,18,14,13,12,11,14,11,15,15,15, - 15, -}; - -static float _vq_quantthresh__44c5_s_p9_1[] = { - -157.5, -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, - 10.5, 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 157.5, -}; - -static long _vq_quantmap__44c5_s_p9_1[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p9_1 = { - _vq_quantthresh__44c5_s_p9_1, - _vq_quantmap__44c5_s_p9_1, - 17, - 17 -}; - -static static_codebook _44c5_s_p9_1 = { - 2, 289, - _vq_lengthlist__44c5_s_p9_1, - 1, -520814592, 1620377600, 5, 0, - _vq_quantlist__44c5_s_p9_1, - NULL, - &_vq_auxt__44c5_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c5_s_p9_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44c5_s_p9_2[] = { - 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 9,11, 5, 6, 7, 7, 8, 7, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, 5, 5, 7, 7, 7, - 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, - 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 9,10, 9,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,11,11, - 11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10, - 10,10,10,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9, - 9, 9, 9,10, 9,10,10,10,10,10,10,10,10,11,11,11, - 11,11, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10, - 10,10,11,11,11,11,11, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10,10,10,10,10,10,11,11,11,11,11, 9, 9,10, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11, - 11,11,11, 9, 9,10,10,10,10,10,10,10,10,10,10,10, - 10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11, - 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10, - 10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10, - 10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, - 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11, - 11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10, - 10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44c5_s_p9_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44c5_s_p9_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44c5_s_p9_2 = { - _vq_quantthresh__44c5_s_p9_2, - _vq_quantmap__44c5_s_p9_2, - 21, - 21 -}; - -static static_codebook _44c5_s_p9_2 = { - 2, 441, - _vq_lengthlist__44c5_s_p9_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44c5_s_p9_2, - NULL, - &_vq_auxt__44c5_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c5_s_short[] = { - 5, 8,10,14,11,11,12,16,15,17, 5, 5, 7, 9, 7, 8, - 10,13,17,17, 7, 5, 5,10, 5, 7, 8,11,13,15,10, 8, - 10, 8, 8, 8,11,15,18,18, 8, 5, 5, 8, 3, 4, 6,10, - 14,16, 9, 7, 6, 7, 4, 3, 5, 9,14,18,10, 9, 8,10, - 6, 5, 6, 9,14,18,12,12,11,12, 8, 7, 8,11,14,18, - 14,13,12,10, 7, 5, 6, 9,14,18,14,14,13,10, 6, 5, - 6, 8,11,16, -}; - -static static_codebook _huff_book__44c5_s_short = { - 2, 100, - _huff_lengthlist__44c5_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c6_s_long[] = { - 3, 8,11,13,14,14,13,13,16,14, 6, 3, 4, 7, 9, 9, - 10,11,14,13,10, 4, 3, 5, 7, 7, 9,10,13,15,12, 7, - 4, 4, 6, 6, 8,10,13,15,12, 8, 6, 6, 6, 6, 8,10, - 13,14,11, 9, 7, 6, 6, 6, 7, 8,12,11,13,10, 9, 8, - 7, 6, 6, 7,11,11,13,11,10, 9, 9, 7, 7, 6,10,11, - 13,13,13,13,13,11, 9, 8,10,12,12,15,15,16,15,12, - 11,10,10,12, -}; - -static static_codebook _huff_book__44c6_s_long = { - 2, 100, - _huff_lengthlist__44c6_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c6_s_p1_0[] = { - 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 9, 0, - 9, 8, 5, 7, 8, 0, 9, 9, 0, 8, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, - 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 9, 9, 0, 8, 8, 0, 8, 8, 5, 9, 9, 0, 8, 8, 0, 8, - 8, -}; - -static float _vq_quantthresh__44c6_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c6_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p1_0 = { - _vq_quantthresh__44c6_s_p1_0, - _vq_quantmap__44c6_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c6_s_p1_0 = { - 4, 81, - _vq_lengthlist__44c6_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c6_s_p1_0, - NULL, - &_vq_auxt__44c6_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c6_s_p2_0[] = { - 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, - 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8, - 8,10,10, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0, - 11,11, 5, 7, 7, 9, 9, 0, 8, 8,10,10, 0, 7, 8, 9, - 10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,11, - 0,11,11,12,12, 0,11,10,12,12, 0,13,14,14,14, 0, - 0, 0,14,13, 8, 9, 9,11,11, 0,11,11,12,12, 0,10, - 11,12,12, 0,14,13,14,14, 0, 0, 0,13,14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10, - 0, 7, 7,10,10, 0, 9, 9,11,10, 0, 0, 0,11,11, 5, - 7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, - 9,10,11, 0, 0, 0,11,11, 8,10, 9,12,12, 0,10,10, - 12,12, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13, - 13, 8, 9,10,12,12, 0,10,10,11,12, 0,10,10,12,12, - 0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 8, 8,11,11, 0, 7, 7,10,10, 0, 7, 7, - 10,10, 0, 9, 9,10,11, 0, 0, 0,11,10, 5, 8, 8,11, - 11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,11, - 0, 0, 0,10,11, 8,10,10,12,12, 0,10,10,12,12, 0, - 10,10,12,12, 0,12,13,13,13, 0, 0, 0,14,13, 8,10, - 10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,13,12, - 13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7,10,10,14,13, 0, 9, 9,13,12, 0, 9, 9,12,12, 0, - 10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,14, 0, 9, - 9,12,13, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0, - 12,12, 9,11,11,14,13, 0,11,10,14,13, 0,11,11,13, - 13, 0,12,12,13,13, 0, 0, 0,13,13, 9,11,11,13,14, - 0,10,11,13,14, 0,11,11,13,13, 0,12,12,13,13, 0, - 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 11,11,14,14, 0,11,11,13,13, 0,11,10,13,13, 0,12, - 12,13,13, 0, 0, 0,13,13, 9,11,11,14,14, 0,11,11, - 13,13, 0,10,11,13,13, 0,12,12,14,13, 0, 0, 0,13, - 13, -}; - -static float _vq_quantthresh__44c6_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c6_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p2_0 = { - _vq_quantthresh__44c6_s_p2_0, - _vq_quantmap__44c6_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c6_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c6_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c6_s_p2_0, - NULL, - &_vq_auxt__44c6_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c6_s_p3_0[] = { - 2, 3, 4, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7, - 9,10, 0, 4, 4, 6, 6, 7, 7,10, 9, 0, 5, 5, 7, 7, - 8, 8,10,10, 0, 0, 0, 7, 6, 8, 8,10,10, 0, 0, 0, - 7, 7, 9, 9,11,11, 0, 0, 0, 7, 7, 9, 9,11,11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c6_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c6_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p3_0 = { - _vq_quantthresh__44c6_s_p3_0, - _vq_quantmap__44c6_s_p3_0, - 9, - 9 -}; - -static static_codebook _44c6_s_p3_0 = { - 2, 81, - _vq_lengthlist__44c6_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c6_s_p3_0, - NULL, - &_vq_auxt__44c6_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c6_s_p4_0[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9,10,10, - 10, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10, - 11,11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10, - 10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,11,11, 0, 0, 0, 7, 7, 9, 9,10,10,10,10, - 11,11,11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10, - 10,11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, - 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8, 9, - 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c6_s_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c6_s_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p4_0 = { - _vq_quantthresh__44c6_s_p4_0, - _vq_quantmap__44c6_s_p4_0, - 17, - 17 -}; - -static static_codebook _44c6_s_p4_0 = { - 2, 289, - _vq_lengthlist__44c6_s_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c6_s_p4_0, - NULL, - &_vq_auxt__44c6_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c6_s_p5_0[] = { - 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6, 9, 9,10,10, - 10, 9, 4, 6, 6, 9,10, 9,10, 9,10, 6, 9, 9,10,12, - 11,10,11,11, 7,10, 9,11,12,12,12,12,12, 7,10,10, - 11,12,12,12,12,12, 6,10,10,10,12,12,11,12,12, 7, - 9,10,11,12,12,12,12,12, 7,10, 9,12,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44c6_s_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c6_s_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p5_0 = { - _vq_quantthresh__44c6_s_p5_0, - _vq_quantmap__44c6_s_p5_0, - 3, - 3 -}; - -static static_codebook _44c6_s_p5_0 = { - 4, 81, - _vq_lengthlist__44c6_s_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c6_s_p5_0, - NULL, - &_vq_auxt__44c6_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c6_s_p5_1[] = { - 3, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6, - 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6, 7, 7, 8, 8, 8, - 8,11, 6, 6, 6, 6, 8, 8, 8, 8, 9, 9,11,11,11, 6, - 6, 7, 8, 8, 8, 8, 9,11,11,11, 7, 7, 8, 8, 8, 8, - 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 8, 8,11,11,11, - 8, 8, 8, 8, 8, 8, 8, 8,11,11,11,10,10, 8, 8, 8, - 8, 8, 8,11,11,11,10,10, 8, 8, 8, 8, 8, 8,11,11, - 11,10,10, 7, 7, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c6_s_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c6_s_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p5_1 = { - _vq_quantthresh__44c6_s_p5_1, - _vq_quantmap__44c6_s_p5_1, - 11, - 11 -}; - -static static_codebook _44c6_s_p5_1 = { - 2, 121, - _vq_lengthlist__44c6_s_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c6_s_p5_1, - NULL, - &_vq_auxt__44c6_s_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c6_s_p6_0[] = { - 1, 4, 4, 6, 6, 8, 8, 8, 8,10, 9,10,10, 6, 5, 5, - 7, 7, 9, 9, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 9, - 9,10, 9,11,10,11,11, 0, 6, 6, 7, 7, 9, 9,10,10, - 11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12, - 12, 0,11,11, 8, 8,10,10,11,11,12,12,12,12, 0,11, - 12, 9, 8,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__44c6_s_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c6_s_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p6_0 = { - _vq_quantthresh__44c6_s_p6_0, - _vq_quantmap__44c6_s_p6_0, - 13, - 13 -}; - -static static_codebook _44c6_s_p6_0 = { - 2, 169, - _vq_lengthlist__44c6_s_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c6_s_p6_0, - NULL, - &_vq_auxt__44c6_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c6_s_p6_1[] = { - 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c6_s_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c6_s_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p6_1 = { - _vq_quantthresh__44c6_s_p6_1, - _vq_quantmap__44c6_s_p6_1, - 5, - 5 -}; - -static static_codebook _44c6_s_p6_1 = { - 2, 25, - _vq_lengthlist__44c6_s_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c6_s_p6_1, - NULL, - &_vq_auxt__44c6_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c6_s_p7_0[] = { - 1, 4, 4, 6, 6, 8, 8, 8, 8,10,10,11,10, 6, 5, 5, - 7, 7, 8, 8, 9, 9,10,10,12,11, 6, 5, 5, 7, 7, 8, - 8, 9, 9,10,10,12,11,21, 7, 7, 7, 7, 9, 9,10,10, - 11,11,12,12,21, 7, 7, 7, 7, 9, 9,10,10,11,11,12, - 12,21,12,12, 9, 9,10,10,11,11,11,11,12,12,21,12, - 12, 9, 9,10,10,11,11,12,12,12,12,21,21,21,11,11, - 10,10,11,12,12,12,13,13,21,21,21,11,11,10,10,12, - 12,12,12,13,13,21,21,21,15,15,11,11,12,12,13,13, - 13,13,21,21,21,15,16,11,11,12,12,13,13,14,14,21, - 21,21,21,20,13,13,13,13,13,13,14,14,20,20,20,20, - 20,13,13,13,13,13,13,14,14, -}; - -static float _vq_quantthresh__44c6_s_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__44c6_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p7_0 = { - _vq_quantthresh__44c6_s_p7_0, - _vq_quantmap__44c6_s_p7_0, - 13, - 13 -}; - -static static_codebook _44c6_s_p7_0 = { - 2, 169, - _vq_lengthlist__44c6_s_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__44c6_s_p7_0, - NULL, - &_vq_auxt__44c6_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c6_s_p7_1[] = { - 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 9, 5, 5, 6, 6, - 7, 7, 7, 7, 8, 7, 8, 5, 5, 6, 6, 7, 7, 7, 7, 7, - 7, 9, 6, 6, 7, 7, 7, 7, 8, 7, 7, 8, 9, 9, 9, 7, - 7, 7, 7, 7, 7, 7, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, - 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, - 8, 8, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 8, 8, 8, 7, - 7, 8, 8, 9, 9, 9, 8, 8, 8, 8, 7, 7, 8, 8, 9, 9, - 9, 8, 8, 7, 7, 7, 7, 8, 8, -}; - -static float _vq_quantthresh__44c6_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c6_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p7_1 = { - _vq_quantthresh__44c6_s_p7_1, - _vq_quantmap__44c6_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c6_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c6_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c6_s_p7_1, - NULL, - &_vq_auxt__44c6_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c6_s_p8_0[] = { - 1, 4, 4, 7, 7, 8, 8, 7, 7, 8, 7, 9, 8,10, 9, 6, - 5, 5, 8, 8, 9, 9, 8, 8, 9, 9,11,10,11,10, 6, 5, - 5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11,18, 8, 8, - 9, 8,10,10, 9, 9,10,10,10,10,11,10,18, 8, 8, 9, - 9,10,10, 9, 9,10,10,11,11,12,12,18,12,13, 9,10, - 10,10, 9,10,10,10,11,11,12,11,18,13,13, 9, 9,10, - 10,10,10,10,10,11,11,12,12,18,18,18,10,10, 9, 9, - 11,11,11,11,11,12,12,12,18,18,18,10, 9,10, 9,11, - 10,11,11,11,11,13,12,18,18,18,14,13,10,10,11,11, - 12,12,12,12,12,12,18,18,18,14,13,10,10,11,10,12, - 12,12,12,12,12,18,18,18,18,18,12,12,11,11,12,12, - 13,13,13,14,18,18,18,18,18,12,12,11,11,12,11,13, - 13,14,13,18,18,18,18,18,16,16,11,12,12,13,13,13, - 14,13,18,18,18,18,18,16,15,12,11,12,11,13,11,15, - 14, -}; - -static float _vq_quantthresh__44c6_s_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44c6_s_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p8_0 = { - _vq_quantthresh__44c6_s_p8_0, - _vq_quantmap__44c6_s_p8_0, - 15, - 15 -}; - -static static_codebook _44c6_s_p8_0 = { - 2, 225, - _vq_lengthlist__44c6_s_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44c6_s_p8_0, - NULL, - &_vq_auxt__44c6_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44c6_s_p8_1[] = { - 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, - 8, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,10, - 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9,10,11,11, 8, 7, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11, - 11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,11, - 11,11, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9,10, 9, 9, - 10, 9,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,10,10, - 10,10, 9,10,10, 9,10,11,11,11,11,11, 9, 9, 9, 9, - 10,10,10, 9,10,10,10,10, 9,10,10, 9,11,11,11,11, - 11,11,11, 9, 9, 9, 9,10,10,10,10, 9,10,10,10,10, - 10,11,11,11,11,11,11,11,10, 9,10,10,10,10,10,10, - 10, 9,10, 9,10,10,11,11,11,11,11,11,11,10, 9,10, - 9,10,10, 9,10,10,10,10,10,10,10,11,11,11,11,11, - 11,11,10,10,10,10,10,10,10, 9,10,10,10,10,10, 9, - 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10, - 10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10, - 10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, - 11,11,11,10,10,10,10,10,10,10,10,10, 9,10,10,11, - 11,11,11,11,11,11,11,11,10,10,10, 9,10,10,10,10, - 10,10,10,10,10,11,11,11,11,11,11,11,11,10,11, 9, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44c6_s_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44c6_s_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p8_1 = { - _vq_quantthresh__44c6_s_p8_1, - _vq_quantmap__44c6_s_p8_1, - 21, - 21 -}; - -static static_codebook _44c6_s_p8_1 = { - 2, 441, - _vq_lengthlist__44c6_s_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44c6_s_p8_1, - NULL, - &_vq_auxt__44c6_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c6_s_p9_0[] = { - 1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4, 7, 7, - 11,11,11,11,11,11,11,11,11,11, 5, 8, 9,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44c6_s_p9_0[] = { - -3503.5, -2866.5, -2229.5, -1592.5, -955.5, -318.5, 318.5, 955.5, - 1592.5, 2229.5, 2866.5, 3503.5, -}; - -static long _vq_quantmap__44c6_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p9_0 = { - _vq_quantthresh__44c6_s_p9_0, - _vq_quantmap__44c6_s_p9_0, - 13, - 13 -}; - -static static_codebook _44c6_s_p9_0 = { - 2, 169, - _vq_lengthlist__44c6_s_p9_0, - 1, -511845376, 1630791680, 4, 0, - _vq_quantlist__44c6_s_p9_0, - NULL, - &_vq_auxt__44c6_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p9_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c6_s_p9_1[] = { - 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8, 8, 8, 6, 6, 6, - 8, 8, 8, 8, 8, 7, 9, 8,10,10, 5, 6, 6, 8, 8, 9, - 9, 8, 8,10,10,10,10,16, 9, 9, 9, 9, 9, 9, 9, 8, - 10, 9,11,11,16, 8, 9, 9, 9, 9, 9, 9, 9,10,10,11, - 11,16,13,13, 9, 9,10, 9, 9,10,11,11,11,12,16,13, - 14, 9, 8,10, 8, 9, 9,10,10,12,11,16,14,16, 9, 9, - 9, 9,11,11,12,11,12,11,16,16,16, 9, 7, 9, 6,11, - 11,11,10,11,11,16,16,16,11,12, 9,10,11,11,12,11, - 13,13,16,16,16,12,11,10, 7,12,10,12,12,12,12,16, - 16,15,16,16,10,11,10,11,13,13,14,12,16,16,16,15, - 15,12,10,11,11,13,11,12,13, -}; - -static float _vq_quantthresh__44c6_s_p9_1[] = { - -269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 24.5, 73.5, - 122.5, 171.5, 220.5, 269.5, -}; - -static long _vq_quantmap__44c6_s_p9_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p9_1 = { - _vq_quantthresh__44c6_s_p9_1, - _vq_quantmap__44c6_s_p9_1, - 13, - 13 -}; - -static static_codebook _44c6_s_p9_1 = { - 2, 169, - _vq_lengthlist__44c6_s_p9_1, - 1, -518889472, 1622704128, 4, 0, - _vq_quantlist__44c6_s_p9_1, - NULL, - &_vq_auxt__44c6_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c6_s_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44c6_s_p9_2[] = { - 2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__44c6_s_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44c6_s_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44c6_s_p9_2 = { - _vq_quantthresh__44c6_s_p9_2, - _vq_quantmap__44c6_s_p9_2, - 49, - 49 -}; - -static static_codebook _44c6_s_p9_2 = { - 1, 49, - _vq_lengthlist__44c6_s_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44c6_s_p9_2, - NULL, - &_vq_auxt__44c6_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c6_s_short[] = { - 3, 9,11,11,13,14,19,17,17,19, 5, 4, 5, 8,10,10, - 13,16,18,19, 7, 4, 4, 5, 8, 9,12,14,17,19, 8, 6, - 5, 5, 7, 7,10,13,16,18,10, 8, 7, 6, 5, 5, 8,11, - 17,19,11, 9, 7, 7, 5, 4, 5, 8,17,19,13,11, 8, 7, - 7, 5, 5, 7,16,18,14,13, 8, 6, 6, 5, 5, 7,16,18, - 18,16,10, 8, 8, 7, 7, 9,16,18,18,18,12,10,10, 9, - 9,10,17,18, -}; - -static static_codebook _huff_book__44c6_s_short = { - 2, 100, - _huff_lengthlist__44c6_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c7_s_long[] = { - 3, 8,11,13,15,14,14,13,15,14, 6, 4, 5, 7, 9,10, - 11,11,14,13,10, 4, 3, 5, 7, 8, 9,10,13,13,12, 7, - 4, 4, 5, 6, 8, 9,12,14,13, 9, 6, 5, 5, 6, 8, 9, - 12,14,12, 9, 7, 6, 5, 5, 6, 8,11,11,12,11, 9, 8, - 7, 6, 6, 7,10,11,13,11,10, 9, 8, 7, 6, 6, 9,11, - 13,13,12,12,12,10, 9, 8, 9,11,12,14,15,15,14,12, - 11,10,10,12, -}; - -static static_codebook _huff_book__44c7_s_long = { - 2, 100, - _huff_lengthlist__44c7_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c7_s_p1_0[] = { - 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 9, 0, - 9, 8, 5, 7, 8, 0, 9, 9, 0, 8, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 9, 9, 0, 8, 8, 0, 8, 8, 5, 8, 9, - 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 9, 9, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8, - 8, -}; - -static float _vq_quantthresh__44c7_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c7_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p1_0 = { - _vq_quantthresh__44c7_s_p1_0, - _vq_quantmap__44c7_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c7_s_p1_0 = { - 4, 81, - _vq_lengthlist__44c7_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c7_s_p1_0, - NULL, - &_vq_auxt__44c7_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c7_s_p2_0[] = { - 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, - 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8, - 8,10,10, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0, - 11,11, 5, 7, 7, 9, 9, 0, 8, 8,10,10, 0, 7, 8, 9, - 10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10, - 0,11,11,12,12, 0,11,10,12,12, 0,13,14,14,14, 0, - 0, 0,14,13, 8, 9, 9,10,11, 0,11,11,12,12, 0,10, - 11,12,12, 0,13,13,14,14, 0, 0, 0,13,14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10, - 0, 7, 7,10,10, 0, 9, 9,11,10, 0, 0, 0,11,11, 5, - 7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, - 9,10,11, 0, 0, 0,11,11, 8,10, 9,12,12, 0,10,10, - 12,12, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13, - 13, 8, 9,10,12,12, 0,10,10,12,12, 0,10,10,11,12, - 0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 8, 8,11,11, 0, 7, 7,10,10, 0, 7, 7, - 10,10, 0, 9, 9,10,11, 0, 0, 0,11,10, 5, 8, 8,10, - 11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,10, - 0, 0, 0,10,11, 9,10,10,12,12, 0,10,10,12,12, 0, - 10,10,12,12, 0,12,13,13,13, 0, 0, 0,13,12, 9,10, - 10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,13,12, - 13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7,10,10,14,13, 0, 9, 9,12,12, 0, 9, 9,12,12, 0, - 10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,14, 0, 9, - 9,12,13, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0, - 12,12, 9,11,11,14,13, 0,11,10,13,12, 0,11,11,13, - 13, 0,12,12,13,13, 0, 0, 0,13,13, 9,11,11,13,14, - 0,10,11,12,13, 0,11,11,13,13, 0,12,12,13,13, 0, - 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 11,11,14,14, 0,10,11,13,13, 0,11,10,13,13, 0,12, - 12,13,13, 0, 0, 0,13,12, 9,11,11,14,14, 0,11,10, - 13,13, 0,10,11,13,13, 0,12,12,14,13, 0, 0, 0,13, - 13, -}; - -static float _vq_quantthresh__44c7_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c7_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p2_0 = { - _vq_quantthresh__44c7_s_p2_0, - _vq_quantmap__44c7_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c7_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c7_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c7_s_p2_0, - NULL, - &_vq_auxt__44c7_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c7_s_p3_0[] = { - 2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7, - 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6, - 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0, - 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c7_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c7_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p3_0 = { - _vq_quantthresh__44c7_s_p3_0, - _vq_quantmap__44c7_s_p3_0, - 9, - 9 -}; - -static static_codebook _44c7_s_p3_0 = { - 2, 81, - _vq_lengthlist__44c7_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c7_s_p3_0, - NULL, - &_vq_auxt__44c7_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c7_s_p4_0[] = { - 3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11, - 12,12, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11, - 11,12,12, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10, - 11,12,12,12, 0, 0, 0, 6, 6, 8, 7, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10, - 11,11,12,12,13,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10, - 10,11,11,12,12,12,13, 0, 0, 0, 7, 7, 8, 8, 9, 9, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9, - 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c7_s_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c7_s_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p4_0 = { - _vq_quantthresh__44c7_s_p4_0, - _vq_quantmap__44c7_s_p4_0, - 17, - 17 -}; - -static static_codebook _44c7_s_p4_0 = { - 2, 289, - _vq_lengthlist__44c7_s_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c7_s_p4_0, - NULL, - &_vq_auxt__44c7_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c7_s_p5_0[] = { - 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 7,10,10,10,10, - 10, 9, 4, 6, 6,10,10,10,10, 9,10, 5,10,10, 9,11, - 12,10,11,12, 7,10,10,11,12,12,12,12,12, 7,10,10, - 11,12,12,12,12,12, 6,10,10,10,12,12,11,12,12, 7, - 10,10,12,12,12,12,11,12, 7,10,10,11,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44c7_s_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c7_s_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p5_0 = { - _vq_quantthresh__44c7_s_p5_0, - _vq_quantmap__44c7_s_p5_0, - 3, - 3 -}; - -static static_codebook _44c7_s_p5_0 = { - 4, 81, - _vq_lengthlist__44c7_s_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c7_s_p5_0, - NULL, - &_vq_auxt__44c7_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c7_s_p5_1[] = { - 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6, - 7, 7, 8, 8, 9, 9,11, 4, 4, 6, 6, 7, 7, 8, 8, 9, - 9,12, 5, 5, 6, 6, 7, 7, 9, 9, 9, 9,12,12,12, 6, - 6, 7, 7, 9, 9, 9, 9,11,11,11, 7, 7, 7, 7, 8, 8, - 9, 9,11,11,11, 7, 7, 7, 7, 8, 8, 9, 9,11,11,11, - 7, 7, 8, 8, 8, 8, 9, 9,11,11,11,11,11, 8, 8, 8, - 8, 8, 9,11,11,11,11,11, 8, 8, 8, 8, 8, 8,11,11, - 11,11,11, 7, 7, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c7_s_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c7_s_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p5_1 = { - _vq_quantthresh__44c7_s_p5_1, - _vq_quantmap__44c7_s_p5_1, - 11, - 11 -}; - -static static_codebook _44c7_s_p5_1 = { - 2, 121, - _vq_lengthlist__44c7_s_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c7_s_p5_1, - NULL, - &_vq_auxt__44c7_s_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c7_s_p6_0[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 8,10,10, 6, 5, 5, - 7, 7, 8, 8, 9, 9, 9,10,11,11, 7, 5, 5, 7, 7, 8, - 8, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 8, 9, 9, - 10,10,11,11, 0, 8, 8, 7, 7, 8, 9, 9, 9,10,10,11, - 11, 0,11,11, 9, 9,10,10,11,10,11,11,12,12, 0,12, - 12, 9, 9,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__44c7_s_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c7_s_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p6_0 = { - _vq_quantthresh__44c7_s_p6_0, - _vq_quantmap__44c7_s_p6_0, - 13, - 13 -}; - -static static_codebook _44c7_s_p6_0 = { - 2, 169, - _vq_lengthlist__44c7_s_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c7_s_p6_0, - NULL, - &_vq_auxt__44c7_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c7_s_p6_1[] = { - 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c7_s_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c7_s_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p6_1 = { - _vq_quantthresh__44c7_s_p6_1, - _vq_quantmap__44c7_s_p6_1, - 5, - 5 -}; - -static static_codebook _44c7_s_p6_1 = { - 2, 25, - _vq_lengthlist__44c7_s_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c7_s_p6_1, - NULL, - &_vq_auxt__44c7_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c7_s_p7_0[] = { - 1, 4, 4, 6, 6, 7, 8, 9, 9,10,10,12,11, 6, 5, 5, - 7, 7, 8, 8, 9,10,11,11,12,12, 7, 5, 5, 7, 7, 8, - 8,10,10,11,11,12,12,20, 7, 7, 7, 7, 8, 9,10,10, - 11,11,12,13,20, 7, 7, 7, 7, 9, 9,10,10,11,12,13, - 13,20,11,11, 8, 8, 9, 9,11,11,12,12,13,13,20,11, - 11, 8, 8, 9, 9,11,11,12,12,13,13,20,20,20,10,10, - 10,10,12,12,13,13,13,13,20,20,20,10,10,10,10,12, - 12,13,13,13,14,20,20,20,14,14,11,11,12,12,13,13, - 14,14,20,20,20,14,14,11,11,12,12,13,13,14,14,20, - 20,20,20,19,13,13,13,13,14,14,15,14,19,19,19,19, - 19,13,13,13,13,14,14,15,15, -}; - -static float _vq_quantthresh__44c7_s_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__44c7_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p7_0 = { - _vq_quantthresh__44c7_s_p7_0, - _vq_quantmap__44c7_s_p7_0, - 13, - 13 -}; - -static static_codebook _44c7_s_p7_0 = { - 2, 169, - _vq_lengthlist__44c7_s_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__44c7_s_p7_0, - NULL, - &_vq_auxt__44c7_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c7_s_p7_1[] = { - 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 6, 6, 7, 7, - 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 7, 7, 7, 7, 7, 7, - 7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, - 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, - 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, - 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, - 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, - 8, 8, 8, 7, 7, 7, 7, 7, 7, -}; - -static float _vq_quantthresh__44c7_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c7_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p7_1 = { - _vq_quantthresh__44c7_s_p7_1, - _vq_quantmap__44c7_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c7_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c7_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c7_s_p7_1, - NULL, - &_vq_auxt__44c7_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c7_s_p8_0[] = { - 1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8, 9, 9,10,10, 6, - 5, 5, 7, 7, 9, 9, 8, 8,10, 9,11,10,12,11, 6, 5, - 5, 8, 7, 9, 9, 8, 8,10,10,11,11,12,11,19, 8, 8, - 8, 8,10,10, 9, 9,10,10,11,11,12,11,19, 8, 8, 8, - 8,10,10, 9, 9,10,10,11,11,12,12,19,12,12, 9, 9, - 10,10, 9,10,10,10,11,11,12,12,19,12,12, 9, 9,10, - 10,10,10,10,10,12,12,12,12,19,19,19, 9, 9, 9, 9, - 11,10,11,11,12,11,13,13,19,19,19, 9, 9, 9, 9,11, - 10,11,11,11,12,13,13,19,19,19,13,13,10,10,11,11, - 12,12,12,12,13,12,19,19,19,14,13,10,10,11,11,12, - 12,12,13,13,13,19,19,19,19,19,12,12,12,11,12,13, - 14,13,13,13,19,19,19,19,19,12,12,12,11,12,12,13, - 14,13,14,19,19,19,19,19,16,16,12,13,12,13,13,14, - 15,14,19,18,18,18,18,16,15,12,11,12,11,14,12,14, - 14, -}; - -static float _vq_quantthresh__44c7_s_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44c7_s_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p8_0 = { - _vq_quantthresh__44c7_s_p8_0, - _vq_quantmap__44c7_s_p8_0, - 15, - 15 -}; - -static static_codebook _44c7_s_p8_0 = { - 2, 225, - _vq_lengthlist__44c7_s_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44c7_s_p8_0, - NULL, - &_vq_auxt__44c7_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44c7_s_p8_1[] = { - 3, 5, 5, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, - 10, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,11,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9, 9,10,11,10, - 11,10, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,10, 9, 9, - 9, 9,11,10,11,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9, - 10, 9, 9,10, 9, 9,10,11,10,10,11,10, 9, 9, 9, 9, - 9,10,10, 9,10,10,10,10, 9,10,10,10,10,10,10,11, - 11,11,10, 9, 9, 9,10,10,10,10,10,10,10,10,10,10, - 10,10,10,11,11,10,10,10,10,10,10,10,10,10,10,10, - 10, 9,10,10, 9,10,11,11,10,11,10,11,10, 9,10,10, - 9,10,10,10,10,10,10,10,10,10,10,11,11,11,11,10, - 11,11,10,10,10,10,10,10, 9,10, 9,10,10, 9,10, 9, - 10,10,10,11,10,11,10,11,11,10,10,10,10,10,10, 9, - 10,10,10,10,10,10,10,11,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,11,10,11, - 11,10,10,10,10, 9, 9,10,10, 9, 9,10, 9,10,10,10, - 10,11,11,10,10,10,10,10,10,10, 9, 9,10,10,10, 9, - 9,10,10,10,10,10,11,10,11,10,10,10,10,10,10, 9, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44c7_s_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44c7_s_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p8_1 = { - _vq_quantthresh__44c7_s_p8_1, - _vq_quantmap__44c7_s_p8_1, - 21, - 21 -}; - -static static_codebook _44c7_s_p8_1 = { - 2, 441, - _vq_lengthlist__44c7_s_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44c7_s_p8_1, - NULL, - &_vq_auxt__44c7_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c7_s_p9_0[] = { - 1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4, 6, 6, - 11,11,11,11,11,11,11,11,11,11, 4, 7, 7,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11, -}; - -static float _vq_quantthresh__44c7_s_p9_0[] = { - -3503.5, -2866.5, -2229.5, -1592.5, -955.5, -318.5, 318.5, 955.5, - 1592.5, 2229.5, 2866.5, 3503.5, -}; - -static long _vq_quantmap__44c7_s_p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p9_0 = { - _vq_quantthresh__44c7_s_p9_0, - _vq_quantmap__44c7_s_p9_0, - 13, - 13 -}; - -static static_codebook _44c7_s_p9_0 = { - 2, 169, - _vq_lengthlist__44c7_s_p9_0, - 1, -511845376, 1630791680, 4, 0, - _vq_quantlist__44c7_s_p9_0, - NULL, - &_vq_auxt__44c7_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p9_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c7_s_p9_1[] = { - 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8, 8, 8, 6, 6, 6, - 8, 8, 9, 8, 8, 7, 9, 8,11,10, 5, 6, 6, 8, 8, 9, - 8, 8, 8,10, 9,11,11,16, 8, 8, 9, 8, 9, 9, 9, 8, - 10, 9,11,10,16, 8, 8, 9, 9,10,10, 9, 9,10,10,11, - 11,16,13,13, 9, 9,10,10, 9,10,11,11,12,11,16,13, - 13, 9, 8,10, 9,10,10,10,10,11,11,16,14,16, 8, 9, - 9, 9,11,10,11,11,12,11,16,16,16, 9, 7,10, 7,11, - 10,11,11,12,11,16,16,16,12,12, 9,10,11,11,12,11, - 12,12,16,16,16,12,10,10, 7,11, 8,12,11,12,12,16, - 16,15,16,16,11,12,10,10,12,11,12,12,16,16,16,15, - 15,11,11,10,10,12,12,12,12, -}; - -static float _vq_quantthresh__44c7_s_p9_1[] = { - -269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 24.5, 73.5, - 122.5, 171.5, 220.5, 269.5, -}; - -static long _vq_quantmap__44c7_s_p9_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p9_1 = { - _vq_quantthresh__44c7_s_p9_1, - _vq_quantmap__44c7_s_p9_1, - 13, - 13 -}; - -static static_codebook _44c7_s_p9_1 = { - 2, 169, - _vq_lengthlist__44c7_s_p9_1, - 1, -518889472, 1622704128, 4, 0, - _vq_quantlist__44c7_s_p9_1, - NULL, - &_vq_auxt__44c7_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c7_s_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44c7_s_p9_2[] = { - 2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__44c7_s_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44c7_s_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44c7_s_p9_2 = { - _vq_quantthresh__44c7_s_p9_2, - _vq_quantmap__44c7_s_p9_2, - 49, - 49 -}; - -static static_codebook _44c7_s_p9_2 = { - 1, 49, - _vq_lengthlist__44c7_s_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44c7_s_p9_2, - NULL, - &_vq_auxt__44c7_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c7_s_short[] = { - 4,11,12,14,15,15,17,17,18,18, 5, 6, 6, 8, 9,10, - 13,17,18,19, 7, 5, 4, 6, 8, 9,11,15,19,19, 8, 6, - 5, 5, 6, 7,11,14,16,17, 9, 7, 7, 6, 7, 7,10,13, - 15,19,10, 8, 7, 6, 7, 6, 7, 9,14,16,12,10, 9, 7, - 7, 6, 4, 5,10,15,14,13,11, 7, 6, 6, 4, 2, 7,13, - 16,16,15, 9, 8, 8, 8, 6, 9,13,19,19,17,12,11,10, - 10, 9,11,14, -}; - -static static_codebook _huff_book__44c7_s_short = { - 2, 100, - _huff_lengthlist__44c7_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c8_s_long[] = { - 3, 8,12,13,14,14,14,13,14,14, 6, 4, 5, 8,10,10, - 11,11,14,13, 9, 5, 4, 5, 7, 8, 9,10,13,13,12, 7, - 5, 4, 5, 6, 8, 9,12,13,13, 9, 6, 5, 5, 5, 7, 9, - 11,14,12,10, 7, 6, 5, 4, 6, 7,10,11,12,11, 9, 8, - 7, 5, 5, 6,10,10,13,12,10, 9, 8, 6, 6, 5, 8,10, - 14,13,12,12,11,10, 9, 7, 8,10,12,13,14,14,13,12, - 11, 9, 9,10, -}; - -static static_codebook _huff_book__44c8_s_long = { - 2, 100, - _huff_lengthlist__44c8_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c8_s_p1_0[] = { - 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 7, 7, 0, 9, 8, 0, - 9, 8, 6, 7, 7, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, - 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8, - 8, -}; - -static float _vq_quantthresh__44c8_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c8_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p1_0 = { - _vq_quantthresh__44c8_s_p1_0, - _vq_quantmap__44c8_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c8_s_p1_0 = { - 4, 81, - _vq_lengthlist__44c8_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c8_s_p1_0, - NULL, - &_vq_auxt__44c8_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c8_s_p2_0[] = { - 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, - 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8, - 7,10, 9, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0, - 11,11, 5, 7, 7, 9, 9, 0, 7, 8, 9,10, 0, 7, 8, 9, - 10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10, - 0,11,10,12,11, 0,11,10,12,12, 0,13,13,14,14, 0, - 0, 0,14,13, 8, 9, 9,10,11, 0,10,11,12,12, 0,10, - 11,12,12, 0,13,13,14,14, 0, 0, 0,13,14, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10, - 0, 7, 7,10,10, 0, 9, 9,10,10, 0, 0, 0,11,10, 5, - 7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, - 9,10,10, 0, 0, 0,10,10, 8,10, 9,12,12, 0,10,10, - 12,11, 0,10,10,12,12, 0,12,12,13,12, 0, 0, 0,13, - 12, 8, 9,10,12,12, 0,10,10,11,12, 0,10,10,11,12, - 0,12,12,13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 7,11,10, 0, 7, 7,10,10, 0, 7, 7, - 10,10, 0, 9, 9,10,11, 0, 0, 0,10,10, 6, 7, 8,10, - 11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,10,10, - 0, 0, 0,10,10, 9,10, 9,12,12, 0,10,10,12,12, 0, - 10,10,12,11, 0,12,12,13,13, 0, 0, 0,13,12, 8, 9, - 10,12,12, 0,10,10,12,12, 0,10,10,11,12, 0,12,12, - 13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7,10,10,13,13, 0, 9, 9,12,12, 0, 9, 9,12,12, 0, - 10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,13, 0, 9, - 9,12,12, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0, - 12,12, 9,11,11,14,13, 0,10,10,13,12, 0,11,10,13, - 12, 0,12,12,13,12, 0, 0, 0,13,13, 9,11,11,13,14, - 0,10,11,12,13, 0,10,11,13,13, 0,12,12,12,13, 0, - 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 11,11,14,14, 0,10,11,13,13, 0,11,10,13,13, 0,11, - 12,13,13, 0, 0, 0,13,12, 9,11,11,14,14, 0,11,10, - 13,13, 0,10,11,13,13, 0,12,12,13,13, 0, 0, 0,12, - 13, -}; - -static float _vq_quantthresh__44c8_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c8_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p2_0 = { - _vq_quantthresh__44c8_s_p2_0, - _vq_quantmap__44c8_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c8_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c8_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c8_s_p2_0, - NULL, - &_vq_auxt__44c8_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c8_s_p3_0[] = { - 2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7, - 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6, - 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0, - 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c8_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c8_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p3_0 = { - _vq_quantthresh__44c8_s_p3_0, - _vq_quantmap__44c8_s_p3_0, - 9, - 9 -}; - -static static_codebook _44c8_s_p3_0 = { - 2, 81, - _vq_lengthlist__44c8_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c8_s_p3_0, - NULL, - &_vq_auxt__44c8_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c8_s_p4_0[] = { - 3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 8,10,10,11,11, - 11,11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11, - 11,11,11, 0, 6, 5, 6, 6, 7, 7, 9, 9, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 6, 6, 7, 7, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10, - 11,11,11,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10, - 10,11,11,11,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9, - 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c8_s_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c8_s_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p4_0 = { - _vq_quantthresh__44c8_s_p4_0, - _vq_quantmap__44c8_s_p4_0, - 17, - 17 -}; - -static static_codebook _44c8_s_p4_0 = { - 2, 289, - _vq_lengthlist__44c8_s_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c8_s_p4_0, - NULL, - &_vq_auxt__44c8_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c8_s_p5_0[] = { - 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 7, 6,10,10,10,10, - 10,10, 4, 6, 6,10,10,10,10, 9,10, 5,10,10, 9,11, - 11,10,11,11, 7,10,10,11,12,12,12,12,12, 7,10,10, - 11,12,12,12,12,12, 6,10,10,10,12,12,10,12,12, 7, - 10,10,11,12,12,12,12,12, 7,10,10,11,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44c8_s_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c8_s_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p5_0 = { - _vq_quantthresh__44c8_s_p5_0, - _vq_quantmap__44c8_s_p5_0, - 3, - 3 -}; - -static static_codebook _44c8_s_p5_0 = { - 4, 81, - _vq_lengthlist__44c8_s_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c8_s_p5_0, - NULL, - &_vq_auxt__44c8_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c8_s_p5_1[] = { - 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 5, 6, 6, - 7, 7, 8, 8, 8, 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 9,12, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,12,12,12, 6, - 6, 7, 7, 8, 8, 9, 9,11,11,11, 6, 6, 7, 7, 8, 8, - 8, 8,11,11,11, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11, - 7, 7, 7, 8, 8, 8, 8, 8,11,11,11,11,11, 7, 7, 8, - 8, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 8, 8,11,11, - 11,11,11, 7, 7, 7, 7, 8, 8, -}; - -static float _vq_quantthresh__44c8_s_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c8_s_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p5_1 = { - _vq_quantthresh__44c8_s_p5_1, - _vq_quantmap__44c8_s_p5_1, - 11, - 11 -}; - -static static_codebook _44c8_s_p5_1 = { - 2, 121, - _vq_lengthlist__44c8_s_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c8_s_p5_1, - NULL, - &_vq_auxt__44c8_s_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c8_s_p6_0[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5, - 7, 7, 8, 8, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 8, - 8, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10, - 10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,10,10,11, - 11, 0,11,11, 9, 9,10,10,11,11,11,11,12,12, 0,12, - 12, 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__44c8_s_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c8_s_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p6_0 = { - _vq_quantthresh__44c8_s_p6_0, - _vq_quantmap__44c8_s_p6_0, - 13, - 13 -}; - -static static_codebook _44c8_s_p6_0 = { - 2, 169, - _vq_lengthlist__44c8_s_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c8_s_p6_0, - NULL, - &_vq_auxt__44c8_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c8_s_p6_1[] = { - 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c8_s_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c8_s_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p6_1 = { - _vq_quantthresh__44c8_s_p6_1, - _vq_quantmap__44c8_s_p6_1, - 5, - 5 -}; - -static static_codebook _44c8_s_p6_1 = { - 2, 25, - _vq_lengthlist__44c8_s_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c8_s_p6_1, - NULL, - &_vq_auxt__44c8_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c8_s_p7_0[] = { - 1, 4, 4, 6, 6, 8, 7, 9, 9,10,10,12,12, 6, 5, 5, - 7, 7, 8, 8,10,10,11,11,12,12, 7, 5, 5, 7, 7, 8, - 8,10,10,11,11,12,12,21, 7, 7, 7, 7, 8, 9,10,10, - 11,11,12,12,21, 7, 7, 7, 7, 9, 9,10,10,12,12,13, - 13,21,11,11, 8, 8, 9, 9,11,11,12,12,13,13,21,11, - 11, 8, 8, 9, 9,11,11,12,12,13,13,21,21,21,10,10, - 10,10,11,11,12,13,13,13,21,21,21,10,10,10,10,11, - 11,13,13,14,13,21,21,21,13,13,11,11,12,12,13,13, - 14,14,21,21,21,14,14,11,11,12,12,13,13,14,14,21, - 21,21,21,20,13,13,13,12,14,14,16,15,20,20,20,20, - 20,13,13,13,13,14,13,15,15, -}; - -static float _vq_quantthresh__44c8_s_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__44c8_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p7_0 = { - _vq_quantthresh__44c8_s_p7_0, - _vq_quantmap__44c8_s_p7_0, - 13, - 13 -}; - -static static_codebook _44c8_s_p7_0 = { - 2, 169, - _vq_lengthlist__44c8_s_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__44c8_s_p7_0, - NULL, - &_vq_auxt__44c8_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c8_s_p7_1[] = { - 4, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 7, - 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7, - 7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, - 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, - 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, - 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, - 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, - 8, 8, 8, 7, 7, 7, 7, 7, 7, -}; - -static float _vq_quantthresh__44c8_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c8_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p7_1 = { - _vq_quantthresh__44c8_s_p7_1, - _vq_quantmap__44c8_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c8_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c8_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c8_s_p7_1, - NULL, - &_vq_auxt__44c8_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c8_s_p8_0[] = { - 1, 4, 4, 7, 6, 8, 8, 8, 7, 9, 8,10,10,11,10, 6, - 5, 5, 7, 7, 9, 9, 8, 8,10,10,11,11,12,11, 6, 5, - 5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,20, 8, 8, - 8, 8, 9, 9, 9, 9,10,10,11,11,12,12,20, 8, 8, 8, - 8,10, 9, 9, 9,10,10,11,11,12,12,20,12,12, 9, 9, - 10,10,10,10,10,11,12,12,12,12,20,12,12, 9, 9,10, - 10,10,10,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9, - 11,10,11,11,12,12,12,13,20,19,19, 9, 9, 9, 9,11, - 11,11,12,12,12,13,13,19,19,19,13,13,10,10,11,11, - 12,12,13,13,13,13,19,19,19,14,13,11,10,11,11,12, - 12,12,13,13,13,19,19,19,19,19,12,12,12,12,13,13, - 13,13,14,13,19,19,19,19,19,12,12,12,11,12,12,13, - 14,14,14,19,19,19,19,19,16,15,13,12,13,13,13,14, - 14,14,19,19,19,19,19,17,17,13,12,13,11,14,13,15, - 15, -}; - -static float _vq_quantthresh__44c8_s_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44c8_s_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p8_0 = { - _vq_quantthresh__44c8_s_p8_0, - _vq_quantmap__44c8_s_p8_0, - 15, - 15 -}; - -static static_codebook _44c8_s_p8_0 = { - 2, 225, - _vq_lengthlist__44c8_s_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44c8_s_p8_0, - NULL, - &_vq_auxt__44c8_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44c8_s_p8_1[] = { - 4, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, - 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, - 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,10,10,10,10, - 10,10,10, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, - 9,10,10,10,10,10,10,10, 9,10,10, 9,10,10,10,10, - 9,10, 9,10,10, 9,10,10,10,10,10,10,10, 9,10,10, - 10,10,10,10, 9, 9,10,10, 9,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, - 10, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10, 9, 9,10, 9, 9, 9,10,10,10,10,10,10, - 10,10,10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10, 9, - 9,10, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, - 10, 9, 9,10,10, 9,10, 9, 9, -}; - -static float _vq_quantthresh__44c8_s_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44c8_s_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p8_1 = { - _vq_quantthresh__44c8_s_p8_1, - _vq_quantmap__44c8_s_p8_1, - 21, - 21 -}; - -static static_codebook _44c8_s_p8_1 = { - 2, 441, - _vq_lengthlist__44c8_s_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44c8_s_p8_1, - NULL, - &_vq_auxt__44c8_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p9_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c8_s_p9_0[] = { - 1, 4, 3,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11, 4, 7, 7,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11, 4, 8,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__44c8_s_p9_0[] = { - -6982.5, -6051.5, -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -465.5, - 465.5, 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 6051.5, 6982.5, -}; - -static long _vq_quantmap__44c8_s_p9_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p9_0 = { - _vq_quantthresh__44c8_s_p9_0, - _vq_quantmap__44c8_s_p9_0, - 17, - 17 -}; - -static static_codebook _44c8_s_p9_0 = { - 2, 289, - _vq_lengthlist__44c8_s_p9_0, - 1, -509798400, 1631393792, 5, 0, - _vq_quantlist__44c8_s_p9_0, - NULL, - &_vq_auxt__44c8_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p9_1[] = { - 9, - 8, - 10, - 7, - 11, - 6, - 12, - 5, - 13, - 4, - 14, - 3, - 15, - 2, - 16, - 1, - 17, - 0, - 18, -}; - -static long _vq_lengthlist__44c8_s_p9_1[] = { - 1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,10,10, - 10,11,11, 6, 6, 6, 8, 8, 9, 8, 8, 7,10, 8,11,10, - 12,11,12,12,13,13, 5, 5, 6, 8, 8, 9, 9, 8, 8,10, - 9,11,11,12,12,13,13,13,13,17, 8, 8, 9, 9, 9, 9, - 9, 9,10, 9,12,10,12,12,13,12,13,13,17, 9, 8, 9, - 9, 9, 9, 9, 9,10,10,12,12,12,12,13,13,13,13,17, - 13,13, 9, 9,10,10,10,10,11,11,12,11,13,12,13,13, - 14,15,17,13,13, 9, 8,10, 9,10,10,11,11,12,12,14, - 13,15,13,14,15,17,17,17, 9,10, 9,10,11,11,12,12, - 12,12,13,13,14,14,15,15,17,17,17, 9, 8, 9, 8,11, - 11,12,12,12,12,14,13,14,14,14,15,17,17,17,12,14, - 9,10,11,11,12,12,14,13,13,14,15,13,15,15,17,17, - 17,13,11,10, 8,11, 9,13,12,13,13,13,13,13,14,14, - 14,17,17,17,17,17,11,12,11,11,13,13,14,13,15,14, - 13,15,16,15,17,17,17,17,17,11,11,12, 8,13,12,14, - 13,17,14,15,14,15,14,17,17,17,17,17,15,15,12,12, - 12,12,13,14,14,14,15,14,17,14,17,17,17,17,17,16, - 17,12,12,13,12,13,13,14,14,14,14,14,14,17,17,17, - 17,17,17,17,14,14,13,12,13,13,15,15,14,13,15,17, - 17,17,17,17,17,17,17,13,14,13,13,13,13,14,15,15, - 15,14,15,17,17,17,17,17,17,17,16,15,13,14,13,13, - 14,14,15,14,14,16,17,17,17,17,17,17,17,16,16,13, - 14,13,13,14,14,15,14,15,14, -}; - -static float _vq_quantthresh__44c8_s_p9_1[] = { - -416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, - -24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, - 367.5, 416.5, -}; - -static long _vq_quantmap__44c8_s_p9_1[] = { - 17, 15, 13, 11, 9, 7, 5, 3, - 1, 0, 2, 4, 6, 8, 10, 12, - 14, 16, 18, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p9_1 = { - _vq_quantthresh__44c8_s_p9_1, - _vq_quantmap__44c8_s_p9_1, - 19, - 19 -}; - -static static_codebook _44c8_s_p9_1 = { - 2, 361, - _vq_lengthlist__44c8_s_p9_1, - 1, -518287360, 1622704128, 5, 0, - _vq_quantlist__44c8_s_p9_1, - NULL, - &_vq_auxt__44c8_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c8_s_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44c8_s_p9_2[] = { - 2, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__44c8_s_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44c8_s_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44c8_s_p9_2 = { - _vq_quantthresh__44c8_s_p9_2, - _vq_quantmap__44c8_s_p9_2, - 49, - 49 -}; - -static static_codebook _44c8_s_p9_2 = { - 1, 49, - _vq_lengthlist__44c8_s_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44c8_s_p9_2, - NULL, - &_vq_auxt__44c8_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c8_s_short[] = { - 4,11,13,14,15,15,18,17,19,17, 5, 6, 8, 9,10,10, - 12,15,19,19, 6, 6, 6, 6, 8, 8,11,14,18,19, 8, 6, - 5, 4, 6, 7,10,13,16,17, 9, 7, 6, 5, 6, 7, 9,12, - 15,19,10, 8, 7, 6, 6, 6, 7, 9,13,15,12,10, 9, 8, - 7, 6, 4, 5,10,15,13,13,11, 8, 6, 6, 4, 2, 7,12, - 17,15,16,10, 8, 8, 7, 6, 9,12,19,18,17,13,11,10, - 10, 9,11,14, -}; - -static static_codebook _huff_book__44c8_s_short = { - 2, 100, - _huff_lengthlist__44c8_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c9_s_long[] = { - 3, 8,12,14,15,15,15,13,15,15, 6, 5, 8,10,12,12, - 13,12,14,13,10, 6, 5, 6, 8, 9,11,11,13,13,13, 8, - 5, 4, 5, 6, 8,10,11,13,14,10, 7, 5, 4, 5, 7, 9, - 11,12,13,11, 8, 6, 5, 4, 5, 7, 9,11,12,11,10, 8, - 7, 5, 4, 5, 9,10,13,13,11,10, 8, 6, 5, 4, 7, 9, - 15,14,13,12,10, 9, 8, 7, 8, 9,12,12,14,13,12,11, - 10, 9, 8, 9, -}; - -static static_codebook _huff_book__44c9_s_long = { - 2, 100, - _huff_lengthlist__44c9_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c9_s_p1_0[] = { - 1, 5, 5, 0, 5, 5, 0, 5, 5, 6, 8, 8, 0, 9, 8, 0, - 9, 8, 6, 8, 8, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 8, 8, 0, 7, 7, 0, 8, 8, 5, 8, 8, - 0, 7, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 9, 8, 0, 8, 8, 0, 7, 7, 5, 8, 9, 0, 8, 8, 0, 7, - 7, -}; - -static float _vq_quantthresh__44c9_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c9_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p1_0 = { - _vq_quantthresh__44c9_s_p1_0, - _vq_quantmap__44c9_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c9_s_p1_0 = { - 4, 81, - _vq_lengthlist__44c9_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c9_s_p1_0, - NULL, - &_vq_auxt__44c9_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c9_s_p2_0[] = { - 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, - 7, 7, 9, 9, 0, 0, 0, 9, 9, 6, 7, 7, 9, 8, 0, 8, - 8, 9, 9, 0, 8, 7, 9, 9, 0, 9,10,10,10, 0, 0, 0, - 11,10, 6, 7, 7, 8, 9, 0, 8, 8, 9, 9, 0, 7, 8, 9, - 9, 0,10, 9,11,10, 0, 0, 0,10,10, 8, 9, 8,10,10, - 0,10,10,12,11, 0,10,10,11,11, 0,12,13,13,13, 0, - 0, 0,13,12, 8, 8, 9,10,10, 0,10,10,11,12, 0,10, - 10,11,11, 0,13,12,13,13, 0, 0, 0,13,13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 8, 7,10,10, 0, 7, 7,10, 9, - 0, 7, 7,10,10, 0, 9, 9,10,10, 0, 0, 0,10,10, 6, - 7, 8,10,10, 0, 7, 7, 9,10, 0, 7, 7,10,10, 0, 9, - 9,10,10, 0, 0, 0,10,10, 8, 9, 9,11,11, 0,10,10, - 11,11, 0,10,10,11,11, 0,12,12,12,12, 0, 0, 0,12, - 12, 8, 9,10,11,11, 0, 9,10,11,11, 0,10,10,11,11, - 0,12,12,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 8, 7,10,10, 0, 7, 7,10,10, 0, 7, 7, - 10, 9, 0, 9, 9,10,10, 0, 0, 0,10,10, 6, 7, 8,10, - 10, 0, 7, 7,10,10, 0, 7, 7, 9,10, 0, 9, 9,10,10, - 0, 0, 0,10,10, 8,10, 9,12,11, 0,10,10,12,11, 0, - 10, 9,11,11, 0,11,12,12,12, 0, 0, 0,12,12, 8, 9, - 10,11,12, 0,10,10,11,11, 0, 9,10,11,11, 0,12,11, - 12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7,10, 9,12,12, 0, 9, 9,12,11, 0, 9, 9,11,11, 0, - 10,10,12,11, 0, 0, 0,11,12, 7, 9,10,12,12, 0, 9, - 9,11,12, 0, 9, 9,11,11, 0,10,10,11,12, 0, 0, 0, - 11,11, 9,11,10,13,12, 0,10,10,12,12, 0,10,10,12, - 12, 0,11,11,12,12, 0, 0, 0,13,12, 9,10,11,12,13, - 0,10,10,12,12, 0,10,10,12,12, 0,11,12,12,12, 0, - 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 11,10,13,13, 0,10,10,12,12, 0,10,10,12,12, 0,11, - 12,12,12, 0, 0, 0,12,12, 9,10,11,13,13, 0,10,10, - 12,12, 0,10,10,12,12, 0,12,11,13,12, 0, 0, 0,12, - 12, -}; - -static float _vq_quantthresh__44c9_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c9_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p2_0 = { - _vq_quantthresh__44c9_s_p2_0, - _vq_quantmap__44c9_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c9_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c9_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c9_s_p2_0, - NULL, - &_vq_auxt__44c9_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c9_s_p3_0[] = { - 3, 4, 4, 5, 5, 6, 6, 8, 8, 0, 4, 4, 5, 5, 6, 7, - 8, 8, 0, 4, 4, 5, 5, 7, 7, 8, 8, 0, 5, 5, 6, 6, - 7, 7, 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0, - 7, 7, 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c9_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c9_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p3_0 = { - _vq_quantthresh__44c9_s_p3_0, - _vq_quantmap__44c9_s_p3_0, - 9, - 9 -}; - -static static_codebook _44c9_s_p3_0 = { - 2, 81, - _vq_lengthlist__44c9_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c9_s_p3_0, - NULL, - &_vq_auxt__44c9_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c9_s_p4_0[] = { - 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,10, - 10, 0, 5, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10, - 11,11, 0, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10, - 10,11,11, 0, 6, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10, - 11,11,11,12, 0, 0, 0, 6, 6, 7, 7, 8, 8, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 7, 7, 7, 7, 9, 9, 9, 9, - 10,10,11,11,12,12, 0, 0, 0, 7, 7, 7, 8, 9, 9, 9, - 9,10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9, - 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c9_s_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c9_s_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p4_0 = { - _vq_quantthresh__44c9_s_p4_0, - _vq_quantmap__44c9_s_p4_0, - 17, - 17 -}; - -static static_codebook _44c9_s_p4_0 = { - 2, 289, - _vq_lengthlist__44c9_s_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c9_s_p4_0, - NULL, - &_vq_auxt__44c9_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c9_s_p5_0[] = { - 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 7, 6, 9,10,10,10, - 10, 9, 4, 6, 7, 9,10,10,10, 9,10, 5, 9, 9, 9,11, - 11,10,11,11, 7,10, 9,11,12,11,12,12,12, 7, 9,10, - 11,11,12,12,12,12, 6,10,10,10,12,12,10,12,11, 7, - 10,10,11,12,12,11,12,12, 7,10,10,11,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44c9_s_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c9_s_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p5_0 = { - _vq_quantthresh__44c9_s_p5_0, - _vq_quantmap__44c9_s_p5_0, - 3, - 3 -}; - -static static_codebook _44c9_s_p5_0 = { - 4, 81, - _vq_lengthlist__44c9_s_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c9_s_p5_0, - NULL, - &_vq_auxt__44c9_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c9_s_p5_1[] = { - 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7,11, 5, 5, 6, 6, - 7, 7, 7, 7, 8, 8,11, 5, 5, 6, 6, 7, 7, 7, 7, 8, - 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11, 6, - 6, 7, 7, 7, 8, 8, 8,11,11,11, 6, 6, 7, 7, 7, 8, - 8, 8,11,11,11, 6, 6, 7, 7, 7, 7, 8, 8,11,11,11, - 7, 7, 7, 7, 7, 7, 8, 8,11,11,11,10,10, 7, 7, 7, - 7, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 7, 7,11,11, - 11,11,11, 7, 7, 7, 7, 7, 7, -}; - -static float _vq_quantthresh__44c9_s_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c9_s_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p5_1 = { - _vq_quantthresh__44c9_s_p5_1, - _vq_quantmap__44c9_s_p5_1, - 11, - 11 -}; - -static static_codebook _44c9_s_p5_1 = { - 2, 121, - _vq_lengthlist__44c9_s_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c9_s_p5_1, - NULL, - &_vq_auxt__44c9_s_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c9_s_p6_0[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 5, 4, 4, - 6, 6, 8, 8, 9, 9, 9, 9,10,10, 6, 4, 4, 6, 6, 8, - 8, 9, 9, 9, 9,10,10, 0, 6, 6, 7, 7, 8, 8, 9, 9, - 10,10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11, - 11, 0,10,10, 8, 8, 9, 9,10,10,11,11,12,12, 0,11, - 11, 8, 8, 9, 9,10,10,11,11,12,12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__44c9_s_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c9_s_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p6_0 = { - _vq_quantthresh__44c9_s_p6_0, - _vq_quantmap__44c9_s_p6_0, - 13, - 13 -}; - -static static_codebook _44c9_s_p6_0 = { - 2, 169, - _vq_lengthlist__44c9_s_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c9_s_p6_0, - NULL, - &_vq_auxt__44c9_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c9_s_p6_1[] = { - 4, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, -}; - -static float _vq_quantthresh__44c9_s_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c9_s_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p6_1 = { - _vq_quantthresh__44c9_s_p6_1, - _vq_quantmap__44c9_s_p6_1, - 5, - 5 -}; - -static static_codebook _44c9_s_p6_1 = { - 2, 25, - _vq_lengthlist__44c9_s_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c9_s_p6_1, - NULL, - &_vq_auxt__44c9_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c9_s_p7_0[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8,10,10,11,11, 6, 4, 4, - 6, 6, 8, 8, 9, 9,10,10,12,12, 6, 4, 5, 6, 6, 8, - 8, 9, 9,10,10,12,12,20, 6, 6, 6, 6, 8, 8, 9,10, - 11,11,12,12,20, 6, 6, 6, 6, 8, 8,10,10,11,11,12, - 12,20,10,10, 7, 7, 9, 9,10,10,11,11,12,12,20,11, - 11, 7, 7, 9, 9,10,10,11,11,12,12,20,20,20, 9, 9, - 9, 9,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,11, - 11,12,12,13,13,20,20,20,13,13,10,10,11,11,12,13, - 13,13,20,20,20,13,13,10,10,11,11,12,13,13,13,20, - 20,20,20,19,12,12,12,12,13,13,14,15,19,19,19,19, - 19,12,12,12,12,13,13,14,14, -}; - -static float _vq_quantthresh__44c9_s_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__44c9_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p7_0 = { - _vq_quantthresh__44c9_s_p7_0, - _vq_quantmap__44c9_s_p7_0, - 13, - 13 -}; - -static static_codebook _44c9_s_p7_0 = { - 2, 169, - _vq_lengthlist__44c9_s_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__44c9_s_p7_0, - NULL, - &_vq_auxt__44c9_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c9_s_p7_1[] = { - 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, - 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, 7, - 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 6, - 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, - 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, - 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, - 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, - 8, 8, 8, 7, 7, 7, 7, 7, 7, -}; - -static float _vq_quantthresh__44c9_s_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c9_s_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p7_1 = { - _vq_quantthresh__44c9_s_p7_1, - _vq_quantmap__44c9_s_p7_1, - 11, - 11 -}; - -static static_codebook _44c9_s_p7_1 = { - 2, 121, - _vq_lengthlist__44c9_s_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c9_s_p7_1, - NULL, - &_vq_auxt__44c9_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44c9_s_p8_0[] = { - 1, 4, 4, 7, 6, 8, 8, 8, 8, 9, 9,10,10,11,10, 6, - 5, 5, 7, 7, 9, 9, 8, 9,10,10,11,11,12,12, 6, 5, - 5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,21, 7, 8, - 8, 8, 9, 9, 9, 9,10,10,11,11,12,12,21, 8, 8, 8, - 8, 9, 9, 9, 9,10,10,11,11,12,12,21,11,12, 9, 9, - 10,10,10,10,10,11,11,12,12,12,21,12,12, 9, 8,10, - 10,10,10,11,11,12,12,13,13,21,21,21, 9, 9, 9, 9, - 11,11,11,11,12,12,12,13,21,20,20, 9, 9, 9, 9,10, - 11,11,11,12,12,13,13,20,20,20,13,13,10,10,11,11, - 12,12,13,13,13,13,20,20,20,13,13,10,10,11,11,12, - 12,13,13,13,13,20,20,20,20,20,12,12,12,12,12,12, - 13,13,14,14,20,20,20,20,20,12,12,12,11,13,12,13, - 13,14,14,20,20,20,20,20,15,16,13,12,13,13,14,13, - 14,14,20,20,20,20,20,16,15,12,12,13,12,14,13,14, - 14, -}; - -static float _vq_quantthresh__44c9_s_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44c9_s_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p8_0 = { - _vq_quantthresh__44c9_s_p8_0, - _vq_quantmap__44c9_s_p8_0, - 15, - 15 -}; - -static static_codebook _44c9_s_p8_0 = { - 2, 225, - _vq_lengthlist__44c9_s_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44c9_s_p8_0, - NULL, - &_vq_auxt__44c9_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44c9_s_p8_1[] = { - 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, - 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, - 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10, - 10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9, - 9,10,10,10,10,10,10,10, 9, 9, 9,10,10,10,10,10, - 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10, 9, 9,10, - 9,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10, - 10,10,10,10, 9, 9,10,10, 9, 9, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, - 10,10, 9, 9,10, 9, 9, 9, 9, 9,10,10,10,10,10,10, - 10,10,10,10,10, 9, 9,10,10, 9, 9,10, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10, 9, 9,10, 9, 9, 9, - 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, 9, - 9, 9, 9,10, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__44c9_s_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44c9_s_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p8_1 = { - _vq_quantthresh__44c9_s_p8_1, - _vq_quantmap__44c9_s_p8_1, - 21, - 21 -}; - -static static_codebook _44c9_s_p8_1 = { - 2, 441, - _vq_lengthlist__44c9_s_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44c9_s_p8_1, - NULL, - &_vq_auxt__44c9_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p9_0[] = { - 9, - 8, - 10, - 7, - 11, - 6, - 12, - 5, - 13, - 4, - 14, - 3, - 15, - 2, - 16, - 1, - 17, - 0, - 18, -}; - -static long _vq_lengthlist__44c9_s_p9_0[] = { - 1, 4, 3,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12, 4, 5, 6,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12, 4, 6, 6,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,11,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11, -}; - -static float _vq_quantthresh__44c9_s_p9_0[] = { - -7913.5, -6982.5, -6051.5, -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, - -465.5, 465.5, 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 6051.5, - 6982.5, 7913.5, -}; - -static long _vq_quantmap__44c9_s_p9_0[] = { - 17, 15, 13, 11, 9, 7, 5, 3, - 1, 0, 2, 4, 6, 8, 10, 12, - 14, 16, 18, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p9_0 = { - _vq_quantthresh__44c9_s_p9_0, - _vq_quantmap__44c9_s_p9_0, - 19, - 19 -}; - -static static_codebook _44c9_s_p9_0 = { - 2, 361, - _vq_lengthlist__44c9_s_p9_0, - 1, -508535424, 1631393792, 5, 0, - _vq_quantlist__44c9_s_p9_0, - NULL, - &_vq_auxt__44c9_s_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p9_1[] = { - 9, - 8, - 10, - 7, - 11, - 6, - 12, - 5, - 13, - 4, - 14, - 3, - 15, - 2, - 16, - 1, - 17, - 0, - 18, -}; - -static long _vq_lengthlist__44c9_s_p9_1[] = { - 1, 4, 4, 7, 7, 7, 7, 8, 7, 9, 8, 9, 9,10,10,11, - 11,11,11, 6, 5, 5, 8, 8, 9, 9, 9, 8,10, 9,11,10, - 12,12,13,12,13,13, 5, 5, 5, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12,13,12,13,13,17, 8, 8, 9, 9, 9, 9, - 9, 9,10,10,12,11,13,12,13,13,13,13,18, 8, 8, 9, - 9, 9, 9, 9, 9,11,11,12,12,13,13,13,13,13,13,17, - 13,12, 9, 9,10,10,10,10,11,11,12,12,12,13,13,13, - 14,14,18,13,12, 9, 9,10,10,10,10,11,11,12,12,13, - 13,13,14,14,14,17,18,18,10,10,10,10,11,11,11,12, - 12,12,14,13,14,13,13,14,18,18,18,10, 9,10, 9,11, - 11,12,12,12,12,13,13,15,14,14,14,18,18,16,13,14, - 10,11,11,11,12,13,13,13,13,14,13,13,14,14,18,18, - 18,14,12,11, 9,11,10,13,12,13,13,13,14,14,14,13, - 14,18,18,17,18,18,11,12,12,12,13,13,14,13,14,14, - 13,14,14,14,18,18,18,18,17,12,10,12, 9,13,11,13, - 14,14,14,14,14,15,14,18,18,17,17,18,14,15,12,13, - 13,13,14,13,14,14,15,14,15,14,18,17,18,18,18,15, - 15,12,10,14,10,14,14,13,13,14,14,14,14,18,16,18, - 18,18,18,17,14,14,13,14,14,13,13,14,14,14,15,15, - 18,18,18,18,17,17,17,14,14,14,12,14,13,14,14,15, - 14,15,14,18,18,18,18,18,18,18,17,16,13,13,13,14, - 14,14,14,15,16,15,18,18,18,18,18,18,18,17,17,13, - 13,13,13,14,13,14,15,15,15, -}; - -static float _vq_quantthresh__44c9_s_p9_1[] = { - -416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, - -24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, - 367.5, 416.5, -}; - -static long _vq_quantmap__44c9_s_p9_1[] = { - 17, 15, 13, 11, 9, 7, 5, 3, - 1, 0, 2, 4, 6, 8, 10, 12, - 14, 16, 18, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p9_1 = { - _vq_quantthresh__44c9_s_p9_1, - _vq_quantmap__44c9_s_p9_1, - 19, - 19 -}; - -static static_codebook _44c9_s_p9_1 = { - 2, 361, - _vq_lengthlist__44c9_s_p9_1, - 1, -518287360, 1622704128, 5, 0, - _vq_quantlist__44c9_s_p9_1, - NULL, - &_vq_auxt__44c9_s_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c9_s_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44c9_s_p9_2[] = { - 2, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__44c9_s_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44c9_s_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44c9_s_p9_2 = { - _vq_quantthresh__44c9_s_p9_2, - _vq_quantmap__44c9_s_p9_2, - 49, - 49 -}; - -static static_codebook _44c9_s_p9_2 = { - 1, 49, - _vq_lengthlist__44c9_s_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44c9_s_p9_2, - NULL, - &_vq_auxt__44c9_s_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c9_s_short[] = { - 5,13,18,16,17,17,19,18,19,19, 5, 7,10,11,12,12, - 13,16,17,18, 6, 6, 7, 7, 9, 9,10,14,17,19, 8, 7, - 6, 5, 6, 7, 9,12,19,17, 8, 7, 7, 6, 5, 6, 8,11, - 15,19, 9, 8, 7, 6, 5, 5, 6, 8,13,15,11,10, 8, 8, - 7, 5, 4, 4,10,14,12,13,11, 9, 7, 6, 4, 2, 6,12, - 18,16,16,13, 8, 7, 7, 5, 8,13,16,17,18,15,11, 9, - 9, 8,10,13, -}; - -static static_codebook _huff_book__44c9_s_short = { - 2, 100, - _huff_lengthlist__44c9_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c0_s_long[] = { - 5, 4, 8, 9, 8, 9,10,12,15, 4, 1, 5, 5, 6, 8,11, - 12,12, 8, 5, 8, 9, 9,11,13,12,12, 9, 5, 8, 5, 7, - 9,12,13,13, 8, 6, 8, 7, 7, 9,11,11,11, 9, 7, 9, - 7, 7, 7, 7,10,12,10,10,11, 9, 8, 7, 7, 9,11,11, - 12,13,12,11, 9, 8, 9,11,13,16,16,15,15,12,10,11, - 12, -}; - -static static_codebook _huff_book__44c0_s_long = { - 2, 81, - _huff_lengthlist__44c0_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c0_s_p1_0[] = { - 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0, - 0, 0, 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,11, - 0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c0_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c0_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p1_0 = { - _vq_quantthresh__44c0_s_p1_0, - _vq_quantmap__44c0_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c0_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44c0_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c0_s_p1_0, - NULL, - &_vq_auxt__44c0_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c0_s_p2_0[] = { - 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c0_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c0_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p2_0 = { - _vq_quantthresh__44c0_s_p2_0, - _vq_quantmap__44c0_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c0_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c0_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c0_s_p2_0, - NULL, - &_vq_auxt__44c0_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c0_s_p3_0[] = { - 1, 3, 2, 8, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c0_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c0_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p3_0 = { - _vq_quantthresh__44c0_s_p3_0, - _vq_quantmap__44c0_s_p3_0, - 9, - 9 -}; - -static static_codebook _44c0_s_p3_0 = { - 2, 81, - _vq_lengthlist__44c0_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c0_s_p3_0, - NULL, - &_vq_auxt__44c0_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c0_s_p4_0[] = { - 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7, - 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7, - 7, 8, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, - 9, 9, 8, 8,10,10, 0, 0, 0, 8, 9, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10, - 10, -}; - -static float _vq_quantthresh__44c0_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c0_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p4_0 = { - _vq_quantthresh__44c0_s_p4_0, - _vq_quantmap__44c0_s_p4_0, - 9, - 9 -}; - -static static_codebook _44c0_s_p4_0 = { - 2, 81, - _vq_lengthlist__44c0_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c0_s_p4_0, - NULL, - &_vq_auxt__44c0_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p5_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c0_s_p5_0[] = { - 1, 4, 3, 6, 6, 8, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9, 9,10,10,10, - 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, - 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10, - 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9, - 10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,11,11,11,11,11,12,12,12,13,13, 0, 0, 0, 0, - 0, 0, 0,11,10,11,11,11,11,12,12,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,11,12,12,12,12,13,13, 0, 0, - 0, 0, 0, 0, 0,11,11,11,12,12,12,12,13,13,13, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44c0_s_p5_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c0_s_p5_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p5_0 = { - _vq_quantthresh__44c0_s_p5_0, - _vq_quantmap__44c0_s_p5_0, - 17, - 17 -}; - -static static_codebook _44c0_s_p5_0 = { - 2, 289, - _vq_lengthlist__44c0_s_p5_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c0_s_p5_0, - NULL, - &_vq_auxt__44c0_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p6_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c0_s_p6_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10, - 9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11, - 11,12,10,11, 6, 9, 9,11,10,11,11,10,10, 6, 9, 9, - 11,10,11,11,10,10, 7,11,10,12,11,11,11,11,11, 7, - 9, 9,10,10,10,11,11,10, 6, 9, 9,11,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__44c0_s_p6_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c0_s_p6_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p6_0 = { - _vq_quantthresh__44c0_s_p6_0, - _vq_quantmap__44c0_s_p6_0, - 3, - 3 -}; - -static static_codebook _44c0_s_p6_0 = { - 4, 81, - _vq_lengthlist__44c0_s_p6_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c0_s_p6_0, - NULL, - &_vq_auxt__44c0_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p6_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c0_s_p6_1[] = { - 2, 3, 3, 6, 6, 7, 7, 7, 7, 7, 8,10,10,10, 6, 6, - 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8, - 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c0_s_p6_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c0_s_p6_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p6_1 = { - _vq_quantthresh__44c0_s_p6_1, - _vq_quantmap__44c0_s_p6_1, - 11, - 11 -}; - -static static_codebook _44c0_s_p6_1 = { - 2, 121, - _vq_lengthlist__44c0_s_p6_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c0_s_p6_1, - NULL, - &_vq_auxt__44c0_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c0_s_p7_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8, - 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10, - 10,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11, - 11,11,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12, - 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0, - 0, 0, 0, 0,11,11,11,11,13,12,13,13, 0, 0, 0, 0, - 0,12,12,11,11,12,12,13,13, -}; - -static float _vq_quantthresh__44c0_s_p7_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c0_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p7_0 = { - _vq_quantthresh__44c0_s_p7_0, - _vq_quantmap__44c0_s_p7_0, - 13, - 13 -}; - -static static_codebook _44c0_s_p7_0 = { - 2, 169, - _vq_lengthlist__44c0_s_p7_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c0_s_p7_0, - NULL, - &_vq_auxt__44c0_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p7_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c0_s_p7_1[] = { - 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c0_s_p7_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c0_s_p7_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p7_1 = { - _vq_quantthresh__44c0_s_p7_1, - _vq_quantmap__44c0_s_p7_1, - 5, - 5 -}; - -static static_codebook _44c0_s_p7_1 = { - 2, 25, - _vq_lengthlist__44c0_s_p7_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c0_s_p7_1, - NULL, - &_vq_auxt__44c0_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p8_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c0_s_p8_0[] = { - 1, 5, 5,10,10, 6, 9, 8,10,10, 6,10, 9,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10, 8,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11, -}; - -static float _vq_quantthresh__44c0_s_p8_0[] = { - -331.5, -110.5, 110.5, 331.5, -}; - -static long _vq_quantmap__44c0_s_p8_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p8_0 = { - _vq_quantthresh__44c0_s_p8_0, - _vq_quantmap__44c0_s_p8_0, - 5, - 5 -}; - -static static_codebook _44c0_s_p8_0 = { - 4, 625, - _vq_lengthlist__44c0_s_p8_0, - 1, -518283264, 1627103232, 3, 0, - _vq_quantlist__44c0_s_p8_0, - NULL, - &_vq_auxt__44c0_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p8_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c0_s_p8_1[] = { - 1, 4, 4, 6, 6, 7, 7, 9, 9,11,12,13,12, 6, 5, 5, - 7, 7, 8, 8,10, 9,12,12,12,12, 6, 5, 5, 7, 7, 8, - 8,10, 9,12,11,11,13,16, 7, 7, 8, 8, 9, 9,10,10, - 12,12,13,12,16, 7, 7, 8, 7, 9, 9,10,10,11,12,12, - 13,16,10,10, 8, 8,10,10,11,12,12,12,13,13,16,11, - 10, 8, 7,11,10,11,11,12,11,13,13,16,16,16,10,10, - 10,10,11,11,13,12,13,13,16,16,16,11, 9,11, 9,15, - 13,12,13,13,13,16,16,16,15,13,11,11,12,13,12,12, - 14,13,16,16,16,14,13,11,11,13,12,14,13,13,13,16, - 16,16,16,16,13,13,13,12,14,13,14,14,16,16,16,16, - 16,13,13,12,12,14,14,15,13, -}; - -static float _vq_quantthresh__44c0_s_p8_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44c0_s_p8_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p8_1 = { - _vq_quantthresh__44c0_s_p8_1, - _vq_quantmap__44c0_s_p8_1, - 13, - 13 -}; - -static static_codebook _44c0_s_p8_1 = { - 2, 169, - _vq_lengthlist__44c0_s_p8_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44c0_s_p8_1, - NULL, - &_vq_auxt__44c0_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_s_p8_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c0_s_p8_2[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, - 8,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, - 9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9, - 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 8, 9, 9, - 9, 9, 9,10, 9,10,10,10,10, 7, 7, 8, 8, 9, 9, 9, - 9, 9, 9,10, 9,10,10,10,10,10, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 9,11,10,10,10,10, 8, 8, 9, - 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,11,11, 9, 9, - 9, 9, 9, 9, 9, 9,10, 9, 9,10,11,10,10,11,11, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,10,11, - 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, - 11,11,11,11, 9,10, 9,10, 9, 9, 9, 9,10, 9,10,11, - 10,11,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9,10,11, - 11,10,11,11,10,11,10,10,10, 9, 9, 9, 9,10, 9, 9, - 10,11,10,11,11,11,11,10,11,10,10, 9,10, 9, 9, 9, - 10, -}; - -static float _vq_quantthresh__44c0_s_p8_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c0_s_p8_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_s_p8_2 = { - _vq_quantthresh__44c0_s_p8_2, - _vq_quantmap__44c0_s_p8_2, - 17, - 17 -}; - -static static_codebook _44c0_s_p8_2 = { - 2, 289, - _vq_lengthlist__44c0_s_p8_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c0_s_p8_2, - NULL, - &_vq_auxt__44c0_s_p8_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c0_s_short[] = { - 9, 8,12,11,12,13,14,14,16, 6, 1, 5, 6, 6, 9,12, - 14,17, 9, 4, 5, 9, 7, 9,13,15,16, 8, 5, 8, 6, 8, - 10,13,17,17, 9, 6, 7, 7, 8, 9,13,15,17,11, 8, 9, - 9, 9,10,12,16,16,13, 7, 8, 7, 7, 9,12,14,15,13, - 6, 7, 5, 5, 7,10,13,13,14, 7, 8, 5, 6, 7, 9,10, - 12, -}; - -static static_codebook _huff_book__44c0_s_short = { - 2, 81, - _huff_lengthlist__44c0_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c0_sm_long[] = { - 5, 4, 9,10, 9,10,11,12,13, 4, 1, 5, 7, 7, 9,11, - 12,14, 8, 5, 7, 9, 8,10,13,13,13,10, 7, 9, 4, 6, - 7,10,12,14, 9, 6, 7, 6, 6, 7,10,12,12, 9, 8, 9, - 7, 6, 7, 8,11,12,11,11,11, 9, 8, 7, 8,10,12,12, - 13,14,12,11, 9, 9, 9,12,12,17,17,15,16,12,10,11, - 13, -}; - -static static_codebook _huff_book__44c0_sm_long = { - 2, 81, - _huff_lengthlist__44c0_sm_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c0_sm_p1_0[] = { - 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0, - 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 9,10,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 9,10,10, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c0_sm_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c0_sm_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p1_0 = { - _vq_quantthresh__44c0_sm_p1_0, - _vq_quantmap__44c0_sm_p1_0, - 3, - 3 -}; - -static static_codebook _44c0_sm_p1_0 = { - 8, 6561, - _vq_lengthlist__44c0_sm_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c0_sm_p1_0, - NULL, - &_vq_auxt__44c0_sm_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c0_sm_p2_0[] = { - 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c0_sm_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c0_sm_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p2_0 = { - _vq_quantthresh__44c0_sm_p2_0, - _vq_quantmap__44c0_sm_p2_0, - 5, - 5 -}; - -static static_codebook _44c0_sm_p2_0 = { - 4, 625, - _vq_lengthlist__44c0_sm_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c0_sm_p2_0, - NULL, - &_vq_auxt__44c0_sm_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c0_sm_p3_0[] = { - 1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 4, 7, 7, 0, 0, - 0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 6, 7, 8, 8, - 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, - 9,10, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, - 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c0_sm_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c0_sm_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p3_0 = { - _vq_quantthresh__44c0_sm_p3_0, - _vq_quantmap__44c0_sm_p3_0, - 9, - 9 -}; - -static static_codebook _44c0_sm_p3_0 = { - 2, 81, - _vq_lengthlist__44c0_sm_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c0_sm_p3_0, - NULL, - &_vq_auxt__44c0_sm_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c0_sm_p4_0[] = { - 1, 4, 3, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 8, 7, - 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8, - 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0, - 9, 9, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0, - 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0, 9, 9,11, - 11, -}; - -static float _vq_quantthresh__44c0_sm_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c0_sm_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p4_0 = { - _vq_quantthresh__44c0_sm_p4_0, - _vq_quantmap__44c0_sm_p4_0, - 9, - 9 -}; - -static static_codebook _44c0_sm_p4_0 = { - 2, 81, - _vq_lengthlist__44c0_sm_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c0_sm_p4_0, - NULL, - &_vq_auxt__44c0_sm_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p5_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c0_sm_p5_0[] = { - 1, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11, - 11,11, 0, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, - 11,11,11, 0, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10, - 11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10, - 10,11,11,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,11,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,11,12,12,13,13,13,13, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44c0_sm_p5_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c0_sm_p5_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p5_0 = { - _vq_quantthresh__44c0_sm_p5_0, - _vq_quantmap__44c0_sm_p5_0, - 17, - 17 -}; - -static static_codebook _44c0_sm_p5_0 = { - 2, 289, - _vq_lengthlist__44c0_sm_p5_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c0_sm_p5_0, - NULL, - &_vq_auxt__44c0_sm_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p6_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c0_sm_p6_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11, - 11,11,10,10, 6, 9, 9,11,11,10,11,10,10, 6, 9, 9, - 11,10,11,11,10,10, 7,11,10,11,11,11,11,11,11, 6, - 9, 9,11,10,10,11,11,10, 6, 9, 9,11,10,10,11,10, - 11, -}; - -static float _vq_quantthresh__44c0_sm_p6_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c0_sm_p6_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p6_0 = { - _vq_quantthresh__44c0_sm_p6_0, - _vq_quantmap__44c0_sm_p6_0, - 3, - 3 -}; - -static static_codebook _44c0_sm_p6_0 = { - 4, 81, - _vq_lengthlist__44c0_sm_p6_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c0_sm_p6_0, - NULL, - &_vq_auxt__44c0_sm_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p6_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c0_sm_p6_1[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 8, 9, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8, 9, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, - 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c0_sm_p6_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c0_sm_p6_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p6_1 = { - _vq_quantthresh__44c0_sm_p6_1, - _vq_quantmap__44c0_sm_p6_1, - 11, - 11 -}; - -static static_codebook _44c0_sm_p6_1 = { - 2, 121, - _vq_lengthlist__44c0_sm_p6_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c0_sm_p6_1, - NULL, - &_vq_auxt__44c0_sm_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c0_sm_p7_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 5, 7, 7, 8, - 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0, 9,10, - 10,10,11,11,12,11,12,12, 0, 0, 0,10,10, 9, 9,11, - 11,12,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12, - 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0, - 0, 0, 0, 0,11,12,11,11,13,12,13,13, 0, 0, 0, 0, - 0,12,12,11,11,13,12,14,14, -}; - -static float _vq_quantthresh__44c0_sm_p7_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c0_sm_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p7_0 = { - _vq_quantthresh__44c0_sm_p7_0, - _vq_quantmap__44c0_sm_p7_0, - 13, - 13 -}; - -static static_codebook _44c0_sm_p7_0 = { - 2, 169, - _vq_lengthlist__44c0_sm_p7_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c0_sm_p7_0, - NULL, - &_vq_auxt__44c0_sm_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p7_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c0_sm_p7_1[] = { - 2, 4, 4, 4, 4, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c0_sm_p7_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c0_sm_p7_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p7_1 = { - _vq_quantthresh__44c0_sm_p7_1, - _vq_quantmap__44c0_sm_p7_1, - 5, - 5 -}; - -static static_codebook _44c0_sm_p7_1 = { - 2, 25, - _vq_lengthlist__44c0_sm_p7_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c0_sm_p7_1, - NULL, - &_vq_auxt__44c0_sm_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p8_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c0_sm_p8_0[] = { - 1, 3, 3,11,11,11,11,11,11, 3, 7, 6,11,11,11,11, - 11,11, 4, 8, 7,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44c0_sm_p8_0[] = { - -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, 552.5, 773.5, -}; - -static long _vq_quantmap__44c0_sm_p8_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p8_0 = { - _vq_quantthresh__44c0_sm_p8_0, - _vq_quantmap__44c0_sm_p8_0, - 9, - 9 -}; - -static static_codebook _44c0_sm_p8_0 = { - 2, 81, - _vq_lengthlist__44c0_sm_p8_0, - 1, -516186112, 1627103232, 4, 0, - _vq_quantlist__44c0_sm_p8_0, - NULL, - &_vq_auxt__44c0_sm_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p8_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c0_sm_p8_1[] = { - 1, 4, 4, 6, 6, 7, 7, 9, 9,10,11,12,12, 6, 5, 5, - 7, 7, 8, 8,10,10,12,11,12,12, 6, 5, 5, 7, 7, 8, - 8,10,10,12,11,12,12,17, 7, 7, 8, 8, 9, 9,10,10, - 12,12,13,13,18, 7, 7, 8, 7, 9, 9,10,10,12,12,12, - 13,19,10,10, 8, 8,10,10,11,11,12,12,13,14,19,11, - 10, 8, 7,10,10,11,11,12,12,13,12,19,19,19,10,10, - 10,10,11,11,12,12,13,13,19,19,19,11, 9,11, 9,14, - 12,13,12,13,13,19,20,18,13,14,11,11,12,12,13,13, - 14,13,20,20,20,15,13,11,10,13,11,13,13,14,13,20, - 20,20,20,20,13,14,12,12,13,13,13,13,20,20,20,20, - 20,13,13,12,12,16,13,15,13, -}; - -static float _vq_quantthresh__44c0_sm_p8_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44c0_sm_p8_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p8_1 = { - _vq_quantthresh__44c0_sm_p8_1, - _vq_quantmap__44c0_sm_p8_1, - 13, - 13 -}; - -static static_codebook _44c0_sm_p8_1 = { - 2, 169, - _vq_lengthlist__44c0_sm_p8_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44c0_sm_p8_1, - NULL, - &_vq_auxt__44c0_sm_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c0_sm_p8_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c0_sm_p8_2[] = { - 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, - 8,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9, - 9,10, 9, 9,10,10,10,11, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9,10, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9,10,10,11,10,10, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10,10,10,11,11, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,11,11,11, 9, 9, - 9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,10,11,11, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,11,11, - 11,11,11, 9, 9,10, 9, 9, 9, 9, 9, 9, 9,10,11,10, - 11,11,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9,10,11, - 11,11,11,11,11, 9,10, 9, 9, 9, 9, 9, 9, 9, 9,11, - 11,10,11,11,11,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, - 10,11,10,11,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__44c0_sm_p8_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c0_sm_p8_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c0_sm_p8_2 = { - _vq_quantthresh__44c0_sm_p8_2, - _vq_quantmap__44c0_sm_p8_2, - 17, - 17 -}; - -static static_codebook _44c0_sm_p8_2 = { - 2, 289, - _vq_lengthlist__44c0_sm_p8_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c0_sm_p8_2, - NULL, - &_vq_auxt__44c0_sm_p8_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c0_sm_short[] = { - 6, 6,12,13,13,14,16,17,17, 4, 2, 5, 8, 7, 9,12, - 15,15, 9, 4, 5, 9, 7, 9,12,16,18,11, 6, 7, 4, 6, - 8,11,14,18,10, 5, 6, 5, 5, 7,10,14,17,10, 5, 7, - 7, 6, 7,10,13,16,11, 5, 7, 7, 7, 8,10,12,15,13, - 6, 7, 5, 5, 7, 9,12,13,16, 8, 9, 6, 6, 7, 9,10, - 12, -}; - -static static_codebook _huff_book__44c0_sm_short = { - 2, 81, - _huff_lengthlist__44c0_sm_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c1_s_long[] = { - 5, 5, 9,10, 9, 9,10,11,12, 5, 1, 5, 6, 6, 7,10, - 12,14, 9, 5, 6, 8, 8,10,12,14,14,10, 5, 8, 5, 6, - 8,11,13,14, 9, 5, 7, 6, 6, 8,10,12,11, 9, 7, 9, - 7, 6, 6, 7,10,10,10, 9,12, 9, 8, 7, 7,10,12,11, - 11,13,12,10, 9, 8, 9,11,11,14,15,15,13,11, 9, 9, - 11, -}; - -static static_codebook _huff_book__44c1_s_long = { - 2, 81, - _huff_lengthlist__44c1_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c1_s_p1_0[] = { - 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0, - 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, - 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, - 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, - 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0, - 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, - 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c1_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c1_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p1_0 = { - _vq_quantthresh__44c1_s_p1_0, - _vq_quantmap__44c1_s_p1_0, - 3, - 3 -}; - -static static_codebook _44c1_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44c1_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c1_s_p1_0, - NULL, - &_vq_auxt__44c1_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c1_s_p2_0[] = { - 2, 3, 4, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c1_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c1_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p2_0 = { - _vq_quantthresh__44c1_s_p2_0, - _vq_quantmap__44c1_s_p2_0, - 5, - 5 -}; - -static static_codebook _44c1_s_p2_0 = { - 4, 625, - _vq_lengthlist__44c1_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c1_s_p2_0, - NULL, - &_vq_auxt__44c1_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c1_s_p3_0[] = { - 1, 3, 2, 7, 7, 0, 0, 0, 0, 0,13,13, 6, 6, 0, 0, - 0, 0, 0,12, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0,11,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c1_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c1_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p3_0 = { - _vq_quantthresh__44c1_s_p3_0, - _vq_quantmap__44c1_s_p3_0, - 9, - 9 -}; - -static static_codebook _44c1_s_p3_0 = { - 2, 81, - _vq_lengthlist__44c1_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c1_s_p3_0, - NULL, - &_vq_auxt__44c1_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c1_s_p4_0[] = { - 1, 3, 3, 6, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7, - 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7, - 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0, - 9, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, - 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11, - 11, -}; - -static float _vq_quantthresh__44c1_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c1_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p4_0 = { - _vq_quantthresh__44c1_s_p4_0, - _vq_quantmap__44c1_s_p4_0, - 9, - 9 -}; - -static static_codebook _44c1_s_p4_0 = { - 2, 81, - _vq_lengthlist__44c1_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c1_s_p4_0, - NULL, - &_vq_auxt__44c1_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p5_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c1_s_p5_0[] = { - 1, 4, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10, - 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, - 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,11, 0, 0, 0, 8, 8, 9, 9, 9,10,10,10, - 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10, 9,10, - 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9, - 10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13, 0, 0, - 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0, - 0, 0, 0, 0, 0, 0,12,12,12,12,12,12,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44c1_s_p5_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c1_s_p5_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p5_0 = { - _vq_quantthresh__44c1_s_p5_0, - _vq_quantmap__44c1_s_p5_0, - 17, - 17 -}; - -static static_codebook _44c1_s_p5_0 = { - 2, 289, - _vq_lengthlist__44c1_s_p5_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c1_s_p5_0, - NULL, - &_vq_auxt__44c1_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p6_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c1_s_p6_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 6,10,10,11,11, - 11,11,10,10, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9, - 11,10,11,11,10,10, 7,11,10,11,11,11,12,11,11, 7, - 9, 9,11,10,10,11,11,10, 6, 9, 9,10,10,10,12,10, - 11, -}; - -static float _vq_quantthresh__44c1_s_p6_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c1_s_p6_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p6_0 = { - _vq_quantthresh__44c1_s_p6_0, - _vq_quantmap__44c1_s_p6_0, - 3, - 3 -}; - -static static_codebook _44c1_s_p6_0 = { - 4, 81, - _vq_lengthlist__44c1_s_p6_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c1_s_p6_0, - NULL, - &_vq_auxt__44c1_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p6_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c1_s_p6_1[] = { - 2, 3, 3, 6, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6, - 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8, - 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c1_s_p6_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c1_s_p6_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p6_1 = { - _vq_quantthresh__44c1_s_p6_1, - _vq_quantmap__44c1_s_p6_1, - 11, - 11 -}; - -static static_codebook _44c1_s_p6_1 = { - 2, 121, - _vq_lengthlist__44c1_s_p6_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c1_s_p6_1, - NULL, - &_vq_auxt__44c1_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c1_s_p7_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 9, 7, 5, 6, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8, - 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9, 9,10,10,10,11,11,11,11, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0,10,10, - 10,10,11,11,12,11,12,12, 0, 0, 0,10,10,10, 9,11, - 11,12,11,13,12, 0, 0, 0,13,13,10,10,11,11,12,12, - 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0, - 0, 0, 0, 0,11,12,11,11,12,12,14,13, 0, 0, 0, 0, - 0,12,11,11,11,13,10,14,13, -}; - -static float _vq_quantthresh__44c1_s_p7_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c1_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p7_0 = { - _vq_quantthresh__44c1_s_p7_0, - _vq_quantmap__44c1_s_p7_0, - 13, - 13 -}; - -static static_codebook _44c1_s_p7_0 = { - 2, 169, - _vq_lengthlist__44c1_s_p7_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c1_s_p7_0, - NULL, - &_vq_auxt__44c1_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p7_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c1_s_p7_1[] = { - 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c1_s_p7_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c1_s_p7_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p7_1 = { - _vq_quantthresh__44c1_s_p7_1, - _vq_quantmap__44c1_s_p7_1, - 5, - 5 -}; - -static static_codebook _44c1_s_p7_1 = { - 2, 25, - _vq_lengthlist__44c1_s_p7_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c1_s_p7_1, - NULL, - &_vq_auxt__44c1_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c1_s_p8_0[] = { - 1, 4, 3,10,10,10,10,10,10,10,10,10,10, 4, 8, 6, - 10,10,10,10,10,10,10,10,10,10, 4, 8, 7,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44c1_s_p8_0[] = { - -1215.5, -994.5, -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, - 552.5, 773.5, 994.5, 1215.5, -}; - -static long _vq_quantmap__44c1_s_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p8_0 = { - _vq_quantthresh__44c1_s_p8_0, - _vq_quantmap__44c1_s_p8_0, - 13, - 13 -}; - -static static_codebook _44c1_s_p8_0 = { - 2, 169, - _vq_lengthlist__44c1_s_p8_0, - 1, -514541568, 1627103232, 4, 0, - _vq_quantlist__44c1_s_p8_0, - NULL, - &_vq_auxt__44c1_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p8_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c1_s_p8_1[] = { - 1, 4, 4, 6, 5, 7, 7, 9, 9,10,10,12,12, 6, 5, 5, - 7, 7, 8, 8,10,10,12,11,12,12, 6, 5, 5, 7, 7, 8, - 8,10,10,11,11,12,12,15, 7, 7, 8, 8, 9, 9,11,11, - 12,12,13,12,15, 8, 8, 8, 7, 9, 9,10,10,12,12,13, - 13,16,11,10, 8, 8,10,10,11,11,12,12,13,13,16,11, - 11, 9, 8,11,10,11,11,12,12,13,12,16,16,16,10,11, - 10,11,12,12,12,12,13,13,16,16,16,11, 9,11, 9,14, - 12,12,12,13,13,16,16,16,12,14,11,12,12,12,13,13, - 14,13,16,16,16,15,13,12,10,13,10,13,14,13,13,16, - 16,16,16,16,13,14,12,13,13,12,13,13,16,16,16,16, - 16,13,12,12,11,14,12,15,13, -}; - -static float _vq_quantthresh__44c1_s_p8_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44c1_s_p8_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p8_1 = { - _vq_quantthresh__44c1_s_p8_1, - _vq_quantmap__44c1_s_p8_1, - 13, - 13 -}; - -static static_codebook _44c1_s_p8_1 = { - 2, 169, - _vq_lengthlist__44c1_s_p8_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44c1_s_p8_1, - NULL, - &_vq_auxt__44c1_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_s_p8_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c1_s_p8_2[] = { - 2, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, - 8,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10,10,10, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, - 9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9, - 9,10, 9, 9,10,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9,10,10,11,11,11, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10,10,11,11,11, 8, 8, 9, - 9, 9, 9,10, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,10,11,11, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10,11,11, - 11,11,11, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,10,11,11, - 11,11,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9,10,11, - 11,11,11,11,11, 9,10, 9, 9, 9, 9,10, 9, 9, 9,11, - 11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9,10, 9, - 11,11,10,11,11,11,11,10,11, 9, 9, 9, 9, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__44c1_s_p8_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c1_s_p8_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_s_p8_2 = { - _vq_quantthresh__44c1_s_p8_2, - _vq_quantmap__44c1_s_p8_2, - 17, - 17 -}; - -static static_codebook _44c1_s_p8_2 = { - 2, 289, - _vq_lengthlist__44c1_s_p8_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c1_s_p8_2, - NULL, - &_vq_auxt__44c1_s_p8_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c1_s_short[] = { - 6, 8,13,12,13,14,15,16,16, 4, 2, 4, 7, 6, 8,11, - 13,15,10, 4, 4, 8, 6, 8,11,14,17,11, 5, 6, 5, 6, - 8,12,14,17,11, 5, 5, 6, 5, 7,10,13,16,12, 6, 7, - 8, 7, 8,10,13,15,13, 8, 8, 7, 7, 8,10,12,15,15, - 7, 7, 5, 5, 7, 9,12,14,15, 8, 8, 6, 6, 7, 8,10, - 11, -}; - -static static_codebook _huff_book__44c1_s_short = { - 2, 81, - _huff_lengthlist__44c1_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44c1_sm_long[] = { - 5, 4, 8,10, 9, 9,10,11,12, 4, 2, 5, 6, 6, 8,10, - 11,13, 8, 4, 6, 8, 7, 9,12,12,14,10, 6, 8, 4, 5, - 6, 9,11,12, 9, 5, 6, 5, 5, 6, 9,11,11, 9, 7, 9, - 6, 5, 5, 7,10,10,10, 9,11, 8, 7, 6, 7, 9,11,11, - 12,13,10,10, 9, 8, 9,11,11,15,15,12,13,11, 9,10, - 11, -}; - -static static_codebook _huff_book__44c1_sm_long = { - 2, 81, - _huff_lengthlist__44c1_sm_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c1_sm_p1_0[] = { - 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0, - 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, - 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 9,10, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c1_sm_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44c1_sm_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p1_0 = { - _vq_quantthresh__44c1_sm_p1_0, - _vq_quantmap__44c1_sm_p1_0, - 3, - 3 -}; - -static static_codebook _44c1_sm_p1_0 = { - 8, 6561, - _vq_lengthlist__44c1_sm_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44c1_sm_p1_0, - NULL, - &_vq_auxt__44c1_sm_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c1_sm_p2_0[] = { - 2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c1_sm_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c1_sm_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p2_0 = { - _vq_quantthresh__44c1_sm_p2_0, - _vq_quantmap__44c1_sm_p2_0, - 5, - 5 -}; - -static static_codebook _44c1_sm_p2_0 = { - 4, 625, - _vq_lengthlist__44c1_sm_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c1_sm_p2_0, - NULL, - &_vq_auxt__44c1_sm_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c1_sm_p3_0[] = { - 1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 5, 6, 6, 0, 0, - 0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44c1_sm_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c1_sm_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p3_0 = { - _vq_quantthresh__44c1_sm_p3_0, - _vq_quantmap__44c1_sm_p3_0, - 9, - 9 -}; - -static static_codebook _44c1_sm_p3_0 = { - 2, 81, - _vq_lengthlist__44c1_sm_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c1_sm_p3_0, - NULL, - &_vq_auxt__44c1_sm_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44c1_sm_p4_0[] = { - 1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7, 8, 8, - 9, 9, 0, 6, 6, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8, - 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0, - 8, 8, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0, - 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0, 9, 9,11, - 11, -}; - -static float _vq_quantthresh__44c1_sm_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44c1_sm_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p4_0 = { - _vq_quantthresh__44c1_sm_p4_0, - _vq_quantmap__44c1_sm_p4_0, - 9, - 9 -}; - -static static_codebook _44c1_sm_p4_0 = { - 2, 81, - _vq_lengthlist__44c1_sm_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44c1_sm_p4_0, - NULL, - &_vq_auxt__44c1_sm_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p5_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c1_sm_p5_0[] = { - 2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10, - 11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10, - 10,11,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,10, - 10,11,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10, - 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 9, 9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, - 0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0, 0, - 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0, - 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44c1_sm_p5_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c1_sm_p5_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p5_0 = { - _vq_quantthresh__44c1_sm_p5_0, - _vq_quantmap__44c1_sm_p5_0, - 17, - 17 -}; - -static static_codebook _44c1_sm_p5_0 = { - 2, 289, - _vq_lengthlist__44c1_sm_p5_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c1_sm_p5_0, - NULL, - &_vq_auxt__44c1_sm_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p6_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44c1_sm_p6_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11, - 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11, - 11,11,10,10, 6, 9, 9,11,11,10,11,10,10, 6, 9, 9, - 11,10,11,11,10,10, 7,11,11,11,11,11,11,11,11, 6, - 9, 9,11,10,10,11,11,10, 6, 9, 9,10,10,10,11,10, - 11, -}; - -static float _vq_quantthresh__44c1_sm_p6_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44c1_sm_p6_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p6_0 = { - _vq_quantthresh__44c1_sm_p6_0, - _vq_quantmap__44c1_sm_p6_0, - 3, - 3 -}; - -static static_codebook _44c1_sm_p6_0 = { - 4, 81, - _vq_lengthlist__44c1_sm_p6_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44c1_sm_p6_0, - NULL, - &_vq_auxt__44c1_sm_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p6_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44c1_sm_p6_1[] = { - 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, - 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 9, 8,10,10,10,10,10, 8, 8, 8, - 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10, - 10,10,10, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44c1_sm_p6_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44c1_sm_p6_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p6_1 = { - _vq_quantthresh__44c1_sm_p6_1, - _vq_quantmap__44c1_sm_p6_1, - 11, - 11 -}; - -static static_codebook _44c1_sm_p6_1 = { - 2, 121, - _vq_lengthlist__44c1_sm_p6_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44c1_sm_p6_1, - NULL, - &_vq_auxt__44c1_sm_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c1_sm_p7_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8, - 8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0, 9,10, - 9,10,11,11,12,11,13,12, 0, 0, 0,10,10, 9, 9,11, - 11,12,12,13,12, 0, 0, 0,13,13,10,10,11,11,12,12, - 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0, - 0, 0, 0, 0,11,12,11,11,12,13,14,13, 0, 0, 0, 0, - 0,12,12,11,11,13,12,14,13, -}; - -static float _vq_quantthresh__44c1_sm_p7_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44c1_sm_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p7_0 = { - _vq_quantthresh__44c1_sm_p7_0, - _vq_quantmap__44c1_sm_p7_0, - 13, - 13 -}; - -static static_codebook _44c1_sm_p7_0 = { - 2, 169, - _vq_lengthlist__44c1_sm_p7_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44c1_sm_p7_0, - NULL, - &_vq_auxt__44c1_sm_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p7_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44c1_sm_p7_1[] = { - 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44c1_sm_p7_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44c1_sm_p7_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p7_1 = { - _vq_quantthresh__44c1_sm_p7_1, - _vq_quantmap__44c1_sm_p7_1, - 5, - 5 -}; - -static static_codebook _44c1_sm_p7_1 = { - 2, 25, - _vq_lengthlist__44c1_sm_p7_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44c1_sm_p7_1, - NULL, - &_vq_auxt__44c1_sm_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p8_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c1_sm_p8_0[] = { - 1, 3, 3,13,13,13,13,13,13,13,13,13,13, 3, 6, 6, - 13,13,13,13,13,13,13,13,13,13, 4, 8, 7,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13, -}; - -static float _vq_quantthresh__44c1_sm_p8_0[] = { - -1215.5, -994.5, -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, - 552.5, 773.5, 994.5, 1215.5, -}; - -static long _vq_quantmap__44c1_sm_p8_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p8_0 = { - _vq_quantthresh__44c1_sm_p8_0, - _vq_quantmap__44c1_sm_p8_0, - 13, - 13 -}; - -static static_codebook _44c1_sm_p8_0 = { - 2, 169, - _vq_lengthlist__44c1_sm_p8_0, - 1, -514541568, 1627103232, 4, 0, - _vq_quantlist__44c1_sm_p8_0, - NULL, - &_vq_auxt__44c1_sm_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p8_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44c1_sm_p8_1[] = { - 1, 4, 4, 6, 6, 7, 7, 9, 9,10,11,12,12, 6, 5, 5, - 7, 7, 8, 7,10,10,11,11,12,12, 6, 5, 5, 7, 7, 8, - 8,10,10,11,11,12,12,16, 7, 7, 8, 8, 9, 9,11,11, - 12,12,13,13,17, 7, 7, 8, 7, 9, 9,11,10,12,12,13, - 13,19,11,10, 8, 8,10,10,11,11,12,12,13,13,19,11, - 11, 9, 7,11,10,11,11,12,12,13,12,19,19,19,10,10, - 10,10,11,12,12,12,13,14,18,19,19,11, 9,11, 9,13, - 12,12,12,13,13,19,20,19,13,15,11,11,12,12,13,13, - 14,13,18,19,20,15,13,12,10,13,10,13,13,13,14,20, - 20,20,20,20,13,14,12,12,13,12,13,13,20,20,20,20, - 20,13,12,12,12,14,12,14,13, -}; - -static float _vq_quantthresh__44c1_sm_p8_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44c1_sm_p8_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p8_1 = { - _vq_quantthresh__44c1_sm_p8_1, - _vq_quantmap__44c1_sm_p8_1, - 13, - 13 -}; - -static static_codebook _44c1_sm_p8_1 = { - 2, 169, - _vq_lengthlist__44c1_sm_p8_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44c1_sm_p8_1, - NULL, - &_vq_auxt__44c1_sm_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44c1_sm_p8_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44c1_sm_p8_2[] = { - 2, 5, 5, 6, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, - 8,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9,10,10, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9,10,10,11,10,10, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9, - 9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,11,11,11, 9, - 8, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,10,11,11, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,11,11, - 11,11,11, 9, 9,10, 9, 9, 9, 9,10, 9,10,10,11,10, - 11,11,11,11, 9,10,10,10, 9, 9, 9, 9, 9, 9,10,11, - 11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11, - 11,10,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9,10, 9, - 10,11,10,11,11,11,11,11,11, 9, 9,10, 9, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__44c1_sm_p8_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44c1_sm_p8_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44c1_sm_p8_2 = { - _vq_quantthresh__44c1_sm_p8_2, - _vq_quantmap__44c1_sm_p8_2, - 17, - 17 -}; - -static static_codebook _44c1_sm_p8_2 = { - 2, 289, - _vq_lengthlist__44c1_sm_p8_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44c1_sm_p8_2, - NULL, - &_vq_auxt__44c1_sm_p8_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44c1_sm_short[] = { - 4, 7,13,14,14,15,16,18,18, 4, 2, 5, 8, 7, 9,12, - 15,15,10, 4, 5,10, 6, 8,11,15,17,12, 5, 7, 5, 6, - 8,11,14,17,11, 5, 6, 6, 5, 6, 9,13,17,12, 6, 7, - 6, 5, 6, 8,12,14,14, 7, 8, 6, 6, 7, 9,11,14,14, - 8, 9, 6, 5, 6, 9,11,13,16,10,10, 7, 6, 7, 8,10, - 11, -}; - -static static_codebook _huff_book__44c1_sm_short = { - 2, 81, - _huff_lengthlist__44c1_sm_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44cn1_s_long[] = { - 4, 4, 7, 8, 7, 8,10,12,17, 3, 1, 6, 6, 7, 8,10, - 12,15, 7, 6, 9, 9, 9,11,12,14,17, 8, 6, 9, 6, 7, - 9,11,13,17, 7, 6, 9, 7, 7, 8, 9,12,15, 8, 8,10, - 8, 7, 7, 7,10,14, 9,10,12,10, 8, 8, 8,10,14,11, - 13,15,13,12,11,11,12,16,17,18,18,19,20,18,16,16, - 20, -}; - -static static_codebook _huff_book__44cn1_s_long = { - 2, 81, - _huff_lengthlist__44cn1_s_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44cn1_s_p1_0[] = { - 1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0, - 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0, - 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9,10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, 0, - 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0,10,11,11, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, - 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0,10,11,11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, - 0, 0, 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,11, 0, - 0, 0, 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,11, - 0, 0, 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44cn1_s_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44cn1_s_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p1_0 = { - _vq_quantthresh__44cn1_s_p1_0, - _vq_quantmap__44cn1_s_p1_0, - 3, - 3 -}; - -static static_codebook _44cn1_s_p1_0 = { - 8, 6561, - _vq_lengthlist__44cn1_s_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44cn1_s_p1_0, - NULL, - &_vq_auxt__44cn1_s_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44cn1_s_p2_0[] = { - 1, 4, 4, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44cn1_s_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44cn1_s_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p2_0 = { - _vq_quantthresh__44cn1_s_p2_0, - _vq_quantmap__44cn1_s_p2_0, - 5, - 5 -}; - -static static_codebook _44cn1_s_p2_0 = { - 4, 625, - _vq_lengthlist__44cn1_s_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44cn1_s_p2_0, - NULL, - &_vq_auxt__44cn1_s_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44cn1_s_p3_0[] = { - 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 9, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, - 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44cn1_s_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44cn1_s_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p3_0 = { - _vq_quantthresh__44cn1_s_p3_0, - _vq_quantmap__44cn1_s_p3_0, - 9, - 9 -}; - -static static_codebook _44cn1_s_p3_0 = { - 2, 81, - _vq_lengthlist__44cn1_s_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44cn1_s_p3_0, - NULL, - &_vq_auxt__44cn1_s_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44cn1_s_p4_0[] = { - 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 6, 6, 7, 7, - 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0, 7, 7, - 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0, - 9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0, - 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11, - 11, -}; - -static float _vq_quantthresh__44cn1_s_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44cn1_s_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p4_0 = { - _vq_quantthresh__44cn1_s_p4_0, - _vq_quantmap__44cn1_s_p4_0, - 9, - 9 -}; - -static static_codebook _44cn1_s_p4_0 = { - 2, 81, - _vq_lengthlist__44cn1_s_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44cn1_s_p4_0, - NULL, - &_vq_auxt__44cn1_s_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p5_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44cn1_s_p5_0[] = { - 1, 4, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10, - 10, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10, - 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, - 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10, - 10,10,11,11,11,12,12, 0, 0, 0, 9, 9,10, 9,10,10, - 10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9, - 10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, - 10,10,11,10,11,11,11,12,13,12,13,13, 0, 0, 0, 0, - 0, 0, 0,11,10,11,11,12,12,12,12,13,13, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, - 0, 0, 0, 0, 0, 0,12,12,12,13,13,13,13,13,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44cn1_s_p5_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44cn1_s_p5_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p5_0 = { - _vq_quantthresh__44cn1_s_p5_0, - _vq_quantmap__44cn1_s_p5_0, - 17, - 17 -}; - -static static_codebook _44cn1_s_p5_0 = { - 2, 289, - _vq_lengthlist__44cn1_s_p5_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44cn1_s_p5_0, - NULL, - &_vq_auxt__44cn1_s_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p6_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44cn1_s_p6_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 6, 6,10, 9, 9,11, - 9, 9, 4, 6, 6,10, 9, 9,10, 9, 9, 7,10,10,11,11, - 11,12,11,11, 7, 9, 9,11,11,10,11,10,10, 7, 9, 9, - 11,10,11,11,10,10, 7,10,10,11,11,11,12,11,11, 7, - 9, 9,11,10,10,11,10,10, 7, 9, 9,11,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__44cn1_s_p6_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44cn1_s_p6_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p6_0 = { - _vq_quantthresh__44cn1_s_p6_0, - _vq_quantmap__44cn1_s_p6_0, - 3, - 3 -}; - -static static_codebook _44cn1_s_p6_0 = { - 4, 81, - _vq_lengthlist__44cn1_s_p6_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44cn1_s_p6_0, - NULL, - &_vq_auxt__44cn1_s_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p6_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44cn1_s_p6_1[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 6, - 8, 8, 8, 8, 8, 8,10,10,10, 7, 6, 7, 7, 8, 8, 8, - 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, - 7, 8, 8, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 9, 9, - 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, - 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10, - 10,10,10, 9, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__44cn1_s_p6_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44cn1_s_p6_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p6_1 = { - _vq_quantthresh__44cn1_s_p6_1, - _vq_quantmap__44cn1_s_p6_1, - 11, - 11 -}; - -static static_codebook _44cn1_s_p6_1 = { - 2, 121, - _vq_lengthlist__44cn1_s_p6_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44cn1_s_p6_1, - NULL, - &_vq_auxt__44cn1_s_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44cn1_s_p7_0[] = { - 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5, - 7, 7, 8, 8, 8, 8, 9, 9,11,11, 7, 5, 5, 7, 7, 8, - 8, 8, 8, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9, 9,10,10,10,11,11,11,12, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10, - 10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11, - 11,12,12,13,12, 0, 0, 0,14,14,11,10,11,12,12,13, - 13,14, 0, 0, 0,15,15,11,11,12,11,12,12,14,13, 0, - 0, 0, 0, 0,12,12,12,12,13,13,14,14, 0, 0, 0, 0, - 0,13,13,12,12,13,13,13,14, -}; - -static float _vq_quantthresh__44cn1_s_p7_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44cn1_s_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p7_0 = { - _vq_quantthresh__44cn1_s_p7_0, - _vq_quantmap__44cn1_s_p7_0, - 13, - 13 -}; - -static static_codebook _44cn1_s_p7_0 = { - 2, 169, - _vq_lengthlist__44cn1_s_p7_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44cn1_s_p7_0, - NULL, - &_vq_auxt__44cn1_s_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p7_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44cn1_s_p7_1[] = { - 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6, - 6, 6, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44cn1_s_p7_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44cn1_s_p7_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p7_1 = { - _vq_quantthresh__44cn1_s_p7_1, - _vq_quantmap__44cn1_s_p7_1, - 5, - 5 -}; - -static static_codebook _44cn1_s_p7_1 = { - 2, 25, - _vq_lengthlist__44cn1_s_p7_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44cn1_s_p7_1, - NULL, - &_vq_auxt__44cn1_s_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p8_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44cn1_s_p8_0[] = { - 1, 7, 7,11,11, 8,11,11,11,11, 4,11, 3,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11, 7,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11, 8,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12, -}; - -static float _vq_quantthresh__44cn1_s_p8_0[] = { - -331.5, -110.5, 110.5, 331.5, -}; - -static long _vq_quantmap__44cn1_s_p8_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p8_0 = { - _vq_quantthresh__44cn1_s_p8_0, - _vq_quantmap__44cn1_s_p8_0, - 5, - 5 -}; - -static static_codebook _44cn1_s_p8_0 = { - 4, 625, - _vq_lengthlist__44cn1_s_p8_0, - 1, -518283264, 1627103232, 3, 0, - _vq_quantlist__44cn1_s_p8_0, - NULL, - &_vq_auxt__44cn1_s_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p8_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44cn1_s_p8_1[] = { - 1, 4, 4, 6, 6, 8, 8, 9,10,10,11,11,11, 6, 5, 5, - 7, 7, 8, 8, 9,10, 9,11,11,12, 5, 5, 5, 7, 7, 8, - 9,10,10,12,12,14,13,15, 7, 7, 8, 8, 9,10,11,11, - 10,12,10,11,15, 7, 8, 8, 8, 9, 9,11,11,13,12,12, - 13,15,10,10, 8, 8,10,10,12,12,11,14,10,10,15,11, - 11, 8, 8,10,10,12,13,13,14,15,13,15,15,15,10,10, - 10,10,12,12,13,12,13,10,15,15,15,10,10,11,10,13, - 11,13,13,15,13,15,15,15,13,13,10,11,11,11,12,10, - 14,11,15,15,14,14,13,10,10,12,11,13,13,14,14,15, - 15,15,15,15,11,11,11,11,12,11,15,12,15,15,15,15, - 15,12,12,11,11,14,12,13,14, -}; - -static float _vq_quantthresh__44cn1_s_p8_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44cn1_s_p8_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p8_1 = { - _vq_quantthresh__44cn1_s_p8_1, - _vq_quantmap__44cn1_s_p8_1, - 13, - 13 -}; - -static static_codebook _44cn1_s_p8_1 = { - 2, 169, - _vq_lengthlist__44cn1_s_p8_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44cn1_s_p8_1, - NULL, - &_vq_auxt__44cn1_s_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_s_p8_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44cn1_s_p8_2[] = { - 3, 4, 3, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, - 9,10,11,11, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10,10,10, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, - 9, 9,10, 9,10,11,10, 7, 6, 7, 7, 8, 8, 9, 9, 9, - 9, 9, 9, 9,10,10,10,11, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, - 9, 9, 9, 9, 9, 9,10,11,11,11, 8, 8, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11, 8, 8, 8, - 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,11,11, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,10,11,11, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,10,11,11, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11, - 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11, - 10,11,11,11, 9,10,10, 9, 9, 9, 9, 9, 9, 9,10,11, - 11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, - 11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9, - 11,11,11,10,11,11,11,11,11, 9, 9, 9,10, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__44cn1_s_p8_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44cn1_s_p8_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_s_p8_2 = { - _vq_quantthresh__44cn1_s_p8_2, - _vq_quantmap__44cn1_s_p8_2, - 17, - 17 -}; - -static static_codebook _44cn1_s_p8_2 = { - 2, 289, - _vq_lengthlist__44cn1_s_p8_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44cn1_s_p8_2, - NULL, - &_vq_auxt__44cn1_s_p8_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44cn1_s_short[] = { - 10, 9,12,15,12,13,16,14,16, 7, 1, 5,14, 7,10,13, - 16,16, 9, 4, 6,16, 8,11,16,16,16,14, 4, 7,16, 9, - 12,14,16,16,10, 5, 7,14, 9,12,14,15,15,13, 8, 9, - 14,10,12,13,14,15,13, 9, 9, 7, 6, 8,11,12,12,14, - 8, 8, 5, 4, 5, 8,11,12,16,10,10, 6, 5, 6, 8, 9, - 10, -}; - -static static_codebook _huff_book__44cn1_s_short = { - 2, 81, - _huff_lengthlist__44cn1_s_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44cn1_sm_long[] = { - 3, 3, 8, 8, 8, 8,10,12,14, 3, 2, 6, 7, 7, 8,10, - 12,16, 7, 6, 7, 9, 8,10,12,14,16, 8, 6, 8, 4, 5, - 7, 9,11,13, 7, 6, 8, 5, 6, 7, 9,11,14, 8, 8,10, - 7, 7, 6, 8,10,13, 9,11,12, 9, 9, 7, 8,10,12,10, - 13,15,11,11,10, 9,10,13,13,16,17,14,15,14,13,14, - 17, -}; - -static static_codebook _huff_book__44cn1_sm_long = { - 2, 81, - _huff_lengthlist__44cn1_sm_long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44cn1_sm_p1_0[] = { - 1, 4, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0, - 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, - 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, - 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0, - 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0, 0, - 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, - 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, - 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0, - 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, - 0, 0, 0, 0, 0, 0, 9,10, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44cn1_sm_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44cn1_sm_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p1_0 = { - _vq_quantthresh__44cn1_sm_p1_0, - _vq_quantmap__44cn1_sm_p1_0, - 3, - 3 -}; - -static static_codebook _44cn1_sm_p1_0 = { - 8, 6561, - _vq_lengthlist__44cn1_sm_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44cn1_sm_p1_0, - NULL, - &_vq_auxt__44cn1_sm_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44cn1_sm_p2_0[] = { - 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44cn1_sm_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44cn1_sm_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p2_0 = { - _vq_quantthresh__44cn1_sm_p2_0, - _vq_quantmap__44cn1_sm_p2_0, - 5, - 5 -}; - -static static_codebook _44cn1_sm_p2_0 = { - 4, 625, - _vq_lengthlist__44cn1_sm_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44cn1_sm_p2_0, - NULL, - &_vq_auxt__44cn1_sm_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44cn1_sm_p3_0[] = { - 1, 3, 4, 7, 7, 0, 0, 0, 0, 0, 4, 4, 7, 7, 0, 0, - 0, 0, 0, 4, 5, 7, 7, 0, 0, 0, 0, 0, 6, 7, 8, 8, - 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0,10, 9, 0, 0, 0, 0, 0, - 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -}; - -static float _vq_quantthresh__44cn1_sm_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44cn1_sm_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p3_0 = { - _vq_quantthresh__44cn1_sm_p3_0, - _vq_quantmap__44cn1_sm_p3_0, - 9, - 9 -}; - -static static_codebook _44cn1_sm_p3_0 = { - 2, 81, - _vq_lengthlist__44cn1_sm_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44cn1_sm_p3_0, - NULL, - &_vq_auxt__44cn1_sm_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p4_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44cn1_sm_p4_0[] = { - 1, 4, 3, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 8, 7, - 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8, - 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0, - 9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0, - 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11, - 11, -}; - -static float _vq_quantthresh__44cn1_sm_p4_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44cn1_sm_p4_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p4_0 = { - _vq_quantthresh__44cn1_sm_p4_0, - _vq_quantmap__44cn1_sm_p4_0, - 9, - 9 -}; - -static static_codebook _44cn1_sm_p4_0 = { - 2, 81, - _vq_lengthlist__44cn1_sm_p4_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44cn1_sm_p4_0, - NULL, - &_vq_auxt__44cn1_sm_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p5_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44cn1_sm_p5_0[] = { - 1, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11, - 11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11, - 12,12, 0, 6, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11, - 11,12,12, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,11, - 11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10, - 11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10, - 10,11,11,12,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10, - 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10, - 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9, - 10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9, - 9,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0, 0, - 10,10,11,11,11,11,12,12,13,13,14,14, 0, 0, 0, 0, - 0, 0, 0,11,11,11,11,12,12,13,13,14,14, 0, 0, 0, - 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0, - 0, 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, - 0, 0, 0, 0, 0, 0,12,12,12,13,13,13,14,14,14,14, - 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,14,14, - 14, -}; - -static float _vq_quantthresh__44cn1_sm_p5_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44cn1_sm_p5_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p5_0 = { - _vq_quantthresh__44cn1_sm_p5_0, - _vq_quantmap__44cn1_sm_p5_0, - 17, - 17 -}; - -static static_codebook _44cn1_sm_p5_0 = { - 2, 289, - _vq_lengthlist__44cn1_sm_p5_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44cn1_sm_p5_0, - NULL, - &_vq_auxt__44cn1_sm_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p6_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44cn1_sm_p6_0[] = { - 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 6,10, 9, 9,11, - 9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11, - 11,11,11,10, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9, - 11,10,11,11,10,10, 7,11,11,11,11,11,12,11,11, 7, - 9, 9,11,10,10,12,10,10, 7, 9, 9,11,10,10,11,10, - 10, -}; - -static float _vq_quantthresh__44cn1_sm_p6_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44cn1_sm_p6_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p6_0 = { - _vq_quantthresh__44cn1_sm_p6_0, - _vq_quantmap__44cn1_sm_p6_0, - 3, - 3 -}; - -static static_codebook _44cn1_sm_p6_0 = { - 4, 81, - _vq_lengthlist__44cn1_sm_p6_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44cn1_sm_p6_0, - NULL, - &_vq_auxt__44cn1_sm_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p6_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44cn1_sm_p6_1[] = { - 2, 4, 4, 5, 5, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, - 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, - 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10, - 8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8, - 8, 9, 9,10,10,10,10,10, 9, 9, 9, 9, 8, 9,10,10, - 10,10,10, 8, 9, 8, 8, 9, 8, -}; - -static float _vq_quantthresh__44cn1_sm_p6_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44cn1_sm_p6_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p6_1 = { - _vq_quantthresh__44cn1_sm_p6_1, - _vq_quantmap__44cn1_sm_p6_1, - 11, - 11 -}; - -static static_codebook _44cn1_sm_p6_1 = { - 2, 121, - _vq_lengthlist__44cn1_sm_p6_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44cn1_sm_p6_1, - NULL, - &_vq_auxt__44cn1_sm_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44cn1_sm_p7_0[] = { - 1, 4, 4, 6, 6, 7, 7, 7, 7, 9, 9,10,10, 7, 5, 5, - 7, 7, 8, 8, 8, 8,10, 9,11,10, 7, 5, 5, 7, 7, 8, - 8, 8, 8, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11, - 11, 0,12,12, 9, 9, 9,10,10,10,11,11,12,12, 0,13, - 13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, - 10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11, - 11,12,12,12,12, 0, 0, 0,14,14,11,11,11,11,12,13, - 13,13, 0, 0, 0,14,14,11,10,11,11,12,12,13,13, 0, - 0, 0, 0, 0,12,12,12,12,13,13,13,14, 0, 0, 0, 0, - 0,13,12,12,12,13,13,13,14, -}; - -static float _vq_quantthresh__44cn1_sm_p7_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44cn1_sm_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p7_0 = { - _vq_quantthresh__44cn1_sm_p7_0, - _vq_quantmap__44cn1_sm_p7_0, - 13, - 13 -}; - -static static_codebook _44cn1_sm_p7_0 = { - 2, 169, - _vq_lengthlist__44cn1_sm_p7_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44cn1_sm_p7_0, - NULL, - &_vq_auxt__44cn1_sm_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p7_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44cn1_sm_p7_1[] = { - 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6, - 5, 5, 5, 5, 6, 6, 6, 5, 5, -}; - -static float _vq_quantthresh__44cn1_sm_p7_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44cn1_sm_p7_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p7_1 = { - _vq_quantthresh__44cn1_sm_p7_1, - _vq_quantmap__44cn1_sm_p7_1, - 5, - 5 -}; - -static static_codebook _44cn1_sm_p7_1 = { - 2, 25, - _vq_lengthlist__44cn1_sm_p7_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44cn1_sm_p7_1, - NULL, - &_vq_auxt__44cn1_sm_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p8_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44cn1_sm_p8_0[] = { - 1, 4, 4,12,11,13,13,14,14, 4, 7, 7,11,13,14,14, - 14,14, 3, 8, 3,14,14,14,14,14,14,14,10,12,14,14, - 14,14,14,14,14,14, 5,14, 8,14,14,14,14,14,12,14, - 13,14,14,14,14,14,14,14,13,14,10,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14, -}; - -static float _vq_quantthresh__44cn1_sm_p8_0[] = { - -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, 552.5, 773.5, -}; - -static long _vq_quantmap__44cn1_sm_p8_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p8_0 = { - _vq_quantthresh__44cn1_sm_p8_0, - _vq_quantmap__44cn1_sm_p8_0, - 9, - 9 -}; - -static static_codebook _44cn1_sm_p8_0 = { - 2, 81, - _vq_lengthlist__44cn1_sm_p8_0, - 1, -516186112, 1627103232, 4, 0, - _vq_quantlist__44cn1_sm_p8_0, - NULL, - &_vq_auxt__44cn1_sm_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p8_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44cn1_sm_p8_1[] = { - 1, 4, 4, 6, 6, 8, 8, 9, 9,10,11,11,11, 6, 5, 5, - 7, 7, 8, 8,10,10,10,11,11,11, 6, 5, 5, 7, 7, 8, - 8,10,10,11,12,12,12,14, 7, 7, 7, 8, 9, 9,11,11, - 11,12,11,12,17, 7, 7, 8, 7, 9, 9,11,11,12,12,12, - 12,14,11,11, 8, 8,10,10,11,12,12,13,11,12,14,11, - 11, 8, 8,10,10,11,12,12,13,13,12,14,15,14,10,10, - 10,10,11,12,12,12,12,11,14,13,16,10,10,10, 9,12, - 11,12,12,13,14,14,15,14,14,13,10,10,11,11,12,11, - 13,11,14,12,15,13,14,11,10,12,10,12,12,13,13,13, - 13,14,15,15,12,12,11,11,12,11,13,12,14,14,14,14, - 17,12,12,11,10,13,11,13,13, -}; - -static float _vq_quantthresh__44cn1_sm_p8_1[] = { - -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, - 42.5, 59.5, 76.5, 93.5, -}; - -static long _vq_quantmap__44cn1_sm_p8_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p8_1 = { - _vq_quantthresh__44cn1_sm_p8_1, - _vq_quantmap__44cn1_sm_p8_1, - 13, - 13 -}; - -static static_codebook _44cn1_sm_p8_1 = { - 2, 169, - _vq_lengthlist__44cn1_sm_p8_1, - 1, -522616832, 1620115456, 4, 0, - _vq_quantlist__44cn1_sm_p8_1, - NULL, - &_vq_auxt__44cn1_sm_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44cn1_sm_p8_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44cn1_sm_p8_2[] = { - 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9,10, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9,10, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9,11,10,11, 8, 8, 8, 8, 8, 8, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11, 8, 8, 8, - 8, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,11, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,10,11,11, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,10,11,11, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11, - 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,11, - 11,11,11,11, 9,10,10,10, 9, 9, 9, 9, 9, 9,11,10, - 11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, - 11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9, - 10,11,11,11,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__44cn1_sm_p8_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44cn1_sm_p8_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44cn1_sm_p8_2 = { - _vq_quantthresh__44cn1_sm_p8_2, - _vq_quantmap__44cn1_sm_p8_2, - 17, - 17 -}; - -static static_codebook _44cn1_sm_p8_2 = { - 2, 289, - _vq_lengthlist__44cn1_sm_p8_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44cn1_sm_p8_2, - NULL, - &_vq_auxt__44cn1_sm_p8_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44cn1_sm_short[] = { - 5, 6,12,14,12,14,16,17,18, 4, 2, 5,11, 7,10,12, - 14,15, 9, 4, 5,11, 7,10,13,15,18,15, 6, 7, 5, 6, - 8,11,13,16,11, 5, 6, 5, 5, 6, 9,13,15,12, 5, 7, - 6, 5, 6, 9,12,14,12, 6, 7, 8, 6, 7, 9,12,13,14, - 8, 8, 7, 5, 5, 8,10,12,16, 9, 9, 8, 6, 6, 7, 9, - 9, -}; - -static static_codebook _huff_book__44cn1_sm_short = { - 2, 81, - _huff_lengthlist__44cn1_sm_short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/floor/floor_books.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/floor/floor_books.h deleted file mode 100644 index 18c26123c8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/floor/floor_books.h +++ /dev/null @@ -1,1837 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: static codebooks autogenerated by huff/huffbuld - last modified: $Id: floor_books.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../codebook.h" - -static long _huff_lengthlist_line_256x7_0sub1[] = { - 0, 2, 3, 3, 3, 3, 4, 3, 4, -}; - -static static_codebook _huff_book_line_256x7_0sub1 = { - 1, 9, - _huff_lengthlist_line_256x7_0sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_0sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 5, 3, - 6, 3, 6, 4, 6, 4, 7, 5, 7, -}; - -static static_codebook _huff_book_line_256x7_0sub2 = { - 1, 25, - _huff_lengthlist_line_256x7_0sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_0sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 3, 5, 3, - 6, 3, 6, 4, 7, 6, 7, 8, 7, 9, 8, 9, 9, 9,10, 9, - 11,13,11,13,10,10,13,13,13,13,13,13,12,12,12,12, -}; - -static static_codebook _huff_book_line_256x7_0sub3 = { - 1, 64, - _huff_lengthlist_line_256x7_0sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_1sub1[] = { - 0, 3, 3, 3, 3, 2, 4, 3, 4, -}; - -static static_codebook _huff_book_line_256x7_1sub1 = { - 1, 9, - _huff_lengthlist_line_256x7_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_1sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 4, 3, 4, 4, - 5, 4, 6, 5, 6, 7, 6, 8, 8, -}; - -static static_codebook _huff_book_line_256x7_1sub2 = { - 1, 25, - _huff_lengthlist_line_256x7_1sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_1sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 3, 6, 3, 7, - 3, 8, 5, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, -}; - -static static_codebook _huff_book_line_256x7_1sub3 = { - 1, 64, - _huff_lengthlist_line_256x7_1sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_class0[] = { - 7, 5, 5, 9, 9, 6, 6, 9,12, 8, 7, 8,11, 8, 9,15, - 6, 3, 3, 7, 7, 4, 3, 6, 9, 6, 5, 6, 8, 6, 8,15, - 8, 5, 5, 9, 8, 5, 4, 6,10, 7, 5, 5,11, 8, 7,15, - 14,15,13,13,13,13, 8,11,15,10, 7, 6,11, 9,10,15, -}; - -static static_codebook _huff_book_line_256x7_class0 = { - 1, 64, - _huff_lengthlist_line_256x7_class0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x7_class1[] = { - 5, 6, 8,15, 6, 9,10,15,10,11,12,15,15,15,15,15, - 4, 6, 7,15, 6, 7, 8,15, 9, 8, 9,15,15,15,15,15, - 6, 8, 9,15, 7, 7, 8,15,10, 9,10,15,15,15,15,15, - 15,13,15,15,15,10,11,15,15,13,13,15,15,15,15,15, - 4, 6, 7,15, 6, 8, 9,15,10,10,12,15,15,15,15,15, - 2, 5, 6,15, 5, 6, 7,15, 8, 6, 7,15,15,15,15,15, - 5, 6, 8,15, 5, 6, 7,15, 9, 6, 7,15,15,15,15,15, - 14,12,13,15,12,10,11,15,15,15,15,15,15,15,15,15, - 7, 8, 9,15, 9,10,10,15,15,14,14,15,15,15,15,15, - 5, 6, 7,15, 7, 8, 9,15,12, 9,10,15,15,15,15,15, - 7, 7, 9,15, 7, 7, 8,15,12, 8, 9,15,15,15,15,15, - 13,13,14,15,12,11,12,15,15,15,15,15,15,15,15,15, - 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, - 13,13,13,15,15,15,15,15,15,15,15,15,15,15,15,15, - 15,12,13,15,15,12,13,15,15,14,15,15,15,15,15,15, - 15,15,15,15,15,15,13,15,15,15,15,15,15,15,15,15, -}; - -static static_codebook _huff_book_line_256x7_class1 = { - 1, 256, - _huff_lengthlist_line_256x7_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_0sub0[] = { - 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 6, 5, 6, 6, 6, 6, 5, 6, 6, 7, 6, 7, 6, 7, 6, - 7, 6, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 9, 7, 9, 7, - 9, 7, 9, 8, 9, 8,10, 8,10, 8,10, 7,10, 6,10, 8, - 10, 8,11, 7,10, 7,11, 8,11,11,12,12,11,11,12,11, - 13,11,13,11,13,12,15,12,13,13,14,14,14,14,14,15, - 15,15,16,14,17,19,19,18,18,18,18,18,18,18,18,18, - 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, -}; - -static static_codebook _huff_book_line_512x17_0sub0 = { - 1, 128, - _huff_lengthlist_line_512x17_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_1sub0[] = { - 2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5, - 6, 5, 6, 6, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 8, 7, -}; - -static static_codebook _huff_book_line_512x17_1sub0 = { - 1, 32, - _huff_lengthlist_line_512x17_1sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_1sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 3, 5, 3, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 6, 5, - 6, 5, 7, 5, 8, 6, 8, 6, 8, 6, 8, 6, 8, 7, 9, 7, - 9, 7,11, 9,11,11,12,11,14,12,14,16,14,16,13,16, - 14,16,12,15,13,16,14,16,13,14,12,15,13,15,13,13, - 13,15,12,14,14,15,13,15,12,15,15,15,15,15,15,15, - 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, -}; - -static static_codebook _huff_book_line_512x17_1sub1 = { - 1, 128, - _huff_lengthlist_line_512x17_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_2sub1[] = { - 0, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 5, 4, 5, 3, - 5, 3, -}; - -static static_codebook _huff_book_line_512x17_2sub1 = { - 1, 18, - _huff_lengthlist_line_512x17_2sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_2sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 6, 4, 6, 5, - 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 7, 8, 7, 9, 7, - 9, 8, -}; - -static static_codebook _huff_book_line_512x17_2sub2 = { - 1, 50, - _huff_lengthlist_line_512x17_2sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_2sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 3, 3, 3, 4, 3, 4, 4, 5, 5, 6, 6, 7, 7, - 7, 8, 8,11, 8, 9, 9, 9,10,11,11,11, 9,10,10,11, - 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, -}; - -static static_codebook _huff_book_line_512x17_2sub3 = { - 1, 128, - _huff_lengthlist_line_512x17_2sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_3sub1[] = { - 0, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 4, 5, - 5, 5, -}; - -static static_codebook _huff_book_line_512x17_3sub1 = { - 1, 18, - _huff_lengthlist_line_512x17_3sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_3sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 3, 3, 4, 3, 5, 4, 6, 4, 6, 5, 7, 6, 7, - 6, 8, 6, 8, 7, 9, 8,10, 8,12, 9,13,10,15,10,15, - 11,14, -}; - -static static_codebook _huff_book_line_512x17_3sub2 = { - 1, 50, - _huff_lengthlist_line_512x17_3sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_3sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 8, 4, 8, 4, 8, 4, 8, 5, 8, 5, 8, 6, 8, - 4, 8, 4, 8, 5, 8, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -}; - -static static_codebook _huff_book_line_512x17_3sub3 = { - 1, 128, - _huff_lengthlist_line_512x17_3sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_class1[] = { - 1, 2, 3, 6, 5, 4, 7, 7, -}; - -static static_codebook _huff_book_line_512x17_class1 = { - 1, 8, - _huff_lengthlist_line_512x17_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_class2[] = { - 3, 3, 3,14, 5, 4, 4,11, 8, 6, 6,10,17,12,11,17, - 6, 5, 5,15, 5, 3, 4,11, 8, 5, 5, 8,16, 9,10,14, - 10, 8, 9,17, 8, 6, 6,13,10, 7, 7,10,16,11,13,14, - 17,17,17,17,17,16,16,16,16,15,16,16,16,16,16,16, -}; - -static static_codebook _huff_book_line_512x17_class2 = { - 1, 64, - _huff_lengthlist_line_512x17_class2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_512x17_class3[] = { - 2, 4, 6,17, 4, 5, 7,17, 8, 7,10,17,17,17,17,17, - 3, 4, 6,15, 3, 3, 6,15, 7, 6, 9,17,17,17,17,17, - 6, 8,10,17, 6, 6, 8,16, 9, 8,10,17,17,15,16,17, - 17,17,17,17,12,15,15,16,12,15,15,16,16,16,16,16, -}; - -static static_codebook _huff_book_line_512x17_class3 = { - 1, 64, - _huff_lengthlist_line_512x17_class3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x4_class0[] = { - 7, 7, 7,11, 6, 6, 7,11, 7, 6, 6,10,12,10,10,13, - 7, 7, 8,11, 7, 7, 7,11, 7, 6, 7,10,11,10,10,13, - 10,10, 9,12, 9, 9, 9,11, 8, 8, 8,11,13,11,10,14, - 15,15,14,15,15,14,13,14,15,12,12,17,17,17,17,17, - 7, 7, 6, 9, 6, 6, 6, 9, 7, 6, 6, 8,11,11,10,12, - 7, 7, 7, 9, 7, 6, 6, 9, 7, 6, 6, 9,13,10,10,11, - 10, 9, 8,10, 9, 8, 8,10, 8, 8, 7, 9,13,12,10,11, - 17,14,14,13,15,14,12,13,17,13,12,15,17,17,14,17, - 7, 6, 6, 7, 6, 6, 5, 7, 6, 6, 6, 6,11, 9, 9, 9, - 7, 7, 6, 7, 7, 6, 6, 7, 6, 6, 6, 6,10, 9, 8, 9, - 10, 9, 8, 8, 9, 8, 7, 8, 8, 7, 6, 8,11,10, 9,10, - 17,17,12,15,15,15,12,14,14,14,10,12,15,13,12,13, - 11,10, 8,10,11,10, 8, 8,10, 9, 7, 7,10, 9, 9,11, - 11,11, 9,10,11,10, 8, 9,10, 8, 6, 8,10, 9, 9,11, - 14,13,10,12,12,11,10,10, 8, 7, 8,10,10,11,11,12, - 17,17,15,17,17,17,17,17,17,13,12,17,17,17,14,17, -}; - -static static_codebook _huff_book_line_128x4_class0 = { - 1, 256, - _huff_lengthlist_line_128x4_class0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x4_0sub0[] = { - 2, 2, 2, 2, -}; - -static static_codebook _huff_book_line_128x4_0sub0 = { - 1, 4, - _huff_lengthlist_line_128x4_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x4_0sub1[] = { - 0, 0, 0, 0, 3, 2, 3, 2, 3, 3, -}; - -static static_codebook _huff_book_line_128x4_0sub1 = { - 1, 10, - _huff_lengthlist_line_128x4_0sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x4_0sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 4, 3, 4, 3, - 4, 4, 5, 4, 5, 4, 6, 5, 6, -}; - -static static_codebook _huff_book_line_128x4_0sub2 = { - 1, 25, - _huff_lengthlist_line_128x4_0sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x4_0sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 5, 3, 5, 3, - 5, 4, 6, 5, 6, 5, 7, 6, 6, 7, 7, 9, 9,11,11,16, - 11,14,10,11,11,13,16,15,15,15,15,15,15,15,15,15, -}; - -static static_codebook _huff_book_line_128x4_0sub3 = { - 1, 64, - _huff_lengthlist_line_128x4_0sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4_class0[] = { - 6, 7, 7,12, 6, 6, 7,12, 7, 6, 6,10,15,12,11,13, - 7, 7, 8,13, 7, 7, 8,12, 7, 7, 7,11,12,12,11,13, - 10, 9, 9,11, 9, 9, 9,10,10, 8, 8,12,14,12,12,14, - 11,11,12,14,11,12,11,15,15,12,13,15,15,15,15,15, - 6, 6, 7,10, 6, 6, 6,11, 7, 6, 6, 9,14,12,11,13, - 7, 7, 7,10, 6, 6, 7, 9, 7, 7, 6,10,13,12,10,12, - 9, 9, 9,11, 9, 9, 8, 9, 9, 8, 8,10,13,12,10,12, - 12,12,11,13,12,12,11,12,15,13,12,15,15,15,14,14, - 6, 6, 6, 8, 6, 6, 5, 6, 7, 7, 6, 5,11,10, 9, 8, - 7, 6, 6, 7, 6, 6, 5, 6, 7, 7, 6, 6,11,10, 9, 8, - 8, 8, 8, 9, 8, 8, 7, 8, 8, 8, 6, 7,11,10, 9, 9, - 14,11,10,14,14,11,10,15,13,11, 9,11,15,12,12,11, - 11, 9, 8, 8,10, 9, 8, 9,11,10, 9, 8,12,11,12,11, - 13,10, 8, 9,11,10, 8, 9,10, 9, 8, 9,10, 8,12,12, - 15,11,10,10,13,11,10,10, 8, 8, 7,12,10, 9,11,12, - 15,12,11,15,13,11,11,15,12,14,11,13,15,15,13,13, -}; - -static static_codebook _huff_book_line_256x4_class0 = { - 1, 256, - _huff_lengthlist_line_256x4_class0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4_0sub0[] = { - 2, 2, 2, 2, -}; - -static static_codebook _huff_book_line_256x4_0sub0 = { - 1, 4, - _huff_lengthlist_line_256x4_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4_0sub1[] = { - 0, 0, 0, 0, 2, 2, 3, 3, 3, 3, -}; - -static static_codebook _huff_book_line_256x4_0sub1 = { - 1, 10, - _huff_lengthlist_line_256x4_0sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4_0sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 3, 4, 3, - 5, 3, 5, 4, 5, 4, 6, 4, 6, -}; - -static static_codebook _huff_book_line_256x4_0sub2 = { - 1, 25, - _huff_lengthlist_line_256x4_0sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4_0sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 5, 3, 5, 3, - 6, 4, 7, 4, 7, 5, 7, 6, 7, 6, 7, 8,10,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12, -}; - -static static_codebook _huff_book_line_256x4_0sub3 = { - 1, 64, - _huff_lengthlist_line_256x4_0sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_class0[] = { - 10, 7, 8,13, 9, 6, 7,11,10, 8, 8,12,17,17,17,17, - 7, 5, 5, 9, 6, 4, 4, 8, 8, 5, 5, 8,16,14,13,16, - 7, 5, 5, 7, 6, 3, 3, 5, 8, 5, 4, 7,14,12,12,15, - 10, 7, 8, 9, 7, 5, 5, 6, 9, 6, 5, 5,15,12, 9,10, -}; - -static static_codebook _huff_book_line_128x7_class0 = { - 1, 64, - _huff_lengthlist_line_128x7_class0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_class1[] = { - 8,13,17,17, 8,11,17,17,11,13,17,17,17,17,17,17, - 6,10,16,17, 6,10,15,17, 8,10,16,17,17,17,17,17, - 9,13,15,17, 8,11,17,17,10,12,17,17,17,17,17,17, - 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, - 6,11,15,17, 7,10,15,17, 8,10,17,17,17,15,17,17, - 4, 8,13,17, 4, 7,13,17, 6, 8,15,17,16,15,17,17, - 6,11,15,17, 6, 9,13,17, 8,10,17,17,15,17,17,17, - 16,17,17,17,12,14,15,17,13,14,15,17,17,17,17,17, - 5,10,14,17, 5, 9,14,17, 7, 9,15,17,15,15,17,17, - 3, 7,12,17, 3, 6,11,17, 5, 7,13,17,12,12,17,17, - 5, 9,14,17, 3, 7,11,17, 5, 8,13,17,13,11,16,17, - 12,17,17,17, 9,14,15,17,10,11,14,17,16,14,17,17, - 8,12,17,17, 8,12,17,17,10,12,17,17,17,17,17,17, - 5,10,17,17, 5, 9,15,17, 7, 9,17,17,13,13,17,17, - 7,11,17,17, 6,10,15,17, 7, 9,15,17,12,11,17,17, - 12,15,17,17,11,14,17,17,11,10,15,17,17,16,17,17, -}; - -static static_codebook _huff_book_line_128x7_class1 = { - 1, 256, - _huff_lengthlist_line_128x7_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_0sub1[] = { - 0, 3, 3, 3, 3, 3, 3, 3, 3, -}; - -static static_codebook _huff_book_line_128x7_0sub1 = { - 1, 9, - _huff_lengthlist_line_128x7_0sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_0sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 4, 4, 4, - 5, 4, 5, 4, 5, 4, 6, 4, 6, -}; - -static static_codebook _huff_book_line_128x7_0sub2 = { - 1, 25, - _huff_lengthlist_line_128x7_0sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_0sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 3, 5, 3, 5, 4, - 5, 4, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 7, 8, 9,11,13,13,13,13,13,13,13,13,13,13,13,13, -}; - -static static_codebook _huff_book_line_128x7_0sub3 = { - 1, 64, - _huff_lengthlist_line_128x7_0sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_1sub1[] = { - 0, 3, 3, 2, 3, 3, 4, 3, 4, -}; - -static static_codebook _huff_book_line_128x7_1sub1 = { - 1, 9, - _huff_lengthlist_line_128x7_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_1sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 6, 3, 6, 3, - 6, 3, 7, 3, 8, 4, 9, 4, 9, -}; - -static static_codebook _huff_book_line_128x7_1sub2 = { - 1, 25, - _huff_lengthlist_line_128x7_1sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x7_1sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 2, 7, 3, 8, 4, - 9, 5, 9, 8,10,11,11,12,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,13,13,13,13, -}; - -static static_codebook _huff_book_line_128x7_1sub3 = { - 1, 64, - _huff_lengthlist_line_128x7_1sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_class1[] = { - 1, 6, 3, 7, 2, 4, 5, 7, -}; - -static static_codebook _huff_book_line_128x11_class1 = { - 1, 8, - _huff_lengthlist_line_128x11_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_class2[] = { - 1, 6,12,16, 4,12,15,16, 9,15,16,16,16,16,16,16, - 2, 5,11,16, 5,11,13,16, 9,13,16,16,16,16,16,16, - 4, 8,12,16, 5, 9,12,16, 9,13,15,16,16,16,16,16, - 15,16,16,16,11,14,13,16,12,15,16,16,16,16,16,15, -}; - -static static_codebook _huff_book_line_128x11_class2 = { - 1, 64, - _huff_lengthlist_line_128x11_class2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_class3[] = { - 7, 6, 9,17, 7, 6, 8,17,12, 9,11,16,16,16,16,16, - 5, 4, 7,16, 5, 3, 6,14, 9, 6, 8,15,16,16,16,16, - 5, 4, 6,13, 3, 2, 4,11, 7, 4, 6,13,16,11,10,14, - 12,12,12,16, 9, 7,10,15,12, 9,11,16,16,15,15,16, -}; - -static static_codebook _huff_book_line_128x11_class3 = { - 1, 64, - _huff_lengthlist_line_128x11_class3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_0sub0[] = { - 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 6, 6, 7, 6, - 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6, 8, 7, - 8, 7, 8, 7, 8, 7, 9, 7, 9, 8, 9, 8, 9, 8,10, 8, - 10, 9,10, 9,10, 9,11, 9,11, 9,10,10,11,10,11,10, - 11,11,11,11,11,11,12,13,14,14,14,15,15,16,16,16, - 17,15,16,15,16,16,17,17,16,17,17,17,17,17,17,17, - 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, -}; - -static static_codebook _huff_book_line_128x11_0sub0 = { - 1, 128, - _huff_lengthlist_line_128x11_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_1sub0[] = { - 2, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 5, 6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6, -}; - -static static_codebook _huff_book_line_128x11_1sub0 = { - 1, 32, - _huff_lengthlist_line_128x11_1sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_1sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 3, 5, 3, 6, 4, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4, - 8, 4, 9, 5, 9, 5, 9, 5, 9, 6,10, 6,10, 6,11, 7, - 10, 7,10, 8,11, 9,11, 9,11,10,11,11,12,11,11,12, - 15,15,12,14,11,14,12,14,11,14,13,14,12,14,11,14, - 11,14,12,14,11,14,11,14,13,13,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, -}; - -static static_codebook _huff_book_line_128x11_1sub1 = { - 1, 128, - _huff_lengthlist_line_128x11_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_2sub1[] = { - 0, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, - 5, 5, -}; - -static static_codebook _huff_book_line_128x11_2sub1 = { - 1, 18, - _huff_lengthlist_line_128x11_2sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_2sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 3, 3, 4, 4, 4, 4, 5, 4, 5, 4, 6, 5, 7, - 5, 7, 6, 8, 6, 8, 6, 9, 7, 9, 7,10, 7, 9, 8,11, - 8,11, -}; - -static static_codebook _huff_book_line_128x11_2sub2 = { - 1, 50, - _huff_lengthlist_line_128x11_2sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_2sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 8, 3, 8, 4, 8, 4, 8, 6, 8, 5, 8, 4, 8, - 4, 8, 6, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -}; - -static static_codebook _huff_book_line_128x11_2sub3 = { - 1, 128, - _huff_lengthlist_line_128x11_2sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_3sub1[] = { - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, - 5, 4, -}; - -static static_codebook _huff_book_line_128x11_3sub1 = { - 1, 18, - _huff_lengthlist_line_128x11_3sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_3sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 3, 5, 4, 6, 4, 6, 4, 7, 4, 7, 4, 8, 4, - 8, 4, 9, 4, 9, 4,10, 4,10, 5,10, 5,11, 5,12, 6, - 12, 6, -}; - -static static_codebook _huff_book_line_128x11_3sub2 = { - 1, 50, - _huff_lengthlist_line_128x11_3sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x11_3sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 1, 6, 3, 7, 3, 8, 4, 8, 5, 8, 8, 8, 9, - 7, 8, 8, 7, 7, 7, 8, 9,10, 9, 9,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, -}; - -static static_codebook _huff_book_line_128x11_3sub3 = { - 1, 128, - _huff_lengthlist_line_128x11_3sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_class1[] = { - 1, 3, 4, 7, 2, 5, 6, 7, -}; - -static static_codebook _huff_book_line_128x17_class1 = { - 1, 8, - _huff_lengthlist_line_128x17_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_class2[] = { - 1, 4,10,19, 3, 8,13,19, 7,12,19,19,19,19,19,19, - 2, 6,11,19, 8,13,19,19, 9,11,19,19,19,19,19,19, - 6, 7,13,19, 9,13,19,19,10,13,18,18,18,18,18,18, - 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, -}; - -static static_codebook _huff_book_line_128x17_class2 = { - 1, 64, - _huff_lengthlist_line_128x17_class2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_class3[] = { - 3, 6,10,17, 4, 8,11,20, 8,10,11,20,20,20,20,20, - 2, 4, 8,18, 4, 6, 8,17, 7, 8,10,20,20,17,20,20, - 3, 5, 8,17, 3, 4, 6,17, 8, 8,10,17,17,12,16,20, - 13,13,15,20,10,10,12,20,15,14,15,20,20,20,19,19, -}; - -static static_codebook _huff_book_line_128x17_class3 = { - 1, 64, - _huff_lengthlist_line_128x17_class3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_0sub0[] = { - 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 7, 5, 7, 5, 7, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 5, - 8, 5, 8, 5, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, 9, 6, - 9, 6, 9, 7, 9, 7, 9, 7, 9, 7,10, 7,10, 8,10, 8, - 10, 8,10, 8,10, 8,11, 8,11, 8,11, 8,11, 8,11, 9, - 12, 9,12, 9,12, 9,12, 9,12,10,12,10,13,11,13,11, - 14,12,14,13,15,14,16,14,17,15,18,16,20,20,20,20, - 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -}; - -static static_codebook _huff_book_line_128x17_0sub0 = { - 1, 128, - _huff_lengthlist_line_128x17_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_1sub0[] = { - 2, 5, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5, - 6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 9, 7, 9, 7, -}; - -static static_codebook _huff_book_line_128x17_1sub0 = { - 1, 32, - _huff_lengthlist_line_128x17_1sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_1sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 3, 5, 3, 5, 3, 6, 3, 6, 4, 6, 4, 7, 4, 7, 5, - 8, 5, 8, 6, 9, 7, 9, 7, 9, 8,10, 9,10, 9,11,10, - 11,11,11,11,11,11,12,12,12,13,12,13,12,14,12,15, - 12,14,12,16,13,17,13,17,14,17,14,16,13,17,14,17, - 14,17,15,17,15,15,16,17,17,17,17,17,17,17,17,17, - 17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,16, -}; - -static static_codebook _huff_book_line_128x17_1sub1 = { - 1, 128, - _huff_lengthlist_line_128x17_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_2sub1[] = { - 0, 4, 5, 4, 6, 4, 8, 3, 9, 3, 9, 2, 9, 3, 8, 4, - 9, 4, -}; - -static static_codebook _huff_book_line_128x17_2sub1 = { - 1, 18, - _huff_lengthlist_line_128x17_2sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_2sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 1, 5, 3, 5, 3, 5, 4, 7, 5,10, 7,10, 7, - 12,10,14,10,14, 9,14,11,14,14,14,13,13,13,13,13, - 13,13, -}; - -static static_codebook _huff_book_line_128x17_2sub2 = { - 1, 50, - _huff_lengthlist_line_128x17_2sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_2sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -}; - -static static_codebook _huff_book_line_128x17_2sub3 = { - 1, 128, - _huff_lengthlist_line_128x17_2sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_3sub1[] = { - 0, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3, 5, 4, 6, 4, - 6, 4, -}; - -static static_codebook _huff_book_line_128x17_3sub1 = { - 1, 18, - _huff_lengthlist_line_128x17_3sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_3sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 3, 6, 3, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4, - 8, 4, 8, 4, 8, 4, 9, 4, 9, 5,10, 5,10, 7,10, 8, - 10, 8, -}; - -static static_codebook _huff_book_line_128x17_3sub2 = { - 1, 50, - _huff_lengthlist_line_128x17_3sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_128x17_3sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 2, 4, 3, 4, 4, 4, 5, 4, 7, 5, 8, 5,11, - 6,10, 6,12, 7,12, 7,12, 8,12, 8,12,10,12,12,12, - 12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, -}; - -static static_codebook _huff_book_line_128x17_3sub3 = { - 1, 128, - _huff_lengthlist_line_128x17_3sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_class1[] = { - 2,10, 8,14, 7,12,11,14, 1, 5, 3, 7, 4, 9, 7,13, -}; - -static static_codebook _huff_book_line_1024x27_class1 = { - 1, 16, - _huff_lengthlist_line_1024x27_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_class2[] = { - 1, 4, 2, 6, 3, 7, 5, 7, -}; - -static static_codebook _huff_book_line_1024x27_class2 = { - 1, 8, - _huff_lengthlist_line_1024x27_class2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_class3[] = { - 1, 5, 7,21, 5, 8, 9,21,10, 9,12,20,20,16,20,20, - 4, 8, 9,20, 6, 8, 9,20,11,11,13,20,20,15,17,20, - 9,11,14,20, 8,10,15,20,11,13,15,20,20,20,20,20, - 20,20,20,20,13,20,20,20,18,18,20,20,20,20,20,20, - 3, 6, 8,20, 6, 7, 9,20,10, 9,12,20,20,20,20,20, - 5, 7, 9,20, 6, 6, 9,20,10, 9,12,20,20,20,20,20, - 8,10,13,20, 8, 9,12,20,11,10,12,20,20,20,20,20, - 18,20,20,20,15,17,18,20,18,17,18,20,20,20,20,20, - 7,10,12,20, 8, 9,11,20,14,13,14,20,20,20,20,20, - 6, 9,12,20, 7, 8,11,20,12,11,13,20,20,20,20,20, - 9,11,15,20, 8,10,14,20,12,11,14,20,20,20,20,20, - 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, - 11,16,18,20,15,15,17,20,20,17,20,20,20,20,20,20, - 9,14,16,20,12,12,15,20,17,15,18,20,20,20,20,20, - 16,19,18,20,15,16,20,20,17,17,20,20,20,20,20,20, - 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, -}; - -static static_codebook _huff_book_line_1024x27_class3 = { - 1, 256, - _huff_lengthlist_line_1024x27_class3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_class4[] = { - 2, 3, 7,13, 4, 4, 7,15, 8, 6, 9,17,21,16,15,21, - 2, 5, 7,11, 5, 5, 7,14, 9, 7,10,16,17,15,16,21, - 4, 7,10,17, 7, 7, 9,15,11, 9,11,16,21,18,15,21, - 18,21,21,21,15,17,17,19,21,19,18,20,21,21,21,20, -}; - -static static_codebook _huff_book_line_1024x27_class4 = { - 1, 64, - _huff_lengthlist_line_1024x27_class4, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_0sub0[] = { - 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5, 7, 5, - 8, 6, 8, 6, 8, 6, 9, 6, 9, 6,10, 6,10, 6,11, 6, - 11, 7,11, 7,12, 7,12, 7,12, 7,12, 7,12, 7,12, 7, - 12, 7,12, 8,13, 8,12, 8,12, 8,13, 8,13, 9,13, 9, - 13, 9,13, 9,12,10,12,10,13,10,14,11,14,12,14,13, - 14,13,14,14,15,16,15,15,15,14,15,17,21,22,22,21, - 22,22,22,22,22,22,21,21,21,21,21,21,21,21,21,21, -}; - -static static_codebook _huff_book_line_1024x27_0sub0 = { - 1, 128, - _huff_lengthlist_line_1024x27_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_1sub0[] = { - 2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 5, 6, 5, 6, 5, - 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, -}; - -static static_codebook _huff_book_line_1024x27_1sub0 = { - 1, 32, - _huff_lengthlist_line_1024x27_1sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_1sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 5, 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, - 9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 9, 5, 9, 5, 9, 5, - 9, 5, 9, 6,10, 6,10, 7,10, 8,11, 9,11,11,12,13, - 12,14,13,15,13,15,14,16,14,17,15,17,15,15,16,16, - 15,16,16,16,15,18,16,15,17,17,19,19,19,19,19,19, - 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, -}; - -static static_codebook _huff_book_line_1024x27_1sub1 = { - 1, 128, - _huff_lengthlist_line_1024x27_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_2sub0[] = { - 1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 9, 8,10, 9,10, 9, -}; - -static static_codebook _huff_book_line_1024x27_2sub0 = { - 1, 32, - _huff_lengthlist_line_1024x27_2sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_2sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 5, 6, 5, 6, 5, - 7, 5, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 9, 8, 9, 9, - 9, 9,10,10,10,11, 9,12, 9,12, 9,15,10,14, 9,13, - 10,13,10,12,10,12,10,13,10,12,11,13,11,14,12,13, - 13,14,14,13,14,15,14,16,13,13,14,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,15, -}; - -static static_codebook _huff_book_line_1024x27_2sub1 = { - 1, 128, - _huff_lengthlist_line_1024x27_2sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_3sub1[] = { - 0, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 4, 5, - 5, 5, -}; - -static static_codebook _huff_book_line_1024x27_3sub1 = { - 1, 18, - _huff_lengthlist_line_1024x27_3sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_3sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, - 5, 7, 5, 8, 6, 8, 6, 9, 7,10, 7,10, 8,10, 8,11, - 9,11, -}; - -static static_codebook _huff_book_line_1024x27_3sub2 = { - 1, 50, - _huff_lengthlist_line_1024x27_3sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_3sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 7, 3, 8, 3,10, 3, 8, 3, 9, 3, 8, 4, 9, - 4, 9, 5, 9, 6,10, 6, 9, 7,11, 7,12, 9,13,10,13, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, -}; - -static static_codebook _huff_book_line_1024x27_3sub3 = { - 1, 128, - _huff_lengthlist_line_1024x27_3sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_4sub1[] = { - 0, 4, 5, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, - 5, 4, -}; - -static static_codebook _huff_book_line_1024x27_4sub1 = { - 1, 18, - _huff_lengthlist_line_1024x27_4sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_4sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 7, 7, 8, - 7, 8, 7, 8, 7, 9, 8, 9, 8, 9, 8,10, 8,11, 9,12, - 9,12, -}; - -static static_codebook _huff_book_line_1024x27_4sub2 = { - 1, 50, - _huff_lengthlist_line_1024x27_4sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_1024x27_4sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2, 5, 2, 6, 3, 6, 4, 7, 4, 7, 5, 9, 5,11, - 6,11, 6,11, 7,11, 6,11, 6,11, 9,11, 8,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10, -}; - -static static_codebook _huff_book_line_1024x27_4sub3 = { - 1, 128, - _huff_lengthlist_line_1024x27_4sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_class1[] = { - 2, 6, 8, 9, 7,11,13,13, 1, 3, 5, 5, 6, 6,12,10, -}; - -static static_codebook _huff_book_line_2048x27_class1 = { - 1, 16, - _huff_lengthlist_line_2048x27_class1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_class2[] = { - 1, 2, 3, 6, 4, 7, 5, 7, -}; - -static static_codebook _huff_book_line_2048x27_class2 = { - 1, 8, - _huff_lengthlist_line_2048x27_class2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_class3[] = { - 3, 3, 6,16, 5, 5, 7,16, 9, 8,11,16,16,16,16,16, - 5, 5, 8,16, 5, 5, 7,16, 8, 7, 9,16,16,16,16,16, - 9, 9,12,16, 6, 8,11,16, 9,10,11,16,16,16,16,16, - 16,16,16,16,13,16,16,16,15,16,16,16,16,16,16,16, - 5, 4, 7,16, 6, 5, 8,16, 9, 8,10,16,16,16,16,16, - 5, 5, 7,15, 5, 4, 6,15, 7, 6, 8,16,16,16,16,16, - 9, 9,11,15, 7, 7, 9,16, 8, 8, 9,16,16,16,16,16, - 16,16,16,16,15,15,15,16,15,15,14,16,16,16,16,16, - 8, 8,11,16, 8, 9,10,16,11,10,14,16,16,16,16,16, - 6, 8,10,16, 6, 7,10,16, 8, 8,11,16,14,16,16,16, - 10,11,14,16, 9, 9,11,16,10,10,11,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 16,16,16,16,15,16,16,16,16,16,16,16,16,16,16,16, - 12,16,15,16,12,14,16,16,16,16,16,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, - 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, -}; - -static static_codebook _huff_book_line_2048x27_class3 = { - 1, 256, - _huff_lengthlist_line_2048x27_class3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_class4[] = { - 2, 4, 7,13, 4, 5, 7,15, 8, 7,10,16,16,14,16,16, - 2, 4, 7,16, 3, 4, 7,14, 8, 8,10,16,16,16,15,16, - 6, 8,11,16, 7, 7, 9,16,11, 9,13,16,16,16,15,16, - 16,16,16,16,14,16,16,16,16,16,16,16,16,16,16,16, -}; - -static static_codebook _huff_book_line_2048x27_class4 = { - 1, 64, - _huff_lengthlist_line_2048x27_class4, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_0sub0[] = { - 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, - 6, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 5, 8, 5, 9, 5, - 9, 6,10, 6,10, 6,11, 6,11, 6,11, 6,11, 6,11, 6, - 11, 6,11, 6,12, 7,11, 7,11, 7,11, 7,11, 7,10, 7, - 11, 7,11, 7,12, 7,11, 8,11, 8,11, 8,11, 8,13, 8, - 12, 9,11, 9,11, 9,11,10,12,10,12, 9,12,10,12,11, - 14,12,16,12,12,11,14,16,17,17,17,17,17,17,17,17, - 17,17,17,17,17,17,17,17,17,17,17,17,16,16,16,16, -}; - -static static_codebook _huff_book_line_2048x27_0sub0 = { - 1, 128, - _huff_lengthlist_line_2048x27_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_1sub0[] = { - 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 6, 6, 6, 6, 6, 6, 7, 6, 7, 6, 7, 6, 7, 6, -}; - -static static_codebook _huff_book_line_2048x27_1sub0 = { - 1, 32, - _huff_lengthlist_line_2048x27_1sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_1sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 5, 7, 5, 7, 4, 7, 4, 8, 4, 8, 4, 8, 4, 8, 3, - 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 5, 9, 5, 9, 6, - 9, 7, 9, 8, 9, 9, 9,10, 9,11, 9,14, 9,15,10,15, - 10,15,10,15,10,15,11,15,10,14,12,14,11,14,13,14, - 13,15,15,15,12,15,15,15,13,15,13,15,13,15,15,15, - 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,14, -}; - -static static_codebook _huff_book_line_2048x27_1sub1 = { - 1, 128, - _huff_lengthlist_line_2048x27_1sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_2sub0[] = { - 2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5, - 6, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, -}; - -static static_codebook _huff_book_line_2048x27_2sub0 = { - 1, 32, - _huff_lengthlist_line_2048x27_2sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_2sub1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 4, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 6, 6, 6, 7, - 6, 8, 6, 8, 6, 9, 7,10, 7,10, 7,10, 7,12, 7,12, - 7,12, 9,12,11,12,10,12,10,12,11,12,12,12,10,12, - 10,12,10,12, 9,12,11,12,12,12,12,12,11,12,11,12, - 12,12,12,12,12,12,12,12,10,10,12,12,12,12,12,10, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, -}; - -static static_codebook _huff_book_line_2048x27_2sub1 = { - 1, 128, - _huff_lengthlist_line_2048x27_2sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_3sub1[] = { - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, -}; - -static static_codebook _huff_book_line_2048x27_3sub1 = { - 1, 18, - _huff_lengthlist_line_2048x27_3sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_3sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, - 6, 7, 6, 7, 6, 8, 6, 9, 7, 9, 7, 9, 9,11, 9,12, - 10,12, -}; - -static static_codebook _huff_book_line_2048x27_3sub2 = { - 1, 50, - _huff_lengthlist_line_2048x27_3sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_3sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 6, 3, 7, 3, 7, 5, 7, 7, 7, 7, 7, 6, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -}; - -static static_codebook _huff_book_line_2048x27_3sub3 = { - 1, 128, - _huff_lengthlist_line_2048x27_3sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_4sub1[] = { - 0, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, - 4, 5, -}; - -static static_codebook _huff_book_line_2048x27_4sub1 = { - 1, 18, - _huff_lengthlist_line_2048x27_4sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_4sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 2, 4, 3, 4, 4, 4, 5, 5, 6, 5, 6, 5, 7, - 6, 6, 6, 7, 7, 7, 8, 9, 9, 9,12,10,11,10,10,12, - 10,10, -}; - -static static_codebook _huff_book_line_2048x27_4sub2 = { - 1, 50, - _huff_lengthlist_line_2048x27_4sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_2048x27_4sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3, 6, 5, 7, 5, 7, 7, 7, 7, 7, 5, 7, 5, 7, - 5, 7, 5, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, -}; - -static static_codebook _huff_book_line_2048x27_4sub3 = { - 1, 128, - _huff_lengthlist_line_2048x27_4sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4low_class0[] = { - 4, 5, 6,11, 5, 5, 6,10, 7, 7, 6, 6,14,13, 9, 9, - 6, 6, 6,10, 6, 6, 6, 9, 8, 7, 7, 9,14,12, 8,11, - 8, 7, 7,11, 8, 8, 7,11, 9, 9, 7, 9,13,11, 9,13, - 19,19,18,19,15,16,16,19,11,11,10,13,10,10, 9,15, - 5, 5, 6,13, 6, 6, 6,11, 8, 7, 6, 7,14,11,10,11, - 6, 6, 6,12, 7, 6, 6,11, 8, 7, 7,11,13,11, 9,11, - 9, 7, 6,12, 8, 7, 6,12, 9, 8, 8,11,13,10, 7,13, - 19,19,17,19,17,14,14,19,12,10, 8,12,13,10, 9,16, - 7, 8, 7,12, 7, 7, 7,11, 8, 7, 7, 8,12,12,11,11, - 8, 8, 7,12, 8, 7, 6,11, 8, 7, 7,10,10,11,10,11, - 9, 8, 8,13, 9, 8, 7,12,10, 9, 7,11, 9, 8, 7,11, - 18,18,15,18,18,16,17,18,15,11,10,18,11, 9, 9,18, - 16,16,13,16,12,11,10,16,12,11, 9, 6,15,12,11,13, - 16,16,14,14,13,11,12,16,12, 9, 9,13,13,10,10,12, - 17,18,17,17,14,15,14,16,14,12,14,15,12,10,11,12, - 18,18,18,18,18,18,18,18,18,12,13,18,16,11, 9,18, -}; - -static static_codebook _huff_book_line_256x4low_class0 = { - 1, 256, - _huff_lengthlist_line_256x4low_class0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4low_0sub0[] = { - 1, 3, 2, 3, -}; - -static static_codebook _huff_book_line_256x4low_0sub0 = { - 1, 4, - _huff_lengthlist_line_256x4low_0sub0, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4low_0sub1[] = { - 0, 0, 0, 0, 2, 3, 2, 3, 3, 3, -}; - -static static_codebook _huff_book_line_256x4low_0sub1 = { - 1, 10, - _huff_lengthlist_line_256x4low_0sub1, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4low_0sub2[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 3, 4, - 4, 4, 4, 4, 5, 5, 5, 6, 6, -}; - -static static_codebook _huff_book_line_256x4low_0sub2 = { - 1, 25, - _huff_lengthlist_line_256x4low_0sub2, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist_line_256x4low_0sub3[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 2, 4, 3, 5, 4, - 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 6, 9, - 7,12,11,16,13,16,12,15,13,15,12,14,12,15,15,15, -}; - -static static_codebook _huff_book_line_256x4low_0sub3 = { - 1, 64, - _huff_lengthlist_line_256x4low_0sub3, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/uncoupled/res_books_uncoupled.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/uncoupled/res_books_uncoupled.h deleted file mode 100644 index df521774d5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/books/uncoupled/res_books_uncoupled.h +++ /dev/null @@ -1,11516 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: static codebooks autogenerated by huff/huffbuld - last modified: $Id: res_books_uncoupled.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "../../codebook.h" -static long _vq_quantlist__16u0__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u0__p1_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 8, 5, 8, 8, 8,10,10, 8, - 10,11, 5, 8, 8, 8,10,10, 8,10,10, 4, 9, 9, 9,12, - 11, 8,11,11, 8,12,11,10,12,14,10,13,13, 7,11,11, - 10,14,12,11,14,14, 4, 9, 9, 8,11,11, 9,11,12, 7, - 11,11,10,13,14,10,12,14, 8,11,12,10,14,14,10,13, - 12, -}; - -static float _vq_quantthresh__16u0__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16u0__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p1_0 = { - _vq_quantthresh__16u0__p1_0, - _vq_quantmap__16u0__p1_0, - 3, - 3 -}; - -static static_codebook _16u0__p1_0 = { - 4, 81, - _vq_lengthlist__16u0__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16u0__p1_0, - NULL, - &_vq_auxt__16u0__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u0__p2_0[] = { - 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 9, 7, - 8, 9, 5, 7, 7, 7, 9, 8, 7, 9, 7, 4, 7, 7, 7, 9, - 9, 7, 8, 8, 6, 9, 8, 7, 8,11, 9,11,10, 6, 8, 9, - 8,11, 8, 9,10,11, 4, 7, 7, 7, 8, 8, 7, 9, 9, 6, - 9, 8, 9,11,10, 8, 8,11, 6, 8, 9, 9,10,11, 8,11, - 8, -}; - -static float _vq_quantthresh__16u0__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16u0__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p2_0 = { - _vq_quantthresh__16u0__p2_0, - _vq_quantmap__16u0__p2_0, - 3, - 3 -}; - -static static_codebook _16u0__p2_0 = { - 4, 81, - _vq_lengthlist__16u0__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16u0__p2_0, - NULL, - &_vq_auxt__16u0__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u0__p3_0[] = { - 1, 5, 5, 7, 7, 6, 7, 7, 8, 8, 6, 7, 8, 8, 8, 8, - 9, 9,11,11, 8, 9, 9,11,11, 6, 9, 8,10,10, 8,10, - 10,11,11, 8,10,10,11,11,10,11,10,13,12, 9,11,10, - 13,13, 6, 8, 9,10,10, 8,10,10,11,11, 8,10,10,11, - 11, 9,10,11,13,12,10,10,11,12,12, 8,11,11,14,13, - 10,12,11,15,13, 9,12,11,15,14,12,14,13,16,14,12, - 13,13,17,14, 8,11,11,13,14, 9,11,12,14,15,10,11, - 12,13,15,11,13,13,14,16,12,13,14,14,16, 5, 9, 9, - 11,11, 9,11,11,12,12, 8,11,11,12,12,11,12,12,15, - 14,10,12,12,15,15, 8,11,11,13,12,10,12,12,13,13, - 10,12,12,14,13,12,12,13,14,15,11,13,13,17,16, 7, - 11,11,13,13,10,12,12,14,13,10,12,12,13,14,12,13, - 12,15,14,11,13,13,15,14, 9,12,12,16,15,11,13,13, - 17,16,10,13,13,16,16,13,14,15,15,16,13,15,14,19, - 17, 9,12,12,14,16,11,13,13,15,16,10,13,13,17,16, - 13,14,13,17,15,12,15,15,16,17, 5, 9, 9,11,11, 8, - 11,11,13,12, 9,11,11,12,12,10,12,12,14,15,11,12, - 12,14,14, 7,11,10,13,12,10,12,12,14,13,10,11,12, - 13,13,11,13,13,15,16,12,12,13,15,15, 7,11,11,13, - 13,10,13,13,14,14,10,12,12,13,13,11,13,13,16,15, - 12,13,13,15,14, 9,12,12,15,15,10,13,13,17,16,11, - 12,13,15,15,12,15,14,18,18,13,14,14,16,17, 9,12, - 12,15,16,10,13,13,15,16,11,13,13,15,16,13,15,15, - 17,17,13,15,14,16,15, 7,11,11,15,16,10,13,12,16, - 17,10,12,13,15,17,15,16,16,18,17,13,15,15,17,18, - 8,12,12,16,16,11,13,14,17,18,11,13,13,18,16,15, - 17,16,17,19,14,15,15,17,16, 8,12,12,16,15,11,14, - 13,18,17,11,13,14,18,17,15,16,16,18,17,13,16,16, - 18,18,11,15,14,18,17,13,14,15,18, 0,12,15,15, 0, - 17,17,16,17,17,18,14,16,18,18, 0,11,14,14,17, 0, - 12,15,14,17,19,12,15,14,18, 0,15,18,16, 0,17,14, - 18,16,18, 0, 7,11,11,16,15,10,12,12,18,16,10,13, - 13,16,15,13,15,14,17,17,14,16,16,19,18, 8,12,12, - 16,16,11,13,13,18,16,11,13,14,17,16,14,15,15,19, - 18,15,16,16, 0,19, 8,12,12,16,17,11,13,13,17,17, - 11,14,13,17,17,13,15,15,17,19,15,17,17,19, 0,11, - 14,15,19,17,12,15,16,18,18,12,14,15,19,17,14,16, - 17, 0,18,16,16,19,17, 0,11,14,14,18,19,12,15,14, - 17,17,13,16,14,17,16,14,17,16,18,18,15,18,15, 0, - 18, -}; - -static float _vq_quantthresh__16u0__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u0__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p3_0 = { - _vq_quantthresh__16u0__p3_0, - _vq_quantmap__16u0__p3_0, - 5, - 5 -}; - -static static_codebook _16u0__p3_0 = { - 4, 625, - _vq_lengthlist__16u0__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u0__p3_0, - NULL, - &_vq_auxt__16u0__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u0__p4_0[] = { - 3, 5, 5, 8, 8, 6, 6, 6, 9, 9, 6, 6, 6, 9, 9, 9, - 10, 9,11,11, 9, 9, 9,11,11, 6, 7, 7,10,10, 7, 7, - 8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10, - 11,12, 6, 7, 7,10,10, 7, 8, 7,10,10, 7, 8, 7,10, - 10,10,11,10,12,11,10,10,10,13,10, 9,10,10,12,12, - 10,11,10,14,12, 9,11,11,13,13,11,12,13,13,13,11, - 12,12,15,13, 9,10,10,12,13, 9,11,10,12,13,10,10, - 11,12,13,11,12,12,12,13,11,12,12,13,13, 5, 7, 7, - 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,12, - 13,10,10,11,12,12, 6, 8, 8,11,10, 7, 8, 9,10,12, - 8, 9, 9,11,11,11,10,11,11,12,10,11,11,13,12, 7, - 8, 8,10,11, 8, 9, 8,11,10, 8, 9, 9,11,11,10,12, - 10,13,11,10,11,11,13,13,10,11,10,14,13,10,10,11, - 13,13,10,12,11,14,13,12,11,13,12,13,13,12,13,14, - 14,10,11,11,13,13,10,11,10,12,13,10,12,12,12,14, - 12,12,12,14,12,12,13,12,17,15, 5, 7, 7,10,10, 7, - 8, 8,10,10, 7, 8, 8,11,10,10,10,11,12,12,10,11, - 11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,11,11,11,12,12,10,10,11,12,13, 6, 8, 8,10, - 11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,12,12,13,13, - 11,11,10,13,11, 9,11,10,14,13,11,11,11,15,13,10, - 10,11,13,13,12,13,13,14,14,12,11,12,12,13,10,11, - 11,12,13,10,11,12,13,13,10,11,10,13,12,12,12,13, - 14, 0,12,13,11,13,11, 8,10,10,13,13,10,11,11,14, - 13,10,11,11,13,12,13,14,14,14,15,12,12,12,15,14, - 9,11,10,13,12,10,10,11,13,14,11,11,11,15,12,13, - 12,14,15,16,13,13,13,14,13, 9,11,11,12,12,10,12, - 11,13,13,10,11,11,13,14,13,13,13,15,15,13,13,14, - 17,15,11,12,12,14,14,10,11,12,13,15,12,13,13, 0, - 15,13,11,14,12,16,14,16,14, 0,15,11,12,12,14,16, - 11,13,12,16,15,12,13,13,14,15,12,14,12,15,13,15, - 14,14,16,16, 8,10,10,13,13,10,11,10,13,14,10,11, - 11,13,13,13,13,12,14,14,14,13,13,16,17, 9,10,10, - 12,14,10,12,11,14,13,10,11,12,13,14,12,12,12,15, - 15,13,13,13,14,14, 9,10,10,13,13,10,11,12,12,14, - 10,11,10,13,13,13,13,13,14,16,13,13,13,14,14,11, - 12,13,15,13,12,14,13,14,16,12,12,13,13,14,13,14, - 14,17,15,13,12,17,13,16,11,12,13,14,15,12,13,14, - 14,17,11,12,11,14,14,13,16,14,16, 0,14,15,11,15, - 11, -}; - -static float _vq_quantthresh__16u0__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u0__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p4_0 = { - _vq_quantthresh__16u0__p4_0, - _vq_quantmap__16u0__p4_0, - 5, - 5 -}; - -static static_codebook _16u0__p4_0 = { - 4, 625, - _vq_lengthlist__16u0__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u0__p4_0, - NULL, - &_vq_auxt__16u0__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16u0__p5_0[] = { - 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8, - 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9, - 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 7, 8, 8, - 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9, - 9, 9,10,10,11,11,12,12, 9, 9, 9,10,10,11,11,12, - 12, -}; - -static float _vq_quantthresh__16u0__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16u0__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p5_0 = { - _vq_quantthresh__16u0__p5_0, - _vq_quantmap__16u0__p5_0, - 9, - 9 -}; - -static static_codebook _16u0__p5_0 = { - 2, 81, - _vq_lengthlist__16u0__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16u0__p5_0, - NULL, - &_vq_auxt__16u0__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16u0__p6_0[] = { - 1, 4, 4, 7, 7,10,10,12,12,13,13,18,17, 3, 6, 6, - 9, 9,11,11,13,13,14,14,18,17, 3, 6, 6, 9, 9,11, - 11,13,13,14,14,17,18, 7, 9, 9,11,11,13,13,14,14, - 15,15, 0, 0, 7, 9, 9,11,11,13,13,14,14,15,16,19, - 18,10,11,11,13,13,14,14,16,15,17,18, 0, 0,10,11, - 11,13,13,14,14,15,15,16,18, 0, 0,11,13,13,14,14, - 15,15,17,17, 0,19, 0, 0,11,13,13,14,14,14,15,16, - 18, 0,19, 0, 0,13,14,14,15,15,18,17,18,18, 0,19, - 0, 0,13,14,14,15,16,16,16,18,18,19, 0, 0, 0,16, - 17,17, 0,17,19,19, 0,19, 0, 0, 0, 0,16,19,16,17, - 18, 0,19, 0, 0, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__16u0__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__16u0__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p6_0 = { - _vq_quantthresh__16u0__p6_0, - _vq_quantmap__16u0__p6_0, - 13, - 13 -}; - -static static_codebook _16u0__p6_0 = { - 2, 169, - _vq_lengthlist__16u0__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__16u0__p6_0, - NULL, - &_vq_auxt__16u0__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u0__p6_1[] = { - 1, 4, 5, 6, 6, 4, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6, - 6, 6, 7, 7, 6, 6, 6, 7, 7, -}; - -static float _vq_quantthresh__16u0__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u0__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p6_1 = { - _vq_quantthresh__16u0__p6_1, - _vq_quantmap__16u0__p6_1, - 5, - 5 -}; - -static static_codebook _16u0__p6_1 = { - 2, 25, - _vq_lengthlist__16u0__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u0__p6_1, - NULL, - &_vq_auxt__16u0__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u0__p7_0[] = { - 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__16u0__p7_0[] = { - -157.5, 157.5, -}; - -static long _vq_quantmap__16u0__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p7_0 = { - _vq_quantthresh__16u0__p7_0, - _vq_quantmap__16u0__p7_0, - 3, - 3 -}; - -static static_codebook _16u0__p7_0 = { - 4, 81, - _vq_lengthlist__16u0__p7_0, - 1, -518803456, 1628680192, 2, 0, - _vq_quantlist__16u0__p7_0, - NULL, - &_vq_auxt__16u0__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p7_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16u0__p7_1[] = { - 1, 5, 5, 6, 5, 9,10,11,11,10,10,10,10,10,10, 5, - 8, 8, 8,10,10,10,10,10,10,10,10,10,10,10, 5, 8, - 9, 9, 9,10,10,10,10,10,10,10,10,10,10, 5,10, 8, - 10,10,10,10,10,10,10,10,10,10,10,10, 4, 8, 9,10, - 10,10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__16u0__p7_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__16u0__p7_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p7_1 = { - _vq_quantthresh__16u0__p7_1, - _vq_quantmap__16u0__p7_1, - 15, - 15 -}; - -static static_codebook _16u0__p7_1 = { - 2, 225, - _vq_lengthlist__16u0__p7_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__16u0__p7_1, - NULL, - &_vq_auxt__16u0__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u0__p7_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__16u0__p7_2[] = { - 1, 6, 6, 7, 8, 7, 7,10, 9,10, 9,11,10, 9,11,10, - 9, 9, 9, 9,10, 6, 8, 7, 9, 9, 8, 8,10,10, 9,11, - 11,12,12,10, 9,11, 9,12,10, 9, 6, 9, 8, 9,12, 8, - 8,11, 9,11,11,12,11,12,12,10,11,11,10,10,11, 7, - 10, 9, 9, 9, 9, 9,10, 9,10, 9,10,10,12,10,10,10, - 11,12,10,10, 7, 9, 9, 9,10, 9, 9,10,10, 9, 9, 9, - 11,11,10,10,10,10, 9, 9,12, 7, 9,10, 9,11, 9,10, - 9,10,11,11,11,10,11,12, 9,12,11,10,10,10, 7, 9, - 9, 9, 9,10,12,10, 9,11,12,10,11,12,12,11, 9,10, - 11,10,11, 7, 9,10,10,11,10, 9,10,11,11,11,10,12, - 12,12,11,11,10,11,11,12, 8, 9,10,12,11,10,10,12, - 12,12,12,12,10,11,11, 9,11,10,12,11,11, 8, 9,10, - 10,11,12,11,11,10,10,10,12,12,12, 9,10,12,12,12, - 12,12, 8,10,11,10,10,12, 9,11,12,12,11,12,12,12, - 12,10,12,10,10,10,10, 8,12,11,11,11,10,10,11,12, - 12,12,12,11,12,12,12,11,11,11,12,10, 9,10,10,12, - 10,12,10,12,12,10,10,10,11,12,12,12,11,12,12,12, - 11,10,11,12,12,12,11,12,12,11,12,12,11,12,12,12, - 12,11,12,12,10,10,10,10,11,11,12,11,12,12,12,12, - 12,12,12,11,12,11,10,11,11,12,11,11, 9,10,10,10, - 12,10,10,11, 9,11,12,11,12,11,12,12,10,11,10,12, - 9, 9, 9,12,11,10,11,10,12,10,12,10,12,12,12,11, - 11,11,11,11,10, 9,10,10,11,10,11,11,12,11,10,11, - 12,12,12,11,11, 9,12,10,12, 9,10,12,10,10,11,10, - 11,11,12,11,10,11,10,11,11,11,11,12,11,11,10, 9, - 10,10,10, 9,11,11,10, 9,12,10,11,12,11,12,12,11, - 12,11,12,11,10,11,10,12,11,12,11,12,11,12,10,11, - 10,10,12,11,10,11,11,11,10, -}; - -static float _vq_quantthresh__16u0__p7_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__16u0__p7_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__16u0__p7_2 = { - _vq_quantthresh__16u0__p7_2, - _vq_quantmap__16u0__p7_2, - 21, - 21 -}; - -static static_codebook _16u0__p7_2 = { - 2, 441, - _vq_lengthlist__16u0__p7_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__16u0__p7_2, - NULL, - &_vq_auxt__16u0__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__16u0__single[] = { - 3, 5, 8, 7,14, 8, 9,19, 5, 2, 5, 5, 9, 6, 9,19, - 8, 4, 5, 7, 8, 9,13,19, 7, 4, 6, 5, 9, 6, 9,19, - 12, 8, 7, 9,10,11,13,19, 8, 5, 8, 6, 9, 6, 7,19, - 8, 8,10, 7, 7, 4, 5,19,12,17,19,15,18,13,11,18, -}; - -static static_codebook _huff_book__16u0__single = { - 2, 64, - _huff_lengthlist__16u0__single, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__16u1__long[] = { - 3, 6,10, 8,12, 8,14, 8,14,19, 5, 3, 5, 5, 7, 6, - 11, 7,16,19, 7, 5, 6, 7, 7, 9,11,12,19,19, 6, 4, - 7, 5, 7, 6,10, 7,18,18, 8, 6, 7, 7, 7, 7, 8, 9, - 18,18, 7, 5, 8, 5, 7, 5, 8, 6,18,18,12, 9,10, 9, - 9, 9, 8, 9,18,18, 8, 7,10, 6, 8, 5, 6, 4,11,18, - 11,15,16,12,11, 8, 8, 6, 9,18,14,18,18,18,16,16, - 16,13,16,18, -}; - -static static_codebook _huff_book__16u1__long = { - 2, 100, - _huff_lengthlist__16u1__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u1__p1_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 7, 7,10,10, 7, - 9,10, 5, 7, 8, 7,10, 9, 7,10,10, 5, 8, 8, 8,10, - 10, 8,10,10, 7,10,10,10,11,12,10,12,13, 7,10,10, - 9,13,11,10,12,13, 5, 8, 8, 8,10,10, 8,10,10, 7, - 10,10,10,12,12, 9,11,12, 7,10,11,10,12,12,10,13, - 11, -}; - -static float _vq_quantthresh__16u1__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16u1__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p1_0 = { - _vq_quantthresh__16u1__p1_0, - _vq_quantmap__16u1__p1_0, - 3, - 3 -}; - -static static_codebook _16u1__p1_0 = { - 4, 81, - _vq_lengthlist__16u1__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16u1__p1_0, - NULL, - &_vq_auxt__16u1__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u1__p2_0[] = { - 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 7, 8, 6, - 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 6, 8, - 8, 6, 8, 8, 6, 8, 8, 7, 7,10, 8, 9, 9, 6, 8, 8, - 7, 9, 8, 8, 9,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6, - 8, 8, 8,10, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 7,10, - 8, -}; - -static float _vq_quantthresh__16u1__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16u1__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p2_0 = { - _vq_quantthresh__16u1__p2_0, - _vq_quantmap__16u1__p2_0, - 3, - 3 -}; - -static static_codebook _16u1__p2_0 = { - 4, 81, - _vq_lengthlist__16u1__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16u1__p2_0, - NULL, - &_vq_auxt__16u1__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u1__p3_0[] = { - 1, 5, 5, 8, 8, 6, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9, - 10, 9,11,11, 9, 9,10,11,11, 6, 8, 8,10,10, 8, 9, - 10,11,11, 8, 9,10,11,11,10,11,11,12,13,10,11,11, - 13,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11, - 11,10,11,11,13,13,10,11,11,13,12, 9,11,11,14,13, - 10,12,12,15,14,10,12,11,14,13,12,13,13,15,15,12, - 13,13,16,14, 9,11,11,13,14,10,11,12,14,14,10,12, - 12,14,15,12,13,13,14,15,12,13,14,15,16, 5, 8, 8, - 11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14, - 14,11,12,12,14,14, 8,10,10,12,12, 9,11,12,12,13, - 10,12,12,13,13,12,12,13,14,15,11,13,13,15,15, 7, - 10,10,12,12, 9,12,11,13,12,10,11,12,13,13,12,13, - 12,15,14,11,12,13,15,15,10,12,12,15,14,11,13,13, - 16,15,11,13,13,16,15,14,13,14,15,16,13,15,15,17, - 17,10,12,12,14,15,11,12,12,15,15,11,13,13,15,16, - 13,15,13,16,15,13,15,15,16,17, 5, 8, 8,11,11, 8, - 10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12, - 12,14,14, 7,10,10,12,12,10,12,12,14,13, 9,11,12, - 12,13,12,13,13,15,15,12,12,13,13,15, 7,10,10,12, - 13,10,11,12,13,13,10,12,11,13,13,11,13,13,15,15, - 12,13,12,15,14, 9,12,12,15,14,11,13,13,15,15,11, - 12,13,15,15,13,14,14,17,19,13,13,14,16,16,10,12, - 12,14,15,11,13,13,15,16,11,13,12,16,15,13,15,15, - 17,18,14,15,13,16,15, 8,11,11,15,14,10,12,12,16, - 15,10,12,12,16,16,14,15,15,18,17,13,14,15,16,18, - 9,12,12,15,15,11,12,14,16,17,11,13,13,16,15,15, - 15,15,17,18,14,15,16,17,17, 9,12,12,15,15,11,14, - 13,16,16,11,13,13,16,16,15,16,15,17,18,14,16,15, - 17,16,12,14,14,17,16,12,14,15,18,17,13,15,15,17, - 17,15,15,18,16,20,15,16,17,18,18,11,14,14,16,17, - 13,15,14,18,17,13,15,15,17,17,15,17,15,18,17,15, - 17,16,19,18, 8,11,11,14,15,10,12,12,15,15,10,12, - 12,16,16,13,14,14,17,16,14,15,15,17,17, 9,12,12, - 15,16,11,13,13,16,16,11,12,13,16,16,14,16,15,20, - 17,14,16,16,17,17, 9,12,12,15,16,11,13,13,16,17, - 11,13,13,17,16,14,15,15,17,18,15,15,15,18,18,11, - 14,14,17,16,13,15,15,17,17,13,14,14,18,17,15,16, - 16,18,19,15,15,17,17,19,11,14,14,16,17,13,15,14, - 17,19,13,15,14,18,17,15,17,16,18,18,15,17,15,18, - 16, -}; - -static float _vq_quantthresh__16u1__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u1__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p3_0 = { - _vq_quantthresh__16u1__p3_0, - _vq_quantmap__16u1__p3_0, - 5, - 5 -}; - -static static_codebook _16u1__p3_0 = { - 4, 625, - _vq_lengthlist__16u1__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u1__p3_0, - NULL, - &_vq_auxt__16u1__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u1__p4_0[] = { - 4, 5, 5, 8, 8, 6, 6, 7, 9, 9, 6, 6, 6, 9, 9, 9, - 10, 9,11,11, 9, 9,10,11,11, 6, 7, 7,10, 9, 7, 7, - 8, 9,10, 7, 7, 8,10,10,10,10,10,10,12, 9, 9,10, - 11,12, 6, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 7,10, - 10, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11, - 10,10,10,12,12, 9,10,10,12,12,12,11,12,13,13,11, - 11,12,12,13, 9,10,10,11,12, 9,10,10,12,12,10,10, - 10,12,12,11,12,11,14,13,11,12,12,14,13, 5, 7, 7, - 10,10, 7, 8, 8,10,10, 7, 8, 7,10,10,10,10,10,12, - 12,10,10,10,12,12, 6, 8, 7,10,10, 7, 7, 9,10,11, - 8, 9, 9,11,10,10,10,11,11,13,10,10,11,12,13, 6, - 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,10,11,10,11, - 10,13,11,10,11,10,12,12,10,11,10,12,11,10,10,10, - 12,13,10,11,11,13,12,11,11,13,11,14,12,12,13,14, - 14, 9,10,10,12,13,10,11,10,13,12,10,11,11,12,13, - 11,12,11,14,12,12,13,13,15,14, 5, 7, 7,10,10, 7, - 7, 8,10,10, 7, 8, 8,10,10,10,10,10,11,12,10,10, - 10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9, - 10,11,10,11,11,12,12,10,10,11,11,13, 7, 7, 8,10, - 10, 8, 8, 9,10,11, 7, 9, 7,11,10,10,11,11,13,12, - 11,11,10,13,11, 9,10,10,12,12,10,11,11,13,12,10, - 10,11,12,12,12,13,13,14,14,11,11,12,12,14,10,10, - 11,12,12,10,11,11,12,13,10,10,10,13,12,12,13,13, - 15,14,12,13,10,14,11, 8,10,10,12,12,10,11,10,13, - 13, 9,10,10,12,12,12,13,13,15,14,11,12,12,13,13, - 9,10,10,13,12,10,10,11,13,13,10,11,10,13,12,12, - 12,13,14,15,12,13,12,15,13, 9,10,10,12,13,10,11, - 10,13,12,10,10,11,12,13,12,14,12,15,13,12,12,13, - 14,15,11,12,11,14,13,11,11,12,14,15,12,13,12,15, - 14,13,11,15,11,16,13,14,14,16,15,11,12,12,14,14, - 11,12,11,14,13,12,12,13,14,15,13,14,12,16,12,14, - 14,14,15,15, 8,10,10,12,12, 9,10,10,12,12,10,10, - 11,13,13,11,12,12,13,13,12,13,13,14,15, 9,10,10, - 13,12,10,11,11,13,12,10,10,11,13,13,12,13,12,15, - 14,12,12,13,13,16, 9, 9,10,12,13,10,10,11,12,13, - 10,11,10,13,13,12,12,13,13,15,13,13,12,15,13,11, - 12,12,14,14,12,13,12,15,14,11,11,12,13,14,14,14, - 14,16,15,13,12,15,12,16,11,11,12,13,14,12,13,13, - 14,15,10,12,11,14,13,14,15,14,16,16,13,14,11,15, - 11, -}; - -static float _vq_quantthresh__16u1__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u1__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p4_0 = { - _vq_quantthresh__16u1__p4_0, - _vq_quantmap__16u1__p4_0, - 5, - 5 -}; - -static static_codebook _16u1__p4_0 = { - 4, 625, - _vq_lengthlist__16u1__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u1__p4_0, - NULL, - &_vq_auxt__16u1__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16u1__p5_0[] = { - 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8, - 10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9, - 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8, - 10, 9,11,11,12,11, 7, 8, 8, 9, 9,11,11,12,12, 9, - 10,10,11,11,12,12,13,12, 9,10,10,11,11,12,12,12, - 13, -}; - -static float _vq_quantthresh__16u1__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16u1__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p5_0 = { - _vq_quantthresh__16u1__p5_0, - _vq_quantmap__16u1__p5_0, - 9, - 9 -}; - -static static_codebook _16u1__p5_0 = { - 2, 81, - _vq_lengthlist__16u1__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16u1__p5_0, - NULL, - &_vq_auxt__16u1__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p6_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16u1__p6_0[] = { - 3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 4, 6, 6, 8, 8, - 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7, - 8, 8,10, 9, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 8, 7, - 8, 8, 9, 9,10,10, 7, 8, 8, 8, 8, 9, 9,10,10, 9, - 9, 9,10,10,10,10,11,11, 9, 9, 9,10,10,10,10,11, - 11, -}; - -static float _vq_quantthresh__16u1__p6_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16u1__p6_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p6_0 = { - _vq_quantthresh__16u1__p6_0, - _vq_quantmap__16u1__p6_0, - 9, - 9 -}; - -static static_codebook _16u1__p6_0 = { - 2, 81, - _vq_lengthlist__16u1__p6_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16u1__p6_0, - NULL, - &_vq_auxt__16u1__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u1__p7_0[] = { - 1, 4, 4, 4, 8, 8, 4, 8, 8, 5,11, 9, 8,12,11, 8, - 12,11, 5,10,11, 8,11,12, 8,11,12, 4,11,11,11,14, - 13,10,13,13, 8,14,13,12,14,16,12,16,15, 8,14,14, - 13,16,14,12,15,16, 4,11,11,10,14,13,11,14,14, 8, - 15,14,12,15,15,12,14,16, 8,14,14,11,16,15,12,15, - 13, -}; - -static float _vq_quantthresh__16u1__p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__16u1__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p7_0 = { - _vq_quantthresh__16u1__p7_0, - _vq_quantmap__16u1__p7_0, - 3, - 3 -}; - -static static_codebook _16u1__p7_0 = { - 4, 81, - _vq_lengthlist__16u1__p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__16u1__p7_0, - NULL, - &_vq_auxt__16u1__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16u1__p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 5, 7, 7, - 8, 8, 8, 8, 8, 8, 4, 5, 6, 7, 7, 8, 8, 8, 8, 8, - 8, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 9, 9,10, - 9,10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, 9, 8, 8, 8, - 9, 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9,10, - 10,10,10, 8, 8, 8, 9, 9, 9,10,10,10,10,10, 8, 8, - 8, 9, 9,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__16u1__p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16u1__p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p7_1 = { - _vq_quantthresh__16u1__p7_1, - _vq_quantmap__16u1__p7_1, - 11, - 11 -}; - -static static_codebook _16u1__p7_1 = { - 2, 121, - _vq_lengthlist__16u1__p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16u1__p7_1, - NULL, - &_vq_auxt__16u1__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p8_0[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16u1__p8_0[] = { - 1, 4, 4, 5, 5, 8, 8,10,10,12,12, 4, 7, 7, 8, 8, - 9, 9,12,11,14,13, 4, 7, 7, 7, 8, 9,10,11,11,13, - 12, 5, 8, 8, 9, 9,11,11,12,13,15,14, 5, 7, 8, 9, - 9,11,11,13,13,17,15, 8, 9,10,11,11,12,13,17,14, - 17,16, 8,10, 9,11,11,12,12,13,15,15,17,10,11,11, - 12,13,14,15,15,16,16,17, 9,11,11,12,12,14,15,17, - 15,15,16,11,14,12,14,15,16,15,16,16,16,15,11,13, - 13,14,14,15,15,16,16,15,16, -}; - -static float _vq_quantthresh__16u1__p8_0[] = { - -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, - 38.5, 49.5, -}; - -static long _vq_quantmap__16u1__p8_0[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p8_0 = { - _vq_quantthresh__16u1__p8_0, - _vq_quantmap__16u1__p8_0, - 11, - 11 -}; - -static static_codebook _16u1__p8_0 = { - 2, 121, - _vq_lengthlist__16u1__p8_0, - 1, -524582912, 1618345984, 4, 0, - _vq_quantlist__16u1__p8_0, - NULL, - &_vq_auxt__16u1__p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p8_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16u1__p8_1[] = { - 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7, - 8, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, - 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, - 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 8, - 8, 9, 9, 9, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__16u1__p8_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16u1__p8_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p8_1 = { - _vq_quantthresh__16u1__p8_1, - _vq_quantmap__16u1__p8_1, - 11, - 11 -}; - -static static_codebook _16u1__p8_1 = { - 2, 121, - _vq_lengthlist__16u1__p8_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16u1__p8_1, - NULL, - &_vq_auxt__16u1__p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p9_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16u1__p9_0[] = { - 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, -}; - -static float _vq_quantthresh__16u1__p9_0[] = { - -1657.5, -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, - 382.5, 637.5, 892.5, 1147.5, 1402.5, 1657.5, -}; - -static long _vq_quantmap__16u1__p9_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p9_0 = { - _vq_quantthresh__16u1__p9_0, - _vq_quantmap__16u1__p9_0, - 15, - 15 -}; - -static static_codebook _16u1__p9_0 = { - 2, 225, - _vq_lengthlist__16u1__p9_0, - 1, -514071552, 1627381760, 4, 0, - _vq_quantlist__16u1__p9_0, - NULL, - &_vq_auxt__16u1__p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16u1__p9_1[] = { - 1, 6, 5, 9, 9,10,10, 6, 7, 9, 9,10,10,10,10, 5, - 10, 8,10, 8,10,10, 8, 8,10, 9,10,10,10,10, 5, 8, - 9,10,10,10,10, 8,10,10,10,10,10,10,10, 9,10,10, - 10,10,10,10, 9, 9,10,10,10,10,10,10, 9, 9, 8, 9, - 10,10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10, 8,10,10,10,10, - 10,10,10,10,10,10,10,10,10, 6, 8, 8,10,10,10, 8, - 10,10,10,10,10,10,10,10, 5, 8, 8,10,10,10, 9, 9, - 10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__16u1__p9_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__16u1__p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p9_1 = { - _vq_quantthresh__16u1__p9_1, - _vq_quantmap__16u1__p9_1, - 15, - 15 -}; - -static static_codebook _16u1__p9_1 = { - 2, 225, - _vq_lengthlist__16u1__p9_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__16u1__p9_1, - NULL, - &_vq_auxt__16u1__p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u1__p9_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__16u1__p9_2[] = { - 1, 6, 6, 7, 8, 8,11,10, 9, 9,11, 9,10, 9,11,11, - 9, 6, 7, 6,11, 8,11, 9,10,10,11, 9,11,10,10,10, - 11, 9, 5, 7, 7, 8, 8,10,11, 8, 8,11, 9, 9,10,11, - 9,10,11, 8, 9, 6, 8, 8, 9, 9,10,10,11,11,11, 9, - 11,10, 9,11, 8, 8, 8, 9, 8, 9,10,11, 9, 9,11,11, - 10, 9, 9,11,10, 8,11, 8, 9, 8,11, 9,10, 9,10,11, - 11,10,10, 9,10,10, 8, 8, 9,10,10,10, 9,11, 9,10, - 11,11,11,11,10, 9,11, 9, 9,11,11,10, 8,11,11,11, - 9,10,10,11,10,11,11, 9,11,10, 9,11,10,10,10,10, - 9,11,10,11,10, 9, 9,10,11, 9, 8,10,11,11,10,10, - 11, 9,11,10,11,11,10,11, 9, 9, 8,10, 8, 9,11, 9, - 8,10,10, 9,11,10,11,10,11, 9,11, 8,10,11,11,11, - 11,10,10,11,11,11,11,10,11,11,10, 9, 8,10,10, 9, - 11,10,11,11,11, 9, 9, 9,11,11,11,10,10, 9, 9,10, - 9,11,11,11,11, 8,10,11,10,11,11,10,11,11, 9, 9, - 9,10, 9,11, 9,11,11,11,11,11,10,11,11,10,11,10, - 11,11, 9,11,10,11,10, 9,10, 9,10,10,11,11,11,11, - 9,10, 9,10,11,11,10,11,11,11,11,11,11,10,11,11, - 10, -}; - -static float _vq_quantthresh__16u1__p9_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__16u1__p9_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__16u1__p9_2 = { - _vq_quantthresh__16u1__p9_2, - _vq_quantmap__16u1__p9_2, - 17, - 17 -}; - -static static_codebook _16u1__p9_2 = { - 2, 289, - _vq_lengthlist__16u1__p9_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__16u1__p9_2, - NULL, - &_vq_auxt__16u1__p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__16u1__short[] = { - 5, 7,10, 9,11,10,15,11,13,16, 6, 4, 6, 6, 7, 7, - 10, 9,12,16,10, 6, 5, 6, 6, 7,10,11,16,16, 9, 6, - 7, 6, 7, 7,10, 8,14,16,11, 6, 5, 4, 5, 6, 8, 9, - 15,16, 9, 6, 6, 5, 6, 6, 9, 8,14,16,12, 7, 6, 6, - 5, 6, 6, 7,13,16, 8, 6, 7, 6, 5, 5, 4, 4,11,16, - 9, 8, 9, 9, 7, 7, 6, 5,13,16,14,14,16,15,16,15, - 16,16,16,16, -}; - -static static_codebook _huff_book__16u1__short = { - 2, 100, - _huff_lengthlist__16u1__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__16u2__long[] = { - 5, 7,10,10,10,11,11,13,18,19, 6, 5, 5, 6, 7, 8, - 9,12,19,19, 8, 5, 4, 4, 6, 7, 9,13,19,19, 8, 5, - 4, 4, 5, 6, 8,12,17,19, 7, 5, 5, 4, 4, 5, 7,12, - 18,18, 8, 7, 7, 6, 5, 5, 6,10,18,18, 9, 9, 9, 8, - 6, 5, 6, 9,18,18,11,13,13,13, 8, 7, 7, 9,16,18, - 13,17,18,16,11, 9, 9, 9,17,18,15,18,18,18,15,13, - 13,14,18,18, -}; - -static static_codebook _huff_book__16u2__long = { - 2, 100, - _huff_lengthlist__16u2__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__16u2__short[] = { - 8,11,12,12,14,15,16,16,16,16, 9, 7, 7, 8, 9,11, - 13,14,16,16,13, 7, 6, 6, 7, 9,12,13,15,16,15, 7, - 6, 5, 4, 6,10,11,14,16,12, 8, 7, 4, 2, 4, 7,10, - 14,16,11, 9, 7, 5, 3, 4, 6, 9,14,16,11,10, 9, 7, - 5, 5, 6, 9,16,16,10,10, 9, 8, 6, 6, 7,10,16,16, - 11,11,11,10,10,10,11,14,16,16,16,14,14,13,14,16, - 16,16,16,16, -}; - -static static_codebook _huff_book__16u2__short = { - 2, 100, - _huff_lengthlist__16u2__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u2_p1_0[] = { - 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7, - 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 9, 5, 7, 7, 8, 9, - 9, 7, 9, 9, 7, 9, 9, 9,10,10, 9,10,10, 7, 9, 9, - 9,10,10, 9,10,11, 5, 7, 8, 8, 9, 9, 8, 9, 9, 7, - 9, 9, 9,10,10, 9, 9,10, 7, 9, 9, 9,10,10, 9,11, - 10, -}; - -static float _vq_quantthresh__16u2_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__16u2_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p1_0 = { - _vq_quantthresh__16u2_p1_0, - _vq_quantmap__16u2_p1_0, - 3, - 3 -}; - -static static_codebook _16u2_p1_0 = { - 4, 81, - _vq_lengthlist__16u2_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__16u2_p1_0, - NULL, - &_vq_auxt__16u2_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u2_p2_0[] = { - 3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9, - 10, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 8, 8,10,10,10,10,10,12,12, 9,10,10, - 11,12, 5, 7, 7, 9, 9, 7, 8, 8,10,10, 7, 8, 8,10, - 10, 9,10,10,12,11,10,10,10,12,12, 9,10,10,12,12, - 10,11,10,13,12, 9,10,10,12,12,12,12,12,14,14,11, - 12,12,13,14, 9,10,10,12,12, 9,10,10,12,12,10,10, - 10,12,12,11,12,12,14,13,12,13,12,14,14, 5, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,12, - 12,10,10,11,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, - 8, 9, 9,11,11,11,11,11,12,13,10,11,11,12,13, 7, - 8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,13,12,10,11,11,13,13, 9,11,10,13,13,10,11,11, - 13,13,10,11,11,13,13,12,12,13,13,15,12,12,13,14, - 15, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13, - 11,13,11,14,13,12,13,13,15,15, 5, 7, 7, 9, 9, 7, - 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10, - 11,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9, - 10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10, - 11, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,12, - 11,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10, - 10,11,12,13,12,13,13,15,14,11,11,13,12,14,10,10, - 11,13,13,10,11,11,13,13,10,11,11,13,13,12,13,13, - 14,14,12,13,12,14,13, 8,10, 9,12,12, 9,11,10,13, - 13, 9,10,10,12,13,12,13,13,14,14,12,12,13,14,14, - 9,11,10,13,13,10,11,11,13,13,10,11,11,13,13,12, - 13,13,15,15,13,13,13,14,15, 9,10,10,12,13,10,11, - 10,13,12,10,11,11,13,13,12,13,12,15,14,13,13,13, - 14,15,11,12,12,15,14,12,12,13,15,15,12,13,13,15, - 14,14,13,15,14,16,13,14,15,16,16,11,12,12,14,14, - 11,12,12,15,14,12,13,13,15,15,13,14,13,16,14,14, - 14,14,16,16, 8, 9, 9,12,12, 9,10,10,13,12, 9,10, - 10,13,13,12,12,12,14,14,12,12,13,15,15, 9,10,10, - 13,12,10,11,11,13,13,10,10,11,13,14,12,13,13,15, - 15,12,12,13,14,15, 9,10,10,13,13,10,11,11,13,13, - 10,11,11,13,13,12,13,13,14,14,13,14,13,15,14,11, - 12,12,14,14,12,13,13,15,14,11,12,12,14,15,14,14, - 14,16,15,13,12,14,14,16,11,12,13,14,15,12,13,13, - 14,16,12,13,12,15,14,13,15,14,16,16,14,15,13,16, - 13, -}; - -static float _vq_quantthresh__16u2_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u2_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p2_0 = { - _vq_quantthresh__16u2_p2_0, - _vq_quantmap__16u2_p2_0, - 5, - 5 -}; - -static static_codebook _16u2_p2_0 = { - 4, 625, - _vq_lengthlist__16u2_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u2_p2_0, - NULL, - &_vq_auxt__16u2_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__16u2_p3_0[] = { - 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 5, 6, 6, 8, 7, - 9, 9, 4, 5, 5, 6, 6, 7, 8, 9, 9, 6, 6, 6, 7, 7, - 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 8, 7, - 8, 8, 9, 9,10,10, 7, 8, 8, 8, 8, 9, 9,10,10, 9, - 9, 9,10, 9,10,10,11,11, 9, 9, 9,10,10,10,10,11, - 11, -}; - -static float _vq_quantthresh__16u2_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__16u2_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p3_0 = { - _vq_quantthresh__16u2_p3_0, - _vq_quantmap__16u2_p3_0, - 9, - 9 -}; - -static static_codebook _16u2_p3_0 = { - 2, 81, - _vq_lengthlist__16u2_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__16u2_p3_0, - NULL, - &_vq_auxt__16u2_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__16u2_p4_0[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,11, - 11, 5, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11, - 12,11, 5, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11, - 11,12,12, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12,12,12, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, - 10,11,11,11,12,12,12, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10,11,11,12,12,13,13, 8, 9, 9, 9, 9,10, 9,10, - 10,10,10,11,11,12,12,13,13, 9, 9, 9, 9, 9,10,10, - 10,10,11,11,11,12,12,12,13,13, 9, 9, 9, 9, 9,10, - 10,10,10,11,11,12,11,12,12,13,13,10,10,10,10,10, - 11,11,11,11,11,12,12,12,12,13,13,14,10,10,10,10, - 10,11,11,11,11,12,11,12,12,13,12,13,13,11,11,11, - 11,11,12,12,12,12,12,12,13,13,13,13,14,14,11,11, - 11,11,11,12,12,12,12,12,12,13,12,13,13,14,14,11, - 12,12,12,12,12,12,13,13,13,13,13,13,14,14,14,14, - 11,12,12,12,12,12,12,13,13,13,13,14,13,14,14,14, - 14, -}; - -static float _vq_quantthresh__16u2_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__16u2_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p4_0 = { - _vq_quantthresh__16u2_p4_0, - _vq_quantmap__16u2_p4_0, - 17, - 17 -}; - -static static_codebook _16u2_p4_0 = { - 2, 289, - _vq_lengthlist__16u2_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__16u2_p4_0, - NULL, - &_vq_auxt__16u2_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__16u2_p5_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 7,10, 9, 7, - 10, 9, 5, 8, 9, 7, 9,10, 7, 9,10, 4, 9, 9, 9,11, - 11, 8,11,11, 7,11,11,10,10,13,10,14,13, 7,11,11, - 10,13,11,10,13,14, 5, 9, 9, 8,11,11, 9,11,11, 7, - 11,11,10,14,13,10,12,14, 7,11,11,10,13,13,10,13, - 10, -}; - -static float _vq_quantthresh__16u2_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__16u2_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p5_0 = { - _vq_quantthresh__16u2_p5_0, - _vq_quantmap__16u2_p5_0, - 3, - 3 -}; - -static static_codebook _16u2_p5_0 = { - 4, 81, - _vq_lengthlist__16u2_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__16u2_p5_0, - NULL, - &_vq_auxt__16u2_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16u2_p5_1[] = { - 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 5, 5, 5, 7, 7, - 7, 7, 8, 8, 8, 8, 5, 5, 6, 7, 7, 7, 7, 8, 8, 8, - 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, - 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__16u2_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16u2_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p5_1 = { - _vq_quantthresh__16u2_p5_1, - _vq_quantmap__16u2_p5_1, - 11, - 11 -}; - -static static_codebook _16u2_p5_1 = { - 2, 121, - _vq_lengthlist__16u2_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16u2_p5_1, - NULL, - &_vq_auxt__16u2_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16u2_p6_0[] = { - 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6, - 8, 8, 9, 9, 9, 9,10,10,12,11, 4, 6, 6, 8, 8, 9, - 9, 9, 9,10,10,11,12, 7, 8, 8, 9, 9,10,10,10,10, - 12,12,13,12, 7, 8, 8, 9, 9,10,10,10,10,11,12,12, - 12, 8, 9, 9,10,10,11,11,11,11,12,12,13,13, 8, 9, - 9,10,10,11,11,11,11,12,13,13,13, 8, 9, 9,10,10, - 11,11,12,12,13,13,14,14, 8, 9, 9,10,10,11,11,12, - 12,13,13,14,14, 9,10,10,11,12,13,12,13,14,14,14, - 14,14, 9,10,10,11,12,12,13,13,13,14,14,14,14,10, - 11,11,12,12,13,13,14,14,15,15,15,15,10,11,11,12, - 12,13,13,14,14,14,14,15,15, -}; - -static float _vq_quantthresh__16u2_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__16u2_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p6_0 = { - _vq_quantthresh__16u2_p6_0, - _vq_quantmap__16u2_p6_0, - 13, - 13 -}; - -static static_codebook _16u2_p6_0 = { - 2, 169, - _vq_lengthlist__16u2_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__16u2_p6_0, - NULL, - &_vq_auxt__16u2_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__16u2_p6_1[] = { - 2, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 6, 6, 5, 5, 5, 6, 6, -}; - -static float _vq_quantthresh__16u2_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__16u2_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p6_1 = { - _vq_quantthresh__16u2_p6_1, - _vq_quantmap__16u2_p6_1, - 5, - 5 -}; - -static static_codebook _16u2_p6_1 = { - 2, 25, - _vq_lengthlist__16u2_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__16u2_p6_1, - NULL, - &_vq_auxt__16u2_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__16u2_p7_0[] = { - 1, 4, 4, 7, 7, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 6, - 9, 9, 9, 9, 9, 9,10,10,11,11, 4, 6, 6, 8, 9, 9, - 9, 9, 9,10,11,12,11, 7, 8, 9,10,10,10,10,11,10, - 11,12,12,13, 7, 9, 9,10,10,10,10,10,10,11,12,13, - 13, 7, 9, 8,10,10,11,11,11,12,12,13,13,14, 7, 9, - 9,10,10,11,11,11,12,13,13,13,13, 8, 9, 9,10,11, - 11,12,12,12,13,13,13,13, 8, 9, 9,10,11,11,11,12, - 12,13,13,14,14, 9,10,10,12,11,12,13,13,13,14,13, - 13,13, 9,10,10,11,11,12,12,13,14,13,13,14,13,10, - 11,11,12,13,14,14,14,15,14,14,14,14,10,11,11,12, - 12,13,13,13,14,14,14,15,14, -}; - -static float _vq_quantthresh__16u2_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__16u2_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p7_0 = { - _vq_quantthresh__16u2_p7_0, - _vq_quantmap__16u2_p7_0, - 13, - 13 -}; - -static static_codebook _16u2_p7_0 = { - 2, 169, - _vq_lengthlist__16u2_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__16u2_p7_0, - NULL, - &_vq_auxt__16u2_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__16u2_p7_1[] = { - 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, - 7, 7, 7, 7, 8, 8, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, - 8, 6, 6, 7, 7, 7, 8, 7, 8, 8, 8, 8, 6, 7, 7, 7, - 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, - 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, - 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__16u2_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__16u2_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p7_1 = { - _vq_quantthresh__16u2_p7_1, - _vq_quantmap__16u2_p7_1, - 11, - 11 -}; - -static static_codebook _16u2_p7_1 = { - 2, 121, - _vq_lengthlist__16u2_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__16u2_p7_1, - NULL, - &_vq_auxt__16u2_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__16u2_p8_0[] = { - 1, 5, 5, 7, 7, 8, 8, 7, 7, 8, 8,10, 9,11,11, 4, - 6, 6, 8, 8,10, 9, 9, 8, 9, 9,10,10,12,14, 4, 6, - 7, 8, 9, 9,10, 9, 8, 9, 9,10,12,12,11, 7, 8, 8, - 10,10,10,10, 9, 9,10,10,11,13,13,12, 7, 8, 8, 9, - 11,11,10, 9, 9,11,10,12,11,11,14, 8, 9, 9,11,10, - 11,11,10,10,11,11,13,12,14,12, 8, 9, 9,11,12,11, - 11,10,10,12,11,12,12,12,14, 7, 8, 8, 9, 9,10,10, - 10,11,12,11,13,13,14,12, 7, 8, 9, 9, 9,10,10,11, - 11,11,12,12,14,14,14, 8,10, 9,10,11,11,11,11,14, - 12,12,13,14,14,13, 9, 9, 9,10,11,11,11,12,12,12, - 14,12,14,13,14,10,10,10,12,11,12,11,14,13,14,13, - 14,14,13,14, 9,10,10,11,12,11,13,12,13,13,14,14, - 14,13,14,10,13,13,12,12,11,12,14,13,14,13,14,12, - 14,13,10,11,11,12,11,12,12,14,14,14,13,14,14,14, - 14, -}; - -static float _vq_quantthresh__16u2_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__16u2_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p8_0 = { - _vq_quantthresh__16u2_p8_0, - _vq_quantmap__16u2_p8_0, - 15, - 15 -}; - -static static_codebook _16u2_p8_0 = { - 2, 225, - _vq_lengthlist__16u2_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__16u2_p8_0, - NULL, - &_vq_auxt__16u2_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__16u2_p8_1[] = { - 2, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10, 9,10, 9, 9, - 9,10,10,10,10, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, - 10, 9,10,10,10,10,10,10,11,10, 5, 6, 6, 7, 7, 8, - 8, 8, 9, 9,10,10,10,10,10,10,10,10,10,10,10, 7, - 7, 7, 8, 8, 9, 8, 9, 9,10, 9,10,10,10,10,10,10, - 11,10,11,10, 7, 7, 7, 8, 8, 8, 9, 9, 9,10, 9,10, - 10,10,10,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, - 10, 9,10,10,10,10,10,10,10,11,10,10,11,10, 8, 8, - 8, 8, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11, - 11,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10, - 11,10,11,10,11,10,11,10, 8, 9, 9, 9, 9, 9,10,10, - 10,10,10,10,10,10,10,10,11,11,10,10,10, 9,10, 9, - 9,10,10,10,11,10,10,10,10,10,10,10,10,11,11,11, - 11,11, 9, 9, 9,10, 9,10,10,10,10,10,10,11,10,11, - 10,11,11,11,11,10,10, 9,10, 9,10,10,10,10,11,10, - 10,10,10,10,11,10,11,10,11,10,10,11, 9,10,10,10, - 10,10,10,10,10,10,11,10,10,11,11,10,11,11,11,11, - 11, 9, 9,10,10,10,10,10,11,10,10,11,10,10,11,10, - 10,11,11,11,11,11, 9,10,10,10,10,10,10,10,11,10, - 11,10,11,10,11,11,11,11,11,10,11,10,10,10,10,10, - 10,10,10,10,11,11,11,11,11,11,11,11,11,10,11,11, - 10,10,10,10,10,11,10,10,10,11,10,11,11,11,11,10, - 12,11,11,11,10,10,10,10,10,10,11,10,10,10,11,11, - 12,11,11,11,11,11,11,11,11,11,10,10,10,11,10,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10, - 10,10,11,10,11,10,10,11,11,11,11,11,11,11,11,11, - 11,11,11,10,10,10,10,10,10,10,11,11,10,11,11,10, - 11,11,10,11,11,11,10,11,11, -}; - -static float _vq_quantthresh__16u2_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__16u2_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p8_1 = { - _vq_quantthresh__16u2_p8_1, - _vq_quantmap__16u2_p8_1, - 21, - 21 -}; - -static static_codebook _16u2_p8_1 = { - 2, 441, - _vq_lengthlist__16u2_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__16u2_p8_1, - NULL, - &_vq_auxt__16u2_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p9_0[] = { - 5586, - 4655, - 6517, - 3724, - 7448, - 2793, - 8379, - 1862, - 9310, - 931, - 10241, - 0, - 11172, - 5521, - 5651, -}; - -static long _vq_lengthlist__16u2_p9_0[] = { - 1,10,10,10,10,10,10,10,10,10,10,10,10, 5, 4,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10, 4,10,10,10,10,10,10,10,10,10,10,10,10, - 6, 6, 5,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 5, - 5, -}; - -static float _vq_quantthresh__16u2_p9_0[] = { - -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -498, -32.5, 32.5, - 498, 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, -}; - -static long _vq_quantmap__16u2_p9_0[] = { - 11, 9, 7, 5, 3, 1, 13, 0, - 14, 2, 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p9_0 = { - _vq_quantthresh__16u2_p9_0, - _vq_quantmap__16u2_p9_0, - 15, - 15 -}; - -static static_codebook _16u2_p9_0 = { - 2, 225, - _vq_lengthlist__16u2_p9_0, - 1, -510275072, 1611661312, 14, 0, - _vq_quantlist__16u2_p9_0, - NULL, - &_vq_auxt__16u2_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p9_1[] = { - 392, - 343, - 441, - 294, - 490, - 245, - 539, - 196, - 588, - 147, - 637, - 98, - 686, - 49, - 735, - 0, - 784, - 388, - 396, -}; - -static long _vq_lengthlist__16u2_p9_1[] = { - 1,12,10,12,10,12,10,12,11,12,12,12,12,12,12,12, - 12, 5, 5, 9,10,12,11,11,12,12,12,12,12,12,12,12, - 12,12,12,12,10, 9, 9,11, 9,11,11,12,11,12,12,12, - 12,12,12,12,12,12,12, 8, 8,10,11, 9,12,11,12,12, - 12,12,12,12,12,12,12,12,12,12, 9, 8,10,11,12,11, - 12,11,12,12,12,12,12,12,12,12,12,12,12, 8, 9,11, - 11,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 9,10,11,12,11,12,11,12,12,12,12,12,12,12,12,12, - 12,12,12, 9, 9,11,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11, 5, 8, 9, 9, 8,11, 9,11,11,11,11,11,11, - 11,11,11,11, 5, 5, 4, 8, 8, 8, 8,10, 9,10,10,11, - 11,11,11,11,11,11,11, 5, 4, -}; - -static float _vq_quantthresh__16u2_p9_1[] = { - -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, -26.5, - -2, 2, 26.5, 73.5, 122.5, 171.5, 220.5, 269.5, - 318.5, 367.5, -}; - -static long _vq_quantmap__16u2_p9_1[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 17, 0, 18, 2, 4, 6, 8, 10, - 12, 14, 16, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p9_1 = { - _vq_quantthresh__16u2_p9_1, - _vq_quantmap__16u2_p9_1, - 19, - 19 -}; - -static static_codebook _16u2_p9_1 = { - 2, 361, - _vq_lengthlist__16u2_p9_1, - 1, -518488064, 1611661312, 10, 0, - _vq_quantlist__16u2_p9_1, - NULL, - &_vq_auxt__16u2_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__16u2_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__16u2_p9_2[] = { - 1, 3, 3, 4, 7, 7, 7, 8, 7, 7, 7, 7, 8, 8, 8, 8, - 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 9, 9, 8, 9, 9, - 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,12,12,10, - 11, -}; - -static float _vq_quantthresh__16u2_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__16u2_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__16u2_p9_2 = { - _vq_quantthresh__16u2_p9_2, - _vq_quantmap__16u2_p9_2, - 49, - 49 -}; - -static static_codebook _16u2_p9_2 = { - 1, 49, - _vq_lengthlist__16u2_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__16u2_p9_2, - NULL, - &_vq_auxt__16u2_p9_2, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8u0__p1_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7, - 10,10, 5, 8, 8, 7,10,10, 8,10,10, 4, 9, 8, 8,11, - 11, 8,11,11, 7,11,11,10,11,13,10,13,13, 7,11,11, - 10,13,12,10,13,13, 5, 9, 8, 8,11,11, 8,11,11, 7, - 11,11, 9,13,13,10,12,13, 7,11,11,10,13,13,10,13, - 11, -}; - -static float _vq_quantthresh__8u0__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__8u0__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p1_0 = { - _vq_quantthresh__8u0__p1_0, - _vq_quantmap__8u0__p1_0, - 3, - 3 -}; - -static static_codebook _8u0__p1_0 = { - 4, 81, - _vq_lengthlist__8u0__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__8u0__p1_0, - NULL, - &_vq_auxt__8u0__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8u0__p2_0[] = { - 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 6, 7, 8, 6, - 7, 8, 5, 7, 7, 6, 8, 8, 7, 9, 7, 5, 7, 7, 7, 9, - 9, 7, 8, 8, 6, 9, 8, 7, 7,10, 8,10,10, 6, 8, 8, - 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6, - 8, 8, 8,10,10, 8, 8,10, 6, 8, 9, 8,10,10, 7,10, - 8, -}; - -static float _vq_quantthresh__8u0__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__8u0__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p2_0 = { - _vq_quantthresh__8u0__p2_0, - _vq_quantmap__8u0__p2_0, - 3, - 3 -}; - -static static_codebook _8u0__p2_0 = { - 4, 81, - _vq_lengthlist__8u0__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__8u0__p2_0, - NULL, - &_vq_auxt__8u0__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8u0__p3_0[] = { - 1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8, - 10, 9,11,11, 8, 9, 9,11,11, 6, 8, 8,10,10, 8,10, - 10,11,11, 8,10,10,11,11,10,11,11,12,12,10,11,11, - 12,13, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11, - 11, 9,10,11,12,12,10,11,11,12,12, 8,11,11,14,13, - 10,12,11,15,13,10,12,11,14,14,12,13,12,16,14,12, - 14,12,16,15, 8,11,11,13,14,10,11,12,13,15,10,11, - 12,13,15,11,12,13,14,15,12,12,14,14,16, 5, 8, 8, - 11,11, 9,11,11,12,12, 8,10,11,12,12,11,12,12,15, - 14,11,12,12,14,14, 7,11,10,13,12,10,11,12,13,14, - 10,12,12,14,13,12,13,13,14,15,12,13,13,15,15, 7, - 10,11,12,13,10,12,11,14,13,10,12,13,13,15,12,13, - 12,14,14,11,13,13,15,16, 9,12,12,15,14,11,13,13, - 15,16,11,13,13,16,16,13,14,15,15,15,12,14,15,17, - 16, 9,12,12,14,15,11,13,13,15,16,11,13,13,16,18, - 13,14,14,17,16,13,15,15,17,18, 5, 8, 9,11,11, 8, - 11,11,12,12, 8,10,11,12,12,11,12,12,14,14,11,12, - 12,14,15, 7,11,10,12,13,10,12,12,14,13,10,11,12, - 13,14,11,13,13,15,14,12,13,13,14,15, 7,10,11,13, - 13,10,12,12,13,14,10,12,12,13,13,11,13,13,16,16, - 12,13,13,15,14, 9,12,12,16,15,10,13,13,15,15,11, - 13,13,17,15,12,15,15,18,17,13,14,14,15,16, 9,12, - 12,15,15,11,13,13,15,16,11,13,13,15,15,12,15,15, - 16,16,13,15,14,17,15, 7,11,11,15,15,10,13,13,16, - 15,10,13,13,15,16,14,15,15,17,19,13,15,14,15,18, - 9,12,12,16,16,11,13,14,17,16,11,13,13,17,16,15, - 15,16,17,19,13,15,16, 0,18, 9,12,12,16,15,11,14, - 13,17,17,11,13,14,16,16,15,16,16,19,18,13,15,15, - 17,19,11,14,14,19,16,12,14,15, 0,18,12,16,15,18, - 17,15,15,18,16,19,14,15,17,19,19,11,14,14,18,19, - 13,15,14,19,19,12,16,15,18,17,15,17,15, 0,16,14, - 17,16,19, 0, 7,11,11,14,14,10,12,12,15,15,10,13, - 13,16,15,13,15,15,17, 0,14,15,15,16,19, 9,12,12, - 16,16,11,14,14,16,16,11,13,13,16,16,14,17,16,19, - 0,14,18,17,17,19, 9,12,12,15,16,11,13,13,15,17, - 12,14,13,19,16,13,15,15,17,19,15,17,16,17,19,11, - 14,14,19,16,12,15,15,19,17,13,14,15,17,19,14,16, - 17,19,19,16,15,16,17,19,11,15,14,16,16,12,15,15, - 19, 0,12,14,15,19,19,14,16,16, 0,18,15,19,14,18, - 16, -}; - -static float _vq_quantthresh__8u0__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8u0__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p3_0 = { - _vq_quantthresh__8u0__p3_0, - _vq_quantmap__8u0__p3_0, - 5, - 5 -}; - -static static_codebook _8u0__p3_0 = { - 4, 625, - _vq_lengthlist__8u0__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8u0__p3_0, - NULL, - &_vq_auxt__8u0__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8u0__p4_0[] = { - 3, 5, 5, 8, 8, 5, 6, 7, 9, 9, 6, 7, 6, 9, 9, 9, - 9, 9,10,11, 9, 9, 9,11,10, 6, 7, 7,10,10, 7, 7, - 8,10,10, 7, 8, 8,10,10,10,10,10,10,11, 9,10,10, - 11,12, 6, 7, 7,10,10, 7, 8, 8,10,10, 7, 8, 7,10, - 10, 9,10,10,12,11,10,10,10,11,10, 9,10,10,12,11, - 10,10,10,13,11, 9,10,10,12,12,11,11,12,12,13,11, - 11,11,12,13, 9,10,10,12,12,10,10,11,12,12,10,10, - 11,12,12,11,11,11,13,13,11,12,12,13,13, 5, 7, 7, - 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,11,12, - 12,10,11,10,12,12, 7, 8, 8,11,11, 7, 8, 9,10,11, - 8, 9, 9,11,11,11,10,11,10,12,10,11,11,12,13, 7, - 8, 8,10,11, 8, 9, 8,12,10, 8, 9, 9,11,12,10,11, - 10,13,11,10,11,11,13,12, 9,11,10,13,12,10,10,11, - 12,12,10,11,11,13,13,12,10,13,11,14,11,12,12,15, - 13, 9,11,11,13,13,10,11,11,13,12,10,11,11,12,14, - 12,13,11,14,12,12,12,12,14,14, 5, 7, 7,10,10, 7, - 8, 8,10,10, 7, 8, 8,11,10,10,11,11,12,12,10,11, - 10,12,12, 7, 8, 8,10,11, 8, 9, 9,12,11, 8, 8, 9, - 10,11,10,11,11,12,13,11,10,11,11,13, 6, 8, 8,10, - 11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,11,11,12,12, - 10,11,10,13,10, 9,11,10,13,12,10,12,11,13,13,10, - 10,11,12,13,11,12,13,15,14,11,11,13,12,13, 9,10, - 11,12,13,10,11,11,12,13,10,11,10,13,12,12,13,13, - 13,14,12,12,11,14,11, 8,10,10,12,13,10,11,11,13, - 13,10,11,10,13,13,12,13,14,15,14,12,12,12,14,13, - 9,10,10,13,12,10,10,12,13,13,10,11,11,15,12,12, - 12,13,15,14,12,13,13,15,13, 9,10,11,12,13,10,12, - 10,13,12,10,11,11,12,13,12,14,12,15,13,12,12,12, - 15,14,11,12,11,14,13,11,11,12,14,14,12,13,13,14, - 13,13,11,15,11,15,14,14,14,16,15,11,12,12,13,14, - 11,13,11,14,14,12,12,13,14,15,12,14,12,15,12,13, - 15,14,16,15, 8,10,10,12,12,10,10,10,12,13,10,11, - 11,13,13,12,12,12,13,14,13,13,13,15,15, 9,10,10, - 12,12,10,11,11,13,12,10,10,11,13,13,12,12,12,14, - 14,12,12,13,15,14, 9,10,10,13,12,10,10,12,12,13, - 10,11,10,13,13,12,13,13,14,14,12,13,12,14,13,11, - 12,12,14,13,12,13,12,14,14,10,12,12,14,14,14,14, - 14,16,14,13,12,14,12,15,10,12,12,14,15,12,13,13, - 14,16,11,12,11,15,14,13,14,14,14,15,13,14,11,14, - 12, -}; - -static float _vq_quantthresh__8u0__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8u0__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p4_0 = { - _vq_quantthresh__8u0__p4_0, - _vq_quantmap__8u0__p4_0, - 5, - 5 -}; - -static static_codebook _8u0__p4_0 = { - 4, 625, - _vq_lengthlist__8u0__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8u0__p4_0, - NULL, - &_vq_auxt__8u0__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8u0__p5_0[] = { - 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 7, 8, 8, - 10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 6, 8, 8, 9, 9, - 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8, - 9, 9,10,10,12,11, 7, 8, 8, 9, 9,10,10,11,11, 9, - 10,10,11,11,11,12,12,12, 9,10,10,11,11,12,12,12, - 12, -}; - -static float _vq_quantthresh__8u0__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8u0__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p5_0 = { - _vq_quantthresh__8u0__p5_0, - _vq_quantmap__8u0__p5_0, - 9, - 9 -}; - -static static_codebook _8u0__p5_0 = { - 2, 81, - _vq_lengthlist__8u0__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8u0__p5_0, - NULL, - &_vq_auxt__8u0__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__8u0__p6_0[] = { - 1, 4, 4, 7, 7, 9, 9,11,11,12,12,16,16, 3, 6, 6, - 9, 9,11,11,12,12,13,14,18,16, 3, 6, 7, 9, 9,11, - 11,13,12,14,14,17,16, 7, 9, 9,11,11,12,12,14,14, - 14,14,17,16, 7, 9, 9,11,11,13,12,13,13,14,14,17, - 0, 9,11,11,12,13,14,14,14,13,15,14,17,17, 9,11, - 11,12,12,14,14,13,14,14,15, 0, 0,11,12,12,15,14, - 15,14,15,14,15,16,17, 0,11,12,13,13,13,14,14,15, - 14,15,15, 0, 0,12,14,14,15,15,14,16,15,15,17,16, - 0,18,13,14,14,15,14,15,14,15,16,17,16, 0, 0,17, - 17,18, 0,16,18,16, 0, 0, 0,17, 0, 0,16, 0, 0,16, - 16, 0,15, 0,17, 0, 0, 0, 0, -}; - -static float _vq_quantthresh__8u0__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__8u0__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p6_0 = { - _vq_quantthresh__8u0__p6_0, - _vq_quantmap__8u0__p6_0, - 13, - 13 -}; - -static static_codebook _8u0__p6_0 = { - 2, 169, - _vq_lengthlist__8u0__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__8u0__p6_0, - NULL, - &_vq_auxt__8u0__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8u0__p6_1[] = { - 1, 4, 4, 6, 6, 4, 6, 5, 7, 7, 4, 5, 6, 7, 7, 6, - 7, 7, 7, 7, 6, 7, 7, 7, 7, -}; - -static float _vq_quantthresh__8u0__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8u0__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p6_1 = { - _vq_quantthresh__8u0__p6_1, - _vq_quantmap__8u0__p6_1, - 5, - 5 -}; - -static static_codebook _8u0__p6_1 = { - 2, 25, - _vq_lengthlist__8u0__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8u0__p6_1, - NULL, - &_vq_auxt__8u0__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8u0__p7_0[] = { - 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__8u0__p7_0[] = { - -157.5, 157.5, -}; - -static long _vq_quantmap__8u0__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p7_0 = { - _vq_quantthresh__8u0__p7_0, - _vq_quantmap__8u0__p7_0, - 3, - 3 -}; - -static static_codebook _8u0__p7_0 = { - 4, 81, - _vq_lengthlist__8u0__p7_0, - 1, -518803456, 1628680192, 2, 0, - _vq_quantlist__8u0__p7_0, - NULL, - &_vq_auxt__8u0__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p7_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__8u0__p7_1[] = { - 1, 5, 5, 5, 5,10,10,11,11,11,11,11,11,11,11, 5, - 7, 6, 8, 8, 9,10,11,11,11,11,11,11,11,11, 6, 6, - 7, 9, 7,11,10,11,11,11,11,11,11,11,11, 5, 6, 6, - 11, 8,11,11,11,11,11,11,11,11,11,11, 5, 6, 6, 9, - 10,11,10,11,11,11,11,11,11,11,11, 7,10,10,11,11, - 11,11,11,11,11,11,11,11,11,11, 7,11, 8,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__8u0__p7_1[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__8u0__p7_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p7_1 = { - _vq_quantthresh__8u0__p7_1, - _vq_quantmap__8u0__p7_1, - 15, - 15 -}; - -static static_codebook _8u0__p7_1 = { - 2, 225, - _vq_lengthlist__8u0__p7_1, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__8u0__p7_1, - NULL, - &_vq_auxt__8u0__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__8u0__p7_2[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__8u0__p7_2[] = { - 1, 6, 5, 7, 7, 9, 9, 9, 9,10,12,12,10,11,11,10, - 11,11,11,10,11, 6, 8, 8, 9, 9,10,10, 9,10,11,11, - 10,11,11,11,11,10,11,11,11,11, 6, 7, 8, 9, 9, 9, - 10,11,10,11,12,11,10,11,11,11,11,11,11,12,10, 8, - 9, 9,10, 9,10,10, 9,10,10,10,10,10, 9,10,10,10, - 10, 9,10,10, 9, 9, 9, 9,10,10, 9, 9,10,10,11,10, - 9,12,10,11,10, 9,10,10,10, 8, 9, 9,10, 9,10, 9, - 9,10,10, 9,10, 9,11,10,10,10,10,10, 9,10, 8, 8, - 9, 9,10, 9,11, 9, 8, 9, 9,10,11,10,10,10,11,12, - 9, 9,11, 8, 9, 8,11,10,11,10,10, 9,11,10,10,10, - 10,10,10,10,11,11,11,11, 8, 9, 9, 9,10,10,10,11, - 11,12,11,12,11,10,10,10,12,11,11,11,10, 8,10, 9, - 11,10,10,11,12,10,11,12,11,11,12,11,12,12,10,11, - 11,10, 9, 9,10,11,12,10,10,10,11,10,11,11,10,12, - 12,10,11,10,11,12,10, 9,10,10,11,10,11,11,11,11, - 11,12,11,11,11, 9,11,10,11,10,11,10, 9, 9,10,11, - 11,11,10,10,11,12,12,11,12,11,11,11,12,12,12,12, - 11, 9,11,11,12,10,11,11,11,11,11,11,12,11,11,12, - 11,11,11,10,11,11, 9,11,10,11,11,11,10,10,10,11, - 11,11,12,10,11,10,11,11,11,11,12, 9,11,10,11,11, - 10,10,11,11, 9,11,11,12,10,10,10,10,10,11,11,10, - 9,10,11,11,12,11,10,10,12,11,11,12,11,12,11,11, - 10,10,11,11,10,12,11,10,11,10,11,10,10,10,11,11, - 10,10,11,11,11,11,10,10,10,12,11,11,11,11,10, 9, - 10,11,11,11,12,11,11,11,12,10,11,11,11, 9,10,11, - 11,11,11,11,11,10,10,11,11,12,11,10,11,12,11,10, - 10,11, 9,10,11,11,11,11,11,10,11,11,10,12,11,11, - 11,12,11,11,11,10,10,11,11, -}; - -static float _vq_quantthresh__8u0__p7_2[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__8u0__p7_2[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__8u0__p7_2 = { - _vq_quantthresh__8u0__p7_2, - _vq_quantmap__8u0__p7_2, - 21, - 21 -}; - -static static_codebook _8u0__p7_2 = { - 2, 441, - _vq_lengthlist__8u0__p7_2, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__8u0__p7_2, - NULL, - &_vq_auxt__8u0__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__8u0__single[] = { - 4, 7,11, 9,12, 8, 7,10, 6, 4, 5, 5, 7, 5, 6,16, - 9, 5, 5, 6, 7, 7, 9,16, 7, 4, 6, 5, 7, 5, 7,17, - 10, 7, 7, 8, 7, 7, 8,18, 7, 5, 6, 4, 5, 4, 5,15, - 7, 6, 7, 5, 6, 4, 5,15,12,13,18,12,17,11, 9,17, -}; - -static static_codebook _huff_book__8u0__single = { - 2, 64, - _huff_lengthlist__8u0__single, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8u1__p1_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 7, 9,10, 7, - 9, 9, 5, 8, 8, 7,10, 9, 7, 9, 9, 5, 8, 8, 8,10, - 10, 8,10,10, 7,10,10, 9,10,12,10,12,12, 7,10,10, - 9,12,11,10,12,12, 5, 8, 8, 8,10,10, 8,10,10, 7, - 10,10,10,12,12, 9,11,12, 7,10,10,10,12,12, 9,12, - 10, -}; - -static float _vq_quantthresh__8u1__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__8u1__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p1_0 = { - _vq_quantthresh__8u1__p1_0, - _vq_quantmap__8u1__p1_0, - 3, - 3 -}; - -static static_codebook _8u1__p1_0 = { - 4, 81, - _vq_lengthlist__8u1__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__8u1__p1_0, - NULL, - &_vq_auxt__8u1__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8u1__p2_0[] = { - 3, 4, 5, 5, 6, 6, 5, 6, 6, 5, 7, 6, 6, 7, 8, 6, - 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 7, 8, - 8, 6, 7, 7, 6, 8, 7, 7, 7, 9, 8, 9, 9, 6, 7, 8, - 7, 9, 7, 8, 9, 9, 5, 6, 6, 6, 7, 7, 7, 8, 8, 6, - 8, 7, 8, 9, 9, 7, 7, 9, 6, 7, 8, 8, 9, 9, 7, 9, - 7, -}; - -static float _vq_quantthresh__8u1__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__8u1__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p2_0 = { - _vq_quantthresh__8u1__p2_0, - _vq_quantmap__8u1__p2_0, - 3, - 3 -}; - -static static_codebook _8u1__p2_0 = { - 4, 81, - _vq_lengthlist__8u1__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__8u1__p2_0, - NULL, - &_vq_auxt__8u1__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8u1__p3_0[] = { - 1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8, - 10, 9,11,11, 9, 9, 9,11,11, 6, 8, 8,10,10, 8,10, - 10,11,11, 8, 9,10,11,11,10,11,11,12,12,10,11,11, - 12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11, - 11,10,11,11,12,12,10,11,11,12,12, 9,11,11,14,13, - 10,12,11,14,14,10,12,11,14,13,12,13,13,15,14,12, - 13,13,15,14, 8,11,11,13,14,10,11,12,13,15,10,11, - 12,14,14,12,13,13,14,15,12,13,13,14,15, 5, 8, 8, - 11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14, - 13,11,12,12,13,14, 8,10,10,12,12, 9,11,12,13,14, - 10,12,12,13,13,12,12,13,14,14,11,13,13,15,15, 7, - 10,10,12,12, 9,12,11,14,12,10,11,12,13,14,12,13, - 12,14,14,12,13,13,15,16,10,12,12,15,14,11,12,13, - 15,15,11,13,13,15,16,14,14,15,15,16,13,14,15,17, - 15, 9,12,12,14,15,11,13,12,15,15,11,13,13,15,15, - 13,14,13,15,14,13,14,14,17, 0, 5, 8, 8,11,11, 8, - 10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12, - 12,14,14, 7,10,10,12,12,10,12,12,13,13, 9,11,12, - 12,13,11,12,13,15,15,11,12,13,14,15, 8,10,10,12, - 12,10,12,11,13,13,10,12,11,13,13,11,13,13,15,14, - 12,13,12,15,13, 9,12,12,14,14,11,13,13,16,15,11, - 12,13,16,15,13,14,15,16,16,13,13,15,15,16,10,12, - 12,15,14,11,13,13,14,16,11,13,13,15,16,13,15,15, - 16,17,13,15,14,16,15, 8,11,11,14,15,10,12,12,15, - 15,10,12,12,15,16,14,15,15,16,17,13,14,14,16,16, - 9,12,12,15,15,11,13,14,15,17,11,13,13,15,16,14, - 15,16,19,17,13,15,15, 0,17, 9,12,12,15,15,11,14, - 13,16,15,11,13,13,15,16,15,15,15,18,17,13,15,15, - 17,17,11,15,14,18,16,12,14,15,17,17,12,15,15,18, - 18,15,15,16,15,19,14,16,16, 0, 0,11,14,14,16,17, - 12,15,14,18,17,12,15,15,18,18,15,17,15,18,16,14, - 16,16,18,18, 7,11,11,14,14,10,12,12,15,15,10,12, - 13,15,15,13,14,15,16,16,14,15,15,18,18, 9,12,12, - 15,15,11,13,13,16,15,11,12,13,16,16,14,15,15,17, - 16,15,16,16,17,17, 9,12,12,15,15,11,13,13,15,17, - 11,14,13,16,15,13,15,15,17,17,15,15,15,18,17,11, - 14,14,17,15,12,14,15,17,18,13,13,15,17,17,14,16, - 16,19,18,16,15,17,17, 0,11,14,14,17,17,12,15,15, - 18, 0,12,15,14,18,16,14,17,17,19, 0,16,18,15, 0, - 16, -}; - -static float _vq_quantthresh__8u1__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8u1__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p3_0 = { - _vq_quantthresh__8u1__p3_0, - _vq_quantmap__8u1__p3_0, - 5, - 5 -}; - -static static_codebook _8u1__p3_0 = { - 4, 625, - _vq_lengthlist__8u1__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8u1__p3_0, - NULL, - &_vq_auxt__8u1__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__8u1__p4_0[] = { - 4, 5, 5, 9, 9, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 9, - 9, 9,11,11, 9, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 7, - 8, 9,10, 7, 7, 8, 9,10, 9, 9,10,10,11, 9, 9,10, - 10,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 7,10, - 9, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11, - 9,10,10,12,11, 9,10,10,12,12,11,11,12,12,13,11, - 11,12,12,13, 9, 9,10,12,11, 9,10,10,12,12,10,10, - 10,12,12,11,12,11,13,12,11,12,11,13,12, 6, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 7,10, 9,10,10,10,12, - 12,10,10,10,12,11, 7, 8, 7,10,10, 7, 7, 9,10,11, - 8, 9, 9,11,10,10,10,11,10,12,10,10,11,12,12, 7, - 8, 8,10,10, 7, 9, 8,11,10, 8, 8, 9,11,11,10,11, - 10,12,11,10,11,11,12,12, 9,10,10,12,12, 9,10,10, - 12,12,10,11,11,13,12,11,10,12,10,14,12,12,12,13, - 14, 9,10,10,12,12, 9,11,10,12,12,10,11,11,12,12, - 11,12,11,14,12,12,12,12,14,14, 5, 7, 7, 9, 9, 7, - 7, 7, 9,10, 7, 8, 8,10,10,10,10,10,11,11,10,10, - 10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9, - 10,11,10,10,10,11,12,10,10,11,11,13, 6, 7, 8,10, - 10, 8, 9, 9,10,10, 7, 9, 7,11,10,10,11,10,12,12, - 10,11,10,12,10, 9,10,10,12,12,10,11,11,13,12, 9, - 10,10,12,12,12,12,12,14,13,11,11,12,11,14, 9,10, - 10,11,12,10,11,11,12,13, 9,10,10,12,12,12,12,12, - 14,13,11,12,10,14,11, 9, 9,10,11,12, 9,10,10,12, - 12, 9,10,10,12,12,12,12,12,14,14,11,12,12,13,12, - 9,10, 9,12,12, 9,10,11,12,13,10,11,10,13,11,12, - 12,13,13,14,12,12,12,13,13, 9,10,10,12,12,10,11, - 10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,12, - 13,14,11,12,11,14,13,10,10,11,13,13,12,12,12,14, - 13,12,10,14,10,15,13,14,14,14,14,11,11,12,13,14, - 10,12,11,13,13,12,12,12,13,15,12,13,11,15,12,13, - 13,14,14,14, 9,10, 9,12,12, 9,10,10,12,12,10,10, - 10,12,12,11,11,12,12,13,12,12,12,14,14, 9,10,10, - 12,12,10,11,10,13,12,10,10,11,12,13,12,12,12,14, - 13,12,12,13,13,14, 9,10,10,12,13,10,10,11,11,12, - 9,11,10,13,12,12,12,12,13,14,12,13,12,14,13,11, - 12,11,13,13,12,13,12,14,13,10,11,12,13,13,13,13, - 13,14,15,12,11,14,12,14,11,11,12,12,13,12,12,12, - 13,14,10,12,10,14,13,13,13,13,14,15,12,14,11,15, - 10, -}; - -static float _vq_quantthresh__8u1__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__8u1__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p4_0 = { - _vq_quantthresh__8u1__p4_0, - _vq_quantmap__8u1__p4_0, - 5, - 5 -}; - -static static_codebook _8u1__p4_0 = { - 4, 625, - _vq_lengthlist__8u1__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__8u1__p4_0, - NULL, - &_vq_auxt__8u1__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8u1__p5_0[] = { - 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 5, 8, 7, 8, 8, - 10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9, - 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8, - 9, 9,10,10,12,11, 8, 8, 8, 9, 9,10,10,11,11, 9, - 10,10,11,11,11,11,13,12, 9,10,10,11,11,12,12,12, - 13, -}; - -static float _vq_quantthresh__8u1__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8u1__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p5_0 = { - _vq_quantthresh__8u1__p5_0, - _vq_quantmap__8u1__p5_0, - 9, - 9 -}; - -static static_codebook _8u1__p5_0 = { - 2, 81, - _vq_lengthlist__8u1__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8u1__p5_0, - NULL, - &_vq_auxt__8u1__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p6_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__8u1__p6_0[] = { - 3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 5, 6, 6, 7, 7, - 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7, - 8, 8, 9, 9, 6, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7, - 8, 8, 8, 9,10,10, 7, 7, 7, 8, 8, 9, 8,10,10, 9, - 9, 9, 9, 9,10,10,10,10, 9, 9, 9, 9, 9,10,10,10, - 10, -}; - -static float _vq_quantthresh__8u1__p6_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__8u1__p6_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p6_0 = { - _vq_quantthresh__8u1__p6_0, - _vq_quantmap__8u1__p6_0, - 9, - 9 -}; - -static static_codebook _8u1__p6_0 = { - 2, 81, - _vq_lengthlist__8u1__p6_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__8u1__p6_0, - NULL, - &_vq_auxt__8u1__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__8u1__p7_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,10,10, 8, - 10,10, 5, 9, 9, 7,10,10, 8,10,10, 4,10,10, 9,12, - 12, 9,11,11, 7,12,11,10,11,13,10,13,13, 7,12,12, - 10,13,12,10,13,13, 4,10,10, 9,12,12, 9,12,12, 7, - 12,12,10,13,13,10,12,13, 7,11,12,10,13,13,10,13, - 11, -}; - -static float _vq_quantthresh__8u1__p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__8u1__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p7_0 = { - _vq_quantthresh__8u1__p7_0, - _vq_quantmap__8u1__p7_0, - 3, - 3 -}; - -static static_codebook _8u1__p7_0 = { - 4, 81, - _vq_lengthlist__8u1__p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__8u1__p7_0, - NULL, - &_vq_auxt__8u1__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__8u1__p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7, - 8, 8, 9, 9, 9, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 9, - 9, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9, - 9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10, - 10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9, - 9, 9, 9, 9, 9,10,10,10,10, -}; - -static float _vq_quantthresh__8u1__p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__8u1__p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p7_1 = { - _vq_quantthresh__8u1__p7_1, - _vq_quantmap__8u1__p7_1, - 11, - 11 -}; - -static static_codebook _8u1__p7_1 = { - 2, 121, - _vq_lengthlist__8u1__p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__8u1__p7_1, - NULL, - &_vq_auxt__8u1__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p8_0[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__8u1__p8_0[] = { - 1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7, - 9, 9,11,11,13,12, 4, 6, 6, 7, 7, 9, 9,11,11,12, - 12, 6, 7, 7, 9, 9,11,11,12,12,13,13, 6, 7, 7, 9, - 9,11,11,12,12,13,13, 8, 9, 9,11,11,12,12,13,13, - 14,14, 8, 9, 9,11,11,12,12,13,13,14,14, 9,11,11, - 12,12,13,13,14,14,15,15, 9,11,11,12,12,13,13,14, - 14,15,14,11,12,12,13,13,14,14,15,15,16,16,11,12, - 12,13,13,14,14,15,15,15,15, -}; - -static float _vq_quantthresh__8u1__p8_0[] = { - -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, - 38.5, 49.5, -}; - -static long _vq_quantmap__8u1__p8_0[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p8_0 = { - _vq_quantthresh__8u1__p8_0, - _vq_quantmap__8u1__p8_0, - 11, - 11 -}; - -static static_codebook _8u1__p8_0 = { - 2, 121, - _vq_lengthlist__8u1__p8_0, - 1, -524582912, 1618345984, 4, 0, - _vq_quantlist__8u1__p8_0, - NULL, - &_vq_auxt__8u1__p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p8_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__8u1__p8_1[] = { - 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 7, - 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, - 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, - 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, - 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__8u1__p8_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__8u1__p8_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p8_1 = { - _vq_quantthresh__8u1__p8_1, - _vq_quantmap__8u1__p8_1, - 11, - 11 -}; - -static static_codebook _8u1__p8_1 = { - 2, 121, - _vq_lengthlist__8u1__p8_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__8u1__p8_1, - NULL, - &_vq_auxt__8u1__p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p9_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__8u1__p9_0[] = { - 1, 4, 4,11,11,11,11,11,11,11,11,11,11,11,11, 3, - 11, 8,11,11,11,11,11,11,11,11,11,11,11,11, 3, 9, - 9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__8u1__p9_0[] = { - -1657.5, -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, - 382.5, 637.5, 892.5, 1147.5, 1402.5, 1657.5, -}; - -static long _vq_quantmap__8u1__p9_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p9_0 = { - _vq_quantthresh__8u1__p9_0, - _vq_quantmap__8u1__p9_0, - 15, - 15 -}; - -static static_codebook _8u1__p9_0 = { - 2, 225, - _vq_lengthlist__8u1__p9_0, - 1, -514071552, 1627381760, 4, 0, - _vq_quantlist__8u1__p9_0, - NULL, - &_vq_auxt__8u1__p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__8u1__p9_1[] = { - 1, 4, 4, 7, 7, 9, 9, 7, 7, 8, 8,10,10,11,11, 4, - 7, 7, 9, 9,10,10, 8, 8,10,10,10,11,10,11, 4, 7, - 7, 9, 9,10,10, 8, 8,10, 9,11,11,11,11, 7, 9, 9, - 12,12,11,12,10,10,11,10,12,11,11,11, 7, 9, 9,11, - 11,13,12, 9, 9,11,10,11,11,12,11, 9,10,10,12,12, - 14,14,10,10,11,12,12,11,11,11, 9,10,11,11,13,14, - 13,10,11,11,11,12,11,12,12, 7, 8, 8,10, 9,11,10, - 11,12,12,11,12,14,12,13, 7, 8, 8, 9,10,10,11,12, - 12,12,11,12,12,12,13, 9, 9, 9,11,11,13,12,12,12, - 12,11,12,12,13,12, 8,10,10,11,10,11,12,12,12,12, - 12,12,14,12,12, 9,11,11,11,12,12,12,12,13,13,12, - 12,13,13,12,10,11,11,12,11,12,12,12,11,12,13,12, - 12,12,13,11,11,12,12,12,13,12,12,11,12,13,13,12, - 12,13,12,11,12,12,13,13,12,13,12,13,13,13,13,14, - 13, -}; - -static float _vq_quantthresh__8u1__p9_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__8u1__p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p9_1 = { - _vq_quantthresh__8u1__p9_1, - _vq_quantmap__8u1__p9_1, - 15, - 15 -}; - -static static_codebook _8u1__p9_1 = { - 2, 225, - _vq_lengthlist__8u1__p9_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__8u1__p9_1, - NULL, - &_vq_auxt__8u1__p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__8u1__p9_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__8u1__p9_2[] = { - 2, 5, 4, 6, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 9,10,10, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,10,10, 8, 8, 8, 9, 9, 9, 9,10,10,10, 9, - 10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10, - 10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,10, - 10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, - 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10, - 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, - 10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__8u1__p9_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__8u1__p9_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__8u1__p9_2 = { - _vq_quantthresh__8u1__p9_2, - _vq_quantmap__8u1__p9_2, - 17, - 17 -}; - -static static_codebook _8u1__p9_2 = { - 2, 289, - _vq_lengthlist__8u1__p9_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__8u1__p9_2, - NULL, - &_vq_auxt__8u1__p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__8u1__single[] = { - 4, 7,13, 9,15, 9,16, 8,10,13, 7, 5, 8, 6, 9, 7, - 10, 7,10,11,11, 6, 7, 8, 8, 9, 9, 9,12,16, 8, 5, - 8, 6, 8, 6, 9, 7,10,12,11, 7, 7, 7, 6, 7, 7, 7, - 11,15, 7, 5, 8, 6, 7, 5, 7, 6, 9,13,13, 9, 9, 8, - 6, 6, 5, 5, 9,14, 8, 6, 8, 6, 6, 4, 5, 3, 5,13, - 9, 9,11, 8,10, 7, 8, 4, 5,12,11,16,17,15,17,12, - 13, 8, 8,15, -}; - -static static_codebook _huff_book__8u1__single = { - 2, 100, - _huff_lengthlist__8u1__single, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u0__long[] = { - 5, 8,13,10,17,11,11,15, 7, 2, 4, 5, 8, 7, 9,16, - 13, 4, 3, 5, 6, 8,11,20,10, 4, 5, 5, 7, 6, 8,18, - 15, 7, 6, 7, 8,10,14,20,10, 6, 7, 6, 9, 7, 8,17, - 9, 8,10, 8,10, 5, 4,11,12,17,19,14,16,10, 7,12, -}; - -static static_codebook _huff_book__44u0__long = { - 2, 64, - _huff_lengthlist__44u0__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u0__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8, - 10,10, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11, - 11, 8,11,11, 8,12,11,11,13,13,11,13,14, 7,11,11, - 10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,12, 8, - 11,11,11,13,13,10,12,13, 8,11,11,11,14,13,11,14, - 13, -}; - -static float _vq_quantthresh__44u0__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u0__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p1_0 = { - _vq_quantthresh__44u0__p1_0, - _vq_quantmap__44u0__p1_0, - 3, - 3 -}; - -static static_codebook _44u0__p1_0 = { - 4, 81, - _vq_lengthlist__44u0__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u0__p1_0, - NULL, - &_vq_auxt__44u0__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u0__p2_0[] = { - 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6, - 8, 8, 5, 7, 7, 6, 8, 8, 7, 8, 8, 4, 7, 7, 7, 8, - 8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8, - 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6, - 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10, - 9, -}; - -static float _vq_quantthresh__44u0__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u0__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p2_0 = { - _vq_quantthresh__44u0__p2_0, - _vq_quantmap__44u0__p2_0, - 3, - 3 -}; - -static static_codebook _44u0__p2_0 = { - 4, 81, - _vq_lengthlist__44u0__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u0__p2_0, - NULL, - &_vq_auxt__44u0__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u0__p3_0[] = { - 1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9, - 10, 9,12,12, 9, 9,10,12,12, 6, 8, 8,11,10, 8,10, - 10,11,11, 8, 9,10,11,11,10,11,11,14,13,10,11,11, - 13,13, 5, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11, - 11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14, - 10,12,12,15,14,10,12,11,15,14,13,14,14,16,16,12, - 14,13,17,15, 9,11,11,14,15,10,11,12,14,16,10,11, - 12,14,16,12,13,14,16,16,13,13,15,15,18, 5, 8, 8, - 11,11, 8,10,10,12,12, 8,10,10,12,13,11,12,12,14, - 14,11,12,12,15,15, 8,10,10,13,13,10,12,12,13,13, - 10,12,12,14,14,12,13,13,15,15,12,13,13,16,16, 7, - 10,10,12,12,10,12,11,13,13,10,12,12,13,14,12,13, - 12,15,14,12,13,13,16,16,10,12,12,17,16,12,13,13, - 16,15,11,13,13,17,17,15,15,15,16,17,14,15,15,19, - 19,10,12,12,15,16,11,13,12,15,18,11,13,13,16,16, - 14,15,15,17,17,14,15,15,17,19, 5, 8, 8,11,11, 8, - 10,10,12,12, 8,10,10,12,12,11,12,12,16,15,11,12, - 12,14,15, 7,10,10,13,13,10,12,12,14,13,10,11,12, - 13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,13, - 13,10,12,12,14,14,10,12,12,13,13,12,13,13,16,16, - 12,13,13,15,15,10,12,12,16,15,11,13,13,17,16,11, - 12,13,16,15,13,15,15,19,17,14,15,14,17,16,10,12, - 12,16,16,11,13,13,16,17,12,13,13,15,17,14,15,15, - 17,19,14,15,15,17,17, 8,11,11,16,16,10,13,12,17, - 17,10,12,13,16,16,15,17,16,20,19,14,15,17,18,19, - 9,12,12,16,17,11,13,14,17,18,11,13,13,19,18,16, - 17,18,19,19,15,16,16,19,19, 9,12,12,16,17,11,14, - 13,18,17,11,13,13,17,17,16,17,16,20,19,14,16,16, - 18,18,12,15,15,19,17,14,15,16, 0,20,13,15,16,20, - 17,18,16,20, 0, 0,15,16,19,20, 0,12,15,14,18,19, - 13,16,15,20,19,13,16,15,20,18,17,18,17, 0,20,16, - 17,16, 0, 0, 8,11,11,16,15,10,12,12,17,17,10,13, - 13,17,16,14,16,15,18,20,15,16,16,19,19, 9,12,12, - 16,16,11,13,13,17,16,11,13,14,17,18,15,15,16,20, - 20,16,16,17,19,19, 9,13,12,16,17,11,14,13,17,17, - 11,14,14,18,17,14,16,15,18,19,16,17,18,18,19,12, - 14,15,19,18,13,15,16,18, 0,13,14,15, 0, 0,16,16, - 17,20, 0,17,17,20,20, 0,12,15,15,19,20,13,15,15, - 0, 0,14,16,15, 0, 0,15,18,16, 0, 0,17,18,16, 0, - 19, -}; - -static float _vq_quantthresh__44u0__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u0__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p3_0 = { - _vq_quantthresh__44u0__p3_0, - _vq_quantmap__44u0__p3_0, - 5, - 5 -}; - -static static_codebook _44u0__p3_0 = { - 4, 625, - _vq_lengthlist__44u0__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u0__p3_0, - NULL, - &_vq_auxt__44u0__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u0__p4_0[] = { - 4, 5, 5, 9, 9, 5, 6, 6, 9, 9, 5, 6, 6, 9, 9, 9, - 10, 9,12,12, 9, 9,10,12,12, 5, 7, 7,10,10, 7, 7, - 8,10,10, 6, 7, 8,10,10,10,10,10,11,13,10, 9,10, - 12,13, 5, 7, 7,10,10, 6, 8, 7,10,10, 7, 8, 7,10, - 10, 9,10,10,12,12,10,10,10,13,11, 9,10,10,13,13, - 10,11,10,13,13,10,10,10,13,13,12,12,13,14,14,12, - 12,13,14,14, 9,10,10,13,13,10,10,10,13,13,10,10, - 10,13,13,12,13,12,15,14,12,13,12,15,15, 5, 7, 6, - 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,13, - 13,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11, - 8, 9, 9,11,11,11,10,11,11,14,11,11,11,13,13, 6, - 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,14,11,10,11,11,13,13,10,11,11,14,13,10,10,11, - 14,13,10,11,11,14,14,12,11,13,12,16,13,14,14,15, - 15,10,10,11,13,14,10,11,10,14,13,10,11,11,14,14, - 12,13,12,15,13,13,13,14,15,16, 5, 7, 7,10,10, 7, - 8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,13,10,10, - 11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,10,11,11,13,13,10,10,11,11,13, 6, 8, 8,10, - 11, 8, 9, 9,11,11, 8, 9, 8,12,10,10,11,11,13,13, - 10,11,10,14,11,10,10,10,14,13,10,11,11,14,13,10, - 10,11,13,13,12,14,14,16,16,12,12,13,13,15,10,11, - 11,13,14,10,11,11,14,15,10,11,10,13,13,13,14,13, - 16,16,12,13,11,15,12, 9,10,10,13,13,10,11,11,14, - 13,10,10,11,13,14,13,14,13,16,16,13,13,13,15,16, - 9,10,10,13,13,10,10,11,13,14,10,11,11,15,13,13, - 13,14,14,18,13,13,14,16,15, 9,10,10,13,14,10,11, - 10,14,13,10,11,11,13,14,13,14,13,16,15,13,13,14, - 15,16,12,13,12,16,14,11,11,13,15,15,13,14,13,16, - 15,15,12,16,12,17,14,15,15,17,17,12,13,13,14,16, - 11,13,11,16,15,12,13,14,15,16,14,15,13, 0,14,14, - 16,16, 0, 0, 9,10,10,13,13,10,11,10,14,14,10,11, - 11,13,13,12,13,13,14,16,13,14,14,16,16, 9,10,10, - 14,14,11,11,11,14,13,10,10,11,14,14,13,13,13,16, - 16,13,13,14,14,17, 9,10,10,13,14,10,11,11,13,15, - 10,11,10,14,14,13,13,13,14,17,13,14,13,17,14,12, - 13,13,16,14,13,14,13,16,15,12,12,13,15,16,15,15, - 16,18,16,15,13,15,14, 0,12,12,13,14,16,13,13,14, - 15,16,11,12,11,16,14,15,16,16,17,17,14,15,12,17, - 12, -}; - -static float _vq_quantthresh__44u0__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u0__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p4_0 = { - _vq_quantthresh__44u0__p4_0, - _vq_quantmap__44u0__p4_0, - 5, - 5 -}; - -static static_codebook _44u0__p4_0 = { - 4, 625, - _vq_lengthlist__44u0__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u0__p4_0, - NULL, - &_vq_auxt__44u0__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u0__p5_0[] = { - 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8, - 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9, - 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 8, 8, - 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9, - 9, 9,10,10,11,11,12,12, 9, 9, 9,10,11,11,11,12, - 12, -}; - -static float _vq_quantthresh__44u0__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u0__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p5_0 = { - _vq_quantthresh__44u0__p5_0, - _vq_quantmap__44u0__p5_0, - 9, - 9 -}; - -static static_codebook _44u0__p5_0 = { - 2, 81, - _vq_lengthlist__44u0__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u0__p5_0, - NULL, - &_vq_auxt__44u0__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u0__p6_0[] = { - 1, 4, 4, 6, 6, 8, 8,10, 9,11,10,14,13, 4, 6, 5, - 8, 8, 9, 9,11,10,11,11,14,14, 4, 5, 6, 8, 8, 9, - 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11, - 12,12,16,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15, - 15, 9,10,10,10,10,11,11,12,12,12,12,15,15, 9,10, - 9,10,11,11,11,12,12,12,13,15,15,10,10,11,11,11, - 12,12,13,12,13,13,16,15,10,11,11,11,11,12,12,13, - 12,13,13,16,17,11,11,12,12,12,13,13,13,14,14,15, - 17,17,11,11,12,12,12,13,13,13,14,14,14,16,18,14, - 15,15,15,15,16,16,16,16,17,18, 0, 0,14,15,15,15, - 15,17,16,17,18,17,17,18, 0, -}; - -static float _vq_quantthresh__44u0__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u0__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p6_0 = { - _vq_quantthresh__44u0__p6_0, - _vq_quantmap__44u0__p6_0, - 13, - 13 -}; - -static static_codebook _44u0__p6_0 = { - 2, 169, - _vq_lengthlist__44u0__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u0__p6_0, - NULL, - &_vq_auxt__44u0__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u0__p6_1[] = { - 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 5, 6, 6, 6, 6, -}; - -static float _vq_quantthresh__44u0__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u0__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p6_1 = { - _vq_quantthresh__44u0__p6_1, - _vq_quantmap__44u0__p6_1, - 5, - 5 -}; - -static static_codebook _44u0__p6_1 = { - 2, 25, - _vq_lengthlist__44u0__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u0__p6_1, - NULL, - &_vq_auxt__44u0__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p7_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u0__p7_0[] = { - 1, 4, 4,11,11, 9,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11, 9,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__44u0__p7_0[] = { - -253.5, -84.5, 84.5, 253.5, -}; - -static long _vq_quantmap__44u0__p7_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p7_0 = { - _vq_quantthresh__44u0__p7_0, - _vq_quantmap__44u0__p7_0, - 5, - 5 -}; - -static static_codebook _44u0__p7_0 = { - 4, 625, - _vq_lengthlist__44u0__p7_0, - 1, -518709248, 1626677248, 3, 0, - _vq_quantlist__44u0__p7_0, - NULL, - &_vq_auxt__44u0__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p7_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u0__p7_1[] = { - 1, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 5, 7, 7, - 8, 7, 7, 7, 9, 8,10, 9,10,11, 5, 7, 7, 8, 8, 7, - 7, 8, 9,10,10,11,11, 6, 8, 8, 9, 9, 9, 9,11,10, - 12,12,15,12, 6, 8, 8, 9, 9, 9, 9,11,11,12,11,14, - 12, 7, 8, 8,10,10,12,12,13,13,13,15,13,13, 7, 8, - 8,10,10,11,11,13,12,14,15,15,15, 9,10,10,11,12, - 13,13,14,15,14,15,14,15, 8,10,10,12,12,14,14,15, - 14,14,15,15,14,10,12,12,14,14,15,14,15,15,15,14, - 15,15,10,12,12,13,14,15,14,15,15,14,15,15,15,12, - 15,13,15,14,15,15,15,15,15,15,15,15,13,13,15,15, - 15,15,15,15,15,15,15,15,15, -}; - -static float _vq_quantthresh__44u0__p7_1[] = { - -71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, - 32.5, 45.5, 58.5, 71.5, -}; - -static long _vq_quantmap__44u0__p7_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p7_1 = { - _vq_quantthresh__44u0__p7_1, - _vq_quantmap__44u0__p7_1, - 13, - 13 -}; - -static static_codebook _44u0__p7_1 = { - 2, 169, - _vq_lengthlist__44u0__p7_1, - 1, -523010048, 1618608128, 4, 0, - _vq_quantlist__44u0__p7_1, - NULL, - &_vq_auxt__44u0__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u0__p7_2[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u0__p7_2[] = { - 2, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 5, 5, 6, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 6, 5, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, 8, 8, 8, 9, 8, - 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8, - 8, 9, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, - 9, 9, 9, 9, 9, 9,10,10, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, - 9, 9, 9,10, 9, 9,10,10, 9, -}; - -static float _vq_quantthresh__44u0__p7_2[] = { - -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, - 2.5, 3.5, 4.5, 5.5, -}; - -static long _vq_quantmap__44u0__p7_2[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u0__p7_2 = { - _vq_quantthresh__44u0__p7_2, - _vq_quantmap__44u0__p7_2, - 13, - 13 -}; - -static static_codebook _44u0__p7_2 = { - 2, 169, - _vq_lengthlist__44u0__p7_2, - 1, -531103744, 1611661312, 4, 0, - _vq_quantlist__44u0__p7_2, - NULL, - &_vq_auxt__44u0__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u0__short[] = { - 12,13,14,13,17,12,15,17, 5, 5, 6,10,10,11,15,16, - 4, 3, 3, 7, 5, 7,10,16, 7, 7, 7,10, 9,11,12,16, - 6, 5, 5, 9, 5, 6,10,16, 8, 7, 7, 9, 6, 7, 9,16, - 11, 7, 3, 6, 4, 5, 8,16,12, 9, 4, 8, 5, 7, 9,16, -}; - -static static_codebook _huff_book__44u0__short = { - 2, 64, - _huff_lengthlist__44u0__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u1__long[] = { - 5, 8,13,10,17,11,11,15, 7, 2, 4, 5, 8, 7, 9,16, - 13, 4, 3, 5, 6, 8,11,20,10, 4, 5, 5, 7, 6, 8,18, - 15, 7, 6, 7, 8,10,14,20,10, 6, 7, 6, 9, 7, 8,17, - 9, 8,10, 8,10, 5, 4,11,12,17,19,14,16,10, 7,12, -}; - -static static_codebook _huff_book__44u1__long = { - 2, 64, - _huff_lengthlist__44u1__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u1__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8, - 10,10, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11, - 11, 8,11,11, 8,12,11,11,13,13,11,13,14, 7,11,11, - 10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,12, 8, - 11,11,11,13,13,10,12,13, 8,11,11,11,14,13,11,14, - 13, -}; - -static float _vq_quantthresh__44u1__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u1__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p1_0 = { - _vq_quantthresh__44u1__p1_0, - _vq_quantmap__44u1__p1_0, - 3, - 3 -}; - -static static_codebook _44u1__p1_0 = { - 4, 81, - _vq_lengthlist__44u1__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u1__p1_0, - NULL, - &_vq_auxt__44u1__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u1__p2_0[] = { - 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6, - 8, 8, 5, 7, 7, 6, 8, 8, 7, 8, 8, 4, 7, 7, 7, 8, - 8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8, - 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6, - 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10, - 9, -}; - -static float _vq_quantthresh__44u1__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u1__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p2_0 = { - _vq_quantthresh__44u1__p2_0, - _vq_quantmap__44u1__p2_0, - 3, - 3 -}; - -static static_codebook _44u1__p2_0 = { - 4, 81, - _vq_lengthlist__44u1__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u1__p2_0, - NULL, - &_vq_auxt__44u1__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u1__p3_0[] = { - 1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9, - 10, 9,12,12, 9, 9,10,12,12, 6, 8, 8,11,10, 8,10, - 10,11,11, 8, 9,10,11,11,10,11,11,14,13,10,11,11, - 13,13, 5, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11, - 11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14, - 10,12,12,15,14,10,12,11,15,14,13,14,14,16,16,12, - 14,13,17,15, 9,11,11,14,15,10,11,12,14,16,10,11, - 12,14,16,12,13,14,16,16,13,13,15,15,18, 5, 8, 8, - 11,11, 8,10,10,12,12, 8,10,10,12,13,11,12,12,14, - 14,11,12,12,15,15, 8,10,10,13,13,10,12,12,13,13, - 10,12,12,14,14,12,13,13,15,15,12,13,13,16,16, 7, - 10,10,12,12,10,12,11,13,13,10,12,12,13,14,12,13, - 12,15,14,12,13,13,16,16,10,12,12,17,16,12,13,13, - 16,15,11,13,13,17,17,15,15,15,16,17,14,15,15,19, - 19,10,12,12,15,16,11,13,12,15,18,11,13,13,16,16, - 14,15,15,17,17,14,15,15,17,19, 5, 8, 8,11,11, 8, - 10,10,12,12, 8,10,10,12,12,11,12,12,16,15,11,12, - 12,14,15, 7,10,10,13,13,10,12,12,14,13,10,11,12, - 13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,13, - 13,10,12,12,14,14,10,12,12,13,13,12,13,13,16,16, - 12,13,13,15,15,10,12,12,16,15,11,13,13,17,16,11, - 12,13,16,15,13,15,15,19,17,14,15,14,17,16,10,12, - 12,16,16,11,13,13,16,17,12,13,13,15,17,14,15,15, - 17,19,14,15,15,17,17, 8,11,11,16,16,10,13,12,17, - 17,10,12,13,16,16,15,17,16,20,19,14,15,17,18,19, - 9,12,12,16,17,11,13,14,17,18,11,13,13,19,18,16, - 17,18,19,19,15,16,16,19,19, 9,12,12,16,17,11,14, - 13,18,17,11,13,13,17,17,16,17,16,20,19,14,16,16, - 18,18,12,15,15,19,17,14,15,16, 0,20,13,15,16,20, - 17,18,16,20, 0, 0,15,16,19,20, 0,12,15,14,18,19, - 13,16,15,20,19,13,16,15,20,18,17,18,17, 0,20,16, - 17,16, 0, 0, 8,11,11,16,15,10,12,12,17,17,10,13, - 13,17,16,14,16,15,18,20,15,16,16,19,19, 9,12,12, - 16,16,11,13,13,17,16,11,13,14,17,18,15,15,16,20, - 20,16,16,17,19,19, 9,13,12,16,17,11,14,13,17,17, - 11,14,14,18,17,14,16,15,18,19,16,17,18,18,19,12, - 14,15,19,18,13,15,16,18, 0,13,14,15, 0, 0,16,16, - 17,20, 0,17,17,20,20, 0,12,15,15,19,20,13,15,15, - 0, 0,14,16,15, 0, 0,15,18,16, 0, 0,17,18,16, 0, - 19, -}; - -static float _vq_quantthresh__44u1__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u1__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p3_0 = { - _vq_quantthresh__44u1__p3_0, - _vq_quantmap__44u1__p3_0, - 5, - 5 -}; - -static static_codebook _44u1__p3_0 = { - 4, 625, - _vq_lengthlist__44u1__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u1__p3_0, - NULL, - &_vq_auxt__44u1__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u1__p4_0[] = { - 4, 5, 5, 9, 9, 5, 6, 6, 9, 9, 5, 6, 6, 9, 9, 9, - 10, 9,12,12, 9, 9,10,12,12, 5, 7, 7,10,10, 7, 7, - 8,10,10, 6, 7, 8,10,10,10,10,10,11,13,10, 9,10, - 12,13, 5, 7, 7,10,10, 6, 8, 7,10,10, 7, 8, 7,10, - 10, 9,10,10,12,12,10,10,10,13,11, 9,10,10,13,13, - 10,11,10,13,13,10,10,10,13,13,12,12,13,14,14,12, - 12,13,14,14, 9,10,10,13,13,10,10,10,13,13,10,10, - 10,13,13,12,13,12,15,14,12,13,12,15,15, 5, 7, 6, - 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,13, - 13,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11, - 8, 9, 9,11,11,11,10,11,11,14,11,11,11,13,13, 6, - 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,14,11,10,11,11,13,13,10,11,11,14,13,10,10,11, - 14,13,10,11,11,14,14,12,11,13,12,16,13,14,14,15, - 15,10,10,11,13,14,10,11,10,14,13,10,11,11,14,14, - 12,13,12,15,13,13,13,14,15,16, 5, 7, 7,10,10, 7, - 8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,13,10,10, - 11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,10,11,11,13,13,10,10,11,11,13, 6, 8, 8,10, - 11, 8, 9, 9,11,11, 8, 9, 8,12,10,10,11,11,13,13, - 10,11,10,14,11,10,10,10,14,13,10,11,11,14,13,10, - 10,11,13,13,12,14,14,16,16,12,12,13,13,15,10,11, - 11,13,14,10,11,11,14,15,10,11,10,13,13,13,14,13, - 16,16,12,13,11,15,12, 9,10,10,13,13,10,11,11,14, - 13,10,10,11,13,14,13,14,13,16,16,13,13,13,15,16, - 9,10,10,13,13,10,10,11,13,14,10,11,11,15,13,13, - 13,14,14,18,13,13,14,16,15, 9,10,10,13,14,10,11, - 10,14,13,10,11,11,13,14,13,14,13,16,15,13,13,14, - 15,16,12,13,12,16,14,11,11,13,15,15,13,14,13,16, - 15,15,12,16,12,17,14,15,15,17,17,12,13,13,14,16, - 11,13,11,16,15,12,13,14,15,16,14,15,13, 0,14,14, - 16,16, 0, 0, 9,10,10,13,13,10,11,10,14,14,10,11, - 11,13,13,12,13,13,14,16,13,14,14,16,16, 9,10,10, - 14,14,11,11,11,14,13,10,10,11,14,14,13,13,13,16, - 16,13,13,14,14,17, 9,10,10,13,14,10,11,11,13,15, - 10,11,10,14,14,13,13,13,14,17,13,14,13,17,14,12, - 13,13,16,14,13,14,13,16,15,12,12,13,15,16,15,15, - 16,18,16,15,13,15,14, 0,12,12,13,14,16,13,13,14, - 15,16,11,12,11,16,14,15,16,16,17,17,14,15,12,17, - 12, -}; - -static float _vq_quantthresh__44u1__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u1__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p4_0 = { - _vq_quantthresh__44u1__p4_0, - _vq_quantmap__44u1__p4_0, - 5, - 5 -}; - -static static_codebook _44u1__p4_0 = { - 4, 625, - _vq_lengthlist__44u1__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u1__p4_0, - NULL, - &_vq_auxt__44u1__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u1__p5_0[] = { - 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8, - 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9, - 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 8, 8, - 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9, - 9, 9,10,10,11,11,12,12, 9, 9, 9,10,11,11,11,12, - 12, -}; - -static float _vq_quantthresh__44u1__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u1__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p5_0 = { - _vq_quantthresh__44u1__p5_0, - _vq_quantmap__44u1__p5_0, - 9, - 9 -}; - -static static_codebook _44u1__p5_0 = { - 2, 81, - _vq_lengthlist__44u1__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u1__p5_0, - NULL, - &_vq_auxt__44u1__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u1__p6_0[] = { - 1, 4, 4, 6, 6, 8, 8,10, 9,11,10,14,13, 4, 6, 5, - 8, 8, 9, 9,11,10,11,11,14,14, 4, 5, 6, 8, 8, 9, - 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11, - 12,12,16,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15, - 15, 9,10,10,10,10,11,11,12,12,12,12,15,15, 9,10, - 9,10,11,11,11,12,12,12,13,15,15,10,10,11,11,11, - 12,12,13,12,13,13,16,15,10,11,11,11,11,12,12,13, - 12,13,13,16,17,11,11,12,12,12,13,13,13,14,14,15, - 17,17,11,11,12,12,12,13,13,13,14,14,14,16,18,14, - 15,15,15,15,16,16,16,16,17,18, 0, 0,14,15,15,15, - 15,17,16,17,18,17,17,18, 0, -}; - -static float _vq_quantthresh__44u1__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u1__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p6_0 = { - _vq_quantthresh__44u1__p6_0, - _vq_quantmap__44u1__p6_0, - 13, - 13 -}; - -static static_codebook _44u1__p6_0 = { - 2, 169, - _vq_lengthlist__44u1__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u1__p6_0, - NULL, - &_vq_auxt__44u1__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u1__p6_1[] = { - 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 5, 6, 6, 6, 6, -}; - -static float _vq_quantthresh__44u1__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u1__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p6_1 = { - _vq_quantthresh__44u1__p6_1, - _vq_quantmap__44u1__p6_1, - 5, - 5 -}; - -static static_codebook _44u1__p6_1 = { - 2, 25, - _vq_lengthlist__44u1__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u1__p6_1, - NULL, - &_vq_auxt__44u1__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p7_0[] = { - 3, - 2, - 4, - 1, - 5, - 0, - 6, -}; - -static long _vq_lengthlist__44u1__p7_0[] = { - 1, 3, 2, 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, -}; - -static float _vq_quantthresh__44u1__p7_0[] = { - -422.5, -253.5, -84.5, 84.5, 253.5, 422.5, -}; - -static long _vq_quantmap__44u1__p7_0[] = { - 5, 3, 1, 0, 2, 4, 6, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p7_0 = { - _vq_quantthresh__44u1__p7_0, - _vq_quantmap__44u1__p7_0, - 7, - 7 -}; - -static static_codebook _44u1__p7_0 = { - 2, 49, - _vq_lengthlist__44u1__p7_0, - 1, -518017024, 1626677248, 3, 0, - _vq_quantlist__44u1__p7_0, - NULL, - &_vq_auxt__44u1__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p7_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u1__p7_1[] = { - 1, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 5, 7, 7, - 8, 7, 7, 7, 9, 8,10, 9,10,11, 5, 7, 7, 8, 8, 7, - 7, 8, 9,10,10,11,11, 6, 8, 8, 9, 9, 9, 9,11,10, - 12,12,15,12, 6, 8, 8, 9, 9, 9, 9,11,11,12,11,14, - 12, 7, 8, 8,10,10,12,12,13,13,13,15,13,13, 7, 8, - 8,10,10,11,11,13,12,14,15,15,15, 9,10,10,11,12, - 13,13,14,15,14,15,14,15, 8,10,10,12,12,14,14,15, - 14,14,15,15,14,10,12,12,14,14,15,14,15,15,15,14, - 15,15,10,12,12,13,14,15,14,15,15,14,15,15,15,12, - 15,13,15,14,15,15,15,15,15,15,15,15,13,13,15,15, - 15,15,15,15,15,15,15,15,15, -}; - -static float _vq_quantthresh__44u1__p7_1[] = { - -71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, - 32.5, 45.5, 58.5, 71.5, -}; - -static long _vq_quantmap__44u1__p7_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p7_1 = { - _vq_quantthresh__44u1__p7_1, - _vq_quantmap__44u1__p7_1, - 13, - 13 -}; - -static static_codebook _44u1__p7_1 = { - 2, 169, - _vq_lengthlist__44u1__p7_1, - 1, -523010048, 1618608128, 4, 0, - _vq_quantlist__44u1__p7_1, - NULL, - &_vq_auxt__44u1__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u1__p7_2[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u1__p7_2[] = { - 2, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 5, 5, 6, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 6, 5, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, 8, 8, 8, 9, 8, - 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8, - 8, 9, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, - 9, 9, 9, 9, 9, 9,10,10, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, - 9, 9, 9,10, 9, 9,10,10, 9, -}; - -static float _vq_quantthresh__44u1__p7_2[] = { - -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, - 2.5, 3.5, 4.5, 5.5, -}; - -static long _vq_quantmap__44u1__p7_2[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u1__p7_2 = { - _vq_quantthresh__44u1__p7_2, - _vq_quantmap__44u1__p7_2, - 13, - 13 -}; - -static static_codebook _44u1__p7_2 = { - 2, 169, - _vq_lengthlist__44u1__p7_2, - 1, -531103744, 1611661312, 4, 0, - _vq_quantlist__44u1__p7_2, - NULL, - &_vq_auxt__44u1__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u1__short[] = { - 12,13,14,13,17,12,15,17, 5, 5, 6,10,10,11,15,16, - 4, 3, 3, 7, 5, 7,10,16, 7, 7, 7,10, 9,11,12,16, - 6, 5, 5, 9, 5, 6,10,16, 8, 7, 7, 9, 6, 7, 9,16, - 11, 7, 3, 6, 4, 5, 8,16,12, 9, 4, 8, 5, 7, 9,16, -}; - -static static_codebook _huff_book__44u1__short = { - 2, 64, - _huff_lengthlist__44u1__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u2__long[] = { - 5, 9,14,12,15,13,10,13, 7, 4, 5, 6, 8, 7, 8,12, - 13, 4, 3, 5, 5, 6, 9,15,12, 6, 5, 6, 6, 6, 7,14, - 14, 7, 4, 6, 4, 6, 8,15,12, 6, 6, 5, 5, 5, 6,14, - 9, 7, 8, 6, 7, 5, 4,10,10,13,14,14,15,10, 6, 8, -}; - -static static_codebook _huff_book__44u2__long = { - 2, 64, - _huff_lengthlist__44u2__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u2__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8, - 10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11, - 11, 8,11,11, 8,11,11,11,13,14,11,13,13, 7,11,11, - 10,13,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 8, - 11,11,11,14,13,10,12,13, 8,11,11,11,13,13,11,13, - 13, -}; - -static float _vq_quantthresh__44u2__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u2__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p1_0 = { - _vq_quantthresh__44u2__p1_0, - _vq_quantmap__44u2__p1_0, - 3, - 3 -}; - -static static_codebook _44u2__p1_0 = { - 4, 81, - _vq_lengthlist__44u2__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u2__p1_0, - NULL, - &_vq_auxt__44u2__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u2__p2_0[] = { - 2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6, - 8, 8, 5, 6, 6, 6, 8, 7, 7, 8, 8, 5, 6, 6, 7, 8, - 8, 6, 8, 8, 6, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8, - 7,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6, - 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10, - 9, -}; - -static float _vq_quantthresh__44u2__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u2__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p2_0 = { - _vq_quantthresh__44u2__p2_0, - _vq_quantmap__44u2__p2_0, - 3, - 3 -}; - -static static_codebook _44u2__p2_0 = { - 4, 81, - _vq_lengthlist__44u2__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u2__p2_0, - NULL, - &_vq_auxt__44u2__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u2__p3_0[] = { - 2, 4, 4, 7, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8, - 9, 9,12,11, 8, 9, 9,11,12, 5, 7, 7,10,10, 7, 9, - 9,11,11, 7, 9, 9,10,11,10,11,11,13,13, 9,10,11, - 12,13, 5, 7, 7,10,10, 7, 9, 9,11,10, 7, 9, 9,11, - 11, 9,11,10,13,13,10,11,11,13,13, 8,10,10,14,13, - 10,11,11,15,14, 9,11,11,15,14,13,14,13,16,14,12, - 13,13,15,16, 8,10,10,13,14, 9,11,11,14,15,10,11, - 11,14,15,12,13,13,15,15,12,13,14,15,16, 5, 7, 7, - 10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14, - 13,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13, - 9,11,11,13,13,12,13,12,14,14,11,12,13,15,15, 7, - 9, 9,12,12, 8,11,10,13,12, 9,11,11,13,13,11,13, - 12,15,13,11,13,13,15,16, 9,12,11,15,15,11,12,12, - 16,15,11,12,13,16,16,13,14,15,16,15,13,15,15,17, - 17, 9,11,11,14,15,10,12,12,15,15,11,13,12,15,16, - 13,15,14,16,16,13,15,15,17,19, 5, 7, 7,10,10, 7, - 9, 9,12,11, 7, 9, 9,11,11,10,11,11,14,14,10,11, - 11,13,14, 7, 9, 9,12,12, 9,11,11,13,13, 9,10,11, - 12,13,11,13,12,16,15,11,12,12,14,15, 7, 9, 9,12, - 12, 9,11,11,13,13, 9,11,11,13,12,11,13,12,15,16, - 12,13,13,15,14, 9,11,11,15,14,11,13,12,16,15,10, - 11,12,15,15,13,14,14,18,17,13,14,14,15,17,10,11, - 11,14,15,11,13,12,15,17,11,13,12,15,16,13,15,14, - 18,17,14,15,15,16,18, 7,10,10,14,14,10,12,12,15, - 15,10,12,12,15,15,14,15,15,18,17,13,15,15,16,16, - 9,11,11,16,15,11,13,13,16,18,11,13,13,16,16,15, - 16,16, 0, 0,14,15,16,18,17, 9,11,11,15,15,10,13, - 12,17,16,11,12,13,16,17,14,15,16,19,19,14,15,15, - 0,20,12,14,14, 0, 0,13,14,16,19,18,13,15,16,20, - 17,16,18, 0, 0, 0,15,16,17,18,19,11,14,14, 0,19, - 12,15,14,17,17,13,15,15, 0, 0,16,17,15,20,19,15, - 17,16,19, 0, 8,10,10,14,15,10,12,11,15,15,10,11, - 12,16,15,13,14,14,19,17,14,15,15, 0, 0, 9,11,11, - 16,15,11,13,13,17,16,10,12,13,16,17,14,15,15,18, - 18,14,15,16,20,19, 9,12,12, 0,15,11,13,13,16,17, - 11,13,13,19,17,14,16,16,18,17,15,16,16,17,19,11, - 14,14,18,18,13,14,15, 0, 0,12,14,15,19,18,15,16, - 19, 0,19,15,16,19,19,17,12,14,14,16,19,13,15,15, - 0,17,13,15,14,18,18,15,16,15, 0,18,16,17,17, 0, - 0, -}; - -static float _vq_quantthresh__44u2__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u2__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p3_0 = { - _vq_quantthresh__44u2__p3_0, - _vq_quantmap__44u2__p3_0, - 5, - 5 -}; - -static static_codebook _44u2__p3_0 = { - 4, 625, - _vq_lengthlist__44u2__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u2__p3_0, - NULL, - &_vq_auxt__44u2__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u2__p4_0[] = { - 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9, - 9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10, - 11,12, 5, 7, 7, 9, 9, 6, 8, 7,10,10, 7, 8, 8,10, - 10, 9,10,10,12,11, 9,10,10,12,11, 9,10,10,12,12, - 10,10,10,13,12, 9,10,10,12,13,12,12,12,14,14,11, - 12,12,13,14, 9,10,10,12,12, 9,10,10,12,13,10,10, - 10,12,13,11,12,12,14,13,12,12,12,14,13, 5, 7, 7, - 10, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12, - 12,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11, - 8, 9, 9,11,11,10,11,11,12,13,10,11,11,13,13, 6, - 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,13,11,10,11,11,13,13, 9,10,10,13,13,10,11,11, - 13,13,10,11,11,14,13,12,11,13,12,15,12,13,13,15, - 15, 9,10,10,12,13,10,11,10,13,13,10,11,11,13,13, - 12,13,11,15,13,12,13,13,15,15, 5, 7, 7, 9,10, 7, - 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10, - 11,12,12, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10, - 11, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,11,13,13, - 10,11,11,13,12, 9,10,10,13,12,10,11,11,14,13,10, - 10,11,13,13,12,13,13,15,15,12,11,13,12,14, 9,10, - 10,12,13,10,11,11,13,14,10,11,11,13,13,12,13,13, - 15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13, - 13, 9,10,10,13,13,12,13,13,15,15,12,12,12,14,14, - 9,10,10,13,13,10,11,11,13,14,10,11,11,14,12,13, - 13,14,14,16,12,13,13,15,14, 9,10,10,13,13,10,11, - 10,14,13,10,11,11,13,14,12,14,13,16,14,13,13,13, - 14,15,11,13,12,15,14,11,12,13,14,15,12,13,13,16, - 15,14,12,15,12,16,14,15,15,17,16,11,12,12,14,15, - 11,13,11,15,14,12,13,13,15,16,13,15,12,17,13,14, - 15,15,16,16, 8, 9, 9,12,12, 9,10,10,13,13, 9,10, - 10,13,13,12,13,12,14,14,12,13,13,15,15, 9,10,10, - 13,13,10,11,11,14,13,10,10,11,13,14,12,13,13,15, - 14,12,12,14,14,16, 9,10,10,13,13,10,11,11,13,14, - 10,11,11,14,13,13,13,13,15,15,13,14,13,16,14,11, - 12,12,14,14,12,13,13,16,15,11,12,13,14,15,14,15, - 15,16,16,14,13,15,13,17,11,12,12,14,15,12,13,13, - 15,16,11,13,12,15,15,14,15,14,16,16,14,15,12,17, - 13, -}; - -static float _vq_quantthresh__44u2__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u2__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p4_0 = { - _vq_quantthresh__44u2__p4_0, - _vq_quantmap__44u2__p4_0, - 5, - 5 -}; - -static static_codebook _44u2__p4_0 = { - 4, 625, - _vq_lengthlist__44u2__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u2__p4_0, - NULL, - &_vq_auxt__44u2__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u2__p5_0[] = { - 1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 8, 8, 8, - 10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9, - 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8, - 9, 9,10,11,12,12, 8, 8, 8, 9, 9,10,10,12,12,10, - 10,10,11,11,12,12,13,13,10,10,10,11,11,12,12,13, - 13, -}; - -static float _vq_quantthresh__44u2__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u2__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p5_0 = { - _vq_quantthresh__44u2__p5_0, - _vq_quantmap__44u2__p5_0, - 9, - 9 -}; - -static static_codebook _44u2__p5_0 = { - 2, 81, - _vq_lengthlist__44u2__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u2__p5_0, - NULL, - &_vq_auxt__44u2__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u2__p6_0[] = { - 1, 4, 4, 6, 6, 8, 8,10,10,11,11,14,13, 4, 6, 5, - 8, 8, 9, 9,11,10,12,11,15,14, 4, 5, 6, 8, 8, 9, - 9,11,11,11,11,14,14, 6, 8, 8,10, 9,11,11,11,11, - 12,12,15,15, 6, 8, 8, 9, 9,11,11,11,12,12,12,15, - 15, 8,10,10,11,11,11,11,12,12,13,13,15,16, 8,10, - 10,11,11,11,11,12,12,13,13,16,16,10,11,11,12,12, - 12,12,13,13,13,13,17,16,10,11,11,12,12,12,12,13, - 13,13,14,16,17,11,12,12,13,13,13,13,14,14,15,14, - 18,17,11,12,12,13,13,13,13,14,14,14,15,19,18,14, - 15,15,15,15,16,16,18,19,18,18, 0, 0,14,15,15,16, - 15,17,17,16,18,17,18, 0, 0, -}; - -static float _vq_quantthresh__44u2__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u2__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p6_0 = { - _vq_quantthresh__44u2__p6_0, - _vq_quantmap__44u2__p6_0, - 13, - 13 -}; - -static static_codebook _44u2__p6_0 = { - 2, 169, - _vq_lengthlist__44u2__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u2__p6_0, - NULL, - &_vq_auxt__44u2__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u2__p6_1[] = { - 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5, - 6, 5, 6, 6, 5, 5, 6, 6, 6, -}; - -static float _vq_quantthresh__44u2__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u2__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p6_1 = { - _vq_quantthresh__44u2__p6_1, - _vq_quantmap__44u2__p6_1, - 5, - 5 -}; - -static static_codebook _44u2__p6_1 = { - 2, 25, - _vq_lengthlist__44u2__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u2__p6_1, - NULL, - &_vq_auxt__44u2__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p7_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u2__p7_0[] = { - 1, 3, 2,12,12,12,12,12,12, 4,12,12,12,12,12,12, - 12,12, 5,12,12,12,12,12,12,12,12,12,12,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11, -}; - -static float _vq_quantthresh__44u2__p7_0[] = { - -591.5, -422.5, -253.5, -84.5, 84.5, 253.5, 422.5, 591.5, -}; - -static long _vq_quantmap__44u2__p7_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p7_0 = { - _vq_quantthresh__44u2__p7_0, - _vq_quantmap__44u2__p7_0, - 9, - 9 -}; - -static static_codebook _44u2__p7_0 = { - 2, 81, - _vq_lengthlist__44u2__p7_0, - 1, -516612096, 1626677248, 4, 0, - _vq_quantlist__44u2__p7_0, - NULL, - &_vq_auxt__44u2__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p7_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u2__p7_1[] = { - 1, 4, 4, 7, 6, 7, 6, 8, 7, 9, 7, 9, 8, 4, 7, 6, - 8, 8, 9, 8,10, 9,10,10,11,11, 4, 7, 7, 8, 8, 8, - 8, 9,10,11,11,11,11, 6, 8, 8,10,10,10,10,11,11, - 12,12,12,12, 7, 8, 8,10,10,10,10,11,11,12,12,13, - 13, 7, 9, 9,11,10,12,12,13,13,14,13,14,14, 7, 9, - 9,10,11,11,12,13,13,13,13,16,14, 9,10,10,12,12, - 13,13,14,14,15,16,15,16, 9,10,10,12,12,12,13,14, - 14,14,15,16,15,10,12,12,13,13,15,13,16,16,15,17, - 17,17,10,11,11,12,14,14,14,15,15,17,17,15,17,11, - 12,12,14,14,14,15,15,15,17,16,17,17,10,12,12,13, - 14,14,14,17,15,17,17,17,17, -}; - -static float _vq_quantthresh__44u2__p7_1[] = { - -71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, - 32.5, 45.5, 58.5, 71.5, -}; - -static long _vq_quantmap__44u2__p7_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p7_1 = { - _vq_quantthresh__44u2__p7_1, - _vq_quantmap__44u2__p7_1, - 13, - 13 -}; - -static static_codebook _44u2__p7_1 = { - 2, 169, - _vq_lengthlist__44u2__p7_1, - 1, -523010048, 1618608128, 4, 0, - _vq_quantlist__44u2__p7_1, - NULL, - &_vq_auxt__44u2__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u2__p7_2[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u2__p7_2[] = { - 2, 5, 5, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 5, 6, 6, - 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 6, 7, 7, 8, - 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, 8, 8, 8, 8, 8, - 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 7, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__44u2__p7_2[] = { - -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, - 2.5, 3.5, 4.5, 5.5, -}; - -static long _vq_quantmap__44u2__p7_2[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u2__p7_2 = { - _vq_quantthresh__44u2__p7_2, - _vq_quantmap__44u2__p7_2, - 13, - 13 -}; - -static static_codebook _44u2__p7_2 = { - 2, 169, - _vq_lengthlist__44u2__p7_2, - 1, -531103744, 1611661312, 4, 0, - _vq_quantlist__44u2__p7_2, - NULL, - &_vq_auxt__44u2__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u2__short[] = { - 13,15,17,17,15,15,12,17,11, 9, 7,10,10, 9,12,17, - 10, 6, 3, 6, 5, 7,10,17,15,10, 6, 9, 8, 9,11,17, - 15, 8, 4, 7, 3, 5, 9,16,16,10, 5, 8, 4, 5, 8,16, - 13,11, 5, 8, 3, 3, 5,14,13,12, 7,10, 5, 5, 7,14, -}; - -static static_codebook _huff_book__44u2__short = { - 2, 64, - _huff_lengthlist__44u2__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u3__long[] = { - 6, 9,13,12,14,11,10,13, 8, 4, 5, 7, 8, 7, 8,12, - 11, 4, 3, 5, 5, 7, 9,14,11, 6, 5, 6, 6, 6, 7,13, - 13, 7, 5, 6, 4, 5, 7,14,11, 7, 6, 6, 5, 5, 6,13, - 9, 7, 8, 6, 7, 5, 3, 9, 9,12,13,12,14,10, 6, 7, -}; - -static static_codebook _huff_book__44u3__long = { - 2, 64, - _huff_lengthlist__44u3__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u3__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8, - 10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11, - 11, 8,11,11, 8,11,11,11,13,14,11,14,14, 8,11,11, - 10,14,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 7, - 11,11,11,14,14,10,12,14, 8,11,11,11,14,14,11,14, - 13, -}; - -static float _vq_quantthresh__44u3__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u3__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p1_0 = { - _vq_quantthresh__44u3__p1_0, - _vq_quantmap__44u3__p1_0, - 3, - 3 -}; - -static static_codebook _44u3__p1_0 = { - 4, 81, - _vq_lengthlist__44u3__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u3__p1_0, - NULL, - &_vq_auxt__44u3__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u3__p2_0[] = { - 2, 5, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6, - 8, 8, 5, 6, 6, 6, 8, 8, 7, 8, 8, 5, 7, 6, 7, 8, - 8, 6, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8, - 8,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6, - 8, 8, 8,10,10, 8, 8,10, 7, 8, 8, 8,10,10, 8,10, - 9, -}; - -static float _vq_quantthresh__44u3__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u3__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p2_0 = { - _vq_quantthresh__44u3__p2_0, - _vq_quantmap__44u3__p2_0, - 3, - 3 -}; - -static static_codebook _44u3__p2_0 = { - 4, 81, - _vq_lengthlist__44u3__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u3__p2_0, - NULL, - &_vq_auxt__44u3__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u3__p3_0[] = { - 2, 4, 4, 7, 7, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8, - 9, 9,12,12, 8, 9, 9,11,12, 5, 7, 7,10,10, 7, 9, - 9,11,11, 7, 9, 9,10,11,10,11,11,13,13, 9,10,11, - 13,13, 5, 7, 7,10,10, 7, 9, 9,11,10, 7, 9, 9,11, - 11, 9,11,10,13,13,10,11,11,14,13, 8,10,10,14,13, - 10,11,11,15,14, 9,11,11,14,14,13,14,13,16,16,12, - 13,13,15,15, 8,10,10,13,14, 9,11,11,14,14,10,11, - 11,14,15,12,13,13,15,15,13,14,14,15,16, 5, 7, 7, - 10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14, - 14,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13, - 9,11,11,13,13,12,12,13,15,15,11,12,13,15,16, 7, - 9, 9,11,11, 8,11,10,13,12, 9,11,11,13,13,11,13, - 12,15,13,11,13,13,15,16, 9,12,11,15,14,11,12,13, - 16,15,11,13,13,15,16,14,14,15,17,16,13,15,16, 0, - 17, 9,11,11,15,15,10,13,12,15,15,11,13,13,15,16, - 13,15,13,16,15,14,16,15, 0,19, 5, 7, 7,10,10, 7, - 9, 9,11,11, 7, 9, 9,11,11,10,12,11,14,14,10,11, - 12,14,14, 7, 9, 9,12,12, 9,11,11,14,13, 9,10,11, - 12,13,11,13,13,16,16,11,12,13,13,16, 7, 9, 9,12, - 12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,15,15, - 12,13,12,15,14, 9,11,11,15,14,11,13,12,16,16,10, - 12,12,15,15,13,15,15,17,19,13,14,15,16,17,10,12, - 12,15,15,11,13,13,16,16,11,13,13,15,16,13,15,15, - 0, 0,14,15,15,16,16, 8,10,10,14,14,10,12,12,15, - 15,10,12,11,15,16,14,15,15,19,20,13,14,14,18,16, - 9,11,11,15,15,11,13,13,17,16,11,13,13,16,16,15, - 17,17,20,20,14,15,16,17,20, 9,11,11,15,15,10,13, - 12,16,15,11,13,13,15,17,14,16,15,18, 0,14,16,15, - 18,20,12,14,14, 0, 0,14,14,16, 0, 0,13,16,15, 0, - 0,17,17,18, 0, 0,16,17,19,19, 0,12,14,14,18, 0, - 12,16,14, 0,17,13,15,15,18, 0,16,18,17, 0,17,16, - 18,17, 0, 0, 7,10,10,14,14,10,12,11,15,15,10,12, - 12,16,15,13,15,15,18, 0,14,15,15,17, 0, 9,11,11, - 15,15,11,13,13,16,16,11,12,13,16,16,14,15,16,17, - 17,14,16,16,16,18, 9,11,12,16,16,11,13,13,17,17, - 11,14,13,20,17,15,16,16,19, 0,15,16,17, 0,19,11, - 13,14,17,16,14,15,15,20,18,13,14,15,17,19,16,18, - 18, 0,20,16,16,19,17, 0,12,15,14,17, 0,14,15,15, - 18,19,13,16,15,19,20,15,18,18, 0,20,17, 0,16, 0, - 0, -}; - -static float _vq_quantthresh__44u3__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u3__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p3_0 = { - _vq_quantthresh__44u3__p3_0, - _vq_quantmap__44u3__p3_0, - 5, - 5 -}; - -static static_codebook _44u3__p3_0 = { - 4, 625, - _vq_lengthlist__44u3__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u3__p3_0, - NULL, - &_vq_auxt__44u3__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u3__p4_0[] = { - 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9, - 9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 7, 8,10,10, 9,10,10,11,12, 9,10,10, - 11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10, - 10, 9,10, 9,12,11, 9,10,10,12,11, 9,10, 9,12,12, - 9,10,10,13,12, 9,10,10,12,13,12,12,12,14,14,11, - 12,12,13,14, 9, 9,10,12,12, 9,10,10,12,12, 9,10, - 10,12,13,11,12,11,14,13,12,12,12,14,13, 5, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12, - 12, 9,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11, - 8, 9, 9,11,11,11,11,11,12,13,10,11,11,13,13, 6, - 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,13,11,10,11,11,13,13, 9,11,10,13,12,10,11,11, - 13,13,10,11,11,13,13,12,12,13,12,15,12,13,13,15, - 15, 9,10,10,12,13,10,11,10,13,12,10,11,11,13,14, - 12,13,11,15,13,12,13,13,15,15, 5, 7, 7, 9, 9, 7, - 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12,10,10, - 11,12,12, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10, - 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,13, - 11,11,11,13,12, 9,10,10,13,12,10,11,11,14,13,10, - 10,11,12,13,12,13,13,15,15,12,11,13,13,14, 9,10, - 11,12,13,10,11,11,13,13,10,11,11,13,13,12,13,13, - 15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13, - 13, 9,10,10,13,13,12,13,13,15,14,12,12,12,14,13, - 9,10,10,13,12,10,11,11,13,13,10,11,11,14,12,13, - 13,14,14,16,12,13,13,15,15, 9,10,10,13,13,10,11, - 10,14,13,10,11,11,13,14,12,14,13,15,14,13,13,13, - 15,15,11,13,12,15,14,11,12,13,14,15,12,13,13,16, - 14,14,12,15,12,16,14,15,15,17,15,11,12,12,14,14, - 11,13,11,15,14,12,13,13,15,15,13,15,12,17,13,14, - 15,15,16,16, 8, 9, 9,12,12, 9,10,10,12,13, 9,10, - 10,13,13,12,12,12,14,14,12,13,13,15,15, 9,10,10, - 13,12,10,11,11,14,13,10,10,11,13,14,12,13,13,15, - 15,12,12,13,14,16, 9,10,10,13,13,10,11,11,13,14, - 10,11,11,14,13,12,13,13,14,15,13,14,13,16,14,11, - 12,12,14,14,12,13,13,15,14,11,12,13,14,15,14,15, - 15,16,16,13,13,15,13,16,11,12,12,14,15,12,13,13, - 14,15,11,13,12,15,14,14,15,15,16,16,14,15,12,16, - 13, -}; - -static float _vq_quantthresh__44u3__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u3__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p4_0 = { - _vq_quantthresh__44u3__p4_0, - _vq_quantmap__44u3__p4_0, - 5, - 5 -}; - -static static_codebook _44u3__p4_0 = { - 4, 625, - _vq_lengthlist__44u3__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u3__p4_0, - NULL, - &_vq_auxt__44u3__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u3__p5_0[] = { - 2, 3, 3, 6, 6, 7, 7, 9, 9, 4, 5, 5, 7, 7, 8, 8, - 10,10, 4, 5, 5, 7, 7, 8, 8,10,10, 6, 7, 7, 8, 8, - 9, 9,11,10, 6, 7, 7, 8, 8, 9, 9,10,10, 7, 8, 8, - 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9, - 10,10,11,10,11,11,12,12, 9,10,10,10,10,11,11,12, - 12, -}; - -static float _vq_quantthresh__44u3__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u3__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p5_0 = { - _vq_quantthresh__44u3__p5_0, - _vq_quantmap__44u3__p5_0, - 9, - 9 -}; - -static static_codebook _44u3__p5_0 = { - 2, 81, - _vq_lengthlist__44u3__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u3__p5_0, - NULL, - &_vq_auxt__44u3__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u3__p6_0[] = { - 1, 4, 4, 6, 6, 8, 8, 9, 9,10,11,13,14, 4, 6, 5, - 8, 8, 9, 9,10,10,11,11,14,14, 4, 6, 6, 8, 8, 9, - 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11, - 12,12,15,15, 6, 8, 8, 9, 9,10,11,11,11,12,12,15, - 15, 8, 9, 9,11,10,11,11,12,12,13,13,15,16, 8, 9, - 9,10,11,11,11,12,12,13,13,16,16,10,10,11,11,11, - 12,12,13,13,13,14,17,16, 9,10,11,12,11,12,12,13, - 13,13,13,16,18,11,12,11,12,12,13,13,13,14,15,14, - 17,17,11,11,12,12,12,13,13,13,14,14,15,18,17,14, - 15,15,15,15,16,16,17,17,19,18, 0,20,14,15,14,15, - 15,16,16,16,17,18,16,20,18, -}; - -static float _vq_quantthresh__44u3__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u3__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p6_0 = { - _vq_quantthresh__44u3__p6_0, - _vq_quantmap__44u3__p6_0, - 13, - 13 -}; - -static static_codebook _44u3__p6_0 = { - 2, 169, - _vq_lengthlist__44u3__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u3__p6_0, - NULL, - &_vq_auxt__44u3__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u3__p6_1[] = { - 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5, - 6, 5, 6, 6, 5, 5, 6, 6, 6, -}; - -static float _vq_quantthresh__44u3__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u3__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p6_1 = { - _vq_quantthresh__44u3__p6_1, - _vq_quantmap__44u3__p6_1, - 5, - 5 -}; - -static static_codebook _44u3__p6_1 = { - 2, 25, - _vq_lengthlist__44u3__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u3__p6_1, - NULL, - &_vq_auxt__44u3__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p7_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u3__p7_0[] = { - 1, 3, 3,10,10,10,10,10,10, 4,10,10,10,10,10,10, - 10,10, 4,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, -}; - -static float _vq_quantthresh__44u3__p7_0[] = { - -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, 637.5, 892.5, -}; - -static long _vq_quantmap__44u3__p7_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p7_0 = { - _vq_quantthresh__44u3__p7_0, - _vq_quantmap__44u3__p7_0, - 9, - 9 -}; - -static static_codebook _44u3__p7_0 = { - 2, 81, - _vq_lengthlist__44u3__p7_0, - 1, -515907584, 1627381760, 4, 0, - _vq_quantlist__44u3__p7_0, - NULL, - &_vq_auxt__44u3__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p7_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u3__p7_1[] = { - 1, 4, 4, 6, 6, 7, 6, 8, 7, 9, 8,10, 9,11,11, 4, - 7, 7, 8, 7, 9, 9,10,10,11,11,11,11,12,12, 4, 7, - 7, 7, 7, 9, 9,10,10,11,11,12,12,12,11, 6, 8, 8, - 9, 9,10,10,11,11,12,12,13,12,13,13, 6, 8, 8, 9, - 9,10,11,11,11,12,12,13,14,13,13, 8, 9, 9,11,11, - 12,12,12,13,14,13,14,14,14,15, 8, 9, 9,11,11,11, - 12,13,14,13,14,15,17,14,15, 9,10,10,12,12,13,13, - 13,14,15,15,15,16,16,16, 9,11,11,12,12,13,13,14, - 14,14,15,16,16,16,16,10,12,12,13,13,14,14,15,15, - 15,16,17,17,17,17,10,12,11,13,13,15,14,15,14,16, - 17,16,16,16,16,11,13,12,14,14,14,14,15,16,17,16, - 17,17,17,17,11,13,12,14,14,14,15,17,16,17,17,17, - 17,17,17,12,13,13,15,16,15,16,17,17,16,16,17,17, - 17,17,12,13,13,15,15,15,16,17,17,17,16,17,16,17, - 17, -}; - -static float _vq_quantthresh__44u3__p7_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__44u3__p7_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p7_1 = { - _vq_quantthresh__44u3__p7_1, - _vq_quantmap__44u3__p7_1, - 15, - 15 -}; - -static static_codebook _44u3__p7_1 = { - 2, 225, - _vq_lengthlist__44u3__p7_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__44u3__p7_1, - NULL, - &_vq_auxt__44u3__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u3__p7_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44u3__p7_2[] = { - 2, 5, 5, 7, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 10,10, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9, - 9,10, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 10,10,10,10, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, - 9,10,10,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10, 7, 8, 8, 9, 8, 9, 9, 9, 9,10, - 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9,10,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9,10, - 9,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10, - 9,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, - 9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, 9, - 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,11, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,11, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 9,10,10,10,10,10,10,10,10,10,10,10,11,11,11,10, - 11, -}; - -static float _vq_quantthresh__44u3__p7_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44u3__p7_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44u3__p7_2 = { - _vq_quantthresh__44u3__p7_2, - _vq_quantmap__44u3__p7_2, - 17, - 17 -}; - -static static_codebook _44u3__p7_2 = { - 2, 289, - _vq_lengthlist__44u3__p7_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44u3__p7_2, - NULL, - &_vq_auxt__44u3__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u3__short[] = { - 14,14,14,15,13,15,12,16,10, 8, 7, 9, 9, 8,12,16, - 10, 5, 4, 6, 5, 6, 9,16,14, 8, 6, 8, 7, 8,10,16, - 14, 7, 4, 6, 3, 5, 8,16,15, 9, 5, 7, 4, 4, 7,16, - 13,10, 6, 7, 4, 3, 4,13,13,12, 7, 9, 5, 5, 6,12, -}; - -static static_codebook _huff_book__44u3__short = { - 2, 64, - _huff_lengthlist__44u3__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u4__long[] = { - 3, 8,12,12,13,12,11,13, 5, 4, 6, 7, 8, 8, 9,13, - 9, 5, 4, 5, 5, 7, 9,13, 9, 6, 5, 6, 6, 7, 8,12, - 12, 7, 5, 6, 4, 5, 8,13,11, 7, 6, 6, 5, 5, 6,12, - 10, 8, 8, 7, 7, 5, 3, 8,10,12,13,12,12, 9, 6, 7, -}; - -static static_codebook _huff_book__44u4__long = { - 2, 64, - _huff_lengthlist__44u4__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u4__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8, - 10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11, - 11, 8,11,11, 8,11,11,11,13,14,11,15,14, 8,11,11, - 10,13,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 7, - 11,11,11,15,14,10,12,14, 8,11,11,11,14,14,11,14, - 13, -}; - -static float _vq_quantthresh__44u4__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u4__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p1_0 = { - _vq_quantthresh__44u4__p1_0, - _vq_quantmap__44u4__p1_0, - 3, - 3 -}; - -static static_codebook _44u4__p1_0 = { - 4, 81, - _vq_lengthlist__44u4__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u4__p1_0, - NULL, - &_vq_auxt__44u4__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u4__p2_0[] = { - 2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6, - 8, 8, 5, 6, 6, 6, 8, 8, 7, 8, 8, 5, 7, 6, 6, 8, - 8, 6, 8, 8, 6, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8, - 8,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 6, 8, 8, 6, - 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10, - 9, -}; - -static float _vq_quantthresh__44u4__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u4__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p2_0 = { - _vq_quantthresh__44u4__p2_0, - _vq_quantmap__44u4__p2_0, - 3, - 3 -}; - -static static_codebook _44u4__p2_0 = { - 4, 81, - _vq_lengthlist__44u4__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u4__p2_0, - NULL, - &_vq_auxt__44u4__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u4__p3_0[] = { - 2, 4, 4, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8, - 10, 9,12,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9, - 9,11,11, 7, 9, 9,11,11,10,12,11,14,14, 9,10,11, - 13,14, 5, 7, 7,10,10, 7, 9, 9,11,11, 7, 9, 9,11, - 11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,14,13, - 10,12,12,15,14, 9,11,11,15,14,13,14,14,17,17,12, - 14,14,16,16, 8,10,10,14,14, 9,11,11,14,15,10,12, - 12,14,15,12,14,13,16,16,13,14,15,15,18, 4, 7, 7, - 10,10, 7, 9, 9,12,11, 7, 9, 9,11,12,10,12,11,15, - 14,10,11,12,14,15, 7, 9, 9,12,12, 9,11,12,13,13, - 9,11,12,13,13,12,13,13,15,16,11,13,13,15,16, 7, - 9, 9,12,12, 9,11,10,13,12, 9,11,12,13,14,11,13, - 12,16,14,12,13,13,15,16,10,12,12,16,15,11,13,13, - 17,16,11,13,13,17,16,14,15,15,17,17,14,16,16,18, - 20, 9,11,11,15,16,11,13,12,16,16,11,13,13,16,17, - 14,15,14,18,16,14,16,16,17,20, 5, 7, 7,10,10, 7, - 9, 9,12,11, 7, 9,10,11,12,10,12,11,15,15,10,12, - 12,14,14, 7, 9, 9,12,12, 9,12,11,14,13, 9,10,11, - 12,13,12,13,14,16,16,11,12,13,14,16, 7, 9, 9,12, - 12, 9,12,11,13,13, 9,12,11,13,13,11,13,13,16,16, - 12,13,13,16,15, 9,11,11,16,14,11,13,13,16,16,11, - 12,13,16,16,14,16,16,17,17,13,14,15,16,17,10,12, - 12,15,15,11,13,13,16,17,11,13,13,16,16,14,16,15, - 19,19,14,15,15,17,18, 8,10,10,14,14,10,12,12,15, - 15,10,12,12,16,16,14,16,15,20,19,13,15,15,17,16, - 9,12,12,16,16,11,13,13,16,18,11,14,13,16,17,16, - 17,16,20, 0,15,16,18,18,20, 9,11,11,15,15,11,14, - 12,17,16,11,13,13,17,17,15,17,15,20,20,14,16,16, - 17, 0,13,15,14,18,16,14,15,16, 0,18,14,16,16, 0, - 0,18,16, 0, 0,20,16,18,18, 0, 0,12,14,14,17,18, - 13,15,14,20,18,14,16,15,19,19,16,20,16, 0,18,16, - 19,17,19, 0, 8,10,10,14,14,10,12,12,16,15,10,12, - 12,16,16,13,15,15,18,17,14,16,16,19, 0, 9,11,11, - 16,15,11,14,13,18,17,11,12,13,17,18,14,17,16,18, - 18,15,16,17,18,18, 9,12,12,16,16,11,13,13,16,18, - 11,14,13,17,17,15,16,16,18,20,16,17,17,20,20,12, - 14,14,18,17,14,16,16, 0,19,13,14,15,18, 0,16, 0, - 0, 0, 0,16,16, 0,19,20,13,15,14, 0, 0,14,16,16, - 18,19,14,16,15, 0,20,16,20,18, 0,20,17,20,17, 0, - 0, -}; - -static float _vq_quantthresh__44u4__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u4__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p3_0 = { - _vq_quantthresh__44u4__p3_0, - _vq_quantmap__44u4__p3_0, - 5, - 5 -}; - -static static_codebook _44u4__p3_0 = { - 4, 625, - _vq_lengthlist__44u4__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u4__p3_0, - NULL, - &_vq_auxt__44u4__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u4__p4_0[] = { - 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9, - 9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 7, 8,10,10, 9,10,10,11,12, 9,10,10, - 11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10, - 10, 9,10,10,12,11, 9,10,10,12,11, 9,10, 9,12,12, - 9,10,10,13,12, 9,10,10,12,12,12,12,12,14,14,11, - 12,12,13,14, 9, 9,10,12,12, 9,10,10,13,13, 9,10, - 10,12,13,11,12,12,14,13,11,12,12,14,14, 5, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12, - 12, 9,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11, - 8, 9, 9,11,11,11,11,11,12,13,10,11,11,13,13, 6, - 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,13,11,10,11,11,13,13, 9,11,10,13,12,10,11,11, - 13,14,10,11,11,14,13,12,12,13,12,15,12,13,13,15, - 15, 9,10,10,12,13,10,11,10,13,12,10,11,11,13,14, - 12,13,11,15,13,13,13,13,15,15, 5, 7, 7, 9, 9, 7, - 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12,10,10, - 11,12,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10, - 11, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,11,13,13, - 11,12,11,13,12, 9,10,10,13,12,10,11,11,14,13,10, - 10,11,12,13,12,13,13,15,15,12,11,13,13,14, 9,10, - 11,12,13,10,11,11,13,14,10,11,11,13,13,12,13,13, - 15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13, - 13, 9,10,10,13,13,12,13,13,15,15,12,12,12,14,14, - 9,10,10,13,13,10,11,11,13,14,10,11,11,14,13,13, - 13,14,14,16,13,13,13,15,15, 9,10,10,13,13,10,11, - 10,14,13,10,11,11,13,14,12,14,13,16,14,12,13,13, - 14,15,11,12,12,15,14,11,12,13,14,15,12,13,13,16, - 15,14,12,15,12,16,14,15,15,16,16,11,12,12,14,14, - 11,13,12,15,14,12,13,13,15,16,13,15,13,17,13,14, - 15,15,16,17, 8, 9, 9,12,12, 9,10,10,12,13, 9,10, - 10,13,13,12,12,12,14,14,12,13,13,15,15, 9,10,10, - 13,12,10,11,11,14,13,10,10,11,13,14,13,13,13,15, - 15,12,13,14,14,16, 9,10,10,13,13,10,11,11,13,14, - 10,11,11,14,14,13,13,13,15,15,13,14,13,16,14,11, - 12,12,15,14,12,13,13,16,15,11,12,13,14,15,14,15, - 15,17,16,13,13,15,13,16,11,12,13,14,15,13,13,13, - 15,16,11,13,12,15,14,14,15,15,16,16,14,15,12,17, - 13, -}; - -static float _vq_quantthresh__44u4__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u4__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p4_0 = { - _vq_quantthresh__44u4__p4_0, - _vq_quantmap__44u4__p4_0, - 5, - 5 -}; - -static static_codebook _44u4__p4_0 = { - 4, 625, - _vq_lengthlist__44u4__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u4__p4_0, - NULL, - &_vq_auxt__44u4__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u4__p5_0[] = { - 2, 3, 3, 6, 6, 7, 7, 9, 9, 4, 5, 5, 7, 7, 8, 8, - 10, 9, 4, 5, 5, 7, 7, 8, 8,10,10, 6, 7, 7, 8, 8, - 9, 9,11,10, 6, 7, 7, 8, 8, 9, 9,10,11, 7, 8, 8, - 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9, - 10,10,11,10,11,11,12,12, 9,10,10,10,11,11,11,12, - 12, -}; - -static float _vq_quantthresh__44u4__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u4__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p5_0 = { - _vq_quantthresh__44u4__p5_0, - _vq_quantmap__44u4__p5_0, - 9, - 9 -}; - -static static_codebook _44u4__p5_0 = { - 2, 81, - _vq_lengthlist__44u4__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u4__p5_0, - NULL, - &_vq_auxt__44u4__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u4__p6_0[] = { - 1, 4, 4, 6, 6, 8, 8, 9, 9,11,10,13,13, 4, 6, 5, - 8, 8, 9, 9,10,10,11,11,14,14, 4, 6, 6, 8, 8, 9, - 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11, - 12,12,15,15, 6, 8, 8, 9, 9,10,11,11,11,12,12,15, - 15, 8, 9, 9,11,10,11,11,12,12,13,13,16,16, 8, 9, - 9,10,10,11,11,12,12,13,13,16,16,10,10,10,12,11, - 12,12,13,13,14,14,16,16,10,10,10,11,12,12,12,13, - 13,13,14,16,17,11,12,11,12,12,13,13,14,14,15,14, - 18,17,11,11,12,12,12,13,13,14,14,14,15,19,18,14, - 15,14,15,15,17,16,17,17,17,17,21, 0,14,15,15,16, - 16,16,16,17,17,18,17,20,21, -}; - -static float _vq_quantthresh__44u4__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u4__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p6_0 = { - _vq_quantthresh__44u4__p6_0, - _vq_quantmap__44u4__p6_0, - 13, - 13 -}; - -static static_codebook _44u4__p6_0 = { - 2, 169, - _vq_lengthlist__44u4__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u4__p6_0, - NULL, - &_vq_auxt__44u4__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u4__p6_1[] = { - 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5, - 6, 5, 6, 6, 5, 5, 6, 6, 6, -}; - -static float _vq_quantthresh__44u4__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u4__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p6_1 = { - _vq_quantthresh__44u4__p6_1, - _vq_quantmap__44u4__p6_1, - 5, - 5 -}; - -static static_codebook _44u4__p6_1 = { - 2, 25, - _vq_lengthlist__44u4__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u4__p6_1, - NULL, - &_vq_auxt__44u4__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u4__p7_0[] = { - 1, 3, 3,12,12,12,12,12,12,12,12,12,12, 3,12,11, - 12,12,12,12,12,12,12,12,12,12, 4,11,10,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11, -}; - -static float _vq_quantthresh__44u4__p7_0[] = { - -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, - 637.5, 892.5, 1147.5, 1402.5, -}; - -static long _vq_quantmap__44u4__p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p7_0 = { - _vq_quantthresh__44u4__p7_0, - _vq_quantmap__44u4__p7_0, - 13, - 13 -}; - -static static_codebook _44u4__p7_0 = { - 2, 169, - _vq_lengthlist__44u4__p7_0, - 1, -514332672, 1627381760, 4, 0, - _vq_quantlist__44u4__p7_0, - NULL, - &_vq_auxt__44u4__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p7_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u4__p7_1[] = { - 1, 4, 4, 6, 6, 7, 7, 9, 8,10, 8,10, 9,11,11, 4, - 7, 6, 8, 7, 9, 9,10,10,11,10,11,10,12,10, 4, 6, - 7, 8, 8, 9, 9,10,10,11,11,11,11,12,12, 6, 8, 8, - 10, 9,11,10,12,11,12,12,12,12,13,13, 6, 8, 8,10, - 10,10,11,11,11,12,12,13,12,13,13, 8, 9, 9,11,11, - 12,11,12,12,13,13,13,13,13,13, 8, 9, 9,11,11,11, - 12,12,12,13,13,13,13,13,13, 9,10,10,12,11,13,13, - 13,13,14,13,13,14,14,14, 9,10,11,11,12,12,13,13, - 13,13,13,14,15,14,14,10,11,11,12,12,13,13,14,14, - 14,14,14,15,16,16,10,11,11,12,13,13,13,13,15,14, - 14,15,16,15,16,10,12,12,13,13,14,14,14,15,15,15, - 15,15,15,16,11,12,12,13,13,14,14,14,15,15,15,16, - 15,17,16,11,12,12,13,13,13,15,15,14,16,16,16,16, - 16,17,11,12,12,13,13,14,14,15,14,15,15,17,17,16, - 16, -}; - -static float _vq_quantthresh__44u4__p7_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__44u4__p7_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p7_1 = { - _vq_quantthresh__44u4__p7_1, - _vq_quantmap__44u4__p7_1, - 15, - 15 -}; - -static static_codebook _44u4__p7_1 = { - 2, 225, - _vq_lengthlist__44u4__p7_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__44u4__p7_1, - NULL, - &_vq_auxt__44u4__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u4__p7_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44u4__p7_2[] = { - 2, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 10,10,10,10, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, - 9,10, 9,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10, - 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,11,10,10,10, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, - 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, - 10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 9,10, 9,10,10,10,10,10,10,10,10,10,10,11,10,10, - 10, -}; - -static float _vq_quantthresh__44u4__p7_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44u4__p7_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44u4__p7_2 = { - _vq_quantthresh__44u4__p7_2, - _vq_quantmap__44u4__p7_2, - 17, - 17 -}; - -static static_codebook _44u4__p7_2 = { - 2, 289, - _vq_lengthlist__44u4__p7_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44u4__p7_2, - NULL, - &_vq_auxt__44u4__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u4__short[] = { - 14,17,15,17,16,14,13,16,10, 7, 7,10,13,10,15,16, - 9, 4, 4, 6, 5, 7, 9,16,12, 8, 7, 8, 8, 8,11,16, - 14, 7, 4, 6, 3, 5, 8,15,13, 8, 5, 7, 4, 5, 7,16, - 12, 9, 6, 8, 3, 3, 5,16,14,13, 7,10, 5, 5, 7,15, -}; - -static static_codebook _huff_book__44u4__short = { - 2, 64, - _huff_lengthlist__44u4__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u5__long[] = { - 3, 8,13,12,14,12,16,11,13,14, 5, 4, 5, 6, 7, 8, - 10, 9,12,15,10, 5, 5, 5, 6, 8, 9, 9,13,15,10, 5, - 5, 6, 6, 7, 8, 8,11,13,12, 7, 5, 6, 4, 6, 7, 7, - 11,14,11, 7, 7, 6, 6, 6, 7, 6,10,14,14, 9, 8, 8, - 6, 7, 7, 7,11,16,11, 8, 8, 7, 6, 6, 7, 4, 7,12, - 10,10,12,10,10, 9,10, 5, 6, 9,10,12,15,13,14,14, - 14, 8, 7, 8, -}; - -static static_codebook _huff_book__44u5__long = { - 2, 100, - _huff_lengthlist__44u5__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u5__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7, - 9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,10, - 10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10, - 10,13,11,10,13,13, 4, 8, 8, 8,11,10, 8,10,10, 7, - 10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13, - 12, -}; - -static float _vq_quantthresh__44u5__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u5__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p1_0 = { - _vq_quantthresh__44u5__p1_0, - _vq_quantmap__44u5__p1_0, - 3, - 3 -}; - -static static_codebook _44u5__p1_0 = { - 4, 81, - _vq_lengthlist__44u5__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u5__p1_0, - NULL, - &_vq_auxt__44u5__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u5__p2_0[] = { - 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6, - 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8, - 8, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 7, - 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6, - 8, 7, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9, - 9, -}; - -static float _vq_quantthresh__44u5__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u5__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p2_0 = { - _vq_quantthresh__44u5__p2_0, - _vq_quantmap__44u5__p2_0, - 3, - 3 -}; - -static static_codebook _44u5__p2_0 = { - 4, 81, - _vq_lengthlist__44u5__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u5__p2_0, - NULL, - &_vq_auxt__44u5__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u5__p3_0[] = { - 2, 4, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8, - 10, 9,13,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9, - 9,11,11, 6, 8, 9,11,11,10,11,11,14,14, 9,10,11, - 13,14, 5, 7, 7, 9,10, 7, 9, 8,11,11, 7, 9, 9,11, - 11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,13,13, - 10,11,11,15,14, 9,11,11,14,14,13,14,14,17,16,12, - 13,13,15,16, 8,10,10,13,13, 9,11,11,14,15,10,11, - 11,14,15,12,14,13,16,16,13,15,14,15,17, 5, 7, 7, - 10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14, - 14,10,11,12,14,14, 7, 9, 9,12,11, 9,11,11,13,13, - 9,11,11,13,13,12,13,13,15,16,11,12,13,15,16, 6, - 9, 9,11,11, 8,11,10,13,12, 9,11,11,13,14,11,13, - 12,16,14,11,13,13,16,17,10,12,11,15,15,11,13,13, - 16,16,11,13,13,17,16,14,15,15,17,17,14,16,16,17, - 18, 9,11,11,14,15,10,12,12,15,15,11,13,13,16,17, - 13,15,13,17,15,14,15,16,18, 0, 5, 7, 7,10,10, 7, - 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,14,10,11, - 12,14,15, 6, 9, 9,12,11, 9,11,11,13,13, 8,10,11, - 12,13,11,13,13,16,15,11,12,13,14,15, 7, 9, 9,11, - 12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,15,16, - 11,13,13,15,14, 9,11,11,15,14,11,13,13,17,15,10, - 12,12,15,15,14,16,16,17,17,13,13,15,15,17,10,11, - 12,15,15,11,13,13,16,16,11,13,13,15,15,14,15,15, - 18,18,14,15,15,17,17, 8,10,10,13,13,10,12,11,15, - 15,10,11,12,15,15,14,15,15,18,18,13,14,14,18,18, - 9,11,11,15,16,11,13,13,17,17,11,13,13,16,16,15, - 15,16,17, 0,14,15,17, 0, 0, 9,11,11,15,15,10,13, - 12,18,16,11,13,13,15,16,14,16,15,20,20,14,15,16, - 17, 0,13,14,14,20,16,14,15,16,19,18,14,15,15,19, - 0,18,16, 0,20,20,16,18,18, 0, 0,12,14,14,18,18, - 13,15,14,18,16,14,15,16,18,20,16,19,16, 0,17,17, - 18,18,19, 0, 8,10,10,14,14,10,11,11,14,15,10,11, - 12,15,15,13,15,14,19,17,13,15,15,17, 0, 9,11,11, - 16,15,11,13,13,16,16,10,12,13,15,17,14,16,16,18, - 18,14,15,15,18, 0, 9,11,11,15,15,11,13,13,16,17, - 11,13,13,18,17,14,18,16,18,18,15,17,17,18, 0,12, - 14,14,18,18,14,15,15,20, 0,13,14,15,17, 0,16,18, - 17, 0, 0,16,16, 0,17,20,12,14,14,18,18,14,16,15, - 0,18,14,16,15,18, 0,16,19,17, 0, 0,17,18,16, 0, - 0, -}; - -static float _vq_quantthresh__44u5__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u5__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p3_0 = { - _vq_quantthresh__44u5__p3_0, - _vq_quantmap__44u5__p3_0, - 5, - 5 -}; - -static static_codebook _44u5__p3_0 = { - 4, 625, - _vq_lengthlist__44u5__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u5__p3_0, - NULL, - &_vq_auxt__44u5__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u5__p4_0[] = { - 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8, - 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8, - 8,10,10, 6, 7, 8, 9,10, 9,10,10,11,12, 9, 9,10, - 11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10, - 10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,12,11, - 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11, - 11,12,13,14, 8, 9, 9,11,12, 9,10,10,12,12, 9,10, - 10,12,12,11,12,11,14,13,11,12,12,13,13, 5, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12, - 12, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,10,11, - 8, 9, 9,11,11,10,10,11,11,13,10,11,11,12,13, 6, - 7, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11, - 12,13,10,11,11,13,13,12,11,13,12,15,12,13,13,14, - 15, 9,10,10,12,12, 9,11,10,13,12,10,11,11,13,13, - 11,13,11,14,12,12,13,13,14,15, 5, 7, 7, 9, 9, 7, - 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10, - 10,12,12, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 8, 9, - 10,11,10,11,11,12,12,10,10,11,11,13, 7, 8, 8,10, - 10, 8, 9, 9,11,11, 8, 9, 8,11,10,10,11,11,13,12, - 10,11,10,13,11, 9,10,10,12,12,10,11,11,13,12, 9, - 10,10,12,13,12,13,13,14,15,11,11,13,12,14, 9,10, - 10,12,12,10,11,11,13,13,10,11,10,13,12,12,13,13, - 14,14,12,13,11,14,12, 8, 9, 9,12,12, 9,10,10,12, - 12, 9,10,10,12,12,12,12,12,14,14,11,12,12,14,13, - 9,10,10,12,12,10,11,11,13,13,10,11,11,13,12,12, - 12,13,14,15,12,13,13,15,14, 9,10,10,12,12,10,11, - 10,13,12,10,11,11,12,13,12,13,12,15,13,12,13,13, - 14,15,11,12,12,14,13,11,12,12,14,15,12,13,13,15, - 14,13,12,14,12,16,13,14,14,15,15,11,11,12,14,14, - 11,12,11,14,13,12,13,13,14,15,13,14,12,16,12,14, - 14,15,16,16, 8, 9, 9,11,12, 9,10,10,12,12, 9,10, - 10,12,13,11,12,12,13,13,12,12,13,14,14, 9,10,10, - 12,12,10,11,10,13,12,10,10,11,12,13,12,13,13,15, - 14,12,12,13,13,15, 9,10,10,12,13,10,11,11,12,13, - 10,11,11,13,13,12,13,13,14,15,12,13,12,15,14,11, - 12,11,14,13,12,13,13,15,14,11,11,12,13,14,14,15, - 14,16,15,13,12,14,13,16,11,12,12,13,14,12,13,13, - 14,15,11,12,11,14,14,14,14,14,15,16,13,15,12,16, - 12, -}; - -static float _vq_quantthresh__44u5__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u5__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p4_0 = { - _vq_quantthresh__44u5__p4_0, - _vq_quantmap__44u5__p4_0, - 5, - 5 -}; - -static static_codebook _44u5__p4_0 = { - 4, 625, - _vq_lengthlist__44u5__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u5__p4_0, - NULL, - &_vq_auxt__44u5__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u5__p5_0[] = { - 2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8, - 11,10, 3, 5, 5, 7, 8, 8, 8,10,11, 6, 8, 7,10, 9, - 10,10,11,11, 6, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8, - 10,10,11,11,13,12, 8, 8, 9, 9,10,11,11,12,13,10, - 11,10,12,11,13,12,14,14,10,10,11,11,12,12,13,14, - 14, -}; - -static float _vq_quantthresh__44u5__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u5__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p5_0 = { - _vq_quantthresh__44u5__p5_0, - _vq_quantmap__44u5__p5_0, - 9, - 9 -}; - -static static_codebook _44u5__p5_0 = { - 2, 81, - _vq_lengthlist__44u5__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u5__p5_0, - NULL, - &_vq_auxt__44u5__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p6_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u5__p6_0[] = { - 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7, - 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7, - 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7, - 8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9, - 9, 9,10,10,11,10,11,11, 9, 9, 9,10,10,11,10,11, - 11, -}; - -static float _vq_quantthresh__44u5__p6_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u5__p6_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p6_0 = { - _vq_quantthresh__44u5__p6_0, - _vq_quantmap__44u5__p6_0, - 9, - 9 -}; - -static static_codebook _44u5__p6_0 = { - 2, 81, - _vq_lengthlist__44u5__p6_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u5__p6_0, - NULL, - &_vq_auxt__44u5__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u5__p7_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,11,10, 7, - 11,10, 5, 9, 9, 7,10,10, 8,10,11, 4, 9, 9, 9,12, - 12, 9,12,12, 8,12,12,11,12,12,10,12,13, 7,12,12, - 11,12,12,10,12,13, 4, 9, 9, 9,12,12, 9,12,12, 7, - 12,11,10,13,13,11,12,12, 7,12,12,10,13,13,11,12, - 12, -}; - -static float _vq_quantthresh__44u5__p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44u5__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p7_0 = { - _vq_quantthresh__44u5__p7_0, - _vq_quantmap__44u5__p7_0, - 3, - 3 -}; - -static static_codebook _44u5__p7_0 = { - 4, 81, - _vq_lengthlist__44u5__p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44u5__p7_0, - NULL, - &_vq_auxt__44u5__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u5__p7_1[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7, - 8, 8, 9, 8, 8, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 8, - 9, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 6, 7, 7, 8, - 8, 9, 9, 9, 9, 9, 9, 7, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, - 9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10, - 10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9, - 9, 9, 9, 9, 9,10,10,10,10, -}; - -static float _vq_quantthresh__44u5__p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u5__p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p7_1 = { - _vq_quantthresh__44u5__p7_1, - _vq_quantmap__44u5__p7_1, - 11, - 11 -}; - -static static_codebook _44u5__p7_1 = { - 2, 121, - _vq_lengthlist__44u5__p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u5__p7_1, - NULL, - &_vq_auxt__44u5__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p8_0[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u5__p8_0[] = { - 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7, - 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11, - 11, 6, 8, 7, 9, 9,10,10,11,11,13,12, 6, 8, 8, 9, - 9,10,10,11,11,12,13, 8, 9, 9,10,10,12,12,13,12, - 14,13, 8, 9, 9,10,10,12,12,13,13,14,14, 9,11,11, - 12,12,13,13,14,14,15,14, 9,11,11,12,12,13,13,14, - 14,15,14,11,12,12,13,13,14,14,15,14,15,14,11,11, - 12,13,13,14,14,14,14,15,15, -}; - -static float _vq_quantthresh__44u5__p8_0[] = { - -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, - 38.5, 49.5, -}; - -static long _vq_quantmap__44u5__p8_0[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p8_0 = { - _vq_quantthresh__44u5__p8_0, - _vq_quantmap__44u5__p8_0, - 11, - 11 -}; - -static static_codebook _44u5__p8_0 = { - 2, 121, - _vq_lengthlist__44u5__p8_0, - 1, -524582912, 1618345984, 4, 0, - _vq_quantlist__44u5__p8_0, - NULL, - &_vq_auxt__44u5__p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p8_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u5__p8_1[] = { - 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 5, 7, 6, - 7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, - 8, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 6, 6, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, - 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44u5__p8_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u5__p8_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p8_1 = { - _vq_quantthresh__44u5__p8_1, - _vq_quantmap__44u5__p8_1, - 11, - 11 -}; - -static static_codebook _44u5__p8_1 = { - 2, 121, - _vq_lengthlist__44u5__p8_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u5__p8_1, - NULL, - &_vq_auxt__44u5__p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p9_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u5__p9_0[] = { - 1, 3, 2,12,10,13,13,13,13,13,13,13,13, 4, 9, 9, - 13,13,13,13,13,13,13,13,13,13, 5,10, 9,13,13,13, - 13,13,13,13,13,13,13,12,13,13,13,13,13,13,13,13, - 13,13,13,13,11,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, - 13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12, - 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, - 12,12,12,12,12,12,12,12,12, -}; - -static float _vq_quantthresh__44u5__p9_0[] = { - -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, - 637.5, 892.5, 1147.5, 1402.5, -}; - -static long _vq_quantmap__44u5__p9_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p9_0 = { - _vq_quantthresh__44u5__p9_0, - _vq_quantmap__44u5__p9_0, - 13, - 13 -}; - -static static_codebook _44u5__p9_0 = { - 2, 169, - _vq_lengthlist__44u5__p9_0, - 1, -514332672, 1627381760, 4, 0, - _vq_quantlist__44u5__p9_0, - NULL, - &_vq_auxt__44u5__p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u5__p9_1[] = { - 1, 4, 4, 7, 7, 8, 8, 8, 7, 8, 7, 9, 8, 9, 9, 4, - 7, 6, 9, 8,10,10, 9, 8, 9, 9, 9, 9, 9, 8, 5, 6, - 6, 8, 9,10,10, 9, 9, 9,10,10,10,10,11, 7, 8, 8, - 10,10,11,11,10,10,11,11,11,12,11,11, 7, 8, 8,10, - 10,11,11,10,10,11,11,12,11,11,11, 8, 9, 9,11,11, - 12,12,11,11,12,11,12,12,12,12, 8, 9,10,11,11,12, - 12,11,11,12,12,12,12,12,12, 8, 9, 9,10,10,12,11, - 12,12,12,12,12,12,12,13, 8, 9, 9,11,11,11,11,12, - 12,12,12,13,12,13,13, 9,10,10,11,11,12,12,12,13, - 12,13,13,13,14,13, 9,10,10,11,11,12,12,12,13,13, - 12,13,13,14,13, 9,11,10,12,11,13,12,12,13,13,13, - 13,13,13,14, 9,10,10,12,12,12,12,12,13,13,13,13, - 13,14,14,10,11,11,12,12,12,13,13,13,14,14,13,14, - 14,14,10,11,11,12,12,12,12,13,12,13,14,13,14,14, - 14, -}; - -static float _vq_quantthresh__44u5__p9_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__44u5__p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p9_1 = { - _vq_quantthresh__44u5__p9_1, - _vq_quantmap__44u5__p9_1, - 15, - 15 -}; - -static static_codebook _44u5__p9_1 = { - 2, 225, - _vq_lengthlist__44u5__p9_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__44u5__p9_1, - NULL, - &_vq_auxt__44u5__p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u5__p9_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44u5__p9_2[] = { - 2, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, - 9,10, 9,10,10,10, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, - 9, 9,10, 9,10, 9,10, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 9,10, 9,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10, - 9,10, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, 9, - 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, - 9,10, 9,10, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, - 9, 9,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, - 9,10,10, 9,10,10,10,10,10,10,10,10,10,10, 9, 9, - 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, - 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, - 9, 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__44u5__p9_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44u5__p9_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44u5__p9_2 = { - _vq_quantthresh__44u5__p9_2, - _vq_quantmap__44u5__p9_2, - 17, - 17 -}; - -static static_codebook _44u5__p9_2 = { - 2, 289, - _vq_lengthlist__44u5__p9_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44u5__p9_2, - NULL, - &_vq_auxt__44u5__p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u5__short[] = { - 4,10,17,13,17,13,17,17,17,17, 3, 6, 8, 9,11, 9, - 15,12,16,17, 6, 5, 5, 7, 7, 8,10,11,17,17, 7, 8, - 7, 9, 9,10,13,13,17,17, 8, 6, 5, 7, 4, 7, 5, 8, - 14,17, 9, 9, 8, 9, 7, 9, 8,10,16,17,12,10, 7, 8, - 4, 7, 4, 7,16,17,12,11, 9,10, 6, 9, 5, 7,14,17, - 14,13,10,15, 4, 8, 3, 5,14,17,17,14,11,15, 6,10, - 6, 8,15,17, -}; - -static static_codebook _huff_book__44u5__short = { - 2, 100, - _huff_lengthlist__44u5__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u6__long[] = { - 3, 9,14,13,14,13,16,12,13,14, 5, 4, 6, 6, 8, 9, - 11,10,12,15,10, 5, 5, 6, 6, 8,10,10,13,16,10, 6, - 6, 6, 6, 8, 9, 9,12,14,13, 7, 6, 6, 4, 6, 6, 7, - 11,14,10, 7, 7, 7, 6, 6, 6, 7,10,13,15,10, 9, 8, - 5, 6, 5, 6,10,14,10, 9, 8, 8, 6, 6, 5, 4, 6,11, - 11,11,12,11,10, 9, 9, 5, 5, 9,10,12,15,13,13,13, - 13, 8, 7, 7, -}; - -static static_codebook _huff_book__44u6__long = { - 2, 100, - _huff_lengthlist__44u6__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u6__p1_0[] = { - 1, 4, 4, 4, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7, - 9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,10, - 10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10, - 10,13,11,10,13,13, 5, 8, 8, 8,11,10, 8,10,10, 7, - 10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13, - 12, -}; - -static float _vq_quantthresh__44u6__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u6__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p1_0 = { - _vq_quantthresh__44u6__p1_0, - _vq_quantmap__44u6__p1_0, - 3, - 3 -}; - -static static_codebook _44u6__p1_0 = { - 4, 81, - _vq_lengthlist__44u6__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u6__p1_0, - NULL, - &_vq_auxt__44u6__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u6__p2_0[] = { - 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6, - 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8, - 8, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 7, 7, - 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6, - 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9, - 9, -}; - -static float _vq_quantthresh__44u6__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u6__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p2_0 = { - _vq_quantthresh__44u6__p2_0, - _vq_quantmap__44u6__p2_0, - 3, - 3 -}; - -static static_codebook _44u6__p2_0 = { - 4, 81, - _vq_lengthlist__44u6__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u6__p2_0, - NULL, - &_vq_auxt__44u6__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u6__p3_0[] = { - 2, 5, 4, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8, - 9, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9, - 9,11,11, 7, 8, 9,11,11,10,11,11,14,14, 9,10,11, - 13,14, 5, 7, 7, 9,10, 6, 9, 8,11,11, 7, 9, 9,11, - 11, 9,11,10,14,13,10,11,11,14,13, 8,10,10,13,13, - 10,11,11,15,15, 9,11,11,14,14,13,14,14,17,16,12, - 13,14,16,16, 8,10,10,13,14, 9,11,11,14,15,10,11, - 12,14,15,12,14,13,16,15,13,14,14,15,17, 5, 7, 7, - 10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,12,11,14, - 14,10,11,11,14,14, 7, 9, 9,12,11, 9,11,11,13,13, - 9,11,11,13,13,11,13,13,14,15,11,12,13,15,16, 6, - 9, 9,11,12, 8,11,10,13,12, 9,11,11,13,14,11,13, - 12,16,14,11,13,13,15,16,10,12,11,14,15,11,13,13, - 15,17,11,13,13,17,16,15,15,16,17,16,14,15,16,18, - 0, 9,11,11,14,15,10,12,12,16,15,11,13,13,16,16, - 13,15,14,18,15,14,16,16, 0, 0, 5, 7, 7,10,10, 7, - 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,14,10,11, - 12,14,14, 6, 9, 9,11,11, 9,11,11,13,13, 8,10,11, - 12,13,11,13,13,16,15,11,12,13,14,16, 7, 9, 9,11, - 12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,16,15, - 11,13,12,15,15, 9,11,11,15,14,11,13,13,17,16,10, - 12,13,15,16,14,16,16, 0,18,14,14,15,15,17,10,11, - 12,15,15,11,13,13,16,16,11,13,13,16,16,14,16,16, - 19,17,14,15,15,17,17, 8,10,10,14,14,10,12,11,15, - 15,10,11,12,16,15,14,15,15,18,20,13,14,16,17,18, - 9,11,11,15,16,11,13,13,17,17,11,13,13,17,16,15, - 16,16, 0, 0,15,16,16, 0, 0, 9,11,11,15,15,10,13, - 12,17,15,11,13,13,17,16,15,17,15,20,19,15,16,16, - 19, 0,13,15,14, 0,17,14,15,16, 0,20,15,16,16, 0, - 19,17,18, 0, 0, 0,16,17,18, 0, 0,12,14,14,19,18, - 13,15,14, 0,17,14,15,16,19,19,16,18,16, 0,19,19, - 20,17,20, 0, 8,10,10,13,14,10,11,11,15,15,10,12, - 12,15,16,14,15,14,19,16,14,15,15, 0,18, 9,11,11, - 16,15,11,13,13, 0,16,11,12,13,16,17,14,16,17, 0, - 19,15,16,16,18, 0, 9,11,11,15,16,11,13,13,16,16, - 11,14,13,18,17,15,16,16,18,20,15,17,19, 0, 0,12, - 14,14,17,17,14,16,15, 0, 0,13,14,15,19, 0,16,18, - 20, 0, 0,16,16,18,18, 0,12,14,14,17,20,14,16,16, - 19, 0,14,16,14, 0,20,16,20,17, 0, 0,17, 0,15, 0, - 19, -}; - -static float _vq_quantthresh__44u6__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u6__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p3_0 = { - _vq_quantthresh__44u6__p3_0, - _vq_quantmap__44u6__p3_0, - 5, - 5 -}; - -static static_codebook _44u6__p3_0 = { - 4, 625, - _vq_lengthlist__44u6__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u6__p3_0, - NULL, - &_vq_auxt__44u6__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u6__p4_0[] = { - 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8, - 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 7, 8, 9,10, 9,10,10,11,11, 9, 9,10, - 11,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10, - 10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11, - 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,13,11, - 11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,12, 9,10, - 10,12,12,11,12,11,13,12,11,12,12,13,13, 5, 7, 7, - 9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12, - 11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 8, 9,11,11, - 8, 9, 9,11,11,10,10,11,12,13,10,10,11,12,12, 6, - 7, 7,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11, - 10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11, - 13,13,10,11,11,12,13,12,12,12,13,14,12,12,13,14, - 14, 9,10,10,12,12, 9,10,10,13,12,10,11,11,13,13, - 11,12,11,14,12,12,13,13,14,14, 6, 7, 7, 9, 9, 7, - 8, 7,10,10, 7, 8, 8,10,10, 9,10,10,12,11, 9,10, - 10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 9, - 10,11,10,11,11,12,12,10,10,11,11,13, 7, 8, 8,10, - 10, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,10,13,12, - 10,11,11,13,12, 9,10,10,12,12,10,11,11,13,12, 9, - 10,10,12,13,12,13,12,14,14,11,11,12,12,14, 9,10, - 10,12,12,10,11,11,13,13,10,11,10,13,12,12,12,12, - 14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12, - 12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,14, - 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12, - 12,13,14,15,12,12,13,14,14, 9,10,10,12,12, 9,11, - 10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,13, - 14,15,11,12,12,14,13,11,12,12,14,14,12,13,13,14, - 14,13,13,14,14,16,13,14,14,15,15,11,12,11,13,13, - 11,12,11,14,13,12,12,13,14,15,12,14,12,15,12,13, - 14,15,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10, - 10,12,12,11,12,12,14,13,11,12,12,13,13, 9,10,10, - 12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14, - 14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13, - 10,11,11,13,13,12,13,12,14,14,12,13,13,14,14,11, - 11,11,13,13,12,13,12,14,14,11,11,12,13,14,14,14, - 14,16,15,12,12,14,12,15,11,12,12,13,14,12,13,13, - 14,15,11,12,12,14,14,13,14,14,16,16,13,14,13,16, - 13, -}; - -static float _vq_quantthresh__44u6__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u6__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p4_0 = { - _vq_quantthresh__44u6__p4_0, - _vq_quantmap__44u6__p4_0, - 5, - 5 -}; - -static static_codebook _44u6__p4_0 = { - 4, 625, - _vq_lengthlist__44u6__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u6__p4_0, - NULL, - &_vq_auxt__44u6__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u6__p5_0[] = { - 2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8, - 11,11, 3, 5, 5, 7, 8, 8, 8,11,11, 6, 8, 7, 9, 9, - 10, 9,12,11, 6, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8, - 10, 9,12,11,13,13, 8, 8, 9, 9,10,11,12,13,13,10, - 11,11,12,12,13,13,14,14,10,10,11,11,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44u6__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u6__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p5_0 = { - _vq_quantthresh__44u6__p5_0, - _vq_quantmap__44u6__p5_0, - 9, - 9 -}; - -static static_codebook _44u6__p5_0 = { - 2, 81, - _vq_lengthlist__44u6__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u6__p5_0, - NULL, - &_vq_auxt__44u6__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p6_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u6__p6_0[] = { - 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7, - 9, 9, 4, 4, 5, 6, 6, 7, 8, 9, 9, 5, 6, 6, 7, 7, - 8, 8,10,10, 5, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7, - 8, 8,10, 9,11,11, 7, 7, 8, 8, 8, 9,10,10,11, 9, - 9, 9,10,10,11,11,12,11, 9, 9, 9,10,10,11,11,11, - 12, -}; - -static float _vq_quantthresh__44u6__p6_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u6__p6_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p6_0 = { - _vq_quantthresh__44u6__p6_0, - _vq_quantmap__44u6__p6_0, - 9, - 9 -}; - -static static_codebook _44u6__p6_0 = { - 2, 81, - _vq_lengthlist__44u6__p6_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u6__p6_0, - NULL, - &_vq_auxt__44u6__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u6__p7_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 7,10,10, 8, - 10,10, 5, 8, 9, 7,10,10, 7,10, 9, 4, 8, 8, 9,11, - 11, 8,11,11, 7,11,11,10,10,13,10,13,13, 7,11,11, - 10,13,12,10,13,13, 5, 9, 8, 8,11,11, 9,11,11, 7, - 11,11,10,13,13,10,12,13, 7,11,11,10,13,13, 9,13, - 10, -}; - -static float _vq_quantthresh__44u6__p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44u6__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p7_0 = { - _vq_quantthresh__44u6__p7_0, - _vq_quantmap__44u6__p7_0, - 3, - 3 -}; - -static static_codebook _44u6__p7_0 = { - 4, 81, - _vq_lengthlist__44u6__p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44u6__p7_0, - NULL, - &_vq_auxt__44u6__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u6__p7_1[] = { - 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 6, - 8, 8, 8, 8, 8, 8, 4, 5, 5, 6, 7, 8, 8, 8, 8, 8, - 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 9, 9, - 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, - 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__44u6__p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u6__p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p7_1 = { - _vq_quantthresh__44u6__p7_1, - _vq_quantmap__44u6__p7_1, - 11, - 11 -}; - -static static_codebook _44u6__p7_1 = { - 2, 121, - _vq_lengthlist__44u6__p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u6__p7_1, - NULL, - &_vq_auxt__44u6__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p8_0[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u6__p8_0[] = { - 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7, - 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11, - 11, 6, 8, 8, 9, 9,10,10,11,11,12,12, 6, 8, 8, 9, - 9,10,10,11,11,12,12, 8, 9, 9,10,10,11,11,12,12, - 13,13, 8, 9, 9,10,10,11,11,12,12,13,13,10,10,10, - 11,11,13,13,13,13,15,14, 9,10,10,12,11,12,13,13, - 13,14,15,11,12,12,13,13,13,13,15,14,15,15,11,11, - 12,13,13,14,14,14,15,15,15, -}; - -static float _vq_quantthresh__44u6__p8_0[] = { - -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, - 38.5, 49.5, -}; - -static long _vq_quantmap__44u6__p8_0[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p8_0 = { - _vq_quantthresh__44u6__p8_0, - _vq_quantmap__44u6__p8_0, - 11, - 11 -}; - -static static_codebook _44u6__p8_0 = { - 2, 121, - _vq_lengthlist__44u6__p8_0, - 1, -524582912, 1618345984, 4, 0, - _vq_quantlist__44u6__p8_0, - NULL, - &_vq_auxt__44u6__p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p8_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u6__p8_1[] = { - 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 5, 7, 7, - 7, 7, 8, 7, 8, 8, 5, 5, 6, 6, 7, 7, 7, 7, 7, 8, - 8, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 6, 6, 7, 7, - 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, - 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44u6__p8_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u6__p8_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p8_1 = { - _vq_quantthresh__44u6__p8_1, - _vq_quantmap__44u6__p8_1, - 11, - 11 -}; - -static static_codebook _44u6__p8_1 = { - 2, 121, - _vq_lengthlist__44u6__p8_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u6__p8_1, - NULL, - &_vq_auxt__44u6__p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p9_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u6__p9_0[] = { - 1, 3, 2, 9, 8,15,15,15,15,15,15,15,15,15,15, 4, - 8, 9,13,14,14,14,14,14,14,14,14,14,14,14, 5, 8, - 9,14,14,14,14,14,14,14,14,14,14,14,14,11,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,11,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, - 14, -}; - -static float _vq_quantthresh__44u6__p9_0[] = { - -1657.5, -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, - 382.5, 637.5, 892.5, 1147.5, 1402.5, 1657.5, -}; - -static long _vq_quantmap__44u6__p9_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p9_0 = { - _vq_quantthresh__44u6__p9_0, - _vq_quantmap__44u6__p9_0, - 15, - 15 -}; - -static static_codebook _44u6__p9_0 = { - 2, 225, - _vq_lengthlist__44u6__p9_0, - 1, -514071552, 1627381760, 4, 0, - _vq_quantlist__44u6__p9_0, - NULL, - &_vq_auxt__44u6__p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p9_1[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u6__p9_1[] = { - 1, 4, 4, 7, 7, 8, 9, 8, 8, 9, 8, 9, 8, 9, 9, 4, - 7, 6, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 7, - 6, 9, 9,10,10, 9, 9,10,10,10,10,11,11, 7, 9, 8, - 10,10,11,11,10,10,11,11,11,11,11,11, 7, 8, 9,10, - 10,11,11,10,10,11,11,11,11,11,12, 8,10,10,11,11, - 12,12,11,11,12,12,12,12,13,12, 8,10,10,11,11,12, - 11,11,11,11,12,12,12,12,13, 8, 9, 9,11,10,11,11, - 12,12,12,12,13,12,13,12, 8, 9, 9,11,11,11,11,12, - 12,12,12,12,13,13,13, 9,10,10,11,12,12,12,12,12, - 13,13,13,13,13,13, 9,10,10,11,11,12,12,12,12,13, - 13,13,13,14,13,10,10,10,12,11,12,12,13,13,13,13, - 13,13,13,13,10,10,11,11,11,12,12,13,13,13,13,13, - 13,13,13,10,11,11,12,12,13,12,12,13,13,13,13,13, - 13,14,10,11,11,12,12,13,12,13,13,13,14,13,13,14, - 13, -}; - -static float _vq_quantthresh__44u6__p9_1[] = { - -110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, - 25.5, 42.5, 59.5, 76.5, 93.5, 110.5, -}; - -static long _vq_quantmap__44u6__p9_1[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p9_1 = { - _vq_quantthresh__44u6__p9_1, - _vq_quantmap__44u6__p9_1, - 15, - 15 -}; - -static static_codebook _44u6__p9_1 = { - 2, 225, - _vq_lengthlist__44u6__p9_1, - 1, -522338304, 1620115456, 4, 0, - _vq_quantlist__44u6__p9_1, - NULL, - &_vq_auxt__44u6__p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u6__p9_2[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44u6__p9_2[] = { - 3, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 9, - 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9,10, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,10, 9,10,10, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10, 9, 9, - 10, -}; - -static float _vq_quantthresh__44u6__p9_2[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44u6__p9_2[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44u6__p9_2 = { - _vq_quantthresh__44u6__p9_2, - _vq_quantmap__44u6__p9_2, - 17, - 17 -}; - -static static_codebook _44u6__p9_2 = { - 2, 289, - _vq_lengthlist__44u6__p9_2, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44u6__p9_2, - NULL, - &_vq_auxt__44u6__p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u6__short[] = { - 4,11,16,13,17,13,17,16,17,17, 4, 7, 9, 9,13,10, - 16,12,16,17, 7, 6, 5, 7, 8, 9,12,12,16,17, 6, 9, - 7, 9,10,10,15,15,17,17, 6, 7, 5, 7, 5, 7, 7,10, - 16,17, 7, 9, 8, 9, 8,10,11,11,15,17, 7, 7, 7, 8, - 5, 8, 8, 9,15,17, 8, 7, 9, 9, 7, 8, 7, 2, 7,15, - 14,13,13,15, 5,10, 4, 3, 6,17,17,15,13,17, 7,11, - 7, 6, 9,16, -}; - -static static_codebook _huff_book__44u6__short = { - 2, 100, - _huff_lengthlist__44u6__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u7__long[] = { - 3, 9,14,13,15,14,16,13,13,14, 5, 5, 7, 7, 8, 9, - 11,10,12,15,10, 6, 5, 6, 6, 9,10,10,13,16,10, 6, - 6, 6, 6, 8, 9, 9,12,15,14, 7, 6, 6, 5, 6, 6, 8, - 12,15,10, 8, 7, 7, 6, 7, 7, 7,11,13,14,10, 9, 8, - 5, 6, 4, 5, 9,12,10, 9, 9, 8, 6, 6, 5, 3, 6,11, - 12,11,12,12,10, 9, 8, 5, 5, 8,10,11,15,13,13,13, - 12, 8, 6, 7, -}; - -static static_codebook _huff_book__44u7__long = { - 2, 100, - _huff_lengthlist__44u7__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u7__p1_0[] = { - 1, 4, 4, 4, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7, - 10,10, 5, 8, 8, 7,10,10, 8,10,10, 5, 8, 8, 8,11, - 10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10, - 10,13,12,10,13,13, 5, 8, 8, 8,11,10, 8,10,11, 7, - 10,10,10,13,13,10,12,13, 8,11,11,10,13,13,10,13, - 12, -}; - -static float _vq_quantthresh__44u7__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u7__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p1_0 = { - _vq_quantthresh__44u7__p1_0, - _vq_quantmap__44u7__p1_0, - 3, - 3 -}; - -static static_codebook _44u7__p1_0 = { - 4, 81, - _vq_lengthlist__44u7__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u7__p1_0, - NULL, - &_vq_auxt__44u7__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u7__p2_0[] = { - 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6, - 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8, - 7, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 7, - 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6, - 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9, - 9, -}; - -static float _vq_quantthresh__44u7__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u7__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p2_0 = { - _vq_quantthresh__44u7__p2_0, - _vq_quantmap__44u7__p2_0, - 3, - 3 -}; - -static static_codebook _44u7__p2_0 = { - 4, 81, - _vq_lengthlist__44u7__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u7__p2_0, - NULL, - &_vq_auxt__44u7__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u7__p3_0[] = { - 2, 5, 4, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8, - 9, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9, - 9,11,11, 6, 8, 9,11,11,10,11,11,14,14, 9,10,11, - 13,14, 5, 7, 7, 9, 9, 7, 9, 8,11,11, 7, 9, 9,11, - 11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,14,13, - 10,11,12,15,14, 9,11,11,15,14,13,14,14,16,16,12, - 13,14,17,16, 8,10,10,13,13, 9,11,11,14,15,10,11, - 12,14,15,12,14,13,16,16,13,14,15,15,17, 5, 7, 7, - 10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,12,11,15, - 14,10,11,12,14,14, 7, 9, 9,12,12, 9,11,11,13,13, - 9,11,11,13,13,11,13,13,14,17,11,13,13,15,16, 6, - 9, 9,11,11, 8,11,10,13,12, 9,11,11,13,13,11,13, - 12,16,14,11,13,13,16,16,10,12,12,15,15,11,13,13, - 16,16,11,13,13,16,15,14,16,17,17,19,14,16,16,18, - 0, 9,11,11,14,15,10,13,12,16,15,11,13,13,16,16, - 14,15,14, 0,16,14,16,16,18, 0, 5, 7, 7,10,10, 7, - 9, 9,12,11, 7, 9, 9,11,12,10,11,11,15,14,10,11, - 12,14,14, 6, 9, 9,11,11, 9,11,11,13,13, 8,10,11, - 12,13,11,13,13,17,15,11,12,13,14,15, 7, 9, 9,11, - 12, 9,11,11,13,13, 9,11,11,13,13,11,13,12,16,16, - 11,13,13,15,14, 9,11,11,14,15,11,13,13,16,15,10, - 12,13,16,16,15,16,16, 0, 0,14,13,15,16,18,10,11, - 11,15,15,11,13,14,16,18,11,13,13,16,15,15,16,16, - 19, 0,14,15,15,16,16, 8,10,10,13,13,10,12,11,16, - 15,10,11,11,16,15,13,15,16,18, 0,13,14,15,17,17, - 9,11,11,15,15,11,13,13,16,18,11,13,13,16,17,15, - 16,16, 0, 0,15,18,16, 0,17, 9,11,11,15,15,11,13, - 12,17,15,11,13,14,16,17,15,18,15, 0,17,15,16,16, - 18,19,13,15,14, 0,18,14,16,16,19,18,14,16,15,19, - 19,16,18,19, 0, 0,16,17, 0, 0, 0,12,14,14,17,17, - 13,16,14, 0,18,14,16,15,18, 0,16,18,16,19,17,18, - 19,17, 0, 0, 8,10,10,14,14, 9,12,11,15,15,10,11, - 12,15,17,13,15,15,18,16,14,16,15,18,17, 9,11,11, - 16,15,11,13,13, 0,16,11,12,13,16,15,15,16,16, 0, - 17,15,15,16,18,17, 9,12,11,15,17,11,13,13,16,16, - 11,14,13,16,16,15,15,16,18,19,16,18,16, 0, 0,12, - 14,14, 0,16,14,16,16, 0,18,13,14,15,16, 0,17,16, - 18, 0, 0,16,16,17,19, 0,13,14,14,17, 0,14,17,16, - 0,19,14,15,15,18,19,17,16,18, 0, 0,15,19,16, 0, - 0, -}; - -static float _vq_quantthresh__44u7__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u7__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p3_0 = { - _vq_quantthresh__44u7__p3_0, - _vq_quantmap__44u7__p3_0, - 5, - 5 -}; - -static static_codebook _44u7__p3_0 = { - 4, 625, - _vq_lengthlist__44u7__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u7__p3_0, - NULL, - &_vq_auxt__44u7__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u7__p4_0[] = { - 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8, - 9, 9,11,11, 8, 9, 9,10,11, 6, 7, 7, 9, 9, 7, 8, - 8,10,10, 6, 7, 8, 9,10, 9,10,10,12,12, 9, 9,10, - 11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10, - 10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11, - 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11, - 11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,11, 9,10, - 10,12,12,11,12,11,13,13,11,12,12,13,13, 6, 7, 7, - 9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12, - 11, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,11,11, - 8, 9, 9,11,11,10,11,11,12,12,10,10,11,12,13, 6, - 7, 7,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11, - 10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11, - 13,13,10,11,11,13,12,12,12,13,13,14,12,12,13,14, - 14, 9,10,10,12,12, 9,10,10,12,12,10,11,11,13,13, - 11,12,11,14,12,12,13,13,14,14, 6, 7, 7, 9, 9, 7, - 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,11, 9,10, - 10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 9, - 10,11,10,11,11,13,12,10,10,11,11,13, 7, 8, 8,10, - 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,10,13,12, - 10,11,11,12,12, 9,10,10,12,12,10,11,11,13,12, 9, - 10,10,12,13,12,13,12,14,14,11,11,12,12,14, 9,10, - 10,12,12,10,11,11,13,13,10,11,11,13,13,12,13,12, - 14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12, - 12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,13, - 9,10,10,12,12,10,11,11,13,13,10,11,11,13,12,12, - 13,13,14,14,12,12,13,14,14, 9,10,10,12,12, 9,11, - 10,13,12,10,10,11,12,13,11,13,12,14,13,12,12,13, - 14,14,11,12,12,13,13,11,12,13,14,14,12,13,13,14, - 14,13,13,14,14,16,13,14,14,16,16,11,11,11,13,13, - 11,12,11,14,13,12,12,13,14,15,13,14,12,16,13,14, - 14,14,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10, - 10,12,12,11,12,12,14,13,11,12,12,13,14, 9,10,10, - 12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14, - 14,12,12,13,13,14, 9,10,10,12,12,10,11,11,12,13, - 10,11,11,13,13,12,13,12,14,14,12,13,13,14,14,11, - 12,12,13,13,12,13,12,14,14,11,11,12,13,14,13,15, - 14,16,15,13,12,14,13,16,11,12,12,13,13,12,13,13, - 14,14,12,12,12,14,14,13,14,14,15,15,13,14,13,16, - 14, -}; - -static float _vq_quantthresh__44u7__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u7__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p4_0 = { - _vq_quantthresh__44u7__p4_0, - _vq_quantmap__44u7__p4_0, - 5, - 5 -}; - -static static_codebook _44u7__p4_0 = { - 4, 625, - _vq_lengthlist__44u7__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u7__p4_0, - NULL, - &_vq_auxt__44u7__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u7__p5_0[] = { - 2, 3, 3, 6, 6, 7, 8,10,10, 4, 5, 5, 8, 7, 8, 8, - 11,11, 3, 5, 5, 7, 7, 8, 9,11,11, 6, 8, 7, 9, 9, - 10,10,12,12, 6, 7, 8, 9,10,10,10,12,12, 8, 8, 8, - 10,10,12,11,13,13, 8, 8, 9,10,10,11,11,13,13,10, - 11,11,12,12,13,13,14,14,10,11,11,12,12,13,13,14, - 14, -}; - -static float _vq_quantthresh__44u7__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u7__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p5_0 = { - _vq_quantthresh__44u7__p5_0, - _vq_quantmap__44u7__p5_0, - 9, - 9 -}; - -static static_codebook _44u7__p5_0 = { - 2, 81, - _vq_lengthlist__44u7__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u7__p5_0, - NULL, - &_vq_auxt__44u7__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p6_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u7__p6_0[] = { - 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 8, 7, - 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7, - 8, 8,10,10, 5, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7, - 8, 8,10, 9,11,11, 7, 7, 8, 8, 8, 9,10,11,11, 9, - 9, 9,10,10,11,10,12,11, 9, 9, 9,10,10,11,11,11, - 12, -}; - -static float _vq_quantthresh__44u7__p6_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u7__p6_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p6_0 = { - _vq_quantthresh__44u7__p6_0, - _vq_quantmap__44u7__p6_0, - 9, - 9 -}; - -static static_codebook _44u7__p6_0 = { - 2, 81, - _vq_lengthlist__44u7__p6_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u7__p6_0, - NULL, - &_vq_auxt__44u7__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p7_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u7__p7_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 8, 9, 9, 7, - 10,10, 5, 8, 9, 7, 9,10, 8, 9, 9, 4, 9, 9, 9,11, - 10, 8,10,10, 7,11,10,10,10,12,10,12,12, 7,10,10, - 10,12,11,10,12,12, 5, 9, 9, 8,10,10, 9,11,11, 7, - 11,10,10,12,12,10,11,12, 7,10,11,10,12,12,10,12, - 10, -}; - -static float _vq_quantthresh__44u7__p7_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44u7__p7_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p7_0 = { - _vq_quantthresh__44u7__p7_0, - _vq_quantmap__44u7__p7_0, - 3, - 3 -}; - -static static_codebook _44u7__p7_0 = { - 4, 81, - _vq_lengthlist__44u7__p7_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44u7__p7_0, - NULL, - &_vq_auxt__44u7__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u7__p7_1[] = { - 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6, - 8, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8, - 8, 6, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 6, 6, 7, 7, - 7, 8, 8, 9, 9, 9, 9, 7, 8, 7, 8, 8, 9, 9, 9, 9, - 9, 9, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, - 9, 9, 9, 9,10, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9,10, 8, 8, 8, 9, 9, 9, 9,10, 9,10,10, 8, 8, - 8, 9, 9, 9, 9, 9,10,10,10, -}; - -static float _vq_quantthresh__44u7__p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u7__p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p7_1 = { - _vq_quantthresh__44u7__p7_1, - _vq_quantmap__44u7__p7_1, - 11, - 11 -}; - -static static_codebook _44u7__p7_1 = { - 2, 121, - _vq_lengthlist__44u7__p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u7__p7_1, - NULL, - &_vq_auxt__44u7__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p8_0[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u7__p8_0[] = { - 1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7, - 9, 9,11,10,12,12, 5, 6, 5, 7, 7, 9, 9,10,11,12, - 12, 6, 7, 7, 8, 8,10,10,11,11,13,13, 6, 7, 7, 8, - 8,10,10,11,12,13,13, 8, 9, 9,10,10,11,11,12,12, - 14,14, 8, 9, 9,10,10,11,11,12,12,14,14,10,10,10, - 11,11,13,12,14,14,15,15,10,10,10,12,12,13,13,14, - 14,15,15,11,12,12,13,13,14,14,15,14,16,15,11,12, - 12,13,13,14,14,15,15,15,16, -}; - -static float _vq_quantthresh__44u7__p8_0[] = { - -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, - 38.5, 49.5, -}; - -static long _vq_quantmap__44u7__p8_0[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p8_0 = { - _vq_quantthresh__44u7__p8_0, - _vq_quantmap__44u7__p8_0, - 11, - 11 -}; - -static static_codebook _44u7__p8_0 = { - 2, 121, - _vq_lengthlist__44u7__p8_0, - 1, -524582912, 1618345984, 4, 0, - _vq_quantlist__44u7__p8_0, - NULL, - &_vq_auxt__44u7__p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p8_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u7__p8_1[] = { - 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, - 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, - 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 8, 7, 8, 8, - 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, - 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, - 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44u7__p8_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u7__p8_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p8_1 = { - _vq_quantthresh__44u7__p8_1, - _vq_quantmap__44u7__p8_1, - 11, - 11 -}; - -static static_codebook _44u7__p8_1 = { - 2, 121, - _vq_lengthlist__44u7__p8_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u7__p8_1, - NULL, - &_vq_auxt__44u7__p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p9_0[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u7__p9_0[] = { - 1, 3, 3,10,10,10,10,10,10,10,10, 4,10,10,10,10, - 10,10,10,10,10,10, 4,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, -}; - -static float _vq_quantthresh__44u7__p9_0[] = { - -2866.5, -2229.5, -1592.5, -955.5, -318.5, 318.5, 955.5, 1592.5, - 2229.5, 2866.5, -}; - -static long _vq_quantmap__44u7__p9_0[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p9_0 = { - _vq_quantthresh__44u7__p9_0, - _vq_quantmap__44u7__p9_0, - 11, - 11 -}; - -static static_codebook _44u7__p9_0 = { - 2, 121, - _vq_lengthlist__44u7__p9_0, - 1, -512171520, 1630791680, 4, 0, - _vq_quantlist__44u7__p9_0, - NULL, - &_vq_auxt__44u7__p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p9_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u7__p9_1[] = { - 1, 4, 4, 6, 5, 8, 6, 9, 8,10, 9,11,10, 4, 6, 6, - 8, 8, 9, 9,11,10,11,11,11,11, 4, 6, 6, 8, 8,10, - 9,11,11,11,11,11,12, 6, 8, 8,10,10,11,11,12,12, - 13,12,13,13, 6, 8, 8,10,10,11,11,12,12,12,13,14, - 13, 8,10,10,11,11,12,13,14,14,14,14,15,15, 8,10, - 10,11,12,12,13,13,14,14,14,14,15, 9,11,11,13,13, - 14,14,15,14,16,15,17,15, 9,11,11,12,13,14,14,15, - 14,15,15,15,16,10,12,12,13,14,15,15,15,15,16,17, - 16,17,10,13,12,13,14,14,16,16,16,16,15,16,17,11, - 13,13,14,15,14,17,15,16,17,17,17,17,11,13,13,14, - 15,15,15,15,17,17,16,17,16, -}; - -static float _vq_quantthresh__44u7__p9_1[] = { - -269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 24.5, 73.5, - 122.5, 171.5, 220.5, 269.5, -}; - -static long _vq_quantmap__44u7__p9_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p9_1 = { - _vq_quantthresh__44u7__p9_1, - _vq_quantmap__44u7__p9_1, - 13, - 13 -}; - -static static_codebook _44u7__p9_1 = { - 2, 169, - _vq_lengthlist__44u7__p9_1, - 1, -518889472, 1622704128, 4, 0, - _vq_quantlist__44u7__p9_1, - NULL, - &_vq_auxt__44u7__p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u7__p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44u7__p9_2[] = { - 2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, - 8, -}; - -static float _vq_quantthresh__44u7__p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44u7__p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44u7__p9_2 = { - _vq_quantthresh__44u7__p9_2, - _vq_quantmap__44u7__p9_2, - 49, - 49 -}; - -static static_codebook _44u7__p9_2 = { - 1, 49, - _vq_lengthlist__44u7__p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44u7__p9_2, - NULL, - &_vq_auxt__44u7__p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u7__short[] = { - 5,12,17,16,16,17,17,17,17,17, 4, 7,11,11,12, 9, - 17,10,17,17, 7, 7, 8, 9, 7, 9,11,10,15,17, 7, 9, - 10,11,10,12,14,12,16,17, 7, 8, 5, 7, 4, 7, 7, 8, - 16,16, 6,10, 9,10, 7,10,11,11,16,17, 6, 8, 8, 9, - 5, 7, 5, 8,16,17, 5, 5, 8, 7, 6, 7, 7, 6, 6,14, - 12,10,12,11, 7,11, 4, 4, 2, 7,17,15,15,15, 8,15, - 6, 8, 5, 9, -}; - -static static_codebook _huff_book__44u7__short = { - 2, 100, - _huff_lengthlist__44u7__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u8__long[] = { - 3, 9,13,14,14,15,14,14,15,15, 5, 4, 6, 8,10,12, - 12,14,15,15, 9, 5, 4, 5, 8,10,11,13,16,16,10, 7, - 4, 3, 5, 7, 9,11,13,13,10, 9, 7, 4, 4, 6, 8,10, - 12,14,13,11, 9, 6, 5, 5, 6, 8,12,14,13,11,10, 8, - 7, 6, 6, 7,10,14,13,11,12,10, 8, 7, 6, 6, 9,13, - 12,11,14,12,11, 9, 8, 7, 9,11,11,12,14,13,14,11, - 10, 8, 8, 9, -}; - -static static_codebook _huff_book__44u8__long = { - 2, 100, - _huff_lengthlist__44u8__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u8__short[] = { - 6,14,18,18,17,17,17,17,17,17, 4, 7, 9, 9,10,13, - 15,17,17,17, 6, 7, 5, 6, 8,11,16,17,16,17, 5, 7, - 5, 4, 6,10,14,17,17,17, 6, 6, 6, 5, 7,10,13,16, - 17,17, 7, 6, 7, 7, 7, 8, 7,10,15,16,12, 9, 9, 6, - 6, 5, 3, 5,11,15,14,14,13, 5, 5, 7, 3, 4, 8,15, - 17,17,13, 7, 7,10, 6, 6,10,15,17,17,16,10,11,14, - 10,10,15,17, -}; - -static static_codebook _huff_book__44u8__short = { - 2, 100, - _huff_lengthlist__44u8__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u8_p1_0[] = { - 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 8, 9, 9, 7, - 9, 9, 5, 7, 7, 7, 9, 9, 8, 9, 9, 5, 7, 7, 7, 9, - 9, 7, 9, 9, 7, 9, 9, 9,10,11, 9,11,10, 7, 9, 9, - 9,11,10, 9,10,11, 5, 7, 7, 7, 9, 9, 7, 9, 9, 7, - 9, 9, 9,11,10, 9,10,10, 8, 9, 9, 9,11,11, 9,11, - 10, -}; - -static float _vq_quantthresh__44u8_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u8_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p1_0 = { - _vq_quantthresh__44u8_p1_0, - _vq_quantmap__44u8_p1_0, - 3, - 3 -}; - -static static_codebook _44u8_p1_0 = { - 4, 81, - _vq_lengthlist__44u8_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u8_p1_0, - NULL, - &_vq_auxt__44u8_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u8_p2_0[] = { - 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8, - 9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,10, - 11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10, - 10, 9,10, 9,12,11, 9,10,10,12,12, 8, 9, 9,12,11, - 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,11, - 11,12,13,14, 8, 9, 9,11,11, 9,10,10,12,12, 9,10, - 10,12,12,11,12,11,13,13,11,12,12,14,14, 5, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12, - 12, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11, - 8, 9, 9,11,11,10,11,11,12,13,10,11,11,12,13, 6, - 8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11, - 10,13,12,10,11,11,13,13, 9,10,10,12,12,10,11,11, - 13,13,10,11,11,13,13,12,12,13,13,14,12,13,13,14, - 14, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13, - 11,13,12,14,13,12,13,13,14,14, 5, 7, 7, 9, 9, 7, - 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10, - 10,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9, - 10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10, - 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,13, - 10,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10, - 10,11,12,13,12,13,13,14,14,12,12,13,13,14, 9,10, - 10,12,12,10,11,11,13,13,10,11,11,13,13,12,13,13, - 15,14,12,13,13,14,13, 8, 9, 9,11,11, 9,10,10,12, - 12, 9,10,10,12,12,12,12,12,14,13,11,12,12,14,14, - 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12, - 13,13,14,15,12,13,13,14,15, 9,10,10,12,12,10,11, - 10,13,12,10,11,11,13,13,12,13,12,15,14,12,13,13, - 14,15,11,12,12,14,14,12,13,13,14,14,12,13,13,15, - 14,14,14,14,14,16,14,14,15,16,16,11,12,12,14,14, - 11,12,12,14,14,12,13,13,14,15,13,14,13,16,14,14, - 14,14,16,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10, - 10,12,12,11,12,12,14,13,11,12,12,14,14, 9,10,10, - 12,12,10,11,11,13,13,10,10,11,12,13,12,13,13,15, - 14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13, - 10,11,11,13,13,12,13,13,14,14,12,13,13,15,14,11, - 12,12,14,13,12,13,13,15,14,11,12,12,13,14,14,15, - 14,16,15,13,13,14,13,16,11,12,12,14,14,12,13,13, - 14,15,12,13,12,15,14,14,14,14,16,15,14,15,13,16, - 14, -}; - -static float _vq_quantthresh__44u8_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u8_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p2_0 = { - _vq_quantthresh__44u8_p2_0, - _vq_quantmap__44u8_p2_0, - 5, - 5 -}; - -static static_codebook _44u8_p2_0 = { - 4, 625, - _vq_lengthlist__44u8_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u8_p2_0, - NULL, - &_vq_auxt__44u8_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u8_p3_0[] = { - 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7, - 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7, - 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7, - 8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9, - 9, 9,10,10,11,10,12,11, 9, 9, 9, 9,10,11,11,11, - 12, -}; - -static float _vq_quantthresh__44u8_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u8_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p3_0 = { - _vq_quantthresh__44u8_p3_0, - _vq_quantmap__44u8_p3_0, - 9, - 9 -}; - -static static_codebook _44u8_p3_0 = { - 2, 81, - _vq_lengthlist__44u8_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u8_p3_0, - NULL, - &_vq_auxt__44u8_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44u8_p4_0[] = { - 4, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,11,11,11, - 11, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11, - 12,12, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11, - 11,12,12, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10, - 11,11,12,12, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10, - 10,11,11,12,12, 7, 7, 7, 8, 8, 9, 8,10, 9,10, 9, - 11,10,12,11,13,12, 7, 7, 7, 8, 8, 8, 9, 9,10, 9, - 10,10,11,11,12,12,13, 8, 8, 8, 9, 9, 9, 9,10,10, - 11,10,11,11,12,12,13,13, 8, 8, 8, 9, 9, 9,10,10, - 10,10,11,11,11,12,12,12,13, 8, 9, 9, 9, 9,10, 9, - 11,10,11,11,12,11,13,12,13,13, 8, 9, 9, 9, 9, 9, - 10,10,11,11,11,11,12,12,13,13,13,10,10,10,10,10, - 11,10,11,11,12,11,13,12,13,13,14,13,10,10,10,10, - 10,10,11,11,11,11,12,12,13,13,13,13,14,11,11,11, - 11,11,12,11,12,12,13,12,13,13,14,13,14,14,11,11, - 11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,11, - 12,12,12,12,13,12,13,12,13,13,14,13,14,14,14,14, - 11,12,12,12,12,12,12,13,13,13,13,13,14,14,14,14, - 14, -}; - -static float _vq_quantthresh__44u8_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44u8_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p4_0 = { - _vq_quantthresh__44u8_p4_0, - _vq_quantmap__44u8_p4_0, - 17, - 17 -}; - -static static_codebook _44u8_p4_0 = { - 2, 289, - _vq_lengthlist__44u8_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44u8_p4_0, - NULL, - &_vq_auxt__44u8_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u8_p5_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8, 9, 9, 7, - 9, 9, 5, 8, 8, 7, 9, 9, 8, 9, 9, 5, 8, 8, 8,10, - 10, 8,10,10, 7,10,10, 9,10,12, 9,12,11, 7,10,10, - 9,11,10, 9,11,12, 5, 8, 8, 8,10,10, 8,10,10, 7, - 10,10, 9,11,11, 9,10,11, 7,10,10, 9,11,11,10,12, - 10, -}; - -static float _vq_quantthresh__44u8_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44u8_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p5_0 = { - _vq_quantthresh__44u8_p5_0, - _vq_quantmap__44u8_p5_0, - 3, - 3 -}; - -static static_codebook _44u8_p5_0 = { - 4, 81, - _vq_lengthlist__44u8_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44u8_p5_0, - NULL, - &_vq_auxt__44u8_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u8_p5_1[] = { - 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 5, 5, 6, 6, - 7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8, - 8, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 7, - 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, - 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 8, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 9, 9, -}; - -static float _vq_quantthresh__44u8_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u8_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p5_1 = { - _vq_quantthresh__44u8_p5_1, - _vq_quantmap__44u8_p5_1, - 11, - 11 -}; - -static static_codebook _44u8_p5_1 = { - 2, 121, - _vq_lengthlist__44u8_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u8_p5_1, - NULL, - &_vq_auxt__44u8_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u8_p6_0[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7, 8, - 8, 8, 8, 9, 9,10,10, 6, 7, 7, 7, 8, 8, 8, 8, 9, - 9,10,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 8,10, 9,11, - 10, 7, 8, 8, 8, 8, 8, 9, 9, 9,10,10,11,11, 7, 8, - 8, 8, 8, 9, 8, 9, 9,10,10,11,11, 8, 8, 8, 9, 9, - 9, 9, 9,10,10,10,11,11, 8, 8, 8, 9, 9, 9, 9,10, - 9,10,10,11,11, 9, 9, 9, 9,10,10,10,10,10,10,11, - 11,12, 9, 9, 9,10, 9,10,10,10,10,11,10,12,11,10, - 10,10,10,10,11,11,11,11,11,12,12,12,10,10,10,10, - 11,11,11,11,11,12,11,12,12, -}; - -static float _vq_quantthresh__44u8_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u8_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p6_0 = { - _vq_quantthresh__44u8_p6_0, - _vq_quantmap__44u8_p6_0, - 13, - 13 -}; - -static static_codebook _44u8_p6_0 = { - 2, 169, - _vq_lengthlist__44u8_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u8_p6_0, - NULL, - &_vq_auxt__44u8_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u8_p6_1[] = { - 3, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, -}; - -static float _vq_quantthresh__44u8_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u8_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p6_1 = { - _vq_quantthresh__44u8_p6_1, - _vq_quantmap__44u8_p6_1, - 5, - 5 -}; - -static static_codebook _44u8_p6_1 = { - 2, 25, - _vq_lengthlist__44u8_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u8_p6_1, - NULL, - &_vq_auxt__44u8_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u8_p7_0[] = { - 1, 4, 5, 6, 6, 7, 7, 8, 8,10,10,11,11, 5, 6, 6, - 7, 7, 8, 8, 9, 9,11,10,12,11, 5, 6, 6, 7, 7, 8, - 8, 9, 9,10,11,11,12, 6, 7, 7, 8, 8, 9, 9,10,10, - 11,11,12,12, 6, 7, 7, 8, 8, 9, 9,10,10,11,12,13, - 12, 7, 8, 8, 9, 9,10,10,11,11,12,12,13,13, 8, 8, - 8, 9, 9,10,10,11,11,12,12,13,13, 9, 9, 9,10,10, - 11,11,12,12,13,13,14,14, 9, 9, 9,10,10,11,11,12, - 12,13,13,14,14,10,11,11,12,11,13,12,13,13,14,14, - 15,15,10,11,11,11,12,12,13,13,14,14,14,15,15,11, - 12,12,13,13,14,13,15,14,15,15,16,15,11,11,12,13, - 13,13,14,14,14,15,15,15,16, -}; - -static float _vq_quantthresh__44u8_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__44u8_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p7_0 = { - _vq_quantthresh__44u8_p7_0, - _vq_quantmap__44u8_p7_0, - 13, - 13 -}; - -static static_codebook _44u8_p7_0 = { - 2, 169, - _vq_lengthlist__44u8_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__44u8_p7_0, - NULL, - &_vq_auxt__44u8_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u8_p7_1[] = { - 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, - 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, - 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8, - 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, - 8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, - 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, - 7, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44u8_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u8_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p7_1 = { - _vq_quantthresh__44u8_p7_1, - _vq_quantmap__44u8_p7_1, - 11, - 11 -}; - -static static_codebook _44u8_p7_1 = { - 2, 121, - _vq_lengthlist__44u8_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u8_p7_1, - NULL, - &_vq_auxt__44u8_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u8_p8_0[] = { - 1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8,10, 9,11,10, 4, - 6, 6, 8, 8,10, 9, 9, 9,10,10,11,10,12,10, 4, 6, - 6, 8, 8,10,10, 9, 9,10,10,11,11,11,12, 7, 8, 8, - 10,10,11,11,11,10,12,11,12,12,13,11, 7, 8, 8,10, - 10,11,11,10,10,11,11,12,12,13,13, 8,10,10,11,11, - 12,11,12,11,13,12,13,12,14,13, 8,10, 9,11,11,12, - 12,12,12,12,12,13,13,14,13, 8, 9, 9,11,10,12,11, - 13,12,13,13,14,13,14,13, 8, 9, 9,10,11,12,12,12, - 12,13,13,14,15,14,14, 9,10,10,12,11,13,12,13,13, - 14,13,14,14,14,14, 9,10,10,12,12,12,12,13,13,14, - 14,14,15,14,14,10,11,11,13,12,13,12,14,14,14,14, - 14,14,15,15,10,11,11,12,12,13,13,14,14,14,15,15, - 14,16,15,11,12,12,13,12,14,14,14,13,15,14,15,15, - 15,17,11,12,12,13,13,14,14,14,15,15,14,15,15,14, - 17, -}; - -static float _vq_quantthresh__44u8_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44u8_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p8_0 = { - _vq_quantthresh__44u8_p8_0, - _vq_quantmap__44u8_p8_0, - 15, - 15 -}; - -static static_codebook _44u8_p8_0 = { - 2, 225, - _vq_lengthlist__44u8_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44u8_p8_0, - NULL, - &_vq_auxt__44u8_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44u8_p8_1[] = { - 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 6, 6, 7, 7, 8, - 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10, 8, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10, - 10, 9,10, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, - 10,10,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10,10, 9,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10, - 10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10, - 10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10, 9, - 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10, - 10, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, - 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10, 9, 9, 9,10, 9,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, - 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, - 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10, 9, 9, 9,10, 9,10, 9,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44u8_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44u8_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p8_1 = { - _vq_quantthresh__44u8_p8_1, - _vq_quantmap__44u8_p8_1, - 21, - 21 -}; - -static static_codebook _44u8_p8_1 = { - 2, 441, - _vq_lengthlist__44u8_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44u8_p8_1, - NULL, - &_vq_auxt__44u8_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p9_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u8_p9_0[] = { - 1, 3, 3, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9, - 9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, - 8, -}; - -static float _vq_quantthresh__44u8_p9_0[] = { - -3258.5, -2327.5, -1396.5, -465.5, 465.5, 1396.5, 2327.5, 3258.5, -}; - -static long _vq_quantmap__44u8_p9_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p9_0 = { - _vq_quantthresh__44u8_p9_0, - _vq_quantmap__44u8_p9_0, - 9, - 9 -}; - -static static_codebook _44u8_p9_0 = { - 2, 81, - _vq_lengthlist__44u8_p9_0, - 1, -511895552, 1631393792, 4, 0, - _vq_quantlist__44u8_p9_0, - NULL, - &_vq_auxt__44u8_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p9_1[] = { - 9, - 8, - 10, - 7, - 11, - 6, - 12, - 5, - 13, - 4, - 14, - 3, - 15, - 2, - 16, - 1, - 17, - 0, - 18, -}; - -static long _vq_lengthlist__44u8_p9_1[] = { - 1, 4, 4, 7, 7, 8, 7, 8, 6, 9, 7,10, 8,11,10,11, - 11,11,11, 4, 7, 6, 9, 9,10, 9, 9, 9,10,10,11,10, - 11,10,11,11,13,11, 4, 7, 7, 9, 9, 9, 9, 9, 9,10, - 10,11,10,11,11,11,12,11,12, 7, 9, 8,11,11,11,11, - 10,10,11,11,12,12,12,12,12,12,14,13, 7, 8, 9,10, - 11,11,11,10,10,11,11,11,11,12,12,14,12,13,14, 8, - 9, 9,11,11,11,11,11,11,12,12,14,12,15,14,14,14, - 15,14, 8, 9, 9,11,11,11,11,12,11,12,12,13,13,13, - 13,13,13,14,14, 8, 9, 9,11,10,12,11,12,12,13,13, - 13,13,15,14,14,14,16,16, 8, 9, 9,10,11,11,12,12, - 12,13,13,13,14,14,14,15,16,15,15, 9,10,10,11,12, - 12,13,13,13,14,14,16,14,14,16,16,16,16,15, 9,10, - 10,11,11,12,13,13,14,15,14,16,14,15,16,16,16,16, - 15,10,11,11,12,13,13,14,15,15,15,15,15,16,15,16, - 15,16,15,15,10,11,11,13,13,14,13,13,15,14,15,15, - 16,15,15,15,16,15,16,10,12,12,14,14,14,14,14,16, - 16,15,15,15,16,16,16,16,16,16,11,12,12,14,14,14, - 14,15,15,16,15,16,15,16,15,16,16,16,16,12,12,13, - 14,14,15,16,16,16,16,16,16,15,16,16,16,16,16,16, - 12,13,13,14,14,14,14,15,16,15,16,16,16,16,16,16, - 16,16,16,12,13,14,14,14,16,15,16,15,16,16,16,16, - 16,16,16,16,16,16,12,14,13,14,15,15,15,16,15,16, - 16,15,16,16,16,16,16,16,16, -}; - -static float _vq_quantthresh__44u8_p9_1[] = { - -416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, - -24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, - 367.5, 416.5, -}; - -static long _vq_quantmap__44u8_p9_1[] = { - 17, 15, 13, 11, 9, 7, 5, 3, - 1, 0, 2, 4, 6, 8, 10, 12, - 14, 16, 18, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p9_1 = { - _vq_quantthresh__44u8_p9_1, - _vq_quantmap__44u8_p9_1, - 19, - 19 -}; - -static static_codebook _44u8_p9_1 = { - 2, 361, - _vq_lengthlist__44u8_p9_1, - 1, -518287360, 1622704128, 5, 0, - _vq_quantlist__44u8_p9_1, - NULL, - &_vq_auxt__44u8_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u8_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44u8_p9_2[] = { - 2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__44u8_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44u8_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44u8_p9_2 = { - _vq_quantthresh__44u8_p9_2, - _vq_quantmap__44u8_p9_2, - 49, - 49 -}; - -static static_codebook _44u8_p9_2 = { - 1, 49, - _vq_lengthlist__44u8_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44u8_p9_2, - NULL, - &_vq_auxt__44u8_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44u9__long[] = { - 3, 9,13,13,14,15,14,14,15,15, 5, 5, 9,10,12,12, - 13,14,16,15,10, 6, 6, 6, 8,11,12,13,16,15,11, 7, - 5, 3, 5, 8,10,12,15,15,10,10, 7, 4, 3, 5, 8,10, - 12,12,12,12, 9, 7, 5, 4, 6, 8,10,13,13,12,11, 9, - 7, 5, 5, 6, 9,12,14,12,12,10, 8, 6, 6, 6, 7,11, - 13,12,14,13,10, 8, 7, 7, 7,10,11,11,12,13,12,11, - 10, 8, 8, 9, -}; - -static static_codebook _huff_book__44u9__long = { - 2, 100, - _huff_lengthlist__44u9__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _huff_lengthlist__44u9__short[] = { - 9,16,18,18,17,17,17,17,17,17, 5, 8,11,12,11,12, - 17,17,16,16, 6, 6, 8, 8, 9,10,14,15,16,16, 6, 7, - 7, 4, 6, 9,13,16,16,16, 6, 6, 7, 4, 5, 8,11,15, - 17,16, 7, 6, 7, 6, 6, 8, 9,10,14,16,11, 8, 8, 7, - 6, 6, 3, 4,10,15,14,12,12,10, 5, 6, 3, 3, 8,13, - 15,17,15,11, 6, 8, 6, 6, 9,14,17,15,15,12, 8,10, - 9, 9,12,15, -}; - -static static_codebook _huff_book__44u9__short = { - 2, 100, - _huff_lengthlist__44u9__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u9_p1_0[] = { - 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7, - 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 9, 5, 7, 7, 7, 9, - 9, 7, 9, 9, 8, 9, 9, 9,10,11, 9,11,11, 7, 9, 9, - 9,11,10, 9,11,11, 5, 7, 7, 7, 9, 9, 8, 9,10, 7, - 9, 9, 9,11,11, 9,10,11, 7, 9,10, 9,11,11, 9,11, - 10, -}; - -static float _vq_quantthresh__44u9_p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44u9_p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p1_0 = { - _vq_quantthresh__44u9_p1_0, - _vq_quantmap__44u9_p1_0, - 3, - 3 -}; - -static static_codebook _44u9_p1_0 = { - 4, 81, - _vq_lengthlist__44u9_p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44u9_p1_0, - NULL, - &_vq_auxt__44u9_p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p2_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u9_p2_0[] = { - 3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8, - 9, 9,11,10, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8, - 8,10,10, 7, 8, 8, 9,10, 9,10,10,11,11, 9, 9,10, - 11,11, 6, 7, 7, 9, 9, 7, 8, 8,10, 9, 7, 8, 8,10, - 10, 9,10, 9,11,11, 9,10,10,11,11, 8, 9, 9,11,11, - 9,10,10,12,11, 9,10,10,11,12,11,11,11,13,13,11, - 11,11,12,13, 8, 9, 9,11,11, 9,10,10,11,11, 9,10, - 10,12,11,11,12,11,13,12,11,11,12,13,13, 6, 7, 7, - 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12, - 11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11, - 8, 9, 9,10,10,10,11,11,12,12,10,10,11,12,12, 7, - 8, 8,10,10, 8, 9, 8,10,10, 8, 9, 9,10,10,10,11, - 10,12,11,10,10,11,12,12, 9,10,10,11,12,10,11,11, - 12,12,10,11,10,12,12,12,12,12,13,13,11,12,12,13, - 13, 9,10,10,11,11, 9,10,10,12,12,10,11,11,12,13, - 11,12,11,13,12,12,12,12,13,14, 6, 7, 7, 9, 9, 7, - 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,11,11, 9,10, - 10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,10, 8, 8, 9, - 10,10,10,11,10,12,12,10,10,11,11,12, 7, 8, 8,10, - 10, 8, 9, 9,10,10, 8, 9, 9,10,10,10,11,10,12,12, - 10,11,10,12,12, 9,10,10,12,11,10,11,11,12,12, 9, - 10,10,12,12,12,12,12,13,13,11,11,12,12,14, 9,10, - 10,11,12,10,11,11,12,12,10,11,11,12,12,11,12,12, - 14,14,12,12,12,13,13, 8, 9, 9,11,11, 9,10,10,12, - 11, 9,10,10,12,12,11,12,11,13,13,11,11,12,13,13, - 9,10,10,12,12,10,11,11,12,12,10,11,11,12,12,12, - 12,12,14,14,12,12,12,13,13, 9,10,10,12,11,10,11, - 10,12,12,10,11,11,12,12,11,12,12,14,13,12,12,12, - 13,14,11,12,11,13,13,11,12,12,13,13,12,12,12,14, - 14,13,13,13,13,15,13,13,14,15,15,11,11,11,13,13, - 11,12,11,13,13,11,12,12,13,13,12,13,12,15,13,13, - 13,14,14,15, 8, 9, 9,11,11, 9,10,10,11,12, 9,10, - 10,11,12,11,12,11,13,13,11,12,12,13,13, 9,10,10, - 11,12,10,11,10,12,12,10,10,11,12,13,12,12,12,14, - 13,11,12,12,13,14, 9,10,10,12,12,10,11,11,12,12, - 10,11,11,12,12,12,12,12,14,13,12,12,12,14,13,11, - 11,11,13,13,11,12,12,14,13,11,11,12,13,13,13,13, - 13,15,14,12,12,13,13,15,11,12,12,13,13,12,12,12, - 13,14,11,12,12,13,13,13,13,14,14,15,13,13,13,14, - 14, -}; - -static float _vq_quantthresh__44u9_p2_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u9_p2_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p2_0 = { - _vq_quantthresh__44u9_p2_0, - _vq_quantmap__44u9_p2_0, - 5, - 5 -}; - -static static_codebook _44u9_p2_0 = { - 4, 625, - _vq_lengthlist__44u9_p2_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u9_p2_0, - NULL, - &_vq_auxt__44u9_p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p3_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44u9_p3_0[] = { - 3, 4, 4, 5, 5, 7, 7, 8, 8, 4, 5, 5, 6, 6, 7, 7, - 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7, - 8, 8, 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7, - 8, 8, 9, 9,10,10, 7, 7, 7, 8, 8, 9, 9,10,10, 8, - 9, 9,10, 9,10,10,11,11, 8, 9, 9, 9,10,10,10,11, - 11, -}; - -static float _vq_quantthresh__44u9_p3_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44u9_p3_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p3_0 = { - _vq_quantthresh__44u9_p3_0, - _vq_quantmap__44u9_p3_0, - 9, - 9 -}; - -static static_codebook _44u9_p3_0 = { - 2, 81, - _vq_lengthlist__44u9_p3_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44u9_p3_0, - NULL, - &_vq_auxt__44u9_p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p4_0[] = { - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15, - 0, - 16, -}; - -static long _vq_lengthlist__44u9_p4_0[] = { - 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11, - 11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10, - 11,11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10, - 10,11,11, 6, 6, 6, 7, 6, 7, 7, 8, 8, 9, 9,10,10, - 11,11,12,11, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9,10, - 10,11,11,11,12, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, - 10,10,11,11,12,12, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, - 9,10,10,11,11,12,12, 8, 8, 8, 8, 8, 9, 8,10, 9, - 10,10,11,10,12,11,13,12, 8, 8, 8, 8, 8, 9, 9, 9, - 10,10,10,10,11,11,12,12,12, 8, 8, 8, 9, 9, 9, 9, - 10,10,11,10,12,11,12,12,13,12, 8, 8, 8, 9, 9, 9, - 9,10,10,10,11,11,11,12,12,12,13, 9, 9, 9,10,10, - 10,10,11,10,11,11,12,11,13,12,13,13, 9, 9,10,10, - 10,10,10,10,11,11,11,11,12,12,13,13,13,10,11,10, - 11,11,11,11,12,11,12,12,13,12,13,13,14,13,10,10, - 10,11,11,11,11,11,12,12,12,12,13,13,13,13,14,11, - 11,11,12,11,12,12,12,12,13,13,13,13,14,13,14,14, - 11,11,11,11,12,12,12,12,12,12,13,13,13,13,14,14, - 14, -}; - -static float _vq_quantthresh__44u9_p4_0[] = { - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, -}; - -static long _vq_quantmap__44u9_p4_0[] = { - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p4_0 = { - _vq_quantthresh__44u9_p4_0, - _vq_quantmap__44u9_p4_0, - 17, - 17 -}; - -static static_codebook _44u9_p4_0 = { - 2, 289, - _vq_lengthlist__44u9_p4_0, - 1, -529530880, 1611661312, 5, 0, - _vq_quantlist__44u9_p4_0, - NULL, - &_vq_auxt__44u9_p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p5_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44u9_p5_0[] = { - 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8, 9, 9, 7, - 9, 9, 5, 8, 8, 7, 9, 9, 8, 9, 9, 5, 8, 8, 8,10, - 10, 8,10,10, 7,10,10, 9,10,12, 9,11,11, 7,10,10, - 9,11,10, 9,11,12, 5, 8, 8, 8,10,10, 8,10,10, 7, - 10,10, 9,12,11, 9,10,11, 7,10,10, 9,11,11,10,12, - 10, -}; - -static float _vq_quantthresh__44u9_p5_0[] = { - -5.5, 5.5, -}; - -static long _vq_quantmap__44u9_p5_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p5_0 = { - _vq_quantthresh__44u9_p5_0, - _vq_quantmap__44u9_p5_0, - 3, - 3 -}; - -static static_codebook _44u9_p5_0 = { - 4, 81, - _vq_lengthlist__44u9_p5_0, - 1, -529137664, 1618345984, 2, 0, - _vq_quantlist__44u9_p5_0, - NULL, - &_vq_auxt__44u9_p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p5_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u9_p5_1[] = { - 5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 6, - 7, 7, 7, 7, 8, 7, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, - 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 6, 6, 6, 7, - 7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 8, 7, 8, 8, - 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, - 8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, - 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44u9_p5_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u9_p5_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p5_1 = { - _vq_quantthresh__44u9_p5_1, - _vq_quantmap__44u9_p5_1, - 11, - 11 -}; - -static static_codebook _44u9_p5_1 = { - 2, 121, - _vq_lengthlist__44u9_p5_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u9_p5_1, - NULL, - &_vq_auxt__44u9_p5_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u9_p6_0[] = { - 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 5, - 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 5, 6, 7, 7, 8, - 8, 8, 8, 9, 9,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 10,10,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10, - 10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11, 7, 8, - 8, 8, 8, 9, 9, 9, 9,10,10,11,11, 8, 8, 8, 9, 9, - 9, 9, 9,10,10,10,11,11, 8, 8, 8, 9, 9, 9, 9,10, - 9,10,10,11,11, 9, 9, 9,10,10,10,10,10,11,11,11, - 11,12, 9, 9, 9,10,10,10,10,10,10,11,10,12,11,10, - 10,10,10,10,11,11,11,11,11,12,12,12,10,10,10,10, - 10,11,11,11,11,12,11,12,12, -}; - -static float _vq_quantthresh__44u9_p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44u9_p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p6_0 = { - _vq_quantthresh__44u9_p6_0, - _vq_quantmap__44u9_p6_0, - 13, - 13 -}; - -static static_codebook _44u9_p6_0 = { - 2, 169, - _vq_lengthlist__44u9_p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44u9_p6_0, - NULL, - &_vq_auxt__44u9_p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44u9_p6_1[] = { - 4, 4, 4, 5, 5, 4, 5, 4, 5, 5, 4, 4, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, -}; - -static float _vq_quantthresh__44u9_p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44u9_p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p6_1 = { - _vq_quantthresh__44u9_p6_1, - _vq_quantmap__44u9_p6_1, - 5, - 5 -}; - -static static_codebook _44u9_p6_1 = { - 2, 25, - _vq_lengthlist__44u9_p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44u9_p6_1, - NULL, - &_vq_auxt__44u9_p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p7_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44u9_p7_0[] = { - 1, 4, 5, 6, 6, 7, 7, 8, 9,10,10,11,11, 5, 6, 6, - 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 6, 6, 7, 7, 8, - 8, 9, 9,10,10,11,11, 6, 7, 7, 8, 8, 9, 9,10,10, - 11,11,12,12, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,12, - 12, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13, 8, 8, - 8, 9, 9,10,10,11,11,12,12,13,13, 9, 9, 9,10,10, - 11,11,12,12,13,13,13,13, 9, 9, 9,10,10,11,11,12, - 12,13,13,14,14,10,10,10,11,11,12,12,13,13,14,13, - 15,14,10,10,10,11,11,12,12,13,13,14,14,14,14,11, - 11,12,12,12,13,13,14,14,14,14,15,15,11,11,12,12, - 12,13,13,14,14,14,15,15,15, -}; - -static float _vq_quantthresh__44u9_p7_0[] = { - -60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, - 27.5, 38.5, 49.5, 60.5, -}; - -static long _vq_quantmap__44u9_p7_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p7_0 = { - _vq_quantthresh__44u9_p7_0, - _vq_quantmap__44u9_p7_0, - 13, - 13 -}; - -static static_codebook _44u9_p7_0 = { - 2, 169, - _vq_lengthlist__44u9_p7_0, - 1, -523206656, 1618345984, 4, 0, - _vq_quantlist__44u9_p7_0, - NULL, - &_vq_auxt__44u9_p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p7_1[] = { - 5, - 4, - 6, - 3, - 7, - 2, - 8, - 1, - 9, - 0, - 10, -}; - -static long _vq_lengthlist__44u9_p7_1[] = { - 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7, - 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7, 7, - 7, 7, 7, 7, 7, 8, 8, 8, 8, -}; - -static float _vq_quantthresh__44u9_p7_1[] = { - -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, - 3.5, 4.5, -}; - -static long _vq_quantmap__44u9_p7_1[] = { - 9, 7, 5, 3, 1, 0, 2, 4, - 6, 8, 10, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p7_1 = { - _vq_quantthresh__44u9_p7_1, - _vq_quantmap__44u9_p7_1, - 11, - 11 -}; - -static static_codebook _44u9_p7_1 = { - 2, 121, - _vq_lengthlist__44u9_p7_1, - 1, -531365888, 1611661312, 4, 0, - _vq_quantlist__44u9_p7_1, - NULL, - &_vq_auxt__44u9_p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p8_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u9_p8_0[] = { - 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10, 9,11,10, 4, - 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,10,12,10, 4, 6, - 6, 8, 8, 9,10, 9, 9,10,10,11,11,12,12, 7, 8, 8, - 10,10,11,11,10,10,11,11,12,12,13,12, 7, 8, 8,10, - 10,11,11,10,10,11,11,12,12,12,13, 8,10, 9,11,11, - 12,12,11,11,12,12,13,13,14,13, 8, 9, 9,11,11,12, - 12,11,12,12,12,13,13,14,13, 8, 9, 9,10,10,12,11, - 13,12,13,13,14,13,15,14, 8, 9, 9,10,10,11,12,12, - 12,13,13,13,14,14,14, 9,10,10,12,11,13,12,13,13, - 14,13,14,14,14,15, 9,10,10,11,12,12,12,13,13,14, - 14,14,15,15,15,10,11,11,12,12,13,13,14,14,14,14, - 15,14,16,15,10,11,11,12,12,13,13,13,14,14,14,14, - 14,15,16,11,12,12,13,13,14,13,14,14,15,14,15,16, - 16,16,11,12,12,13,13,14,13,14,14,15,15,15,16,15, - 15, -}; - -static float _vq_quantthresh__44u9_p8_0[] = { - -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, - 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, -}; - -static long _vq_quantmap__44u9_p8_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p8_0 = { - _vq_quantthresh__44u9_p8_0, - _vq_quantmap__44u9_p8_0, - 15, - 15 -}; - -static static_codebook _44u9_p8_0 = { - 2, 225, - _vq_lengthlist__44u9_p8_0, - 1, -520986624, 1620377600, 4, 0, - _vq_quantlist__44u9_p8_0, - NULL, - &_vq_auxt__44u9_p8_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p8_1[] = { - 10, - 9, - 11, - 8, - 12, - 7, - 13, - 6, - 14, - 5, - 15, - 4, - 16, - 3, - 17, - 2, - 18, - 1, - 19, - 0, - 20, -}; - -static long _vq_lengthlist__44u9_p8_1[] = { - 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, - 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10, 8, 8, - 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 10, 9,10, 9,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9,10,10, 9,10,10,10,10,10, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10, - 10,10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, - 10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10, - 10, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10, - 10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10, - 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 9, 9, 9, 9,10, 9, 9,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10, 9, 9, 9,10, 9,10, 9,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, 9,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, - 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10, 9, 9, 9,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44u9_p8_1[] = { - -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, - -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, - 6.5, 7.5, 8.5, 9.5, -}; - -static long _vq_quantmap__44u9_p8_1[] = { - 19, 17, 15, 13, 11, 9, 7, 5, - 3, 1, 0, 2, 4, 6, 8, 10, - 12, 14, 16, 18, 20, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p8_1 = { - _vq_quantthresh__44u9_p8_1, - _vq_quantmap__44u9_p8_1, - 21, - 21 -}; - -static static_codebook _44u9_p8_1 = { - 2, 441, - _vq_lengthlist__44u9_p8_1, - 1, -529268736, 1611661312, 5, 0, - _vq_quantlist__44u9_p8_1, - NULL, - &_vq_auxt__44u9_p8_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p9_0[] = { - 7, - 6, - 8, - 5, - 9, - 4, - 10, - 3, - 11, - 2, - 12, - 1, - 13, - 0, - 14, -}; - -static long _vq_lengthlist__44u9_p9_0[] = { - 1, 3, 3,11,11,11,11,11,11,11,11,11,11,11,11, 4, - 10,11,11,11,11,11,11,11,11,11,11,11,11,11, 4,10, - 10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__44u9_p9_0[] = { - -6051.5, -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -465.5, 465.5, - 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 6051.5, -}; - -static long _vq_quantmap__44u9_p9_0[] = { - 13, 11, 9, 7, 5, 3, 1, 0, - 2, 4, 6, 8, 10, 12, 14, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p9_0 = { - _vq_quantthresh__44u9_p9_0, - _vq_quantmap__44u9_p9_0, - 15, - 15 -}; - -static static_codebook _44u9_p9_0 = { - 2, 225, - _vq_lengthlist__44u9_p9_0, - 1, -510036736, 1631393792, 4, 0, - _vq_quantlist__44u9_p9_0, - NULL, - &_vq_auxt__44u9_p9_0, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p9_1[] = { - 9, - 8, - 10, - 7, - 11, - 6, - 12, - 5, - 13, - 4, - 14, - 3, - 15, - 2, - 16, - 1, - 17, - 0, - 18, -}; - -static long _vq_lengthlist__44u9_p9_1[] = { - 1, 4, 4, 7, 7, 8, 7, 8, 7, 9, 8,10, 9,10,10,11, - 11,12,12, 4, 7, 6, 9, 9,10, 9, 9, 8,10,10,11,10, - 12,10,13,12,13,12, 4, 6, 6, 9, 9, 9, 9, 9, 9,10, - 10,11,11,11,12,12,12,12,12, 7, 9, 8,11,10,10,10, - 11,10,11,11,12,12,13,12,13,13,13,13, 7, 8, 9,10, - 10,11,11,10,10,11,11,11,12,13,13,13,13,14,14, 8, - 9, 9,11,11,12,11,12,12,13,12,12,13,13,14,15,14, - 14,14, 8, 9, 9,10,11,11,11,12,12,13,12,13,13,14, - 14,14,15,14,16, 8, 9, 9,11,10,12,12,12,12,15,13, - 13,13,17,14,15,15,15,14, 8, 9, 9,10,11,11,12,13, - 12,13,13,13,14,15,14,14,14,16,15, 9,11,10,12,12, - 13,13,13,13,14,14,16,15,14,14,14,15,15,17, 9,10, - 10,11,11,13,13,13,14,14,13,15,14,15,14,15,16,15, - 16,10,11,11,12,12,13,14,15,14,15,14,14,15,17,16, - 15,15,17,17,10,12,11,13,12,14,14,13,14,15,15,15, - 15,16,17,17,15,17,16,11,12,12,14,13,15,14,15,16, - 17,15,17,15,17,15,15,16,17,15,11,11,12,14,14,14, - 14,14,15,15,16,15,17,17,17,16,17,16,15,12,12,13, - 14,14,14,15,14,15,15,16,16,17,16,17,15,17,17,16, - 12,14,12,14,14,15,15,15,14,14,16,16,16,15,16,16, - 15,17,15,12,13,13,14,15,14,15,17,15,17,16,17,17, - 17,16,17,16,17,17,12,13,13,14,16,15,15,15,16,15, - 17,17,15,17,15,17,16,16,17, -}; - -static float _vq_quantthresh__44u9_p9_1[] = { - -416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, - -24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, - 367.5, 416.5, -}; - -static long _vq_quantmap__44u9_p9_1[] = { - 17, 15, 13, 11, 9, 7, 5, 3, - 1, 0, 2, 4, 6, 8, 10, 12, - 14, 16, 18, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p9_1 = { - _vq_quantthresh__44u9_p9_1, - _vq_quantmap__44u9_p9_1, - 19, - 19 -}; - -static static_codebook _44u9_p9_1 = { - 2, 361, - _vq_lengthlist__44u9_p9_1, - 1, -518287360, 1622704128, 5, 0, - _vq_quantlist__44u9_p9_1, - NULL, - &_vq_auxt__44u9_p9_1, - NULL, - 0 -}; - -static long _vq_quantlist__44u9_p9_2[] = { - 24, - 23, - 25, - 22, - 26, - 21, - 27, - 20, - 28, - 19, - 29, - 18, - 30, - 17, - 31, - 16, - 32, - 15, - 33, - 14, - 34, - 13, - 35, - 12, - 36, - 11, - 37, - 10, - 38, - 9, - 39, - 8, - 40, - 7, - 41, - 6, - 42, - 5, - 43, - 4, - 44, - 3, - 45, - 2, - 46, - 1, - 47, - 0, - 48, -}; - -static long _vq_lengthlist__44u9_p9_2[] = { - 2, 4, 4, 5, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 7, 6, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, -}; - -static float _vq_quantthresh__44u9_p9_2[] = { - -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, - -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, - -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, - 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, - 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, - 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, -}; - -static long _vq_quantmap__44u9_p9_2[] = { - 47, 45, 43, 41, 39, 37, 35, 33, - 31, 29, 27, 25, 23, 21, 19, 17, - 15, 13, 11, 9, 7, 5, 3, 1, - 0, 2, 4, 6, 8, 10, 12, 14, - 16, 18, 20, 22, 24, 26, 28, 30, - 32, 34, 36, 38, 40, 42, 44, 46, - 48, -}; - -static encode_aux_threshmatch _vq_auxt__44u9_p9_2 = { - _vq_quantthresh__44u9_p9_2, - _vq_quantmap__44u9_p9_2, - 49, - 49 -}; - -static static_codebook _44u9_p9_2 = { - 1, 49, - _vq_lengthlist__44u9_p9_2, - 1, -526909440, 1611661312, 6, 0, - _vq_quantlist__44u9_p9_2, - NULL, - &_vq_auxt__44u9_p9_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44un1__long[] = { - 5, 6,12, 9,14, 9, 9,19, 6, 1, 5, 5, 8, 7, 9,19, - 12, 4, 4, 7, 7, 9,11,18, 9, 5, 6, 6, 8, 7, 8,17, - 14, 8, 7, 8, 8,10,12,18, 9, 6, 8, 6, 8, 6, 8,18, - 9, 8,11, 8,11, 7, 5,15,16,18,18,18,17,15,11,18, -}; - -static static_codebook _huff_book__44un1__long = { - 2, 64, - _huff_lengthlist__44un1__long, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p1_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44un1__p1_0[] = { - 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8, - 10,11, 5, 8, 8, 8,11,10, 8,11,10, 4, 9, 9, 8,11, - 11, 8,11,11, 8,12,11,10,12,14,11,13,13, 7,11,11, - 10,13,11,11,13,14, 4, 8, 9, 8,11,11, 8,11,12, 7, - 11,11,11,14,13,10,11,13, 8,11,12,11,13,13,10,14, - 12, -}; - -static float _vq_quantthresh__44un1__p1_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44un1__p1_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p1_0 = { - _vq_quantthresh__44un1__p1_0, - _vq_quantmap__44un1__p1_0, - 3, - 3 -}; - -static static_codebook _44un1__p1_0 = { - 4, 81, - _vq_lengthlist__44un1__p1_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44un1__p1_0, - NULL, - &_vq_auxt__44un1__p1_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p2_0[] = { - 1, - 0, - 2, -}; - -static long _vq_lengthlist__44un1__p2_0[] = { - 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6, - 7, 9, 5, 7, 7, 6, 8, 7, 7, 9, 8, 4, 7, 7, 7, 9, - 8, 7, 8, 8, 7, 9, 8, 8, 8,10, 9,10,10, 6, 8, 8, - 7,10, 8, 9,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6, - 8, 8, 9,10,10, 7, 8,10, 6, 8, 9, 9,10,10, 8,10, - 8, -}; - -static float _vq_quantthresh__44un1__p2_0[] = { - -0.5, 0.5, -}; - -static long _vq_quantmap__44un1__p2_0[] = { - 1, 0, 2, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p2_0 = { - _vq_quantthresh__44un1__p2_0, - _vq_quantmap__44un1__p2_0, - 3, - 3 -}; - -static static_codebook _44un1__p2_0 = { - 4, 81, - _vq_lengthlist__44un1__p2_0, - 1, -535822336, 1611661312, 2, 0, - _vq_quantlist__44un1__p2_0, - NULL, - &_vq_auxt__44un1__p2_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p3_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44un1__p3_0[] = { - 1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9, - 10, 9,12,12, 9, 9,10,11,12, 6, 8, 8,10,10, 8,10, - 10,11,11, 8, 9,10,11,11,10,11,11,13,13,10,11,11, - 12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10,10,11, - 11,10,11,11,13,12,10,11,11,13,12, 9,11,11,15,13, - 10,12,11,15,13,10,11,11,15,14,12,14,13,16,15,12, - 13,13,17,16, 9,11,11,13,15,10,11,12,14,15,10,11, - 12,14,15,12,13,13,15,16,12,13,13,16,16, 5, 8, 8, - 11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14, - 14,11,12,12,14,14, 8,11,10,13,12,10,11,12,12,13, - 10,12,12,13,13,12,12,13,13,15,11,12,13,15,14, 7, - 10,10,12,12, 9,12,11,13,12,10,12,12,13,14,12,13, - 12,15,13,11,13,12,14,15,10,12,12,16,14,11,12,12, - 16,15,11,13,12,17,16,13,13,15,15,17,13,15,15,20, - 17,10,12,12,14,16,11,12,12,15,15,11,13,13,15,18, - 13,14,13,15,15,13,15,14,16,16, 5, 8, 8,11,11, 8, - 10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12, - 12,14,15, 7,10,10,13,12,10,12,12,14,13, 9,10,12, - 12,13,11,13,13,15,15,11,12,13,13,15, 8,10,10,12, - 13,10,12,12,13,13,10,12,11,13,13,11,13,12,15,15, - 12,13,12,15,13,10,12,12,16,14,11,12,12,16,15,10, - 12,12,16,14,14,15,14,18,16,13,13,14,15,16,10,12, - 12,14,16,11,13,13,16,16,11,13,12,14,16,13,15,15, - 18,18,13,15,13,16,14, 8,11,11,16,16,10,13,13,17, - 16,10,12,12,16,15,14,16,15,20,17,13,14,14,17,17, - 9,12,12,16,16,11,13,14,16,17,11,13,13,16,16,15, - 15,19,18, 0,14,15,15,18,18, 9,12,12,17,16,11,13, - 12,17,16,11,12,13,15,17,15,16,15, 0,19,14,15,14, - 19,18,12,14,14, 0,16,13,14,14,19,18,13,15,16,17, - 16,15,15,17,18, 0,14,16,16,19, 0,12,14,14,16,18, - 13,15,13,17,18,13,15,14,17,18,15,18,14,18,18,16, - 17,16, 0,17, 8,11,11,15,15,10,12,12,16,16,10,13, - 13,16,16,13,15,14,17,17,14,15,17,17,18, 9,12,12, - 16,15,11,13,13,16,16,11,12,13,17,17,14,14,15,17, - 17,14,15,16, 0,18, 9,12,12,16,17,11,13,13,16,17, - 11,14,13,18,17,14,16,14,17,17,15,17,17,18,18,12, - 14,14, 0,16,13,15,15,19, 0,12,13,15, 0, 0,14,17, - 16,19, 0,16,15,18,18, 0,12,14,14,17, 0,13,14,14, - 17, 0,13,15,14, 0,18,15,16,16, 0,18,15,18,15, 0, - 17, -}; - -static float _vq_quantthresh__44un1__p3_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44un1__p3_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p3_0 = { - _vq_quantthresh__44un1__p3_0, - _vq_quantmap__44un1__p3_0, - 5, - 5 -}; - -static static_codebook _44un1__p3_0 = { - 4, 625, - _vq_lengthlist__44un1__p3_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44un1__p3_0, - NULL, - &_vq_auxt__44un1__p3_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p4_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44un1__p4_0[] = { - 3, 5, 5, 9, 9, 5, 6, 6,10, 9, 5, 6, 6, 9,10,10, - 10,10,12,11, 9,10,10,12,12, 5, 7, 7,10,10, 7, 7, - 8,10,11, 7, 7, 8,10,11,10,10,11,11,13,10,10,11, - 11,13, 6, 7, 7,10,10, 7, 8, 7,11,10, 7, 8, 7,10, - 10,10,11, 9,13,11,10,11,10,13,11,10,10,10,14,13, - 10,11,11,14,13,10,10,11,13,14,12,12,13,15,15,12, - 12,13,13,14,10,10,10,12,13,10,11,10,13,13,10,11, - 11,13,13,12,13,12,14,13,12,13,13,14,13, 5, 7, 7, - 10,10, 7, 8, 8,11,10, 7, 8, 8,10,10,11,11,11,13, - 13,10,11,11,12,12, 7, 8, 8,11,11, 7, 8, 9,10,12, - 8, 9, 9,11,11,11,10,12,11,14,11,11,12,13,13, 6, - 8, 8,10,11, 7, 9, 7,12,10, 8, 9,10,11,12,10,12, - 10,14,11,11,12,11,13,13,10,11,11,14,14,10,10,11, - 13,14,11,12,12,15,13,12,11,14,12,16,12,13,14,15, - 16,10,10,11,13,14,10,11,10,14,12,11,12,12,13,14, - 12,13,11,15,12,14,14,14,15,15, 5, 7, 7,10,10, 7, - 8, 8,10,10, 7, 8, 8,10,11,10,11,10,12,12,10,11, - 11,12,13, 6, 8, 8,11,11, 8, 9, 9,12,11, 7, 7, 9, - 10,12,11,11,11,12,13,11,10,12,11,15, 7, 8, 8,11, - 11, 8, 9, 9,11,11, 7, 9, 8,12,10,11,12,11,13,12, - 11,12,10,15,11,10,11,10,14,12,11,12,11,14,13,10, - 10,11,13,14,13,13,13,17,15,12,11,14,12,15,10,10, - 11,13,14,11,12,12,14,14,10,11,10,14,13,13,14,13, - 16,17,12,14,11,16,12, 9,10,10,14,13,10,11,10,14, - 14,10,11,11,13,13,13,14,14,16,15,12,13,13,14,14, - 9,11,10,14,13,10,10,12,13,14,11,12,11,14,13,13, - 14,14,14,15,13,14,14,15,15, 9,10,11,13,14,10,11, - 10,15,13,11,11,12,12,15,13,14,12,15,14,13,13,14, - 14,15,12,13,12,16,14,11,11,12,15,14,13,15,13,16, - 14,13,12,15,12,17,15,16,15,16,16,12,12,13,13,15, - 11,13,11,15,14,13,13,14,15,17,13,14,12, 0,13,14, - 15,14,15, 0, 9,10,10,13,13,10,11,11,13,13,10,11, - 11,13,13,12,13,12,14,14,13,14,14,15,17, 9,10,10, - 13,13,11,12,11,15,12,10,10,11,13,16,13,14,13,15, - 14,13,13,14,15,16,10,10,11,13,14,11,11,12,13,14, - 10,12,11,14,14,13,13,13,14,15,13,15,13,16,15,12, - 13,12,15,13,12,15,13,15,15,11,11,13,14,15,15,15, - 15,15,17,13,12,14,13,17,12,12,14,14,15,13,13,14, - 14,16,11,13,11,16,15,14,16,16,17, 0,14,13,11,16, - 12, -}; - -static float _vq_quantthresh__44un1__p4_0[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44un1__p4_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p4_0 = { - _vq_quantthresh__44un1__p4_0, - _vq_quantmap__44un1__p4_0, - 5, - 5 -}; - -static static_codebook _44un1__p4_0 = { - 4, 625, - _vq_lengthlist__44un1__p4_0, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44un1__p4_0, - NULL, - &_vq_auxt__44un1__p4_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p5_0[] = { - 4, - 3, - 5, - 2, - 6, - 1, - 7, - 0, - 8, -}; - -static long _vq_lengthlist__44un1__p5_0[] = { - 1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 7, 8, 8, - 10, 9, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 7, 9, 9, - 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 8, 8, 8, - 9, 9,10,10,11,11, 8, 8, 8, 9, 9,10,10,11,11, 9, - 10,10,11,10,11,11,12,12, 9,10,10,10,11,11,11,12, - 12, -}; - -static float _vq_quantthresh__44un1__p5_0[] = { - -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, -}; - -static long _vq_quantmap__44un1__p5_0[] = { - 7, 5, 3, 1, 0, 2, 4, 6, - 8, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p5_0 = { - _vq_quantthresh__44un1__p5_0, - _vq_quantmap__44un1__p5_0, - 9, - 9 -}; - -static static_codebook _44un1__p5_0 = { - 2, 81, - _vq_lengthlist__44un1__p5_0, - 1, -531628032, 1611661312, 4, 0, - _vq_quantlist__44un1__p5_0, - NULL, - &_vq_auxt__44un1__p5_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p6_0[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44un1__p6_0[] = { - 1, 4, 4, 6, 6, 8, 8,10,10,11,11,15,15, 4, 5, 5, - 8, 8, 9, 9,11,11,12,12,16,16, 4, 5, 6, 8, 8, 9, - 9,11,11,12,12,14,14, 7, 8, 8, 9, 9,10,10,11,12, - 13,13,16,17, 7, 8, 8, 9, 9,10,10,12,12,12,13,15, - 15, 9,10,10,10,10,11,11,12,12,13,13,15,16, 9, 9, - 9,10,10,11,11,13,12,13,13,17,17,10,11,11,11,12, - 12,12,13,13,14,15, 0,18,10,11,11,12,12,12,13,14, - 13,14,14,17,16,11,12,12,13,13,14,14,14,14,15,16, - 17,16,11,12,12,13,13,14,14,14,14,15,15,17,17,14, - 15,15,16,16,16,17,17,16, 0,17, 0,18,14,15,15,16, - 16, 0,15,18,18, 0,16, 0, 0, -}; - -static float _vq_quantthresh__44un1__p6_0[] = { - -27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, - 12.5, 17.5, 22.5, 27.5, -}; - -static long _vq_quantmap__44un1__p6_0[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p6_0 = { - _vq_quantthresh__44un1__p6_0, - _vq_quantmap__44un1__p6_0, - 13, - 13 -}; - -static static_codebook _44un1__p6_0 = { - 2, 169, - _vq_lengthlist__44un1__p6_0, - 1, -526516224, 1616117760, 4, 0, - _vq_quantlist__44un1__p6_0, - NULL, - &_vq_auxt__44un1__p6_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p6_1[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44un1__p6_1[] = { - 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 6, 5, 5, - 6, 5, 6, 6, 5, 6, 6, 6, 6, -}; - -static float _vq_quantthresh__44un1__p6_1[] = { - -1.5, -0.5, 0.5, 1.5, -}; - -static long _vq_quantmap__44un1__p6_1[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p6_1 = { - _vq_quantthresh__44un1__p6_1, - _vq_quantmap__44un1__p6_1, - 5, - 5 -}; - -static static_codebook _44un1__p6_1 = { - 2, 25, - _vq_lengthlist__44un1__p6_1, - 1, -533725184, 1611661312, 3, 0, - _vq_quantlist__44un1__p6_1, - NULL, - &_vq_auxt__44un1__p6_1, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p7_0[] = { - 2, - 1, - 3, - 0, - 4, -}; - -static long _vq_lengthlist__44un1__p7_0[] = { - 1, 5, 3,11,11,11,11,11,11,11, 8,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11, 8,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11, 7,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, - 10, -}; - -static float _vq_quantthresh__44un1__p7_0[] = { - -253.5, -84.5, 84.5, 253.5, -}; - -static long _vq_quantmap__44un1__p7_0[] = { - 3, 1, 0, 2, 4, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p7_0 = { - _vq_quantthresh__44un1__p7_0, - _vq_quantmap__44un1__p7_0, - 5, - 5 -}; - -static static_codebook _44un1__p7_0 = { - 4, 625, - _vq_lengthlist__44un1__p7_0, - 1, -518709248, 1626677248, 3, 0, - _vq_quantlist__44un1__p7_0, - NULL, - &_vq_auxt__44un1__p7_0, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p7_1[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44un1__p7_1[] = { - 1, 4, 4, 6, 6, 6, 6, 9, 8, 9, 8, 8, 8, 5, 7, 7, - 7, 7, 8, 8, 8,10, 8,10, 8, 9, 5, 7, 7, 8, 7, 7, - 8,10,10,11,10,12,11, 7, 8, 8, 9, 9, 9,10,11,11, - 11,11,11,11, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11, - 12, 7, 8, 8, 9, 9,10,11,11,12,11,12,11,11, 7, 8, - 8, 9, 9,10,10,11,11,11,12,12,11, 8,10,10,10,10, - 11,11,14,11,12,12,12,13, 9,10,10,10,10,12,11,14, - 11,14,11,12,13,10,11,11,11,11,13,11,14,14,13,13, - 13,14,11,11,11,12,11,12,12,12,13,14,14,13,14,12, - 11,12,12,12,12,13,13,13,14,13,14,14,11,12,12,14, - 12,13,13,12,13,13,14,14,14, -}; - -static float _vq_quantthresh__44un1__p7_1[] = { - -71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, - 32.5, 45.5, 58.5, 71.5, -}; - -static long _vq_quantmap__44un1__p7_1[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p7_1 = { - _vq_quantthresh__44un1__p7_1, - _vq_quantmap__44un1__p7_1, - 13, - 13 -}; - -static static_codebook _44un1__p7_1 = { - 2, 169, - _vq_lengthlist__44un1__p7_1, - 1, -523010048, 1618608128, 4, 0, - _vq_quantlist__44un1__p7_1, - NULL, - &_vq_auxt__44un1__p7_1, - NULL, - 0 -}; - -static long _vq_quantlist__44un1__p7_2[] = { - 6, - 5, - 7, - 4, - 8, - 3, - 9, - 2, - 10, - 1, - 11, - 0, - 12, -}; - -static long _vq_lengthlist__44un1__p7_2[] = { - 3, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 9, 8, 4, 5, 5, - 6, 6, 8, 8, 9, 8, 9, 9, 9, 9, 4, 5, 5, 7, 6, 8, - 8, 8, 8, 9, 8, 9, 8, 6, 7, 7, 7, 8, 8, 8, 9, 9, - 9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, - 9, 7, 8, 8, 8, 8, 9, 8, 9, 9,10, 9, 9,10, 7, 8, - 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 8, 9, 9, 9, 9, - 9, 9, 9, 9,10,10, 9,10, 8, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,10,10, 9, 9, 9,10, 9, 9,10, 9, 9,10,10, - 10,10, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10, 9, - 9, 9,10, 9, 9,10,10, 9,10,10,10,10, 9, 9, 9,10, - 9, 9, 9,10,10,10,10,10,10, -}; - -static float _vq_quantthresh__44un1__p7_2[] = { - -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, - 2.5, 3.5, 4.5, 5.5, -}; - -static long _vq_quantmap__44un1__p7_2[] = { - 11, 9, 7, 5, 3, 1, 0, 2, - 4, 6, 8, 10, 12, -}; - -static encode_aux_threshmatch _vq_auxt__44un1__p7_2 = { - _vq_quantthresh__44un1__p7_2, - _vq_quantmap__44un1__p7_2, - 13, - 13 -}; - -static static_codebook _44un1__p7_2 = { - 2, 169, - _vq_lengthlist__44un1__p7_2, - 1, -531103744, 1611661312, 4, 0, - _vq_quantlist__44un1__p7_2, - NULL, - &_vq_auxt__44un1__p7_2, - NULL, - 0 -}; - -static long _huff_lengthlist__44un1__short[] = { - 12,12,14,12,14,14,14,14,12, 6, 6, 8, 9, 9,11,14, - 12, 4, 2, 6, 6, 7,11,14,13, 6, 5, 7, 8, 9,11,14, - 13, 8, 5, 8, 6, 8,12,14,12, 7, 7, 8, 8, 8,10,14, - 12, 6, 3, 4, 4, 4, 7,14,11, 7, 4, 6, 6, 6, 8,14, -}; - -static static_codebook _huff_book__44un1__short = { - 2, 64, - _huff_lengthlist__44un1__short, - 0, 0, 0, 0, 0, - NULL, - NULL, - NULL, - NULL, - 0 -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codebook.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codebook.c deleted file mode 100644 index 375f4b5f56..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codebook.c +++ /dev/null @@ -1,614 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: basic codebook pack/unpack/code/decode operations - last mod: $Id: codebook.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - - -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codebook.h" -#include "scales.h" -#include "misc.h" -#include "os.h" - -/* packs the given codebook into the bitstream **************************/ - -int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *opb){ - long i,j; - int ordered=0; - - /* first the basic parameters */ - oggpack_write(opb,0x564342,24); - oggpack_write(opb,c->dim,16); - oggpack_write(opb,c->entries,24); - - /* pack the codewords. There are two packings; length ordered and - length random. Decide between the two now. */ - - for(i=1;ientries;i++) - if(c->lengthlist[i-1]==0 || c->lengthlist[i]lengthlist[i-1])break; - if(i==c->entries)ordered=1; - - if(ordered){ - /* length ordered. We only need to say how many codewords of - each length. The actual codewords are generated - deterministically */ - - long count=0; - oggpack_write(opb,1,1); /* ordered */ - oggpack_write(opb,c->lengthlist[0]-1,5); /* 1 to 32 */ - - for(i=1;ientries;i++){ - long thisx=c->lengthlist[i]; - long last=c->lengthlist[i-1]; - if(thisx>last){ - for(j=last;jentries-count)); - count=i; - } - } - } - oggpack_write(opb,i-count,_ilog(c->entries-count)); - - }else{ - /* length random. Again, we don't code the codeword itself, just - the length. This time, though, we have to encode each length */ - oggpack_write(opb,0,1); /* unordered */ - - /* algortihmic mapping has use for 'unused entries', which we tag - here. The algorithmic mapping happens as usual, but the unused - entry has no codeword. */ - for(i=0;ientries;i++) - if(c->lengthlist[i]==0)break; - - if(i==c->entries){ - oggpack_write(opb,0,1); /* no unused entries */ - for(i=0;ientries;i++) - oggpack_write(opb,c->lengthlist[i]-1,5); - }else{ - oggpack_write(opb,1,1); /* we have unused entries; thus we tag */ - for(i=0;ientries;i++){ - if(c->lengthlist[i]==0){ - oggpack_write(opb,0,1); - }else{ - oggpack_write(opb,1,1); - oggpack_write(opb,c->lengthlist[i]-1,5); - } - } - } - } - - /* is the entry number the desired return value, or do we have a - mapping? If we have a mapping, what type? */ - oggpack_write(opb,c->maptype,4); - switch(c->maptype){ - case 0: - /* no mapping */ - break; - case 1:case 2: - /* implicitly populated value mapping */ - /* explicitly populated value mapping */ - - if(!c->quantlist){ - /* no quantlist? error */ - return(-1); - } - - /* values that define the dequantization */ - oggpack_write(opb,c->q_min,32); - oggpack_write(opb,c->q_delta,32); - oggpack_write(opb,c->q_quant-1,4); - oggpack_write(opb,c->q_sequencep,1); - - { - int quantvals; - switch(c->maptype){ - case 1: - /* a single column of (c->entries/c->dim) quantized values for - building a full value list algorithmically (square lattice) */ - quantvals=_book_maptype1_quantvals(c); - break; - case 2: - /* every value (c->entries*c->dim total) specified explicitly */ - quantvals=c->entries*c->dim; - break; - default: /* NOT_REACHABLE */ - quantvals=-1; - } - - /* quantized values */ - for(i=0;iquantlist[i]),c->q_quant); - - } - break; - default: - /* error case; we don't have any other map types now */ - return(-1); - } - - return(0); -} - -/* unpacks a codebook from the packet buffer into the codebook struct, - readies the codebook auxiliary structures for decode *************/ -int vorbis_staticbook_unpack(oggpack_buffer *opb,static_codebook *s){ - long i,j; - memset(s,0,sizeof(*s)); - s->allocedp=1; - - /* make sure alignment is correct */ - if(oggpack_read(opb,24)!=0x564342)goto _eofout; - - /* first the basic parameters */ - s->dim=oggpack_read(opb,16); - s->entries=oggpack_read(opb,24); - if(s->entries==-1)goto _eofout; - - /* codeword ordering.... length ordered or unordered? */ - switch((int)oggpack_read(opb,1)){ - case 0: - /* unordered */ - s->lengthlist=(long*)_ogg_malloc(sizeof(*s->lengthlist)*s->entries); - - /* allocated but unused entries? */ - if(oggpack_read(opb,1)){ - /* yes, unused entries */ - - for(i=0;ientries;i++){ - if(oggpack_read(opb,1)){ - long num=oggpack_read(opb,5); - if(num==-1)goto _eofout; - s->lengthlist[i]=num+1; - }else - s->lengthlist[i]=0; - } - }else{ - /* all entries used; no tagging */ - for(i=0;ientries;i++){ - long num=oggpack_read(opb,5); - if(num==-1)goto _eofout; - s->lengthlist[i]=num+1; - } - } - - break; - case 1: - /* ordered */ - { - long length=oggpack_read(opb,5)+1; - s->lengthlist=(long*)_ogg_malloc(sizeof(*s->lengthlist)*s->entries); - - for(i=0;ientries;){ - long num=oggpack_read(opb,_ilog(s->entries-i)); - if(num==-1)goto _eofout; - for(j=0;jentries;j++,i++) - s->lengthlist[i]=length; - length++; - } - } - break; - default: - /* EOF */ - return(-1); - } - - /* Do we have a mapping to unpack? */ - switch((s->maptype=oggpack_read(opb,4))){ - case 0: - /* no mapping */ - break; - case 1: case 2: - /* implicitly populated value mapping */ - /* explicitly populated value mapping */ - - s->q_min=oggpack_read(opb,32); - s->q_delta=oggpack_read(opb,32); - s->q_quant=oggpack_read(opb,4)+1; - s->q_sequencep=oggpack_read(opb,1); - - { - int quantvals=0; - switch(s->maptype){ - case 1: - quantvals=_book_maptype1_quantvals(s); - break; - case 2: - quantvals=s->entries*s->dim; - break; - } - - /* quantized values */ - s->quantlist=(long*)_ogg_malloc(sizeof(*s->quantlist)*quantvals); - for(i=0;iquantlist[i]=oggpack_read(opb,s->q_quant); - - if(quantvals&&s->quantlist[quantvals-1]==-1)goto _eofout; - } - break; - default: - goto _errout; - } - - /* all set */ - return(0); - - _errout: - _eofout: - vorbis_staticbook_clear(s); - return(-1); -} - -/* returns the number of bits ************************************************/ -int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){ - oggpack_write(b,book->codelist[a],book->c->lengthlist[a]); - return(book->c->lengthlist[a]); -} - -/* One the encode side, our vector writers are each designed for a -specific purpose, and the encoder is not flexible without modification: - -The LSP vector coder uses a single stage nearest-match with no -interleave, so no step and no error return. This is specced by floor0 -and doesn't change. - -Residue0 encoding interleaves, uses multiple stages, and each stage -peels of a specific amount of resolution from a lattice (thus we want -to match by threshold, not nearest match). Residue doesn't *have* to -be encoded that way, but to change it, one will need to add more -infrastructure on the encode side (decode side is specced and simpler) */ - -/* floor0 LSP (single stage, non interleaved, nearest match) */ -/* returns entry number and *modifies a* to the quantization value *****/ -int vorbis_book_errorv(codebook *book,float *a){ - int dim=book->dim,k; - int best=_best(book,a,1); - for(k=0;kvaluelist+best*dim)[k]; - return(best); -} - -/* returns the number of bits and *modifies a* to the quantization value *****/ -int vorbis_book_encodev(codebook *book,int best,float *a,oggpack_buffer *b){ - int k,dim=book->dim; - for(k=0;kvaluelist+best*dim)[k]; - return(vorbis_book_encode(book,best,b)); -} - -/* the 'eliminate the decode tree' optimization actually requires the - codewords to be MSb first, not LSb. This is an annoying inelegancy - (and one of the first places where carefully thought out design - turned out to be wrong; Vorbis II and future Ogg codecs should go - to an MSb bitpacker), but not actually the huge hit it appears to - be. The first-stage decode table catches most words so that - bitreverse is not in the main execution path. */ - - -STIN long decode_packed_entry_number(codebook *book, oggpack_buffer *b){ - int read=book->dec_maxlength; - long lo,hi; - long lok = oggpack_look(b,book->dec_firsttablen); - - if (lok >= 0) { - long entry = book->dec_firsttable[lok]; - if(entry&0x80000000UL){ - lo=(entry>>15)&0x7fff; - hi=book->used_entries-(entry&0x7fff); - }else{ - oggpack_adv(b, book->dec_codelengths[entry-1]); - return(entry-1); - } - }else{ - lo=0; - hi=book->used_entries; - } - - lok = oggpack_look(b, read); - - while(lok<0 && read>1) - lok = oggpack_look(b, --read); - if(lok<0)return -1; - - /* bisect search for the codeword in the ordered list */ - { - ogg_uint32_t testword=ogg_bitreverse((ogg_uint32_t)lok); - - while(hi-lo>1){ - long p=(hi-lo)>>1; - long test=book->codelist[lo+p]>testword; - lo+=p&(test-1); - hi-=p&(-test); - } - - if(book->dec_codelengths[lo]<=read){ - oggpack_adv(b, book->dec_codelengths[lo]); - return(lo); - } - } - - oggpack_adv(b, read); - return(-1); -} - -/* Decode side is specced and easier, because we don't need to find - matches using different criteria; we simply read and map. There are - two things we need to do 'depending': - - We may need to support interleave. We don't really, but it's - convenient to do it here rather than rebuild the vector later. - - Cascades may be additive or multiplicitive; this is not inherent in - the codebook, but set in the code using the codebook. Like - interleaving, it's easiest to do it here. - addmul==0 -> declarative (set the value) - addmul==1 -> additive - addmul==2 -> multiplicitive */ - -/* returns the [original, not compacted] entry number or -1 on eof *********/ -long vorbis_book_decode(codebook *book, oggpack_buffer *b){ - long packed_entry=decode_packed_entry_number(book,b); - if(packed_entry>=0) - return(book->dec_index[packed_entry]); - - /* if there's no dec_index, the codebook unpacking isn't collapsed */ - return(packed_entry); -} - -/* returns 0 on OK or -1 on eof *************************************/ -long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){ - int step=n/book->dim; - long *entry = (long*)alloca(sizeof(*entry)*step); - float **t = (float**)alloca(sizeof(*t)*step); - int i,j,o; - - for (i = 0; i < step; i++) { - entry[i]=decode_packed_entry_number(book,b); - if(entry[i]==-1)return(-1); - t[i] = book->valuelist+entry[i]*book->dim; - } - for(i=0,o=0;idim;i++,o+=step) - for (j=0;jdim>8){ - for(i=0;ivaluelist+entry*book->dim; - for (j=0;jdim;) - a[i++]+=t[j++]; - } - }else{ - for(i=0;ivaluelist+entry*book->dim; - j=0; - switch((int)book->dim){ - case 8: - a[i++]+=t[j++]; - case 7: - a[i++]+=t[j++]; - case 6: - a[i++]+=t[j++]; - case 5: - a[i++]+=t[j++]; - case 4: - a[i++]+=t[j++]; - case 3: - a[i++]+=t[j++]; - case 2: - a[i++]+=t[j++]; - case 1: - a[i++]+=t[j++]; - case 0: - break; - } - } - } - return(0); -} - -long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){ - int i,j,entry; - float *t; - - for(i=0;ivaluelist+entry*book->dim; - for (j=0;jdim;) - a[i++]=t[j++]; - } - return(0); -} - -long vorbis_book_decodevv_add(codebook *book,float **a,long offset,int ch, - oggpack_buffer *b,int n){ - long i,j,entry; - int chptr=0; - - for(i=offset/ch;i<(offset+n)/ch;){ - entry = decode_packed_entry_number(book,b); - if(entry==-1)return(-1); - { - const float *t = book->valuelist+entry*book->dim; - for (j=0;jdim;j++){ - a[chptr++][i]+=t[j]; - if(chptr==ch){ - chptr=0; - i++; - } - } - } - } - return(0); -} - -#ifdef _V_SELFTEST -/* Simple enough; pack a few candidate codebooks, unpack them. Code a - number of vectors through (keeping track of the quantized values), - and decode using the unpacked book. quantized version of in should - exactly equal out */ - -#include - -#include "vorbis/book/lsp20_0.vqh" -#include "vorbis/book/res0a_13.vqh" -#define TESTSIZE 40 - -float test1[TESTSIZE]={ - 0.105939f, - 0.215373f, - 0.429117f, - 0.587974f, - - 0.181173f, - 0.296583f, - 0.515707f, - 0.715261f, - - 0.162327f, - 0.263834f, - 0.342876f, - 0.406025f, - - 0.103571f, - 0.223561f, - 0.368513f, - 0.540313f, - - 0.136672f, - 0.395882f, - 0.587183f, - 0.652476f, - - 0.114338f, - 0.417300f, - 0.525486f, - 0.698679f, - - 0.147492f, - 0.324481f, - 0.643089f, - 0.757582f, - - 0.139556f, - 0.215795f, - 0.324559f, - 0.399387f, - - 0.120236f, - 0.267420f, - 0.446940f, - 0.608760f, - - 0.115587f, - 0.287234f, - 0.571081f, - 0.708603f, -}; - -float test3[TESTSIZE]={ - 0,1,-2,3,4,-5,6,7,8,9, - 8,-2,7,-1,4,6,8,3,1,-9, - 10,11,12,13,14,15,26,17,18,19, - 30,-25,-30,-1,-5,-32,4,3,-2,0}; - -static_codebook *testlist[]={&_vq_book_lsp20_0, - &_vq_book_res0a_13,NULL}; -float *testvec[]={test1,test3}; - -int main(){ - oggpack_buffer write; - oggpack_buffer read; - long ptr=0,i; - oggpack_writeinit(&write); - - fprintf(stderr,"Testing codebook abstraction...:\n"); - - while(testlist[ptr]){ - codebook c; - static_codebook s; - float *qv=alloca(sizeof(*qv)*TESTSIZE); - float *iv=alloca(sizeof(*iv)*TESTSIZE); - memcpy(qv,testvec[ptr],sizeof(*qv)*TESTSIZE); - memset(iv,0,sizeof(*iv)*TESTSIZE); - - fprintf(stderr,"\tpacking/coding %ld... ",ptr); - - /* pack the codebook, write the testvector */ - oggpack_reset(&write); - vorbis_book_init_encode(&c,testlist[ptr]); /* get it into memory - we can write */ - vorbis_staticbook_pack(testlist[ptr],&write); - fprintf(stderr,"Codebook size %ld bytes... ",oggpack_bytes(&write)); - for(i=0;i.000001){ - fprintf(stderr,"read (%g) != written (%g) at position (%ld)\n", - iv[i],qv[i],i); - exit(1); - } - - fprintf(stderr,"OK\n"); - ptr++; - } - - /* The above is the trivial stuff; now try unquantizing a log scale codebook */ - - exit(0); -} - -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codebook.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codebook.h deleted file mode 100644 index ada604ef49..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codebook.h +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: basic shared codebook operations - last mod: $Id: codebook.h,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_CODEBOOK_H_ -#define _V_CODEBOOK_H_ - -#include "../../ogg.h" - -/* This structure encapsulates huffman and VQ style encoding books; it - doesn't do anything specific to either. - - valuelist/quantlist are nonNULL (and q_* significant) only if - there's entry->value mapping to be done. - - If encode-side mapping must be done (and thus the entry needs to be - hunted), the auxiliary encode pointer will point to a decision - tree. This is true of both VQ and huffman, but is mostly useful - with VQ. - -*/ - -typedef struct static_codebook{ - long dim; /* codebook dimensions (elements per vector) */ - long entries; /* codebook entries */ - long *lengthlist; /* codeword lengths in bits */ - - /* mapping ***************************************************************/ - int maptype; /* 0=none - 1=implicitly populated values from map column - 2=listed arbitrary values */ - - /* The below does a linear, single monotonic sequence mapping. */ - long q_min; /* packed 32 bit float; quant value 0 maps to minval */ - long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */ - int q_quant; /* bits: 0 < quant <= 16 */ - int q_sequencep; /* bitflag */ - - long *quantlist; /* map == 1: (int)(entries^(1/dim)) element column map - map == 2: list of dim*entries quantized entry vals - */ - - /* encode helpers ********************************************************/ - struct encode_aux_nearestmatch *nearest_tree; - struct encode_aux_threshmatch *thresh_tree; - struct encode_aux_pigeonhole *pigeon_tree; - - int allocedp; -} static_codebook; - -/* this structures an arbitrary trained book to quickly find the - nearest cell match */ -typedef struct encode_aux_nearestmatch{ - /* pre-calculated partitioning tree */ - long *ptr0; - long *ptr1; - - long *p; /* decision points (each is an entry) */ - long *q; /* decision points (each is an entry) */ - long aux; /* number of tree entries */ - long alloc; -} encode_aux_nearestmatch; - -/* assumes a maptype of 1; encode side only, so that's OK */ -typedef struct encode_aux_threshmatch{ - float *quantthresh; - long *quantmap; - int quantvals; - int threshvals; -} encode_aux_threshmatch; - -typedef struct encode_aux_pigeonhole{ - float min; - float del; - - int mapentries; - int quantvals; - long *pigeonmap; - - long fittotal; - long *fitlist; - long *fitmap; - long *fitlength; -} encode_aux_pigeonhole; - -typedef struct codebook{ - long dim; /* codebook dimensions (elements per vector) */ - long entries; /* codebook entries */ - long used_entries; /* populated codebook entries */ - const static_codebook *c; - - /* for encode, the below are entry-ordered, fully populated */ - /* for decode, the below are ordered by bitreversed codeword and only - used entries are populated */ - float *valuelist; /* list of dim*entries actual entry values */ - ogg_uint32_t *codelist; /* list of bitstream codewords for each entry */ - - int *dec_index; /* only used if sparseness collapsed */ - char *dec_codelengths; - ogg_uint32_t *dec_firsttable; - int dec_firsttablen; - int dec_maxlength; - -} codebook; - -extern void vorbis_staticbook_clear(static_codebook *b); -extern void vorbis_staticbook_destroy(static_codebook *b); -extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source); -extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source); -extern void vorbis_book_clear(codebook *b); - -extern float *_book_unquantize(const static_codebook *b,int n,int *map); -extern float *_book_logdist(const static_codebook *b,float *vals); -extern float _float32_unpack(long val); -extern long _float32_pack(float val); -extern int _best(codebook *book, float *a, int step); -extern int _ilog(unsigned int v); -extern long _book_maptype1_quantvals(const static_codebook *b); - -extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul); -extern long vorbis_book_codeword(codebook *book,int entry); -extern long vorbis_book_codelen(codebook *book,int entry); - - - -extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b); -extern int vorbis_staticbook_unpack(oggpack_buffer *b,static_codebook *c); - -extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b); -extern int vorbis_book_errorv(codebook *book, float *a); -extern int vorbis_book_encodev(codebook *book, int best,float *a, - oggpack_buffer *b); - -extern long vorbis_book_decode(codebook *book, oggpack_buffer *b); -extern long vorbis_book_decodevs_add(codebook *book, float *a, - oggpack_buffer *b,int n); -extern long vorbis_book_decodev_set(codebook *book, float *a, - oggpack_buffer *b,int n); -extern long vorbis_book_decodev_add(codebook *book, float *a, - oggpack_buffer *b,int n); -extern long vorbis_book_decodevv_add(codebook *book, float **a, - long off,int ch, - oggpack_buffer *b,int n); - - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codec_internal.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codec_internal.h deleted file mode 100644 index 206cb15fa6..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/codec_internal.h +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: libvorbis codec headers - last mod: $Id: codec_internal.h,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_CODECI_H_ -#define _V_CODECI_H_ - -#include "envelope.h" -#include "codebook.h" - -#define BLOCKTYPE_IMPULSE 0 -#define BLOCKTYPE_PADDING 1 -#define BLOCKTYPE_TRANSITION 0 -#define BLOCKTYPE_LONG 1 - -#define PACKETBLOBS 15 - -typedef struct vorbis_block_internal{ - float **pcmdelay; /* this is a pointer into local storage */ - float ampmax; - int blocktype; - - oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed; - blob [PACKETBLOBS/2] points to - the oggpack_buffer in the - main vorbis_block */ -} vorbis_block_internal; - -typedef void vorbis_look_floor; -typedef void vorbis_look_residue; -typedef void vorbis_look_transform; - -/* mode ************************************************************/ -typedef struct { - int blockflag; - int windowtype; - int transformtype; - int mapping; -} vorbis_info_mode; - -typedef void vorbis_info_floor; -typedef void vorbis_info_residue; -typedef void vorbis_info_mapping; - -#include "psy.h" -#include "bitrate.h" - -static int ilog(unsigned int v){ - int ret=0; - while(v){ - ret++; - v>>=1; - } - return(ret); -} - -static int ilog2(unsigned int v){ - int ret=0; - if(v)--v; - while(v){ - ret++; - v>>=1; - } - return(ret); -} - - -typedef struct private_state { - /* local lookup storage */ - envelope_lookup *ve; /* envelope lookup */ - int window[2]; - vorbis_look_transform **transform[2]; /* block, type */ - drft_lookup fft_look[2]; - - int modebits; - vorbis_look_floor **flr; - vorbis_look_residue **residue; - vorbis_look_psy *psy; - vorbis_look_psy_global *psy_g_look; - - /* local storage, only used on the encoding side. This way the - application does not need to worry about freeing some packets' - memory and not others'; packet storage is always tracked. - Cleared next call to a _dsp_ function */ - unsigned char *header; - unsigned char *header1; - unsigned char *header2; - - bitrate_manager_state bms; - - ogg_int64_t sample_count; -} private_state; - -/* codec_setup_info contains all the setup information specific to the - specific compression/decompression mode in progress (eg, - psychoacoustic settings, channel setup, options, codebook - etc). -*********************************************************************/ - -#include "highlevel.h" -typedef struct codec_setup_info { - - /* Vorbis supports only short and long blocks, but allows the - encoder to choose the sizes */ - - long blocksizes[2]; - - /* modes are the primary means of supporting on-the-fly different - blocksizes, different channel mappings (LR or M/A), - different residue backends, etc. Each mode consists of a - blocksize flag and a mapping (along with the mapping setup */ - - int modes; - int maps; - int floors; - int residues; - int books; - int psys; /* encode only */ - - vorbis_info_mode *mode_param[64]; - int map_type[64]; - vorbis_info_mapping *map_param[64]; - int floor_type[64]; - vorbis_info_floor *floor_param[64]; - int residue_type[64]; - vorbis_info_residue *residue_param[64]; - static_codebook *book_param[256]; - codebook *fullbooks; - - vorbis_info_psy *psy_param[4]; /* encode only */ - vorbis_info_psy_global psy_g_param; - - bitrate_manager_info bi; - highlevel_encode_setup hi; /* used only by vorbisenc.c. It's a - highly redundant structure, but - improves clarity of program flow. */ - int halfrate_flag; /* painless downsample for decode */ -} codec_setup_info; - -extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi); -extern void _vp_global_free(vorbis_look_psy_global *look); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/envelope.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/envelope.c deleted file mode 100644 index 259f94c8a8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/envelope.c +++ /dev/null @@ -1,383 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: PCM data envelope analysis - last mod: $Id: envelope.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - - -#include -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" - -#include "os.h" -#include "scales.h" -#include "envelope.h" -#include "mdct.h" -#include "misc.h" - -void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy_global *gi=&ci->psy_g_param; - int ch=vi->channels; - int i,j; - int n=e->winlength=128; - e->searchstep=64; /* not random */ - - e->minenergy=gi->preecho_minenergy; - e->ch=ch; - e->storage=128; - e->cursor=ci->blocksizes[1]/2; - e->mdct_win=(float*)_ogg_calloc(n,sizeof(*e->mdct_win)); - mdct_init(&e->mdct,n); - - for(i=0;imdct_win[i]=sin(i/(n-1.)*M_PI); - e->mdct_win[i]*=e->mdct_win[i]; - } - - /* magic follows */ - e->band[0].begin=2; e->band[0].end=4; - e->band[1].begin=4; e->band[1].end=5; - e->band[2].begin=6; e->band[2].end=6; - e->band[3].begin=9; e->band[3].end=8; - e->band[4].begin=13; e->band[4].end=8; - e->band[5].begin=17; e->band[5].end=8; - e->band[6].begin=22; e->band[6].end=8; - - for(j=0;jband[j].end; - e->band[j].window=(float*)_ogg_malloc(n*sizeof(*e->band[0].window)); - for(i=0;iband[j].window[i]=sin((i+.5)/n*M_PI); - e->band[j].total+=e->band[j].window[i]; - } - e->band[j].total=1./e->band[j].total; - } - - e->filter=(envelope_filter_state*)_ogg_calloc(VE_BANDS*ch,sizeof(*e->filter)); - e->mark=(int*)_ogg_calloc(e->storage,sizeof(*e->mark)); - -} - -void _ve_envelope_clear(envelope_lookup *e){ - int i; - mdct_clear(&e->mdct); - for(i=0;iband[i].window); - _ogg_free(e->mdct_win); - _ogg_free(e->filter); - _ogg_free(e->mark); - memset(e,0,sizeof(*e)); -} - -/* fairly straight threshhold-by-band based until we find something - that works better and isn't patented. */ - -static int _ve_amp(envelope_lookup *ve, - vorbis_info_psy_global *gi, - float *data, - envelope_band *bands, - envelope_filter_state *filters, - long pos){ - long n=ve->winlength; - int ret=0; - long i,j; - float decay; - - /* we want to have a 'minimum bar' for energy, else we're just - basing blocks on quantization noise that outweighs the signal - itself (for low power signals) */ - - float minV=ve->minenergy; - float *vec=(float*) alloca(n*sizeof(*vec)); - - /* stretch is used to gradually lengthen the number of windows - considered prevoius-to-potential-trigger */ - int stretch=max(VE_MINSTRETCH,ve->stretch/2); - float penalty=gi->stretch_penalty-(ve->stretch/2-VE_MINSTRETCH); - if(penalty<0.f)penalty=0.f; - if(penalty>gi->stretch_penalty)penalty=gi->stretch_penalty; - - /*_analysis_output_always("lpcm",seq2,data,n,0,0, - totalshift+pos*ve->searchstep);*/ - - /* window and transform */ - for(i=0;imdct_win[i]; - mdct_forward(&ve->mdct,vec,vec); - - /*_analysis_output_always("mdct",seq2,vec,n/2,0,1,0); */ - - /* near-DC spreading function; this has nothing to do with - psychoacoustics, just sidelobe leakage and window size */ - { - float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2]; - int ptr=filters->nearptr; - - /* the accumulation is regularly refreshed from scratch to avoid - floating point creep */ - if(ptr==0){ - decay=filters->nearDC_acc=filters->nearDC_partialacc+temp; - filters->nearDC_partialacc=temp; - }else{ - decay=filters->nearDC_acc+=temp; - filters->nearDC_partialacc+=temp; - } - filters->nearDC_acc-=filters->nearDC[ptr]; - filters->nearDC[ptr]=temp; - - decay*=(1./(VE_NEARDC+1)); - filters->nearptr++; - if(filters->nearptr>=VE_NEARDC)filters->nearptr=0; - decay=todB(&decay)*.5-15.f; - } - - /* perform spreading and limiting, also smooth the spectrum. yes, - the MDCT results in all real coefficients, but it still *behaves* - like real/imaginary pairs */ - for(i=0;i>1]=val; - decay-=8.; - } - - /*_analysis_output_always("spread",seq2++,vec,n/4,0,0,0);*/ - - /* perform preecho/postecho triggering by band */ - for(j=0;j=VE_AMP)filters[j].ampptr=0; - } - - /* look at min/max, decide trigger */ - if(valmax>gi->preecho_thresh[j]+penalty){ - ret|=1; - ret|=4; - } - if(valminpostecho_thresh[j]-penalty)ret|=2; - } - - return(ret); -} - -#if 0 -static int seq=0; -static ogg_int64_t totalshift=-1024; -#endif - -long _ve_envelope_search(vorbis_dsp_state *v){ - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; - vorbis_info_psy_global *gi=&ci->psy_g_param; - envelope_lookup *ve=((private_state *)(v->backend_state))->ve; - long i,j; - - int first=ve->current/ve->searchstep; - int last=v->pcm_current/ve->searchstep-VE_WIN; - if(first<0)first=0; - - /* make sure we have enough storage to match the PCM */ - if(last+VE_WIN+VE_POST>ve->storage){ - ve->storage=last+VE_WIN+VE_POST; /* be sure */ - ve->mark=(int*)_ogg_realloc(ve->mark,ve->storage*sizeof(*ve->mark)); - } - - for(j=first;jstretch++; - if(ve->stretch>VE_MAXSTRETCH*2) - ve->stretch=VE_MAXSTRETCH*2; - - for(i=0;ich;i++){ - float *pcm=v->pcm[i]+ve->searchstep*(j); - ret|=_ve_amp(ve,gi,pcm,ve->band,ve->filter+i*VE_BANDS,j); - } - - ve->mark[j+VE_POST]=0; - if(ret&1){ - ve->mark[j]=1; - ve->mark[j+1]=1; - } - - if(ret&2){ - ve->mark[j]=1; - if(j>0)ve->mark[j-1]=1; - } - - if(ret&4)ve->stretch=-1; - } - - ve->current=last*ve->searchstep; - - { - long centerW=v->centerW; - long testW= - centerW+ - ci->blocksizes[v->W]/4+ - ci->blocksizes[1]/2+ - ci->blocksizes[0]/4; - - j=ve->cursor; - - while(jcurrent-(ve->searchstep)){/* account for postecho - working back one window */ - if(j>=testW)return(1); - - ve->cursor=j; - - if(ve->mark[j/ve->searchstep]){ - if(j>centerW){ - -#if 0 - if(j>ve->curmark){ - float *marker=alloca(v->pcm_current*sizeof(*marker)); - int l,m; - memset(marker,0,sizeof(*marker)*v->pcm_current); - fprintf(stderr,"mark! seq=%d, cursor:%fs time:%fs\n", - seq, - (totalshift+ve->cursor)/44100., - (totalshift+j)/44100.); - _analysis_output_always("pcmL",seq,v->pcm[0],v->pcm_current,0,0,totalshift); - _analysis_output_always("pcmR",seq,v->pcm[1],v->pcm_current,0,0,totalshift); - - _analysis_output_always("markL",seq,v->pcm[0],j,0,0,totalshift); - _analysis_output_always("markR",seq,v->pcm[1],j,0,0,totalshift); - - for(m=0;msearchstep]=ve->filter[m].markers[l]*.1; - _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift); - } - - for(m=0;msearchstep]=ve->filter[m+VE_BANDS].markers[l]*.1; - _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift); - } - - for(l=0;lsearchstep]=ve->mark[l]*.4; - _analysis_output_always("mark",seq,marker,v->pcm_current,0,0,totalshift); - - - seq++; - - } -#endif - - ve->curmark=j; - if(j>=testW)return(1); - return(0); - } - } - j+=ve->searchstep; - } - } - - return(-1); -} - -int _ve_envelope_mark(vorbis_dsp_state *v){ - envelope_lookup *ve=((private_state *)(v->backend_state))->ve; - vorbis_info *vi=v->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - long centerW=v->centerW; - long beginW=centerW-ci->blocksizes[v->W]/4; - long endW=centerW+ci->blocksizes[v->W]/4; - if(v->W){ - beginW-=ci->blocksizes[v->lW]/4; - endW+=ci->blocksizes[v->nW]/4; - }else{ - beginW-=ci->blocksizes[0]/4; - endW+=ci->blocksizes[0]/4; - } - - if(ve->curmark>=beginW && ve->curmarksearchstep; - long last=endW/ve->searchstep; - long i; - for(i=first;imark[i])return(1); - } - return(0); -} - -void _ve_envelope_shift(envelope_lookup *e,long shift){ - int smallsize=e->current/e->searchstep+VE_POST; /* adjust for placing marks - ahead of ve->current */ - int smallshift=shift/e->searchstep; - - memmove(e->mark,e->mark+smallshift,(smallsize-smallshift)*sizeof(*e->mark)); - -#if 0 - for(i=0;ich;i++) - memmove(e->filter[i].markers, - e->filter[i].markers+smallshift, - (1024-smallshift)*sizeof(*(*e->filter).markers)); - totalshift+=shift; -#endif - - e->current-=shift; - if(e->curmark>=0) - e->curmark-=shift; - e->cursor-=shift; -} - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/envelope.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/envelope.h deleted file mode 100644 index 0c7a4a4deb..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/envelope.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: PCM data envelope analysis and manipulation - last mod: $Id: envelope.h,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_ENVELOPE_ -#define _V_ENVELOPE_ - -#include "mdct.h" - -#define VE_PRE 16 -#define VE_WIN 4 -#define VE_POST 2 -#define VE_AMP (VE_PRE+VE_POST-1) - -#define VE_BANDS 7 -#define VE_NEARDC 15 - -#define VE_MINSTRETCH 2 /* a bit less than short block */ -#define VE_MAXSTRETCH 12 /* one-third full block */ - -typedef struct { - float ampbuf[VE_AMP]; - int ampptr; - - float nearDC[VE_NEARDC]; - float nearDC_acc; - float nearDC_partialacc; - int nearptr; - -} envelope_filter_state; - -typedef struct { - int begin; - int end; - float *window; - float total; -} envelope_band; - -typedef struct { - int ch; - int winlength; - int searchstep; - float minenergy; - - mdct_lookup mdct; - float *mdct_win; - - envelope_band band[VE_BANDS]; - envelope_filter_state *filter; - int stretch; - - int *mark; - - long storage; - long current; - long curmark; - long cursor; -} envelope_lookup; - -extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi); -extern void _ve_envelope_clear(envelope_lookup *e); -extern long _ve_envelope_search(vorbis_dsp_state *v); -extern void _ve_envelope_shift(envelope_lookup *e,long shift); -extern int _ve_envelope_mark(vorbis_dsp_state *v); - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/floor0.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/floor0.c deleted file mode 100644 index f90fc98b07..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/floor0.c +++ /dev/null @@ -1,227 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: floor backend 0 implementation - last mod: $Id: floor0.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - - -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "registry.h" -#include "lpc.h" -#include "lsp.h" -#include "codebook.h" -#include "scales.h" -#include "misc.h" -#include "os.h" - -#include "misc.h" -#include - -typedef struct { - int ln; - int m; - int **linearmap; - int n[2]; - - vorbis_info_floor0 *vi; - - long bits; - long frames; -} vorbis_look_floor0; - - -/***********************************************/ - -static void floor0_free_info(vorbis_info_floor *i){ - vorbis_info_floor0 *info=(vorbis_info_floor0 *)i; - if(info){ - memset(info,0,sizeof(*info)); - _ogg_free(info); - } -} - -static void floor0_free_look(vorbis_look_floor *i){ - vorbis_look_floor0 *look=(vorbis_look_floor0 *)i; - if(look){ - - if(look->linearmap){ - - if(look->linearmap[0])_ogg_free(look->linearmap[0]); - if(look->linearmap[1])_ogg_free(look->linearmap[1]); - - _ogg_free(look->linearmap); - } - memset(look,0,sizeof(*look)); - _ogg_free(look); - } -} - -static vorbis_info_floor *floor0_unpack (vorbis_info *vi,oggpack_buffer *opb){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int j; - - vorbis_info_floor0 *info=(vorbis_info_floor0*)_ogg_malloc(sizeof(*info)); - info->order=oggpack_read(opb,8); - info->rate=oggpack_read(opb,16); - info->barkmap=oggpack_read(opb,16); - info->ampbits=oggpack_read(opb,6); - info->ampdB=oggpack_read(opb,8); - info->numbooks=oggpack_read(opb,4)+1; - - if(info->order<1)goto err_out; - if(info->rate<1)goto err_out; - if(info->barkmap<1)goto err_out; - if(info->numbooks<1)goto err_out; - - for(j=0;jnumbooks;j++){ - info->books[j]=oggpack_read(opb,8); - if(info->books[j]<0 || info->books[j]>=ci->books)goto err_out; - } - return(info); - - err_out: - floor0_free_info(info); - return(NULL); -} - -/* initialize Bark scale and normalization lookups. We could do this - with static tables, but Vorbis allows a number of possible - combinations, so it's best to do it computationally. - - The below is authoritative in terms of defining scale mapping. - Note that the scale depends on the sampling rate as well as the - linear block and mapping sizes */ - -static void floor0_map_lazy_init(vorbis_block *vb, - vorbis_info_floor *infoX, - vorbis_look_floor0 *look){ - if(!look->linearmap[vb->W]){ - vorbis_dsp_state *vd=vb->vd; - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_floor0 *info=(vorbis_info_floor0 *)infoX; - int W=vb->W; - int n=ci->blocksizes[W]/2,j; - - /* we choose a scaling constant so that: - floor(bark(rate/2-1)*C)=mapped-1 - floor(bark(rate/2)*C)=mapped */ - float scale=look->ln/toBARK(info->rate/2.f); - - /* the mapping from a linear scale to a smaller bark scale is - straightforward. We do *not* make sure that the linear mapping - does not skip bark-scale bins; the decoder simply skips them and - the encoder may do what it wishes in filling them. They're - necessary in some mapping combinations to keep the scale spacing - accurate */ - look->linearmap[W]=(int*)_ogg_malloc((n+1)*sizeof(**look->linearmap)); - for(j=0;jrate/2.f)/n*j) - *scale); /* bark numbers represent band edges */ - if(val>=look->ln)val=look->ln-1; /* guard against the approximation */ - look->linearmap[W][j]=val; - } - look->linearmap[W][j]=-1; - look->n[W]=n; - } -} - -static vorbis_look_floor *floor0_look(vorbis_dsp_state *vd, - vorbis_info_floor *i){ - vorbis_info_floor0 *info=(vorbis_info_floor0*)i; - vorbis_look_floor0 *look=(vorbis_look_floor0*)_ogg_calloc(1,sizeof(*look)); - look->m=info->order; - look->ln=info->barkmap; - look->vi=info; - - look->linearmap=(int**)_ogg_calloc(2,sizeof(*look->linearmap)); - - return look; -} - -static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){ - vorbis_look_floor0 *look=(vorbis_look_floor0 *)i; - vorbis_info_floor0 *info=look->vi; - int j,k; - - int ampraw=oggpack_read(&vb->opb,info->ampbits); - if(ampraw>0){ /* also handles the -1 out of data case */ - long maxval=(1<ampbits)-1; - float amp=(float)ampraw/maxval*info->ampdB; - int booknum=oggpack_read(&vb->opb,_ilog(info->numbooks)); - - if(booknum!=-1 && booknumnumbooks){ /* be paranoid */ - codec_setup_info *ci=(codec_setup_info *)vb->vd->vi->codec_setup; - codebook *b=ci->fullbooks+info->books[booknum]; - float last=0.f; - - /* the additional b->dim is a guard against any possible stack - smash; b->dim is provably more than we can overflow the - vector */ - float *lsp=(float*)_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+b->dim+1)); - - for(j=0;jm;j+=b->dim) - if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim)==-1)goto eop; - for(j=0;jm;){ - for(k=0;kdim;k++,j++)lsp[j]+=last; - last=lsp[j-1]; - } - - lsp[look->m]=amp; - return(lsp); - } - } - eop: - return(NULL); -} - -static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i, - void *memo,float *out){ - vorbis_look_floor0 *look=(vorbis_look_floor0 *)i; - vorbis_info_floor0 *info=look->vi; - - floor0_map_lazy_init(vb,info,look); - - if(memo){ - float *lsp=(float *)memo; - float amp=lsp[look->m]; - - /* take the coefficients back to a spectral envelope curve */ - vorbis_lsp_to_curve(out, - look->linearmap[vb->W], - look->n[vb->W], - look->ln, - lsp,look->m,amp,(float)info->ampdB); - return(1); - } - memset(out,0,sizeof(*out)*look->n[vb->W]); - return(0); -} - -/* export hooks */ -vorbis_func_floor floor0_exportbundle={ - NULL,&floor0_unpack,&floor0_look,&floor0_free_info, - &floor0_free_look,&floor0_inverse1,&floor0_inverse2 -}; - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/floor1.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/floor1.c deleted file mode 100644 index d9b3c90f95..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/floor1.c +++ /dev/null @@ -1,1074 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: floor backend 1 implementation - last mod: $Id: floor1.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - - -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "registry.h" -#include "codebook.h" -#include "misc.h" -#include "scales.h" - -#include - -#define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */ - -typedef struct { - int sorted_index[VIF_POSIT+2]; - int forward_index[VIF_POSIT+2]; - int reverse_index[VIF_POSIT+2]; - - int hineighbor[VIF_POSIT]; - int loneighbor[VIF_POSIT]; - int posts; - - int n; - int quant_q; - vorbis_info_floor1 *vi; - - long phrasebits; - long postbits; - long frames; -} vorbis_look_floor1; - -typedef struct lsfit_acc{ - long x0; - long x1; - - long xa; - long ya; - long x2a; - long y2a; - long xya; - long an; -} lsfit_acc; - -/***********************************************/ - -static void floor1_free_info(vorbis_info_floor *i){ - vorbis_info_floor1 *info=(vorbis_info_floor1 *)i; - if(info){ - memset(info,0,sizeof(*info)); - _ogg_free(info); - } -} - -static void floor1_free_look(vorbis_look_floor *i){ - vorbis_look_floor1 *look=(vorbis_look_floor1 *)i; - if(look){ - /*fprintf(stderr,"floor 1 bit usage %f:%f (%f total)\n", - (float)look->phrasebits/look->frames, - (float)look->postbits/look->frames, - (float)(look->postbits+look->phrasebits)/look->frames);*/ - - memset(look,0,sizeof(*look)); - _ogg_free(look); - } -} - -static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){ - vorbis_info_floor1 *info=(vorbis_info_floor1 *)i; - int j,k; - int count=0; - int rangebits; - int maxposit=info->postlist[1]; - int maxclass=-1; - - /* save out partitions */ - oggpack_write(opb,info->partitions,5); /* only 0 to 31 legal */ - for(j=0;jpartitions;j++){ - oggpack_write(opb,info->partitionclass[j],4); /* only 0 to 15 legal */ - if(maxclasspartitionclass[j])maxclass=info->partitionclass[j]; - } - - /* save out partition classes */ - for(j=0;jclass_dim[j]-1,3); /* 1 to 8 */ - oggpack_write(opb,info->class_subs[j],2); /* 0 to 3 */ - if(info->class_subs[j])oggpack_write(opb,info->class_book[j],8); - for(k=0;k<(1<class_subs[j]);k++) - oggpack_write(opb,info->class_subbook[j][k]+1,8); - } - - /* save out the post list */ - oggpack_write(opb,info->mult-1,2); /* only 1,2,3,4 legal now */ - oggpack_write(opb,ilog2(maxposit),4); - rangebits=ilog2(maxposit); - - for(j=0,k=0;jpartitions;j++){ - count+=info->class_dim[info->partitionclass[j]]; - for(;kpostlist[k+2],rangebits); - } -} - - -static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int j,k,count=0,maxclass=-1,rangebits; - - vorbis_info_floor1 *info=(vorbis_info_floor1*)_ogg_calloc(1,sizeof(*info)); - /* read partitions */ - info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */ - for(j=0;jpartitions;j++){ - info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */ - if(maxclasspartitionclass[j])maxclass=info->partitionclass[j]; - } - - /* read partition classes */ - for(j=0;jclass_dim[j]=oggpack_read(opb,3)+1; /* 1 to 8 */ - info->class_subs[j]=oggpack_read(opb,2); /* 0,1,2,3 bits */ - if(info->class_subs[j]<0) - goto err_out; - if(info->class_subs[j])info->class_book[j]=oggpack_read(opb,8); - if(info->class_book[j]<0 || info->class_book[j]>=ci->books) - goto err_out; - for(k=0;k<(1<class_subs[j]);k++){ - info->class_subbook[j][k]=oggpack_read(opb,8)-1; - if(info->class_subbook[j][k]<-1 || info->class_subbook[j][k]>=ci->books) - goto err_out; - } - } - - /* read the post list */ - info->mult=oggpack_read(opb,2)+1; /* only 1,2,3,4 legal now */ - rangebits=oggpack_read(opb,4); - - for(j=0,k=0;jpartitions;j++){ - count+=info->class_dim[info->partitionclass[j]]; - for(;kpostlist[k+2]=oggpack_read(opb,rangebits); - if(t<0 || t>=(1<postlist[0]=0; - info->postlist[1]=1<vi=info; - look->n=info->postlist[1]; - - /* we drop each position value in-between already decoded values, - and use linear interpolation to predict each new value past the - edges. The positions are read in the order of the position - list... we precompute the bounding positions in the lookup. Of - course, the neighbors can change (if a position is declined), but - this is an initial mapping */ - - for(i=0;ipartitions;i++)n+=info->class_dim[info->partitionclass[i]]; - n+=2; - look->posts=n; - - /* also store a sorted position index */ - for(i=0;ipostlist+i; - qsort(sortpointer,n,sizeof(*sortpointer),icomp); - - /* points from sort order back to range number */ - for(i=0;iforward_index[i]=sortpointer[i]-info->postlist; - /* points from range order to sorted position */ - for(i=0;ireverse_index[look->forward_index[i]]=i; - /* we actually need the post values too */ - for(i=0;isorted_index[i]=info->postlist[look->forward_index[i]]; - - /* quantize values to multiplier spec */ - switch(info->mult){ - case 1: /* 1024 -> 256 */ - look->quant_q=256; - break; - case 2: /* 1024 -> 128 */ - look->quant_q=128; - break; - case 3: /* 1024 -> 86 */ - look->quant_q=86; - break; - case 4: /* 1024 -> 64 */ - look->quant_q=64; - break; - } - - /* discover our neighbors for decode where we don't use fit flags - (that would push the neighbors outward) */ - for(i=0;in; - int currentx=info->postlist[i+2]; - for(j=0;jpostlist[j]; - if(x>lx && xcurrentx){ - hi=j; - hx=x; - } - } - look->loneighbor[i]=lo; - look->hineighbor[i]=hi; - } - - return(look); -} - -static int render_point(int x0,int x1,int y0,int y1,int x){ - y0&=0x7fff; /* mask off flag */ - y1&=0x7fff; - - { - int dy=y1-y0; - int adx=x1-x0; - int ady=abs(dy); - int err=ady*(x-x0); - - int off=err/adx; - if(dy<0)return(y0-off); - return(y0+off); - } -} - -static int vorbis_dBquant(const float *x){ - int i= *x*7.3142857f+1023.5f; - if(i>1023)return(1023); - if(i<0)return(0); - return i; -} - -static float FLOOR1_fromdB_LOOKUP[256]={ - 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F, - 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F, - 1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F, - 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F, - 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F, - 3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F, - 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F, - 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F, - 7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F, - 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F, - 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F, - 1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F, - 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F, - 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F, - 3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F, - 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F, - 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F, - 7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F, - 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F, - 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F, - 1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F, - 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F, - 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F, - 3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F, - 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F, - 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F, - 7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F, - 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F, - 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F, - 0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F, - 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F, - 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F, - 0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F, - 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F, - 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F, - 0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F, - 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F, - 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F, - 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, - 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F, - 0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F, - 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F, - 0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F, - 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F, - 0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F, - 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F, - 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, - 0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F, - 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F, - 0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F, - 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F, - 0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F, - 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F, - 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F, - 0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F, - 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, - 0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F, - 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F, - 0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F, - 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F, - 0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F, - 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F, - 0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F, - 0.82788260F, 0.88168307F, 0.9389798F, 1.F, -}; - -static void render_line(int x0,int x1,int y0,int y1,float *d){ - int dy=y1-y0; - int adx=x1-x0; - int ady=abs(dy); - int base=dy/adx; - int sy=(dy<0?base-1:base+1); - int x=x0; - int y=y0; - int err=0; - - ady-=abs(base*adx); - - d[x]*=FLOOR1_fromdB_LOOKUP[y]; - while(++x=adx){ - err-=adx; - y+=sy; - }else{ - y+=base; - } - d[x]*=FLOOR1_fromdB_LOOKUP[y]; - } -} - -static void render_line0(int x0,int x1,int y0,int y1,int *d){ - int dy=y1-y0; - int adx=x1-x0; - int ady=abs(dy); - int base=dy/adx; - int sy=(dy<0?base-1:base+1); - int x=x0; - int y=y0; - int err=0; - - ady-=abs(base*adx); - - d[x]=y; - while(++x=adx){ - err-=adx; - y+=sy; - }else{ - y+=base; - } - d[x]=y; - } -} - -/* the floor has already been filtered to only include relevant sections */ -static int accumulate_fit(const float *flr,const float *mdct, - int x0, int x1,lsfit_acc *a, - int n,vorbis_info_floor1 *info){ - long i; - long xa=0,ya=0,x2a=0,y2a=0,xya=0,na=0, xb=0,yb=0,x2b=0,y2b=0,xyb=0,nb=0; - - memset(a,0,sizeof(*a)); - a->x0=x0; - a->x1=x1; - if(x1>=n)x1=n-1; - - for(i=x0;i<=x1;i++){ - int quantized=vorbis_dBquant(flr+i); - if(quantized){ - if(mdct[i]+info->twofitatten>=flr[i]){ - xa += i; - ya += quantized; - x2a += i*i; - y2a += quantized*quantized; - xya += i*quantized; - na++; - }else{ - xb += i; - yb += quantized; - x2b += i*i; - y2b += quantized*quantized; - xyb += i*quantized; - nb++; - } - } - } - - xb+=xa; - yb+=ya; - x2b+=x2a; - y2b+=y2a; - xyb+=xya; - nb+=na; - - /* weight toward the actually used frequencies if we meet the threshhold */ - { - int weight=nb*info->twofitweight/(na+1); - - a->xa=xa*weight+xb; - a->ya=ya*weight+yb; - a->x2a=x2a*weight+x2b; - a->y2a=y2a*weight+y2b; - a->xya=xya*weight+xyb; - a->an=na*weight+nb; - } - - return(na); -} - -static void fit_line(lsfit_acc *a,int fits,int *y0,int *y1){ - long x=0,y=0,x2=0,y2=0,xy=0,an=0,i; - long x0=a[0].x0; - long x1=a[fits-1].x1; - - for(i=0;i=0){ - x+= x0; - y+= *y0; - x2+= x0 * x0; - y2+= *y0 * *y0; - xy+= *y0 * x0; - an++; - } - - if(*y1>=0){ - x+= x1; - y+= *y1; - x2+= x1 * x1; - y2+= *y1 * *y1; - xy+= *y1 * x1; - an++; - } - - if(an){ - /* need 64 bit multiplies, which C doesn't give portably as int */ - double fx=x; - double fy=y; - double fx2=x2; - double fxy=xy; - double denom=1./(an*fx2-fx*fx); - double a=(fy*fx2-fxy*fx)*denom; - double b=(an*fxy-fx*fy)*denom; - *y0=rint(a+b*x0); - *y1=rint(a+b*x1); - - /* limit to our range! */ - if(*y0>1023)*y0=1023; - if(*y1>1023)*y1=1023; - if(*y0<0)*y0=0; - if(*y1<0)*y1=0; - - }else{ - *y0=0; - *y1=0; - } -} - -/*static void fit_line_point(lsfit_acc *a,int fits,int *y0,int *y1){ - long y=0; - int i; - - for(i=0;itwofitatten>=mask[x]){ - if(y+info->maxovermaxunder>val)return(1); - } - - while(++x=adx){ - err-=adx; - y+=sy; - }else{ - y+=base; - } - - val=vorbis_dBquant(mask+x); - mse+=((y-val)*(y-val)); - n++; - if(mdct[x]+info->twofitatten>=mask[x]){ - if(val){ - if(y+info->maxovermaxunder>val)return(1); - } - } - } - - if(info->maxover*info->maxover/n>info->maxerr)return(0); - if(info->maxunder*info->maxunder/n>info->maxerr)return(0); - if(mse/n>info->maxerr)return(1); - return(0); -} - -static int post_Y(int *A,int *B,int pos){ - if(A[pos]<0) - return B[pos]; - if(B[pos]<0) - return A[pos]; - - return (A[pos]+B[pos])>>1; -} - -int *floor1_fit(vorbis_block *vb,void *look_, - const float *logmdct, /* in */ - const float *logmask){ - long i,j; - vorbis_look_floor1 *look = (vorbis_look_floor1*) look_; - vorbis_info_floor1 *info=look->vi; - long n=look->n; - long posts=look->posts; - long nonzero=0; - lsfit_acc fits[VIF_POSIT+1]; - int fit_valueA[VIF_POSIT+2]; /* index by range list position */ - int fit_valueB[VIF_POSIT+2]; /* index by range list position */ - - int loneighbor[VIF_POSIT+2]; /* sorted index of range list position (+2) */ - int hineighbor[VIF_POSIT+2]; - int *output=NULL; - int memo[VIF_POSIT+2]; - - for(i=0;isorted_index[i], - look->sorted_index[i+1],fits+i, - n,info); - } - - if(nonzero){ - /* start by fitting the implicit base case.... */ - int y0=-200; - int y1=-200; - fit_line(fits,posts-1,&y0,&y1); - - fit_valueA[0]=y0; - fit_valueB[0]=y0; - fit_valueB[1]=y1; - fit_valueA[1]=y1; - - /* Non degenerate case */ - /* start progressive splitting. This is a greedy, non-optimal - algorithm, but simple and close enough to the best - answer. */ - for(i=2;ireverse_index[i]; - int ln=loneighbor[sortpos]; - int hn=hineighbor[sortpos]; - - /* eliminate repeat searches of a particular range with a memo */ - if(memo[ln]!=hn){ - /* haven't performed this error search yet */ - int lsortpos=look->reverse_index[ln]; - int hsortpos=look->reverse_index[hn]; - memo[ln]=hn; - - { - /* A note: we want to bound/minimize *local*, not global, error */ - int lx=info->postlist[ln]; - int hx=info->postlist[hn]; - int ly=post_Y(fit_valueA,fit_valueB,ln); - int hy=post_Y(fit_valueA,fit_valueB,hn); - - if(ly==-1 || hy==-1){ - exit(1); - } - - if(inspect_error(lx,hx,ly,hy,logmask,logmdct,info)){ - /* outside error bounds/begin search area. Split it. */ - int ly0=-200; - int ly1=-200; - int hy0=-200; - int hy1=-200; - fit_line(fits+lsortpos,sortpos-lsortpos,&ly0,&ly1); - fit_line(fits+sortpos,hsortpos-sortpos,&hy0,&hy1); - - /* store new edge values */ - fit_valueB[ln]=ly0; - if(ln==0)fit_valueA[ln]=ly0; - fit_valueA[i]=ly1; - fit_valueB[i]=hy0; - fit_valueA[hn]=hy1; - if(hn==1)fit_valueB[hn]=hy1; - - if(ly1>=0 || hy0>=0){ - /* store new neighbor values */ - for(j=sortpos-1;j>=0;j--) - if(hineighbor[j]==hn) - hineighbor[j]=i; - else - break; - for(j=sortpos+1;jloneighbor[i-2]; - int hn=look->hineighbor[i-2]; - int x0=info->postlist[ln]; - int x1=info->postlist[hn]; - int y0=output[ln]; - int y1=output[hn]; - - int predicted=render_point(x0,x1,y0,y1,info->postlist[i]); - int vx=post_Y(fit_valueA,fit_valueB,i); - - if(vx>=0 && predicted!=vx){ - output[i]=vx; - }else{ - output[i]= predicted|0x8000; - } - } - } - - return(output); - -} - -int *floor1_interpolate_fit(vorbis_block *vb,void *look_, - int *A,int *B, - int del){ - - long i; - vorbis_look_floor1* look = (vorbis_look_floor1*) look_; - long posts=look->posts; - int *output=NULL; - - if(A && B){ - output=(int*)_vorbis_block_alloc(vb,sizeof(*output)*posts); - - for(i=0;i>16; - if(A[i]&0x8000 && B[i]&0x8000)output[i]|=0x8000; - } - } - - return(output); -} - - -int floor1_encode(oggpack_buffer *opb,vorbis_block *vb, - void*look_, - int *post,int *ilogmask){ - - long i,j; - vorbis_look_floor1 *look = (vorbis_look_floor1 *) look_; - vorbis_info_floor1 *info=look->vi; - long posts=look->posts; - codec_setup_info *ci=(codec_setup_info*)vb->vd->vi->codec_setup; - int out[VIF_POSIT+2]; - static_codebook **sbooks=ci->book_param; - codebook *books=ci->fullbooks; - static long seq=0; - - /* quantize values to multiplier spec */ - if(post){ - for(i=0;imult){ - case 1: /* 1024 -> 256 */ - val>>=2; - break; - case 2: /* 1024 -> 128 */ - val>>=3; - break; - case 3: /* 1024 -> 86 */ - val/=12; - break; - case 4: /* 1024 -> 64 */ - val>>=4; - break; - } - post[i]=val | (post[i]&0x8000); - } - - out[0]=post[0]; - out[1]=post[1]; - - /* find prediction values for each post and subtract them */ - for(i=2;iloneighbor[i-2]; - int hn=look->hineighbor[i-2]; - int x0=info->postlist[ln]; - int x1=info->postlist[hn]; - int y0=post[ln]; - int y1=post[hn]; - - int predicted=render_point(x0,x1,y0,y1,info->postlist[i]); - - if((post[i]&0x8000) || (predicted==post[i])){ - post[i]=predicted|0x8000; /* in case there was roundoff jitter - in interpolation */ - out[i]=0; - }else{ - int headroom=(look->quant_q-predictedquant_q-predicted:predicted); - - int val=post[i]-predicted; - - /* at this point the 'deviation' value is in the range +/- max - range, but the real, unique range can always be mapped to - only [0-maxrange). So we want to wrap the deviation into - this limited range, but do it in the way that least screws - an essentially gaussian probability distribution. */ - - if(val<0) - if(val<-headroom) - val=headroom-val-1; - else - val=-1-(val<<1); - else - if(val>=headroom) - val= val+headroom; - else - val<<=1; - - out[i]=val; - post[ln]&=0x7fff; - post[hn]&=0x7fff; - } - } - - /* we have everything we need. pack it out */ - /* mark nontrivial floor */ - oggpack_write(opb,1,1); - - /* beginning/end post */ - look->frames++; - look->postbits+=ilog(look->quant_q-1)*2; - oggpack_write(opb,out[0],ilog(look->quant_q-1)); - oggpack_write(opb,out[1],ilog(look->quant_q-1)); - - - /* partition by partition */ - for(i=0,j=2;ipartitions;i++){ - int classx=info->partitionclass[i]; - int cdim=info->class_dim[classx]; - int csubbits=info->class_subs[classx]; - int csub=1<class_subbook[classx][k]; - if(booknum<0){ - maxval[k]=1; - }else{ - maxval[k]=sbooks[info->class_subbook[classx][k]]->entries; - } - } - for(k=0;kphrasebits+= - vorbis_book_encode(books+info->class_book[classx],cval,opb); - -#ifdef TRAIN_FLOOR1 - { - FILE *of; - char buffer[80]; - sprintf(buffer,"line_%dx%ld_class%d.vqd", - vb->pcmend/2,posts-2,class); - of=fopen(buffer,"a"); - fprintf(of,"%d\n",cval); - fclose(of); - } -#endif - } - - /* write post values */ - for(k=0;kclass_subbook[classx][bookas[k]]; - if(book>=0){ - /* hack to allow training with 'bad' books */ - if(out[j+k]<(books+book)->entries) - look->postbits+=vorbis_book_encode(books+book, - out[j+k],opb); - /*else - fprintf(stderr,"+!");*/ - -#ifdef TRAIN_FLOOR1 - { - FILE *of; - char buffer[80]; - sprintf(buffer,"line_%dx%ld_%dsub%d.vqd", - vb->pcmend/2,posts-2,class,bookas[k]); - of=fopen(buffer,"a"); - fprintf(of,"%d\n",out[j+k]); - fclose(of); - } -#endif - } - } - j+=cdim; - } - - { - /* generate quantized floor equivalent to what we'd unpack in decode */ - /* render the lines */ - int hx=0; - int lx=0; - int ly=post[0]*info->mult; - for(j=1;jposts;j++){ - int current=look->forward_index[j]; - int hy=post[current]&0x7fff; - if(hy==post[current]){ - - hy*=info->mult; - hx=info->postlist[current]; - - render_line0(lx,hx,ly,hy,ilogmask); - - lx=hx; - ly=hy; - } - } - for(j=hx;jpcmend/2;j++)ilogmask[j]=ly; /* be certain */ - seq++; - return(1); - } - }else{ - oggpack_write(opb,0,1); - memset(ilogmask,0,vb->pcmend/2*sizeof(*ilogmask)); - seq++; - return(0); - } -} - -static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){ - vorbis_look_floor1 *look=(vorbis_look_floor1 *)in; - vorbis_info_floor1 *info=look->vi; - codec_setup_info *ci=(codec_setup_info*)vb->vd->vi->codec_setup; - - int i,j,k; - codebook *books=ci->fullbooks; - - /* unpack wrapped/predicted values from stream */ - if(oggpack_read(&vb->opb,1)==1){ - int *fit_value=(int*)_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value)); - - fit_value[0]=oggpack_read(&vb->opb,ilog(look->quant_q-1)); - fit_value[1]=oggpack_read(&vb->opb,ilog(look->quant_q-1)); - - /* partition by partition */ - for(i=0,j=2;ipartitions;i++){ - int classx=info->partitionclass[i]; - int cdim=info->class_dim[classx]; - int csubbits=info->class_subs[classx]; - int csub=1<class_book[classx],&vb->opb); - - if(cval==-1)goto eop; - } - - for(k=0;kclass_subbook[classx][cval&(csub-1)]; - cval>>=csubbits; - if(book>=0){ - if((fit_value[j+k]=vorbis_book_decode(books+book,&vb->opb))==-1) - goto eop; - }else{ - fit_value[j+k]=0; - } - } - j+=cdim; - } - - /* unwrap positive values and reconsitute via linear interpolation */ - for(i=2;iposts;i++){ - int predicted=render_point(info->postlist[look->loneighbor[i-2]], - info->postlist[look->hineighbor[i-2]], - fit_value[look->loneighbor[i-2]], - fit_value[look->hineighbor[i-2]], - info->postlist[i]); - int hiroom=look->quant_q-predicted; - int loroom=predicted; - int room=(hiroom=room){ - if(hiroom>loroom){ - val = val-loroom; - }else{ - val = -1-(val-hiroom); - } - }else{ - if(val&1){ - val= -((val+1)>>1); - }else{ - val>>=1; - } - } - - fit_value[i]=val+predicted; - fit_value[look->loneighbor[i-2]]&=0x7fff; - fit_value[look->hineighbor[i-2]]&=0x7fff; - - }else{ - fit_value[i]=predicted|0x8000; - } - - } - - return(fit_value); - } - eop: - return(NULL); -} - -static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo, - float *out){ - vorbis_look_floor1 *look=(vorbis_look_floor1 *)in; - vorbis_info_floor1 *info=look->vi; - - codec_setup_info *ci=(codec_setup_info*)vb->vd->vi->codec_setup; - int n=ci->blocksizes[vb->W]/2; - int j; - - if(memo){ - /* render the lines */ - int *fit_value=(int *)memo; - int hx=0; - int lx=0; - int ly=fit_value[0]*info->mult; - for(j=1;jposts;j++){ - int current=look->forward_index[j]; - int hy=fit_value[current]&0x7fff; - if(hy==fit_value[current]){ - - hy*=info->mult; - hx=info->postlist[current]; - - render_line(lx,hx,ly,hy,out); - - lx=hx; - ly=hy; - } - } - for(j=hx;j header packets - last mod: $Id: info.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -/* general handling of the header and the vorbis_info structure (and - substructures) */ - -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "codebook.h" -#include "registry.h" -#include "window.h" -#include "psy.h" -#include "misc.h" -#include "os.h" - - -static void _v_writestring(oggpack_buffer *o, const char *s, int bytes){ - - while(bytes--){ - oggpack_write(o,*s++,8); - } -} - -static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){ - while(bytes--){ - *buf++=oggpack_read(o,8); - } -} - -void vorbis_comment_init(vorbis_comment *vc){ - memset(vc,0,sizeof(*vc)); -} - -void vorbis_comment_add(vorbis_comment *vc,char *comment){ - vc->user_comments=(char**)_ogg_realloc(vc->user_comments, - (vc->comments+2)*sizeof(*vc->user_comments)); - vc->comment_lengths=(int*)_ogg_realloc(vc->comment_lengths, - (vc->comments+2)*sizeof(*vc->comment_lengths)); - vc->comment_lengths[vc->comments]=strlen(comment); - vc->user_comments[vc->comments]=(char*)_ogg_malloc(vc->comment_lengths[vc->comments]+1); - strcpy(vc->user_comments[vc->comments], comment); - vc->comments++; - vc->user_comments[vc->comments]=NULL; -} - -void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, char *contents){ - char *comment=(char*)alloca(strlen(tag)+strlen(contents)+2); /* +2 for = and \0 */ - strcpy(comment, tag); - strcat(comment, "="); - strcat(comment, contents); - vorbis_comment_add(vc, comment); -} - -/* This is more or less the same as strncasecmp - but that doesn't exist - * everywhere, and this is a fairly trivial function, so we include it */ -static int tagcompare(const char *s1, const char *s2, int n){ - int c=0; - while(c < n){ - if(toupper(s1[c]) != toupper(s2[c])) - return !0; - c++; - } - return 0; -} - -char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count){ - long i; - int found = 0; - int taglen = strlen(tag)+1; /* +1 for the = we append */ - char *fulltag = (char*)alloca(taglen+ 1); - - strcpy(fulltag, tag); - strcat(fulltag, "="); - - for(i=0;icomments;i++){ - if(!tagcompare(vc->user_comments[i], fulltag, taglen)){ - if(count == found) - /* We return a pointer to the data, not a copy */ - return vc->user_comments[i] + taglen; - else - found++; - } - } - return NULL; /* didn't find anything */ -} - -int vorbis_comment_query_count(vorbis_comment *vc, char *tag){ - int i,count=0; - int taglen = strlen(tag)+1; /* +1 for the = we append */ - char *fulltag = (char*)alloca(taglen+1); - strcpy(fulltag,tag); - strcat(fulltag, "="); - - for(i=0;icomments;i++){ - if(!tagcompare(vc->user_comments[i], fulltag, taglen)) - count++; - } - - return count; -} - -void vorbis_comment_clear(vorbis_comment *vc){ - if(vc){ - long i; - for(i=0;icomments;i++) - if(vc->user_comments[i])_ogg_free(vc->user_comments[i]); - if(vc->user_comments)_ogg_free(vc->user_comments); - if(vc->comment_lengths)_ogg_free(vc->comment_lengths); - if(vc->vendor)_ogg_free(vc->vendor); - } - memset(vc,0,sizeof(*vc)); -} - -/* blocksize 0 is guaranteed to be short, 1 is guarantted to be long. - They may be equal, but short will never ge greater than long */ -int vorbis_info_blocksize(vorbis_info *vi,int zo){ - codec_setup_info *ci = (codec_setup_info*)vi->codec_setup; - return ci ? ci->blocksizes[zo] : -1; -} - -/* used by synthesis, which has a full, alloced vi */ -void vorbis_info_init(vorbis_info *vi){ - memset(vi,0,sizeof(*vi)); - vi->codec_setup=_ogg_calloc(1,sizeof(codec_setup_info)); -} - -void vorbis_info_clear(vorbis_info *vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int i; - - if(ci){ - - for(i=0;imodes;i++) - if(ci->mode_param[i])_ogg_free(ci->mode_param[i]); - - for(i=0;imaps;i++) /* unpack does the range checking */ - _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]); - - for(i=0;ifloors;i++) /* unpack does the range checking */ - _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]); - - for(i=0;iresidues;i++) /* unpack does the range checking */ - _residue_P[ci->residue_type[i]]->free_info(ci->residue_param[i]); - - for(i=0;ibooks;i++){ - if(ci->book_param[i]){ - /* knows if the book was not alloced */ - vorbis_staticbook_destroy(ci->book_param[i]); - } - if(ci->fullbooks) - vorbis_book_clear(ci->fullbooks+i); - } - if(ci->fullbooks) - _ogg_free(ci->fullbooks); - - for(i=0;ipsys;i++) - _vi_psy_free(ci->psy_param[i]); - - _ogg_free(ci); - } - - memset(vi,0,sizeof(*vi)); -} - -/* Header packing/unpacking ********************************************/ - -static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - if(!ci)return(OV_EFAULT); - - vi->version=oggpack_read(opb,32); - if(vi->version!=0)return(OV_EVERSION); - - vi->channels=oggpack_read(opb,8); - vi->rate=oggpack_read(opb,32); - - vi->bitrate_upper=oggpack_read(opb,32); - vi->bitrate_nominal=oggpack_read(opb,32); - vi->bitrate_lower=oggpack_read(opb,32); - - ci->blocksizes[0]=1<blocksizes[1]=1<rate<1)goto err_out; - if(vi->channels<1)goto err_out; - if(ci->blocksizes[0]<8)goto err_out; - if(ci->blocksizes[1]blocksizes[0])goto err_out; - - if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ - - return(0); - err_out: - vorbis_info_clear(vi); - return(OV_EBADHEADER); -} - -static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ - int i; - int vendorlen=oggpack_read(opb,32); - if(vendorlen<0)goto err_out; - vc->vendor=(char*)_ogg_calloc(vendorlen+1,1); - _v_readstring(opb,vc->vendor,vendorlen); - vc->comments=oggpack_read(opb,32); - if(vc->comments<0)goto err_out; - vc->user_comments=(char**)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments)); - vc->comment_lengths=(int*)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths)); - - for(i=0;icomments;i++){ - int len=oggpack_read(opb,32); - if(len<0)goto err_out; - vc->comment_lengths[i]=len; - vc->user_comments[i]=(char*)_ogg_calloc(len+1,1); - _v_readstring(opb,vc->user_comments[i],len); - } - if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ - - return(0); - err_out: - vorbis_comment_clear(vc); - return(OV_EBADHEADER); -} - -/* all of the real encoding details are here. The modes, books, - everything */ -static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int i; - if(!ci)return(OV_EFAULT); - - /* codebooks */ - ci->books=oggpack_read(opb,8)+1; - /*ci->book_param=_ogg_calloc(ci->books,sizeof(*ci->book_param));*/ - for(i=0;ibooks;i++){ - ci->book_param[i]=(static_codebook*)_ogg_calloc(1,sizeof(*ci->book_param[i])); - if(vorbis_staticbook_unpack(opb,ci->book_param[i]))goto err_out; - } - - /* time backend settings; hooks are unused */ - { - int times=oggpack_read(opb,6)+1; - for(i=0;i=VI_TIMEB)goto err_out; - } - } - - /* floor backend settings */ - ci->floors=oggpack_read(opb,6)+1; - /*ci->floor_type=_ogg_malloc(ci->floors*sizeof(*ci->floor_type));*/ - /*ci->floor_param=_ogg_calloc(ci->floors,sizeof(void *));*/ - for(i=0;ifloors;i++){ - ci->floor_type[i]=oggpack_read(opb,16); - if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out; - ci->floor_param[i]=_floor_P[ci->floor_type[i]]->unpack(vi,opb); - if(!ci->floor_param[i])goto err_out; - } - - /* residue backend settings */ - ci->residues=oggpack_read(opb,6)+1; - /*ci->residue_type=_ogg_malloc(ci->residues*sizeof(*ci->residue_type));*/ - /*ci->residue_param=_ogg_calloc(ci->residues,sizeof(void *));*/ - for(i=0;iresidues;i++){ - ci->residue_type[i]=oggpack_read(opb,16); - if(ci->residue_type[i]<0 || ci->residue_type[i]>=VI_RESB)goto err_out; - ci->residue_param[i]=_residue_P[ci->residue_type[i]]->unpack(vi,opb); - if(!ci->residue_param[i])goto err_out; - } - - /* map backend settings */ - ci->maps=oggpack_read(opb,6)+1; - /*ci->map_type=_ogg_malloc(ci->maps*sizeof(*ci->map_type));*/ - /*ci->map_param=_ogg_calloc(ci->maps,sizeof(void *));*/ - for(i=0;imaps;i++){ - ci->map_type[i]=oggpack_read(opb,16); - if(ci->map_type[i]<0 || ci->map_type[i]>=VI_MAPB)goto err_out; - ci->map_param[i]=_mapping_P[ci->map_type[i]]->unpack(vi,opb); - if(!ci->map_param[i])goto err_out; - } - - /* mode settings */ - ci->modes=oggpack_read(opb,6)+1; - /*vi->mode_param=_ogg_calloc(vi->modes,sizeof(void *));*/ - for(i=0;imodes;i++){ - ci->mode_param[i]=(vorbis_info_mode*)_ogg_calloc(1,sizeof(*ci->mode_param[i])); - ci->mode_param[i]->blockflag=oggpack_read(opb,1); - ci->mode_param[i]->windowtype=oggpack_read(opb,16); - ci->mode_param[i]->transformtype=oggpack_read(opb,16); - ci->mode_param[i]->mapping=oggpack_read(opb,8); - - if(ci->mode_param[i]->windowtype>=VI_WINDOWB)goto err_out; - if(ci->mode_param[i]->transformtype>=VI_WINDOWB)goto err_out; - if(ci->mode_param[i]->mapping>=ci->maps)goto err_out; - } - - if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */ - - return(0); - err_out: - vorbis_info_clear(vi); - return(OV_EBADHEADER); -} - -/* The Vorbis header is in three packets; the initial small packet in - the first page that identifies basic parameters, a second packet - with bitstream comments and a third packet that holds the - codebook. */ - -int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){ - oggpack_buffer opb; - - if(op){ - oggpack_readinit(&opb,op->packet,op->bytes); - - /* Which of the three types of header is this? */ - /* Also verify header-ness, vorbis */ - { - char buffer[6]; - int packtype=oggpack_read(&opb,8); - memset(buffer,0,6); - _v_readstring(&opb,buffer,6); - if(memcmp(buffer,"vorbis",6)){ - /* not a vorbis header */ - return(OV_ENOTVORBIS); - } - switch(packtype){ - case 0x01: /* least significant *bit* is read first */ - if(!op->b_o_s){ - /* Not the initial packet */ - return(OV_EBADHEADER); - } - if(vi->rate!=0){ - /* previously initialized info header */ - return(OV_EBADHEADER); - } - - return(_vorbis_unpack_info(vi,&opb)); - - case 0x03: /* least significant *bit* is read first */ - if(vi->rate==0){ - /* um... we didn't get the initial header */ - return(OV_EBADHEADER); - } - - return(_vorbis_unpack_comment(vc,&opb)); - - case 0x05: /* least significant *bit* is read first */ - if(vi->rate==0 || vc->vendor==NULL){ - /* um... we didn;t get the initial header or comments yet */ - return(OV_EBADHEADER); - } - - return(_vorbis_unpack_books(vi,&opb)); - - default: - /* Not a valid vorbis header type */ - return(OV_EBADHEADER); - break; - } - } - } - return(OV_EBADHEADER); -} - -/* pack side **********************************************************/ - -static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - if(!ci)return(OV_EFAULT); - - /* preamble */ - oggpack_write(opb,0x01,8); - _v_writestring(opb,"vorbis", 6); - - /* basic information about the stream */ - oggpack_write(opb,0x00,32); - oggpack_write(opb,vi->channels,8); - oggpack_write(opb,vi->rate,32); - - oggpack_write(opb,vi->bitrate_upper,32); - oggpack_write(opb,vi->bitrate_nominal,32); - oggpack_write(opb,vi->bitrate_lower,32); - - oggpack_write(opb,ilog2(ci->blocksizes[0]),4); - oggpack_write(opb,ilog2(ci->blocksizes[1]),4); - oggpack_write(opb,1,1); - - return(0); -} - -static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){ - char temp[]="Xiph.Org libVorbis I 20050304"; - int bytes = strlen(temp); - - /* preamble */ - oggpack_write(opb,0x03,8); - _v_writestring(opb,"vorbis", 6); - - /* vendor */ - oggpack_write(opb,bytes,32); - _v_writestring(opb,temp, bytes); - - /* comments */ - - oggpack_write(opb,vc->comments,32); - if(vc->comments){ - int i; - for(i=0;icomments;i++){ - if(vc->user_comments[i]){ - oggpack_write(opb,vc->comment_lengths[i],32); - _v_writestring(opb,vc->user_comments[i], vc->comment_lengths[i]); - }else{ - oggpack_write(opb,0,32); - } - } - } - oggpack_write(opb,1,1); - - return(0); -} - -static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int i; - if(!ci)return(OV_EFAULT); - - oggpack_write(opb,0x05,8); - _v_writestring(opb,"vorbis", 6); - - /* books */ - oggpack_write(opb,ci->books-1,8); - for(i=0;ibooks;i++) - if(vorbis_staticbook_pack(ci->book_param[i],opb))goto err_out; - - /* times; hook placeholders */ - oggpack_write(opb,0,6); - oggpack_write(opb,0,16); - - /* floors */ - oggpack_write(opb,ci->floors-1,6); - for(i=0;ifloors;i++){ - oggpack_write(opb,ci->floor_type[i],16); - if(_floor_P[ci->floor_type[i]]->pack) - _floor_P[ci->floor_type[i]]->pack(ci->floor_param[i],opb); - else - goto err_out; - } - - /* residues */ - oggpack_write(opb,ci->residues-1,6); - for(i=0;iresidues;i++){ - oggpack_write(opb,ci->residue_type[i],16); - _residue_P[ci->residue_type[i]]->pack(ci->residue_param[i],opb); - } - - /* maps */ - oggpack_write(opb,ci->maps-1,6); - for(i=0;imaps;i++){ - oggpack_write(opb,ci->map_type[i],16); - _mapping_P[ci->map_type[i]]->pack(vi,ci->map_param[i],opb); - } - - /* modes */ - oggpack_write(opb,ci->modes-1,6); - for(i=0;imodes;i++){ - oggpack_write(opb,ci->mode_param[i]->blockflag,1); - oggpack_write(opb,ci->mode_param[i]->windowtype,16); - oggpack_write(opb,ci->mode_param[i]->transformtype,16); - oggpack_write(opb,ci->mode_param[i]->mapping,8); - } - oggpack_write(opb,1,1); - - return(0); -err_out: - return(-1); -} - -int vorbis_commentheader_out(vorbis_comment *vc, - ogg_packet *op){ - - oggpack_buffer opb; - - oggpack_writeinit(&opb); - if(_vorbis_pack_comment(&opb,vc)) return OV_EIMPL; - - op->packet = (unsigned char*) _ogg_malloc(oggpack_bytes(&opb)); - memcpy(op->packet, opb.buffer, oggpack_bytes(&opb)); - - op->bytes=oggpack_bytes(&opb); - op->b_o_s=0; - op->e_o_s=0; - op->granulepos=0; - op->packetno=1; - - return 0; -} - -int vorbis_analysis_headerout(vorbis_dsp_state *v, - vorbis_comment *vc, - ogg_packet *op, - ogg_packet *op_comm, - ogg_packet *op_code){ - int ret=OV_EIMPL; - vorbis_info *vi=v->vi; - oggpack_buffer opb; - private_state *b=(private_state*)v->backend_state; - - if(!b){ - ret=OV_EFAULT; - goto err_out; - } - - /* first header packet **********************************************/ - - oggpack_writeinit(&opb); - if(_vorbis_pack_info(&opb,vi))goto err_out; - - /* build the packet */ - if(b->header)_ogg_free(b->header); - b->header=(unsigned char*) _ogg_malloc(oggpack_bytes(&opb)); - memcpy(b->header,opb.buffer,oggpack_bytes(&opb)); - op->packet=b->header; - op->bytes=oggpack_bytes(&opb); - op->b_o_s=1; - op->e_o_s=0; - op->granulepos=0; - op->packetno=0; - - /* second header packet (comments) **********************************/ - - oggpack_reset(&opb); - if(_vorbis_pack_comment(&opb,vc))goto err_out; - - if(b->header1)_ogg_free(b->header1); - b->header1=(unsigned char*) _ogg_malloc(oggpack_bytes(&opb)); - memcpy(b->header1,opb.buffer,oggpack_bytes(&opb)); - op_comm->packet=b->header1; - op_comm->bytes=oggpack_bytes(&opb); - op_comm->b_o_s=0; - op_comm->e_o_s=0; - op_comm->granulepos=0; - op_comm->packetno=1; - - /* third header packet (modes/codebooks) ****************************/ - - oggpack_reset(&opb); - if(_vorbis_pack_books(&opb,vi))goto err_out; - - if(b->header2)_ogg_free(b->header2); - b->header2=(unsigned char*) _ogg_malloc(oggpack_bytes(&opb)); - memcpy(b->header2,opb.buffer,oggpack_bytes(&opb)); - op_code->packet=b->header2; - op_code->bytes=oggpack_bytes(&opb); - op_code->b_o_s=0; - op_code->e_o_s=0; - op_code->granulepos=0; - op_code->packetno=2; - - oggpack_writeclear(&opb); - return(0); - err_out: - oggpack_writeclear(&opb); - memset(op,0,sizeof(*op)); - memset(op_comm,0,sizeof(*op_comm)); - memset(op_code,0,sizeof(*op_code)); - - if(b->header)_ogg_free(b->header); - if(b->header1)_ogg_free(b->header1); - if(b->header2)_ogg_free(b->header2); - b->header=NULL; - b->header1=NULL; - b->header2=NULL; - return(ret); -} - -double vorbis_granule_time(vorbis_dsp_state *v,ogg_int64_t granulepos){ - if(granulepos>=0) - return((double)granulepos/v->vi->rate); - return(-1); -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup.c deleted file mode 100644 index f9d058f1bf..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup.c +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: lookup based functions - last mod: $Id: lookup.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include "lookup.h" -#include "lookup_data.h" -#include "os.h" -#include "misc.h" - -#ifdef FLOAT_LOOKUP - -/* interpolated lookup based cos function, domain 0 to PI only */ -float vorbis_coslook(float a){ - double d=a*(.31830989*(float)COS_LOOKUP_SZ); - int i=vorbis_ftoi(d-.5); - - return COS_LOOKUP[i]+ (d-i)*(COS_LOOKUP[i+1]-COS_LOOKUP[i]); -} - -/* interpolated 1./sqrt(p) where .5 <= p < 1. */ -float vorbis_invsqlook(float a){ - double d=a*(2.f*(float)INVSQ_LOOKUP_SZ)-(float)INVSQ_LOOKUP_SZ; - int i=vorbis_ftoi(d-.5f); - return INVSQ_LOOKUP[i]+ (d-i)*(INVSQ_LOOKUP[i+1]-INVSQ_LOOKUP[i]); -} - -/* interpolated 1./sqrt(p) where .5 <= p < 1. */ -float vorbis_invsq2explook(int a){ - return INVSQ2EXP_LOOKUP[a-INVSQ2EXP_LOOKUP_MIN]; -} - -#include -/* interpolated lookup based fromdB function, domain -140dB to 0dB only */ -float vorbis_fromdBlook(float a){ - int i=vorbis_ftoi(a*((float)(-(1<=(FROMdB_LOOKUP_SZ<>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]); -} - -#endif - -#ifdef INT_LOOKUP -/* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in - 16.16 format - - returns in m.8 format */ -long vorbis_invsqlook_i(long a,long e){ - long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1); - long d=(a&INVSQ_LOOKUP_I_MASK)<<(16-INVSQ_LOOKUP_I_SHIFT); /* 0.16 */ - long val=INVSQ_LOOKUP_I[i]- /* 1.16 */ - (((INVSQ_LOOKUP_I[i]-INVSQ_LOOKUP_I[i+1])* /* 0.16 */ - d)>>16); /* result 1.16 */ - - e+=32; - if(e&1)val=(val*5792)>>13; /* multiply val by 1/sqrt(2) */ - e=(e>>1)-8; - - return(val>>e); -} - -/* interpolated lookup based fromdB function, domain -140dB to 0dB only */ -/* a is in n.12 format */ -float vorbis_fromdBlook_i(long a){ - int i=(-a)>>(12-FROMdB2_SHIFT); - return (i<0)?1.f: - ((i>=(FROMdB_LOOKUP_SZ<>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]); -} - -/* interpolated lookup based cos function, domain 0 to PI only */ -/* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */ -long vorbis_coslook_i(long a){ - int i=a>>COS_LOOKUP_I_SHIFT; - int d=a&COS_LOOKUP_I_MASK; - return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>> - COS_LOOKUP_I_SHIFT); -} - -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup.h deleted file mode 100644 index 52c797d251..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup.h +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: lookup based functions - last mod: $Id: lookup.h,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_LOOKUP_H_ - -#ifdef FLOAT_LOOKUP -extern float vorbis_coslook(float a); -extern float vorbis_invsqlook(float a); -extern float vorbis_invsq2explook(int a); -extern float vorbis_fromdBlook(float a); -#endif -#ifdef INT_LOOKUP -extern long vorbis_invsqlook_i(long a,long e); -extern long vorbis_coslook_i(long a); -extern float vorbis_fromdBlook_i(long a); -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup_data.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup_data.h deleted file mode 100644 index 20c4e2923b..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookup_data.h +++ /dev/null @@ -1,189 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: lookup data; generated by lookups.pl; edit there - last mod: $Id: lookup_data.h,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_LOOKUP_DATA_H_ - -#ifdef FLOAT_LOOKUP -#define COS_LOOKUP_SZ 128 -static float COS_LOOKUP[COS_LOOKUP_SZ+1]={ - +1.0000000000000f,+0.9996988186962f,+0.9987954562052f,+0.9972904566787f, - +0.9951847266722f,+0.9924795345987f,+0.9891765099648f,+0.9852776423889f, - +0.9807852804032f,+0.9757021300385f,+0.9700312531945f,+0.9637760657954f, - +0.9569403357322f,+0.9495281805930f,+0.9415440651830f,+0.9329927988347f, - +0.9238795325113f,+0.9142097557035f,+0.9039892931234f,+0.8932243011955f, - +0.8819212643484f,+0.8700869911087f,+0.8577286100003f,+0.8448535652497f, - +0.8314696123025f,+0.8175848131516f,+0.8032075314806f,+0.7883464276266f, - +0.7730104533627f,+0.7572088465065f,+0.7409511253550f,+0.7242470829515f, - +0.7071067811865f,+0.6895405447371f,+0.6715589548470f,+0.6531728429538f, - +0.6343932841636f,+0.6152315905806f,+0.5956993044924f,+0.5758081914178f, - +0.5555702330196f,+0.5349976198871f,+0.5141027441932f,+0.4928981922298f, - +0.4713967368260f,+0.4496113296546f,+0.4275550934303f,+0.4052413140050f, - +0.3826834323651f,+0.3598950365350f,+0.3368898533922f,+0.3136817403989f, - +0.2902846772545f,+0.2667127574749f,+0.2429801799033f,+0.2191012401569f, - +0.1950903220161f,+0.1709618887603f,+0.1467304744554f,+0.1224106751992f, - +0.0980171403296f,+0.0735645635997f,+0.0490676743274f,+0.0245412285229f, - +0.0000000000000f,-0.0245412285229f,-0.0490676743274f,-0.0735645635997f, - -0.0980171403296f,-0.1224106751992f,-0.1467304744554f,-0.1709618887603f, - -0.1950903220161f,-0.2191012401569f,-0.2429801799033f,-0.2667127574749f, - -0.2902846772545f,-0.3136817403989f,-0.3368898533922f,-0.3598950365350f, - -0.3826834323651f,-0.4052413140050f,-0.4275550934303f,-0.4496113296546f, - -0.4713967368260f,-0.4928981922298f,-0.5141027441932f,-0.5349976198871f, - -0.5555702330196f,-0.5758081914178f,-0.5956993044924f,-0.6152315905806f, - -0.6343932841636f,-0.6531728429538f,-0.6715589548470f,-0.6895405447371f, - -0.7071067811865f,-0.7242470829515f,-0.7409511253550f,-0.7572088465065f, - -0.7730104533627f,-0.7883464276266f,-0.8032075314806f,-0.8175848131516f, - -0.8314696123025f,-0.8448535652497f,-0.8577286100003f,-0.8700869911087f, - -0.8819212643484f,-0.8932243011955f,-0.9039892931234f,-0.9142097557035f, - -0.9238795325113f,-0.9329927988347f,-0.9415440651830f,-0.9495281805930f, - -0.9569403357322f,-0.9637760657954f,-0.9700312531945f,-0.9757021300385f, - -0.9807852804032f,-0.9852776423889f,-0.9891765099648f,-0.9924795345987f, - -0.9951847266722f,-0.9972904566787f,-0.9987954562052f,-0.9996988186962f, - -1.0000000000000f, -}; - -#define INVSQ_LOOKUP_SZ 32 -static float INVSQ_LOOKUP[INVSQ_LOOKUP_SZ+1]={ - 1.414213562373f,1.392621247646f,1.371988681140f,1.352246807566f, - 1.333333333333f,1.315191898443f,1.297771369046f,1.281025230441f, - 1.264911064067f,1.249390095109f,1.234426799697f,1.219988562661f, - 1.206045378311f,1.192569588000f,1.179535649239f,1.166919931983f, - 1.154700538379f,1.142857142857f,1.131370849898f,1.120224067222f, - 1.109400392450f,1.098884511590f,1.088662107904f,1.078719779941f, - 1.069044967650f,1.059625885652f,1.050451462878f,1.041511287847f, - 1.032795558989f,1.024295039463f,1.016001016002f,1.007905261358f, - 1.000000000000f, -}; - -#define INVSQ2EXP_LOOKUP_MIN (-32) -#define INVSQ2EXP_LOOKUP_MAX 32 -static float INVSQ2EXP_LOOKUP[INVSQ2EXP_LOOKUP_MAX-\ - INVSQ2EXP_LOOKUP_MIN+1]={ - 65536.f, 46340.95001f, 32768.f, 23170.47501f, - 16384.f, 11585.2375f, 8192.f, 5792.618751f, - 4096.f, 2896.309376f, 2048.f, 1448.154688f, - 1024.f, 724.0773439f, 512.f, 362.038672f, - 256.f, 181.019336f, 128.f, 90.50966799f, - 64.f, 45.254834f, 32.f, 22.627417f, - 16.f, 11.3137085f, 8.f, 5.656854249f, - 4.f, 2.828427125f, 2.f, 1.414213562f, - 1.f, 0.7071067812f, 0.5f, 0.3535533906f, - 0.25f, 0.1767766953f, 0.125f, 0.08838834765f, - 0.0625f, 0.04419417382f, 0.03125f, 0.02209708691f, - 0.015625f, 0.01104854346f, 0.0078125f, 0.005524271728f, - 0.00390625f, 0.002762135864f, 0.001953125f, 0.001381067932f, - 0.0009765625f, 0.000690533966f, 0.00048828125f, 0.000345266983f, - 0.000244140625f,0.0001726334915f,0.0001220703125f,8.631674575e-05f, - 6.103515625e-05f,4.315837288e-05f,3.051757812e-05f,2.157918644e-05f, - 1.525878906e-05f, -}; - -#endif - -#define FROMdB_LOOKUP_SZ 35 -#define FROMdB2_LOOKUP_SZ 32 -#define FROMdB_SHIFT 5 -#define FROMdB2_SHIFT 3 -#define FROMdB2_MASK 31 -static float FROMdB_LOOKUP[FROMdB_LOOKUP_SZ]={ - 1.f, 0.6309573445f, 0.3981071706f, 0.2511886432f, - 0.1584893192f, 0.1f, 0.06309573445f, 0.03981071706f, - 0.02511886432f, 0.01584893192f, 0.01f, 0.006309573445f, - 0.003981071706f, 0.002511886432f, 0.001584893192f, 0.001f, - 0.0006309573445f,0.0003981071706f,0.0002511886432f,0.0001584893192f, - 0.0001f,6.309573445e-05f,3.981071706e-05f,2.511886432e-05f, - 1.584893192e-05f, 1e-05f,6.309573445e-06f,3.981071706e-06f, - 2.511886432e-06f,1.584893192e-06f, 1e-06f,6.309573445e-07f, - 3.981071706e-07f,2.511886432e-07f,1.584893192e-07f, -}; - -static float FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ]={ - 0.9928302478f, 0.9786445908f, 0.9646616199f, 0.9508784391f, - 0.9372921937f, 0.92390007f, 0.9106992942f, 0.8976871324f, - 0.8848608897f, 0.8722179097f, 0.8597555737f, 0.8474713009f, - 0.835362547f, 0.8234268041f, 0.8116616003f, 0.8000644989f, - 0.7886330981f, 0.7773650302f, 0.7662579617f, 0.755309592f, - 0.7445176537f, 0.7338799116f, 0.7233941627f, 0.7130582353f, - 0.7028699885f, 0.6928273125f, 0.6829281272f, 0.6731703824f, - 0.6635520573f, 0.6540711597f, 0.6447257262f, 0.6355138211f, -}; - -#ifdef INT_LOOKUP - -#define INVSQ_LOOKUP_I_SHIFT 10 -#define INVSQ_LOOKUP_I_MASK 1023 -static long INVSQ_LOOKUP_I[64+1]={ - 92682l, 91966l, 91267l, 90583l, - 89915l, 89261l, 88621l, 87995l, - 87381l, 86781l, 86192l, 85616l, - 85051l, 84497l, 83953l, 83420l, - 82897l, 82384l, 81880l, 81385l, - 80899l, 80422l, 79953l, 79492l, - 79039l, 78594l, 78156l, 77726l, - 77302l, 76885l, 76475l, 76072l, - 75674l, 75283l, 74898l, 74519l, - 74146l, 73778l, 73415l, 73058l, - 72706l, 72359l, 72016l, 71679l, - 71347l, 71019l, 70695l, 70376l, - 70061l, 69750l, 69444l, 69141l, - 68842l, 68548l, 68256l, 67969l, - 67685l, 67405l, 67128l, 66855l, - 66585l, 66318l, 66054l, 65794l, - 65536l, -}; - -#define COS_LOOKUP_I_SHIFT 9 -#define COS_LOOKUP_I_MASK 511 -#define COS_LOOKUP_I_SZ 128 -static long COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={ - 16384l, 16379l, 16364l, 16340l, - 16305l, 16261l, 16207l, 16143l, - 16069l, 15986l, 15893l, 15791l, - 15679l, 15557l, 15426l, 15286l, - 15137l, 14978l, 14811l, 14635l, - 14449l, 14256l, 14053l, 13842l, - 13623l, 13395l, 13160l, 12916l, - 12665l, 12406l, 12140l, 11866l, - 11585l, 11297l, 11003l, 10702l, - 10394l, 10080l, 9760l, 9434l, - 9102l, 8765l, 8423l, 8076l, - 7723l, 7366l, 7005l, 6639l, - 6270l, 5897l, 5520l, 5139l, - 4756l, 4370l, 3981l, 3590l, - 3196l, 2801l, 2404l, 2006l, - 1606l, 1205l, 804l, 402l, - 0l, -401l, -803l, -1204l, - -1605l, -2005l, -2403l, -2800l, - -3195l, -3589l, -3980l, -4369l, - -4755l, -5138l, -5519l, -5896l, - -6269l, -6638l, -7004l, -7365l, - -7722l, -8075l, -8422l, -8764l, - -9101l, -9433l, -9759l, -10079l, - -10393l, -10701l, -11002l, -11296l, - -11584l, -11865l, -12139l, -12405l, - -12664l, -12915l, -13159l, -13394l, - -13622l, -13841l, -14052l, -14255l, - -14448l, -14634l, -14810l, -14977l, - -15136l, -15285l, -15425l, -15556l, - -15678l, -15790l, -15892l, -15985l, - -16068l, -16142l, -16206l, -16260l, - -16304l, -16339l, -16363l, -16378l, - -16383l, -}; - -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookups.pl b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookups.pl deleted file mode 100644 index 86a38a26aa..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lookups.pl +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/perl -print <<'EOD'; -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: lookup data; generated by lookups.pl; edit there - last mod: $Id: lookups.pl,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_LOOKUP_DATA_H_ - -#ifdef FLOAT_LOOKUP -EOD - -$cos_sz=128; -$invsq_sz=32; -$invsq2exp_min=-32; -$invsq2exp_max=32; - -$fromdB_sz=35; -$fromdB_shift=5; -$fromdB2_shift=3; - -$invsq_i_shift=10; -$cos_i_shift=9; -$delta_shift=6; - -print "#define COS_LOOKUP_SZ $cos_sz\n"; -print "static float COS_LOOKUP[COS_LOOKUP_SZ+1]={\n"; - -for($i=0;$i<=$cos_sz;){ - print "\t"; - for($j=0;$j<4 && $i<=$cos_sz;$j++){ - printf "%+.13f,", cos(3.14159265358979323846*($i++)/$cos_sz) ; - } - print "\n"; -} -print "};\n\n"; - -print "#define INVSQ_LOOKUP_SZ $invsq_sz\n"; -print "static float INVSQ_LOOKUP[INVSQ_LOOKUP_SZ+1]={\n"; - -for($i=0;$i<=$invsq_sz;){ - print "\t"; - for($j=0;$j<4 && $i<=$invsq_sz;$j++){ - my$indexmap=$i++/$invsq_sz*.5+.5; - printf "%.12f,", 1./sqrt($indexmap); - } - print "\n"; -} -print "};\n\n"; - -print "#define INVSQ2EXP_LOOKUP_MIN $invsq2exp_min\n"; -print "#define INVSQ2EXP_LOOKUP_MAX $invsq2exp_max\n"; -print "static float INVSQ2EXP_LOOKUP[INVSQ2EXP_LOOKUP_MAX-\\\n". - " INVSQ2EXP_LOOKUP_MIN+1]={\n"; - -for($i=$invsq2exp_min;$i<=$invsq2exp_max;){ - print "\t"; - for($j=0;$j<4 && $i<=$invsq2exp_max;$j++){ - printf "%15.10g,", 2**($i++*-.5); - } - print "\n"; -} -print "};\n\n#endif\n\n"; - - -# 0 to -140 dB -$fromdB2_sz=1<<$fromdB_shift; -$fromdB_gran=1<<($fromdB_shift-$fromdB2_shift); -print "#define FROMdB_LOOKUP_SZ $fromdB_sz\n"; -print "#define FROMdB2_LOOKUP_SZ $fromdB2_sz\n"; -print "#define FROMdB_SHIFT $fromdB_shift\n"; -print "#define FROMdB2_SHIFT $fromdB2_shift\n"; -print "#define FROMdB2_MASK ".((1<<$fromdB_shift)-1)."\n"; - -print "static float FROMdB_LOOKUP[FROMdB_LOOKUP_SZ]={\n"; - -for($i=0;$i<$fromdB_sz;){ - print "\t"; - for($j=0;$j<4 && $i<$fromdB_sz;$j++){ - printf "%15.10g,", 10**(.05*(-$fromdB_gran*$i++)); - } - print "\n"; -} -print "};\n\n"; - -print "static float FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ]={\n"; - -for($i=0;$i<$fromdB2_sz;){ - print "\t"; - for($j=0;$j<4 && $i<$fromdB_sz;$j++){ - printf "%15.10g,", 10**(.05*(-$fromdB_gran/$fromdB2_sz*(.5+$i++))); - } - print "\n"; -} -print "};\n\n#ifdef INT_LOOKUP\n\n"; - - -$iisz=0x10000>>$invsq_i_shift; -print "#define INVSQ_LOOKUP_I_SHIFT $invsq_i_shift\n"; -print "#define INVSQ_LOOKUP_I_MASK ".(0x0ffff>>(16-$invsq_i_shift))."\n"; -print "static long INVSQ_LOOKUP_I[$iisz+1]={\n"; -for($i=0;$i<=$iisz;){ - print "\t"; - for($j=0;$j<4 && $i<=$iisz;$j++){ - my$indexmap=$i++/$iisz*.5+.5; - printf "%8d,", int(1./sqrt($indexmap)*65536.+.5); - } - print "\n"; -} -print "};\n\n"; - -$cisz=0x10000>>$cos_i_shift; -print "#define COS_LOOKUP_I_SHIFT $cos_i_shift\n"; -print "#define COS_LOOKUP_I_MASK ".(0x0ffff>>(16-$cos_i_shift))."\n"; -print "#define COS_LOOKUP_I_SZ $cisz\n"; -print "static long COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={\n"; - -for($i=0;$i<=$cisz;){ - print "\t"; - for($j=0;$j<4 && $i<=$cisz;$j++){ - printf "%8d,", int(cos(3.14159265358979323846*($i++)/$cos_sz)*16384.+.5) ; - } - print "\n"; -} -print "};\n\n"; - - -print "#endif\n\n#endif\n"; - - diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lpc.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lpc.c deleted file mode 100644 index b2c100e806..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/lpc.c +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: LPC low level routines - last mod: $Id: lpc.c,v 1.1 2007/06/07 17:49:17 jules_rms Exp $ - - ********************************************************************/ - -/* Some of these routines (autocorrelator, LPC coefficient estimator) - are derived from code written by Jutta Degener and Carsten Bormann; - thus we include their copyright below. The entirety of this file - is freely redistributable on the condition that both of these - copyright notices are preserved without modification. */ - -/* Preserved Copyright: *********************************************/ - -/* Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann, -Technische Universita"t Berlin - -Any use of this software is permitted provided that this notice is not -removed and that neither the authors nor the Technische Universita"t -Berlin are deemed to have made any representations as to the -suitability of this software for any purpose nor are held responsible -for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR -THIS SOFTWARE. - -As a matter of courtesy, the authors request to be informed about uses -this software has found, about bugs in this software, and about any -improvements that may be of general interest. - -Berlin, 28.11.1994 -Jutta Degener -Carsten Bormann - -*********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include "os.h" -#include "smallft.h" -#include "lpc.h" -#include "scales.h" -#include "misc.h" - -/* Autocorrelation LPC coeff generation algorithm invented by - N. Levinson in 1947, modified by J. Durbin in 1959. */ - -/* Input : n elements of time doamin data - Output: m lpc coefficients, excitation energy */ - -float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){ - double *aut=(double*)alloca(sizeof(*aut)*(m+1)); - double *lpc=(double*)alloca(sizeof(*lpc)*(m)); - double error; - int i,j; - - /* autocorrelation, p+1 lag coefficients */ - j=m+1; - while(j--){ - double d=0; /* double needed for accumulator depth */ - for(i=j;i -#include -#include -#include "lsp.h" -#include "os.h" -#include "misc.h" -#include "lookup.h" -#include "scales.h" - -/* three possible LSP to f curve functions; the exact computation - (float), a lookup based float implementation, and an integer - implementation. The float lookup is likely the optimal choice on - any machine with an FPU. The integer implementation is *not* fixed - point (due to the need for a large dynamic range and thus a - seperately tracked exponent) and thus much more complex than the - relatively simple float implementations. It's mostly for future - work on a fully fixed point implementation for processors like the - ARM family. */ - -/* undefine both for the 'old' but more precise implementation */ -#define FLOAT_LOOKUP -#undef INT_LOOKUP - -#ifdef FLOAT_LOOKUP -#include "lookup.c" /* catch this in the build system; we #include for - compilers (like gcc) that can't inline across - modules */ - -/* side effect: changes *lsp to cosines of lsp */ -void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m, - float amp,float ampoffset){ - int i; - float wdel=M_PI/ln; - vorbis_fpu_control fpu; - (void) fpu; // to avoid an unused variable warning - - vorbis_fpu_setround(&fpu); - for(i=0;i>1; - - do{ - q*=ftmp[0]-w; - p*=ftmp[1]-w; - ftmp+=2; - }while(--c); - - if(m&1){ - /* odd order filter; slightly assymetric */ - /* the last coefficient */ - q*=ftmp[0]-w; - q*=q; - p*=p*(1.f-w*w); - }else{ - /* even order filter; still symmetric */ - q*=q*(1.f+w); - p*=p*(1.f-w); - } - - q=frexp(p+q,&qexp); - q=vorbis_fromdBlook(amp* - vorbis_invsqlook(q)* - vorbis_invsq2explook(qexp+m)- - ampoffset); - - do{ - curve[i++]*=q; - }while(map[i]==k); - } - vorbis_fpu_restore(fpu); -} - -#else - -#ifdef INT_LOOKUP -#include "lookup.c" /* catch this in the build system; we #include for - compilers (like gcc) that can't inline across - modules */ - -static int MLOOP_1[64]={ - 0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13, - 14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, -}; - -static int MLOOP_2[64]={ - 0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7, - 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8, - 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, - 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, -}; - -static int MLOOP_3[8]={0,1,2,2,3,3,3,3}; - - -/* side effect: changes *lsp to cosines of lsp */ -void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m, - float amp,float ampoffset){ - - /* 0 <= m < 256 */ - - /* set up for using all int later */ - int i; - int ampoffseti=rint(ampoffset*4096.f); - int ampi=rint(amp*16.f); - long *ilsp=alloca(m*sizeof(*ilsp)); - for(i=0;i>25])) - if(!(shift=MLOOP_2[(pi|qi)>>19])) - shift=MLOOP_3[(pi|qi)>>16]; - qi=(qi>>shift)*labs(ilsp[j-1]-wi); - pi=(pi>>shift)*labs(ilsp[j]-wi); - qexp+=shift; - } - if(!(shift=MLOOP_1[(pi|qi)>>25])) - if(!(shift=MLOOP_2[(pi|qi)>>19])) - shift=MLOOP_3[(pi|qi)>>16]; - - /* pi,qi normalized collectively, both tracked using qexp */ - - if(m&1){ - /* odd order filter; slightly assymetric */ - /* the last coefficient */ - qi=(qi>>shift)*labs(ilsp[j-1]-wi); - pi=(pi>>shift)<<14; - qexp+=shift; - - if(!(shift=MLOOP_1[(pi|qi)>>25])) - if(!(shift=MLOOP_2[(pi|qi)>>19])) - shift=MLOOP_3[(pi|qi)>>16]; - - pi>>=shift; - qi>>=shift; - qexp+=shift-14*((m+1)>>1); - - pi=((pi*pi)>>16); - qi=((qi*qi)>>16); - qexp=qexp*2+m; - - pi*=(1<<14)-((wi*wi)>>14); - qi+=pi>>14; - - }else{ - /* even order filter; still symmetric */ - - /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't - worth tracking step by step */ - - pi>>=shift; - qi>>=shift; - qexp+=shift-7*m; - - pi=((pi*pi)>>16); - qi=((qi*qi)>>16); - qexp=qexp*2+m; - - pi*=(1<<14)-wi; - qi*=(1<<14)+wi; - qi=(qi+pi)>>14; - - } - - - /* we've let the normalization drift because it wasn't important; - however, for the lookup, things must be normalized again. We - need at most one right shift or a number of left shifts */ - - if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */ - qi>>=1; qexp++; - }else - while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/ - qi<<=1; qexp--; - } - - amp=vorbis_fromdBlook_i(ampi* /* n.4 */ - vorbis_invsqlook_i(qi,qexp)- - /* m.8, m+n<=8 */ - ampoffseti); /* 8.12[0] */ - - curve[i]*=amp; - while(map[++i]==k)curve[i]*=amp; - } -} - -#else - -/* old, nonoptimized but simple version for any poor sap who needs to - figure out what the hell this code does, or wants the other - fraction of a dB precision */ - -/* side effect: changes *lsp to cosines of lsp */ -void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m, - float amp,float ampoffset){ - int i; - float wdel=M_PI/ln; - for(i=0;i= i; j--) { - g[j-2] -= g[j]; - g[j] += g[j]; - } - } -} - -static int comp(const void *a,const void *b){ - return (*(float *)a<*(float *)b)-(*(float *)a>*(float *)b); -} - -/* Newton-Raphson-Maehly actually functioned as a decent root finder, - but there are root sets for which it gets into limit cycles - (exacerbated by zero suppression) and fails. We can't afford to - fail, even if the failure is 1 in 100,000,000, so we now use - Laguerre and later polish with Newton-Raphson (which can then - afford to fail) */ - -#define EPSILON 10e-7 -static int Laguerre_With_Deflation(float *a,int ord,float *r){ - int i,m; - double lastdelta=0.f; - double *defl=(double*)alloca(sizeof(*defl)*(ord+1)); - for(i=0;i<=ord;i++)defl[i]=a[i]; - - for(m=ord;m>0;m--){ - double newx=0.f,delta; - - /* iterate a root */ - while(1){ - double p=defl[m],pp=0.f,ppp=0.f,denom; - - /* eval the polynomial and its first two derivatives */ - for(i=m;i>0;i--){ - ppp = newx*ppp + pp; - pp = newx*pp + p; - p = newx*p + defl[i-1]; - } - - /* Laguerre's method */ - denom=(m-1) * ((m-1)*pp*pp - m*p*ppp); - if(denom<0) - return(-1); /* complex root! The LPC generator handed us a bad filter */ - - if(pp>0){ - denom = pp + sqrt(denom); - if(denom-(EPSILON))denom=-(EPSILON); - } - - delta = m*p/denom; - newx -= delta; - - if(delta<0.f)delta*=-1; - - if(fabs(delta/newx)<10e-12)break; - lastdelta=delta; - } - - r[m-1]=newx; - - /* forward deflation */ - - for(i=m;i>0;i--) - defl[i-1]+=newx*defl[i]; - defl++; - - } - return(0); -} - - -/* for spit-and-polish only */ -static int Newton_Raphson(float *a,int ord,float *r){ - int i, k, count=0; - double error=1.f; - double *root=(double*)alloca(ord*sizeof(*root)); - - for(i=0; i1e-20){ - error=0; - - for(i=0; i= 0; k--) { - - pp= pp* rooti + p; - p = p * rooti + a[k]; - } - - delta = p/pp; - root[i] -= delta; - error+= delta*delta; - } - - if(count>40)return(-1); - - count++; - } - - /* Replaced the original bubble sort with a real sort. With your - help, we can eliminate the bubble sort in our lifetime. --Monty */ - - for(i=0; i>1; - int g1_order,g2_order; - float *g1=(float*)alloca(sizeof(*g1)*(order2+1)); - float *g2=(float*)alloca(sizeof(*g2)*(order2+1)); - float *g1r=(float*)alloca(sizeof(*g1r)*(order2+1)); - float *g2r=(float*)alloca(sizeof(*g2r)*(order2+1)); - int i; - - /* even and odd are slightly different base cases */ - g1_order=(m+1)>>1; - g2_order=(m) >>1; - - /* Compute the lengths of the x polynomials. */ - /* Compute the first half of K & R F1 & F2 polynomials. */ - /* Compute half of the symmetric and antisymmetric polynomials. */ - /* Remove the roots at +1 and -1. */ - - g1[g1_order] = 1.f; - for(i=1;i<=g1_order;i++) g1[g1_order-i] = lpc[i-1]+lpc[m-i]; - g2[g2_order] = 1.f; - for(i=1;i<=g2_order;i++) g2[g2_order-i] = lpc[i-1]-lpc[m-i]; - - if(g1_order>g2_order){ - for(i=2; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+2]; - }else{ - for(i=1; i<=g1_order;i++) g1[g1_order-i] -= g1[g1_order-i+1]; - for(i=1; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+1]; - } - - /* Convert into polynomials in cos(alpha) */ - cheby(g1,g1_order); - cheby(g2,g2_order); - - /* Find the roots of the 2 even polynomials.*/ - if(Laguerre_With_Deflation(g1,g1_order,g1r) || - Laguerre_With_Deflation(g2,g2_order,g2r)) - return(-1); - - Newton_Raphson(g1,g1_order,g1r); /* if it fails, it leaves g1r alone */ - Newton_Raphson(g2,g2_order,g2r); /* if it fails, it leaves g2r alone */ - - qsort(g1r,g1_order,sizeof(*g1r),comp); - qsort(g2r,g2_order,sizeof(*g2r),comp); - - for(i=0;i -#include -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "codebook.h" -#include "window.h" -#include "registry.h" -#include "psy.h" -#include "misc.h" - -/* simplistic, wasteful way of doing this (unique lookup for each - mode/submapping); there should be a central repository for - identical lookups. That will require minor work, so I'm putting it - off as low priority. - - Why a lookup for each backend in a given mode? Because the - blocksize is set by the mode, and low backend lookups may require - parameters from other areas of the mode/mapping */ - -static void mapping0_free_info(vorbis_info_mapping *i){ - vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)i; - if(info){ - memset(info,0,sizeof(*info)); - _ogg_free(info); - } -} - -static int ilog3(unsigned int v){ - int ret=0; - if(v)--v; - while(v){ - ret++; - v>>=1; - } - return(ret); -} - -static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm, - oggpack_buffer *opb){ - int i; - vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)vm; - - /* another 'we meant to do it this way' hack... up to beta 4, we - packed 4 binary zeros here to signify one submapping in use. We - now redefine that to mean four bitflags that indicate use of - deeper features; bit0:submappings, bit1:coupling, - bit2,3:reserved. This is backward compatable with all actual uses - of the beta code. */ - - if(info->submaps>1){ - oggpack_write(opb,1,1); - oggpack_write(opb,info->submaps-1,4); - }else - oggpack_write(opb,0,1); - - if(info->coupling_steps>0){ - oggpack_write(opb,1,1); - oggpack_write(opb,info->coupling_steps-1,8); - - for(i=0;icoupling_steps;i++){ - oggpack_write(opb,info->coupling_mag[i],ilog3(vi->channels)); - oggpack_write(opb,info->coupling_ang[i],ilog3(vi->channels)); - } - }else - oggpack_write(opb,0,1); - - oggpack_write(opb,0,2); /* 2,3:reserved */ - - /* we don't write the channel submappings if we only have one... */ - if(info->submaps>1){ - for(i=0;ichannels;i++) - oggpack_write(opb,info->chmuxlist[i],4); - } - for(i=0;isubmaps;i++){ - oggpack_write(opb,0,8); /* time submap unused */ - oggpack_write(opb,info->floorsubmap[i],8); - oggpack_write(opb,info->residuesubmap[i],8); - } -} - -/* also responsible for range checking */ -static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb){ - int i; - vorbis_info_mapping0 *info=(vorbis_info_mapping0*)_ogg_calloc(1,sizeof(*info)); - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - memset(info,0,sizeof(*info)); - - if(oggpack_read(opb,1)) - info->submaps=oggpack_read(opb,4)+1; - else - info->submaps=1; - - if(oggpack_read(opb,1)){ - info->coupling_steps=oggpack_read(opb,8)+1; - - for(i=0;icoupling_steps;i++){ - int testM=info->coupling_mag[i]=oggpack_read(opb,ilog3(vi->channels)); - int testA=info->coupling_ang[i]=oggpack_read(opb,ilog3(vi->channels)); - - if(testM<0 || - testA<0 || - testM==testA || - testM>=vi->channels || - testA>=vi->channels) goto err_out; - } - - } - - if(oggpack_read(opb,2)>0)goto err_out; /* 2,3:reserved */ - - if(info->submaps>1){ - for(i=0;ichannels;i++){ - info->chmuxlist[i]=oggpack_read(opb,4); - if(info->chmuxlist[i]>=info->submaps)goto err_out; - } - } - for(i=0;isubmaps;i++){ - oggpack_read(opb,8); /* time submap unused */ - info->floorsubmap[i]=oggpack_read(opb,8); - if(info->floorsubmap[i]>=ci->floors)goto err_out; - info->residuesubmap[i]=oggpack_read(opb,8); - if(info->residuesubmap[i]>=ci->residues)goto err_out; - } - - return info; - - err_out: - mapping0_free_info(info); - return(NULL); -} - -#include "os.h" -#include "lpc.h" -#include "lsp.h" -#include "envelope.h" -#include "mdct.h" -#include "psy.h" -#include "scales.h" - -#if 0 -static long seq=0; -static ogg_int64_t total=0; -static float FLOOR1_fromdB_LOOKUP[256]={ - 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F, - 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F, - 1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F, - 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F, - 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F, - 3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F, - 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F, - 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F, - 7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F, - 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F, - 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F, - 1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F, - 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F, - 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F, - 3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F, - 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F, - 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F, - 7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F, - 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F, - 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F, - 1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F, - 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F, - 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F, - 3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F, - 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F, - 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F, - 7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F, - 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F, - 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F, - 0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F, - 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F, - 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F, - 0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F, - 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F, - 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F, - 0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F, - 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F, - 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F, - 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, - 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F, - 0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F, - 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F, - 0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F, - 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F, - 0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F, - 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F, - 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, - 0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F, - 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F, - 0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F, - 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F, - 0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F, - 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F, - 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F, - 0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F, - 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, - 0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F, - 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F, - 0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F, - 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F, - 0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F, - 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F, - 0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F, - 0.82788260F, 0.88168307F, 0.9389798F, 1.F, -}; - -#endif - -extern int *floor1_fit(vorbis_block *vb,void *look, - const float *logmdct, /* in */ - const float *logmask); -extern int *floor1_interpolate_fit(vorbis_block *vb,void *look, - int *A,int *B, - int del); -extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb, - void*look, - int *post,int *ilogmask); - - -static int mapping0_forward(vorbis_block *vb){ - vorbis_dsp_state *vd=vb->vd; - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - private_state *b=(private_state*)vb->vd->backend_state; - vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal; - int n=vb->pcmend; - int i,j,k; - - int *nonzero = (int*) alloca(sizeof(*nonzero)*vi->channels); - float **gmdct = (float**) _vorbis_block_alloc(vb,vi->channels*sizeof(*gmdct)); - int **ilogmaskch= (int**) _vorbis_block_alloc(vb,vi->channels*sizeof(*ilogmaskch)); - int ***floor_posts = (int***) _vorbis_block_alloc(vb,vi->channels*sizeof(*floor_posts)); - - float global_ampmax=vbi->ampmax; - float *local_ampmax=(float*)alloca(sizeof(*local_ampmax)*vi->channels); - int blocktype=vbi->blocktype; - - int modenumber=vb->W; - vorbis_info_mapping0 *info=(vorbis_info_mapping0*)ci->map_param[modenumber]; - vorbis_look_psy *psy_look= - b->psy+blocktype+(vb->W?2:0); - - vb->mode=modenumber; - - for(i=0;ichannels;i++){ - float scale=4.f/n; - float scale_dB; - - float *pcm =vb->pcm[i]; - float *logfft =pcm; - - gmdct[i]=(float*)_vorbis_block_alloc(vb,n/2*sizeof(**gmdct)); - - scale_dB=todB(&scale) + .345; /* + .345 is a hack; the original - todB estimation used on IEEE 754 - compliant machines had a bug that - returned dB values about a third - of a decibel too high. The bug - was harmless because tunings - implicitly took that into - account. However, fixing the bug - in the estimator requires - changing all the tunings as well. - For now, it's easier to sync - things back up here, and - recalibrate the tunings in the - next major model upgrade. */ - -#if 0 - if(vi->channels==2) - if(i==0) - _analysis_output("pcmL",seq,pcm,n,0,0,total-n/2); - else - _analysis_output("pcmR",seq,pcm,n,0,0,total-n/2); -#endif - - /* window the PCM data */ - _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW); - -#if 0 - if(vi->channels==2) - if(i==0) - _analysis_output("windowedL",seq,pcm,n,0,0,total-n/2); - else - _analysis_output("windowedR",seq,pcm,n,0,0,total-n/2); -#endif - - /* transform the PCM data */ - /* only MDCT right now.... */ - mdct_forward((mdct_lookup*) b->transform[vb->W][0],pcm,gmdct[i]); - - /* FFT yields more accurate tonal estimation (not phase sensitive) */ - drft_forward(&b->fft_look[vb->W],pcm); - logfft[0]=scale_dB+todB(pcm) + .345; /* + .345 is a hack; the - original todB estimation used on - IEEE 754 compliant machines had a - bug that returned dB values about - a third of a decibel too high. - The bug was harmless because - tunings implicitly took that into - account. However, fixing the bug - in the estimator requires - changing all the tunings as well. - For now, it's easier to sync - things back up here, and - recalibrate the tunings in the - next major model upgrade. */ - local_ampmax[i]=logfft[0]; - for(j=1;j>1]=scale_dB+.5f*todB(&temp) + .345; /* + - .345 is a hack; the original todB - estimation used on IEEE 754 - compliant machines had a bug that - returned dB values about a third - of a decibel too high. The bug - was harmless because tunings - implicitly took that into - account. However, fixing the bug - in the estimator requires - changing all the tunings as well. - For now, it's easier to sync - things back up here, and - recalibrate the tunings in the - next major model upgrade. */ - if(temp>local_ampmax[i])local_ampmax[i]=temp; - } - - if(local_ampmax[i]>0.f)local_ampmax[i]=0.f; - if(local_ampmax[i]>global_ampmax)global_ampmax=local_ampmax[i]; - -#if 0 - if(vi->channels==2){ - if(i==0){ - _analysis_output("fftL",seq,logfft,n/2,1,0,0); - }else{ - _analysis_output("fftR",seq,logfft,n/2,1,0,0); - } - } -#endif - - } - - { - float *noise = (float*) _vorbis_block_alloc(vb,n/2*sizeof(*noise)); - float *tone = (float*) _vorbis_block_alloc(vb,n/2*sizeof(*tone)); - - for(i=0;ichannels;i++){ - /* the encoder setup assumes that all the modes used by any - specific bitrate tweaking use the same floor */ - - int submap=info->chmuxlist[i]; - - /* the following makes things clearer to *me* anyway */ - float *mdct =gmdct[i]; - float *logfft =vb->pcm[i]; - - float *logmdct =logfft+n/2; - float *logmask =logfft; - - vb->mode=modenumber; - - floor_posts[i]=(int**) _vorbis_block_alloc(vb,PACKETBLOBS*sizeof(**floor_posts)); - memset(floor_posts[i],0,sizeof(**floor_posts)*PACKETBLOBS); - - for(j=0;jchannels==2){ - if(i==0) - _analysis_output("mdctL",seq,logmdct,n/2,1,0,0); - else - _analysis_output("mdctR",seq,logmdct,n/2,1,0,0); - }else{ - _analysis_output("mdct",seq,logmdct,n/2,1,0,0); - } -#endif - - /* first step; noise masking. Not only does 'noise masking' - give us curves from which we can decide how much resolution - to give noise parts of the spectrum, it also implicitly hands - us a tonality estimate (the larger the value in the - 'noise_depth' vector, the more tonal that area is) */ - - _vp_noisemask(psy_look, - logmdct, - noise); /* noise does not have by-frequency offset - bias applied yet */ -#if 0 - if(vi->channels==2){ - if(i==0) - _analysis_output("noiseL",seq,noise,n/2,1,0,0); - else - _analysis_output("noiseR",seq,noise,n/2,1,0,0); - } -#endif - - /* second step: 'all the other crap'; all the stuff that isn't - computed/fit for bitrate management goes in the second psy - vector. This includes tone masking, peak limiting and ATH */ - - _vp_tonemask(psy_look, - logfft, - tone, - global_ampmax, - local_ampmax[i]); - -#if 0 - if(vi->channels==2){ - if(i==0) - _analysis_output("toneL",seq,tone,n/2,1,0,0); - else - _analysis_output("toneR",seq,tone,n/2,1,0,0); - } -#endif - - /* third step; we offset the noise vectors, overlay tone - masking. We then do a floor1-specific line fit. If we're - performing bitrate management, the line fit is performed - multiple times for up/down tweakage on demand. */ - -#if 0 - { - float aotuv[psy_look->n]; -#endif - - _vp_offset_and_mix(psy_look, - noise, - tone, - 1, - logmask, - mdct, - logmdct); - -#if 0 - if(vi->channels==2){ - if(i==0) - _analysis_output("aotuvM1_L",seq,aotuv,psy_look->n,1,1,0); - else - _analysis_output("aotuvM1_R",seq,aotuv,psy_look->n,1,1,0); - } - } -#endif - - -#if 0 - if(vi->channels==2){ - if(i==0) - _analysis_output("mask1L",seq,logmask,n/2,1,0,0); - else - _analysis_output("mask1R",seq,logmask,n/2,1,0,0); - } -#endif - - /* this algorithm is hardwired to floor 1 for now; abort out if - we're *not* floor1. This won't happen unless someone has - broken the encode setup lib. Guard it anyway. */ - if(ci->floor_type[info->floorsubmap[submap]]!=1)return(-1); - - floor_posts[i][PACKETBLOBS/2]= - floor1_fit(vb,b->flr[info->floorsubmap[submap]], - logmdct, - logmask); - - /* are we managing bitrate? If so, perform two more fits for - later rate tweaking (fits represent hi/lo) */ - if(vorbis_bitrate_managed(vb) && floor_posts[i][PACKETBLOBS/2]){ - /* higher rate by way of lower noise curve */ - - _vp_offset_and_mix(psy_look, - noise, - tone, - 2, - logmask, - mdct, - logmdct); - -#if 0 - if(vi->channels==2){ - if(i==0) - _analysis_output("mask2L",seq,logmask,n/2,1,0,0); - else - _analysis_output("mask2R",seq,logmask,n/2,1,0,0); - } -#endif - - floor_posts[i][PACKETBLOBS-1]= - floor1_fit(vb,b->flr[info->floorsubmap[submap]], - logmdct, - logmask); - - /* lower rate by way of higher noise curve */ - _vp_offset_and_mix(psy_look, - noise, - tone, - 0, - logmask, - mdct, - logmdct); - -#if 0 - if(vi->channels==2) - if(i==0) - _analysis_output("mask0L",seq,logmask,n/2,1,0,0); - else - _analysis_output("mask0R",seq,logmask,n/2,1,0,0); -#endif - - floor_posts[i][0]= - floor1_fit(vb,b->flr[info->floorsubmap[submap]], - logmdct, - logmask); - - /* we also interpolate a range of intermediate curves for - intermediate rates */ - for(k=1;kflr[info->floorsubmap[submap]], - floor_posts[i][0], - floor_posts[i][PACKETBLOBS/2], - k*65536/(PACKETBLOBS/2)); - for(k=PACKETBLOBS/2+1;kflr[info->floorsubmap[submap]], - floor_posts[i][PACKETBLOBS/2], - floor_posts[i][PACKETBLOBS-1], - (k-PACKETBLOBS/2)*65536/(PACKETBLOBS/2)); - } - } - } - vbi->ampmax=global_ampmax; - - /* - the next phases are performed once for vbr-only and PACKETBLOB - times for bitrate managed modes. - - 1) encode actual mode being used - 2) encode the floor for each channel, compute coded mask curve/res - 3) normalize and couple. - 4) encode residue - 5) save packet bytes to the packetblob vector - - */ - - /* iterate over the many masking curve fits we've created */ - - { - float **res_bundle=(float**) alloca(sizeof(*res_bundle)*vi->channels); - float **couple_bundle=(float**) alloca(sizeof(*couple_bundle)*vi->channels); - int *zerobundle=(int*) alloca(sizeof(*zerobundle)*vi->channels); - int **sortindex=(int**) alloca(sizeof(*sortindex)*vi->channels); - float **mag_memo; - int **mag_sort; - - if(info->coupling_steps){ - mag_memo=_vp_quantize_couple_memo(vb, - &ci->psy_g_param, - psy_look, - info, - gmdct); - - mag_sort=_vp_quantize_couple_sort(vb, - psy_look, - info, - mag_memo); - - hf_reduction(&ci->psy_g_param, - psy_look, - info, - mag_memo); - } - - memset(sortindex,0,sizeof(*sortindex)*vi->channels); - if(psy_look->vi->normal_channel_p){ - for(i=0;ichannels;i++){ - float *mdct =gmdct[i]; - sortindex[i]=(int*) alloca(sizeof(**sortindex)*n/2); - _vp_noise_normalize_sort(psy_look,mdct,sortindex[i]); - } - } - - for(k=(vorbis_bitrate_managed(vb)?0:PACKETBLOBS/2); - k<=(vorbis_bitrate_managed(vb)?PACKETBLOBS-1:PACKETBLOBS/2); - k++){ - oggpack_buffer *opb=vbi->packetblob[k]; - - /* start out our new packet blob with packet type and mode */ - /* Encode the packet type */ - oggpack_write(opb,0,1); - /* Encode the modenumber */ - /* Encode frame mode, pre,post windowsize, then dispatch */ - oggpack_write(opb,modenumber,b->modebits); - if(vb->W){ - oggpack_write(opb,vb->lW,1); - oggpack_write(opb,vb->nW,1); - } - - /* encode floor, compute masking curve, sep out residue */ - for(i=0;ichannels;i++){ - int submap=info->chmuxlist[i]; - float *mdct =gmdct[i]; - float *res =vb->pcm[i]; - int *ilogmask=ilogmaskch[i]= - (int*) _vorbis_block_alloc(vb,n/2*sizeof(**gmdct)); - - nonzero[i]=floor1_encode(opb,vb,b->flr[info->floorsubmap[submap]], - floor_posts[i][k], - ilogmask); -#if 0 - { - char buf[80]; - sprintf(buf,"maskI%c%d",i?'R':'L',k); - float work[n/2]; - for(j=0;jpsy_g_param.sliding_lowpass[vb->W][k]); - - _vp_noise_normalize(psy_look,res,res+n/2,sortindex[i]); - - -#if 0 - { - char buf[80]; - float work[n/2]; - for(j=0;jcoupling_steps){ - _vp_couple(k, - &ci->psy_g_param, - psy_look, - info, - vb->pcm, - mag_memo, - mag_sort, - ilogmaskch, - nonzero, - ci->psy_g_param.sliding_lowpass[vb->W][k]); - } - - /* classify and encode by submap */ - for(i=0;isubmaps;i++){ - int ch_in_bundle=0; - long **classifications; - int resnum=info->residuesubmap[i]; - - for(j=0;jchannels;j++){ - if(info->chmuxlist[j]==i){ - zerobundle[ch_in_bundle]=0; - if(nonzero[j])zerobundle[ch_in_bundle]=1; - res_bundle[ch_in_bundle]=vb->pcm[j]; - couple_bundle[ch_in_bundle++]=vb->pcm[j]+n/2; - } - } - - classifications=_residue_P[ci->residue_type[resnum]]-> - classx(vb,b->residue[resnum],couple_bundle,zerobundle,ch_in_bundle); - - _residue_P[ci->residue_type[resnum]]-> - forward(opb,vb,b->residue[resnum], - couple_bundle,NULL,zerobundle,ch_in_bundle,classifications); - } - - /* ok, done encoding. Next protopacket. */ - } - - } - -#if 0 - seq++; - total+=ci->blocksizes[vb->W]/4+ci->blocksizes[vb->nW]/4; -#endif - return(0); -} - -static int mapping0_inverse(vorbis_block *vb,vorbis_info_mapping *l){ - vorbis_dsp_state *vd=vb->vd; - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - private_state *b=(private_state*)vd->backend_state; - vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)l; - - int i,j; - long n=vb->pcmend=ci->blocksizes[vb->W]; - - float **pcmbundle=(float**) alloca(sizeof(*pcmbundle)*vi->channels); - int *zerobundle=(int*) alloca(sizeof(*zerobundle)*vi->channels); - - int *nonzero =(int*) alloca(sizeof(*nonzero)*vi->channels); - void **floormemo=(void**) alloca(sizeof(*floormemo)*vi->channels); - - /* recover the spectral envelope; store it in the PCM vector for now */ - for(i=0;ichannels;i++){ - int submap=info->chmuxlist[i]; - floormemo[i]=_floor_P[ci->floor_type[info->floorsubmap[submap]]]-> - inverse1(vb,b->flr[info->floorsubmap[submap]]); - if(floormemo[i]) - nonzero[i]=1; - else - nonzero[i]=0; - memset(vb->pcm[i],0,sizeof(*vb->pcm[i])*n/2); - } - - /* channel coupling can 'dirty' the nonzero listing */ - for(i=0;icoupling_steps;i++){ - if(nonzero[info->coupling_mag[i]] || - nonzero[info->coupling_ang[i]]){ - nonzero[info->coupling_mag[i]]=1; - nonzero[info->coupling_ang[i]]=1; - } - } - - /* recover the residue into our working vectors */ - for(i=0;isubmaps;i++){ - int ch_in_bundle=0; - for(j=0;jchannels;j++){ - if(info->chmuxlist[j]==i){ - if(nonzero[j]) - zerobundle[ch_in_bundle]=1; - else - zerobundle[ch_in_bundle]=0; - pcmbundle[ch_in_bundle++]=vb->pcm[j]; - } - } - - _residue_P[ci->residue_type[info->residuesubmap[i]]]-> - inverse(vb,b->residue[info->residuesubmap[i]], - pcmbundle,zerobundle,ch_in_bundle); - } - - /* channel coupling */ - for(i=info->coupling_steps-1;i>=0;i--){ - float *pcmM=vb->pcm[info->coupling_mag[i]]; - float *pcmA=vb->pcm[info->coupling_ang[i]]; - - for(j=0;j0) - if(ang>0){ - pcmM[j]=mag; - pcmA[j]=mag-ang; - }else{ - pcmA[j]=mag; - pcmM[j]=mag+ang; - } - else - if(ang>0){ - pcmM[j]=mag; - pcmA[j]=mag+ang; - }else{ - pcmA[j]=mag; - pcmM[j]=mag-ang; - } - } - } - - /* compute and apply spectral envelope */ - for(i=0;ichannels;i++){ - float *pcm=vb->pcm[i]; - int submap=info->chmuxlist[i]; - _floor_P[ci->floor_type[info->floorsubmap[submap]]]-> - inverse2(vb,b->flr[info->floorsubmap[submap]], - floormemo[i],pcm); - } - - /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */ - /* only MDCT right now.... */ - for(i=0;ichannels;i++){ - float *pcm=vb->pcm[i]; - mdct_backward((mdct_lookup*) b->transform[vb->W][0],pcm,pcm); - } - - /* all done! */ - return(0); -} - -/* export hooks */ -vorbis_func_mapping mapping0_exportbundle={ - &mapping0_pack, - &mapping0_unpack, - &mapping0_free_info, - &mapping0_forward, - &mapping0_inverse -}; - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/masking.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/masking.h deleted file mode 100644 index 29e1a130bc..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/masking.h +++ /dev/null @@ -1,785 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: masking curve data for psychoacoustics - last mod: $Id: masking.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_MASKING_H_ -#define _V_MASKING_H_ - -/* more detailed ATH; the bass if flat to save stressing the floor - overly for only a bin or two of savings. */ - -#define MAX_ATH 88 -static float ATH[]={ - /*15*/ -51, -52, -53, -54, -55, -56, -57, -58, - /*31*/ -59, -60, -61, -62, -63, -64, -65, -66, - /*63*/ -67, -68, -69, -70, -71, -72, -73, -74, - /*125*/ -75, -76, -77, -78, -80, -81, -82, -83, - /*250*/ -84, -85, -86, -87, -88, -88, -89, -89, - /*500*/ -90, -91, -91, -92, -93, -94, -95, -96, - /*1k*/ -96, -97, -98, -98, -99, -99,-100,-100, - /*2k*/ -101,-102,-103,-104,-106,-107,-107,-107, - /*4k*/ -107,-105,-103,-102,-101, -99, -98, -96, - /*8k*/ -95, -95, -96, -97, -96, -95, -93, -90, - /*16k*/ -80, -70, -50, -40, -30, -30, -30, -30 -}; - -/* The tone masking curves from Ehmer's and Fielder's papers have been - replaced by an empirically collected data set. The previously - published values were, far too often, simply on crack. */ - -#define EHMER_OFFSET 16 -#define EHMER_MAX 56 - -/* masking tones from -50 to 0dB, 62.5 through 16kHz at half octaves - test tones from -2 octaves to +5 octaves sampled at eighth octaves */ -/* (Vorbis 0dB, the loudest possible tone, is assumed to be ~100dB SPL - for collection of these curves) */ - -static float tonemasks[P_BANDS][6][EHMER_MAX]={ - /* 62.5 Hz */ - {{ -60, -60, -60, -60, -60, -60, -60, -60, - -60, -60, -60, -60, -62, -62, -65, -73, - -69, -68, -68, -67, -70, -70, -72, -74, - -75, -79, -79, -80, -83, -88, -93, -100, - -110, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -48, -48, -48, -48, -48, -48, -48, -48, - -48, -48, -48, -48, -48, -53, -61, -66, - -66, -68, -67, -70, -76, -76, -72, -73, - -75, -76, -78, -79, -83, -88, -93, -100, - -110, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -37, -37, -37, -37, -37, -37, -37, -37, - -38, -40, -42, -46, -48, -53, -55, -62, - -65, -58, -56, -56, -61, -60, -65, -67, - -69, -71, -77, -77, -78, -80, -82, -84, - -88, -93, -98, -106, -112, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -25, -25, -25, -25, -25, -25, -25, -25, - -25, -26, -27, -29, -32, -38, -48, -52, - -52, -50, -48, -48, -51, -52, -54, -60, - -67, -67, -66, -68, -69, -73, -73, -76, - -80, -81, -81, -85, -85, -86, -88, -93, - -100, -110, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -16, -16, -16, -16, -16, -16, -16, -16, - -17, -19, -20, -22, -26, -28, -31, -40, - -47, -39, -39, -40, -42, -43, -47, -51, - -57, -52, -55, -55, -60, -58, -62, -63, - -70, -67, -69, -72, -73, -77, -80, -82, - -83, -87, -90, -94, -98, -104, -115, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -8, -8, -8, -8, -8, -8, -8, -8, - -8, -8, -10, -11, -15, -19, -25, -30, - -34, -31, -30, -31, -29, -32, -35, -42, - -48, -42, -44, -46, -50, -50, -51, -52, - -59, -54, -55, -55, -58, -62, -63, -66, - -72, -73, -76, -75, -78, -80, -80, -81, - -84, -88, -90, -94, -98, -101, -106, -110}}, - /* 88Hz */ - {{ -66, -66, -66, -66, -66, -66, -66, -66, - -66, -66, -66, -66, -66, -67, -67, -67, - -76, -72, -71, -74, -76, -76, -75, -78, - -79, -79, -81, -83, -86, -89, -93, -97, - -100, -105, -110, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -47, -47, -47, -47, -47, -47, -47, -47, - -47, -47, -47, -48, -51, -55, -59, -66, - -66, -66, -67, -66, -68, -69, -70, -74, - -79, -77, -77, -78, -80, -81, -82, -84, - -86, -88, -91, -95, -100, -108, -116, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -36, -36, -36, -36, -36, -36, -36, -36, - -36, -37, -37, -41, -44, -48, -51, -58, - -62, -60, -57, -59, -59, -60, -63, -65, - -72, -71, -70, -72, -74, -77, -76, -78, - -81, -81, -80, -83, -86, -91, -96, -100, - -105, -110, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -28, -28, -28, -28, -28, -28, -28, -28, - -28, -30, -32, -32, -33, -35, -41, -49, - -50, -49, -47, -48, -48, -52, -51, -57, - -65, -61, -59, -61, -64, -69, -70, -74, - -77, -77, -78, -81, -84, -85, -87, -90, - -92, -96, -100, -107, -112, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -19, -19, -19, -19, -19, -19, -19, -19, - -20, -21, -23, -27, -30, -35, -36, -41, - -46, -44, -42, -40, -41, -41, -43, -48, - -55, -53, -52, -53, -56, -59, -58, -60, - -67, -66, -69, -71, -72, -75, -79, -81, - -84, -87, -90, -93, -97, -101, -107, -114, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -9, -9, -9, -9, -9, -9, -9, -9, - -11, -12, -12, -15, -16, -20, -23, -30, - -37, -34, -33, -34, -31, -32, -32, -38, - -47, -44, -41, -40, -47, -49, -46, -46, - -58, -50, -50, -54, -58, -62, -64, -67, - -67, -70, -72, -76, -79, -83, -87, -91, - -96, -100, -104, -110, -999, -999, -999, -999}}, - /* 125 Hz */ - {{ -62, -62, -62, -62, -62, -62, -62, -62, - -62, -62, -63, -64, -66, -67, -66, -68, - -75, -72, -76, -75, -76, -78, -79, -82, - -84, -85, -90, -94, -101, -110, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -59, -59, -59, -59, -59, -59, -59, -59, - -59, -59, -59, -60, -60, -61, -63, -66, - -71, -68, -70, -70, -71, -72, -72, -75, - -81, -78, -79, -82, -83, -86, -90, -97, - -103, -113, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -53, -53, -53, -53, -53, -53, -53, -53, - -53, -54, -55, -57, -56, -57, -55, -61, - -65, -60, -60, -62, -63, -63, -66, -68, - -74, -73, -75, -75, -78, -80, -80, -82, - -85, -90, -96, -101, -108, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -46, -46, -46, -46, -46, -46, -46, -46, - -46, -46, -47, -47, -47, -47, -48, -51, - -57, -51, -49, -50, -51, -53, -54, -59, - -66, -60, -62, -67, -67, -70, -72, -75, - -76, -78, -81, -85, -88, -94, -97, -104, - -112, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -36, -36, -36, -36, -36, -36, -36, -36, - -39, -41, -42, -42, -39, -38, -41, -43, - -52, -44, -40, -39, -37, -37, -40, -47, - -54, -50, -48, -50, -55, -61, -59, -62, - -66, -66, -66, -69, -69, -73, -74, -74, - -75, -77, -79, -82, -87, -91, -95, -100, - -108, -115, -999, -999, -999, -999, -999, -999}, - { -28, -26, -24, -22, -20, -20, -23, -29, - -30, -31, -28, -27, -28, -28, -28, -35, - -40, -33, -32, -29, -30, -30, -30, -37, - -45, -41, -37, -38, -45, -47, -47, -48, - -53, -49, -48, -50, -49, -49, -51, -52, - -58, -56, -57, -56, -60, -61, -62, -70, - -72, -74, -78, -83, -88, -93, -100, -106}}, - /* 177 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -110, -105, -100, -95, -91, -87, -83, - -80, -78, -76, -78, -78, -81, -83, -85, - -86, -85, -86, -87, -90, -97, -107, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -110, -105, -100, -95, -90, - -85, -81, -77, -73, -70, -67, -67, -68, - -75, -73, -70, -69, -70, -72, -75, -79, - -84, -83, -84, -86, -88, -89, -89, -93, - -98, -105, -112, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-105, -100, -95, -90, -85, -80, -76, -71, - -68, -68, -65, -63, -63, -62, -62, -64, - -65, -64, -61, -62, -63, -64, -66, -68, - -73, -73, -74, -75, -76, -81, -83, -85, - -88, -89, -92, -95, -100, -108, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -80, -75, -71, -68, -65, -63, -62, -61, - -61, -61, -61, -59, -56, -57, -53, -50, - -58, -52, -50, -50, -52, -53, -54, -58, - -67, -63, -67, -68, -72, -75, -78, -80, - -81, -81, -82, -85, -89, -90, -93, -97, - -101, -107, -114, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - { -65, -61, -59, -57, -56, -55, -55, -56, - -56, -57, -55, -53, -52, -47, -44, -44, - -50, -44, -41, -39, -39, -42, -40, -46, - -51, -49, -50, -53, -54, -63, -60, -61, - -62, -66, -66, -66, -70, -73, -74, -75, - -76, -75, -79, -85, -89, -91, -96, -102, - -110, -999, -999, -999, -999, -999, -999, -999}, - { -52, -50, -49, -49, -48, -48, -48, -49, - -50, -50, -49, -46, -43, -39, -35, -33, - -38, -36, -32, -29, -32, -32, -32, -35, - -44, -39, -38, -38, -46, -50, -45, -46, - -53, -50, -50, -50, -54, -54, -53, -53, - -56, -57, -59, -66, -70, -72, -74, -79, - -83, -85, -90, -97, -114, -999, -999, -999}}, - /* 250 Hz */ - {{-999, -999, -999, -999, -999, -999, -110, -105, - -100, -95, -90, -86, -80, -75, -75, -79, - -80, -79, -80, -81, -82, -88, -95, -103, - -110, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -108, -103, -98, -93, - -88, -83, -79, -78, -75, -71, -67, -68, - -73, -73, -72, -73, -75, -77, -80, -82, - -88, -93, -100, -107, -114, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -110, -105, -101, -96, -90, - -86, -81, -77, -73, -69, -66, -61, -62, - -66, -64, -62, -65, -66, -70, -72, -76, - -81, -80, -84, -90, -95, -102, -110, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -107, -103, -97, -92, -88, - -83, -79, -74, -70, -66, -59, -53, -58, - -62, -55, -54, -54, -54, -58, -61, -62, - -72, -70, -72, -75, -78, -80, -81, -80, - -83, -83, -88, -93, -100, -107, -115, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -105, -100, -95, -90, -85, - -80, -75, -70, -66, -62, -56, -48, -44, - -48, -46, -46, -43, -46, -48, -48, -51, - -58, -58, -59, -60, -62, -62, -61, -61, - -65, -64, -65, -68, -70, -74, -75, -78, - -81, -86, -95, -110, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -105, -100, -95, -90, -85, -80, - -75, -70, -65, -61, -55, -49, -39, -33, - -40, -35, -32, -38, -40, -33, -35, -37, - -46, -41, -45, -44, -46, -42, -45, -46, - -52, -50, -50, -50, -54, -54, -55, -57, - -62, -64, -66, -68, -70, -76, -81, -90, - -100, -110, -999, -999, -999, -999, -999, -999}}, - /* 354 hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -105, -98, -90, -85, -82, -83, -80, -78, - -84, -79, -80, -83, -87, -89, -91, -93, - -99, -106, -117, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -105, -98, -90, -85, -80, -75, -70, -68, - -74, -72, -74, -77, -80, -82, -85, -87, - -92, -89, -91, -95, -100, -106, -112, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -105, -98, -90, -83, -75, -71, -63, -64, - -67, -62, -64, -67, -70, -73, -77, -81, - -84, -83, -85, -89, -90, -93, -98, -104, - -109, -114, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -103, -96, -88, -81, -75, -68, -58, -54, - -56, -54, -56, -56, -58, -60, -63, -66, - -74, -69, -72, -72, -75, -74, -77, -81, - -81, -82, -84, -87, -93, -96, -99, -104, - -110, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -108, -102, -96, - -91, -85, -80, -74, -68, -60, -51, -46, - -48, -46, -43, -45, -47, -47, -49, -48, - -56, -53, -55, -58, -57, -63, -58, -60, - -66, -64, -67, -70, -70, -74, -77, -84, - -86, -89, -91, -93, -94, -101, -109, -118, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -108, -103, -98, -93, -88, - -83, -78, -73, -68, -60, -53, -44, -35, - -38, -38, -34, -34, -36, -40, -41, -44, - -51, -45, -46, -47, -46, -54, -50, -49, - -50, -50, -50, -51, -54, -57, -58, -60, - -66, -66, -66, -64, -65, -68, -77, -82, - -87, -95, -110, -999, -999, -999, -999, -999}}, - /* 500 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -107, -102, -97, -92, -87, -83, -78, -75, - -82, -79, -83, -85, -89, -92, -95, -98, - -101, -105, -109, -113, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -106, - -100, -95, -90, -86, -81, -78, -74, -69, - -74, -74, -76, -79, -83, -84, -86, -89, - -92, -97, -93, -100, -103, -107, -110, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -106, -100, - -95, -90, -87, -83, -80, -75, -69, -60, - -66, -66, -68, -70, -74, -78, -79, -81, - -81, -83, -84, -87, -93, -96, -99, -103, - -107, -110, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -108, -103, -98, - -93, -89, -85, -82, -78, -71, -62, -55, - -58, -58, -54, -54, -55, -59, -61, -62, - -70, -66, -66, -67, -70, -72, -75, -78, - -84, -84, -84, -88, -91, -90, -95, -98, - -102, -103, -106, -110, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -108, -103, -98, -94, - -90, -87, -82, -79, -73, -67, -58, -47, - -50, -45, -41, -45, -48, -44, -44, -49, - -54, -51, -48, -47, -49, -50, -51, -57, - -58, -60, -63, -69, -70, -69, -71, -74, - -78, -82, -90, -95, -101, -105, -110, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -105, -101, -97, -93, -90, - -85, -80, -77, -72, -65, -56, -48, -37, - -40, -36, -34, -40, -50, -47, -38, -41, - -47, -38, -35, -39, -38, -43, -40, -45, - -50, -45, -44, -47, -50, -55, -48, -48, - -52, -66, -70, -76, -82, -90, -97, -105, - -110, -999, -999, -999, -999, -999, -999, -999}}, - /* 707 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -108, -103, -98, -93, -86, -79, -76, - -83, -81, -85, -87, -89, -93, -98, -102, - -107, -112, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -108, -103, -98, -93, -86, -79, -71, - -77, -74, -77, -79, -81, -84, -85, -90, - -92, -93, -92, -98, -101, -108, -112, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -108, -103, -98, -93, -87, -78, -68, -65, - -66, -62, -65, -67, -70, -73, -75, -78, - -82, -82, -83, -84, -91, -93, -98, -102, - -106, -110, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -105, -100, -95, -90, -82, -74, -62, -57, - -58, -56, -51, -52, -52, -54, -54, -58, - -66, -59, -60, -63, -66, -69, -73, -79, - -83, -84, -80, -81, -81, -82, -88, -92, - -98, -105, -113, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -107, - -102, -97, -92, -84, -79, -69, -57, -47, - -52, -47, -44, -45, -50, -52, -42, -42, - -53, -43, -43, -48, -51, -56, -55, -52, - -57, -59, -61, -62, -67, -71, -78, -83, - -86, -94, -98, -103, -110, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -105, -100, - -95, -90, -84, -78, -70, -61, -51, -41, - -40, -38, -40, -46, -52, -51, -41, -40, - -46, -40, -38, -38, -41, -46, -41, -46, - -47, -43, -43, -45, -41, -45, -56, -67, - -68, -83, -87, -90, -95, -102, -107, -113, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 1000 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -109, -105, -101, -96, -91, -84, -77, - -82, -82, -85, -89, -94, -100, -106, -110, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -106, -103, -98, -92, -85, -80, -71, - -75, -72, -76, -80, -84, -86, -89, -93, - -100, -107, -113, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -107, - -104, -101, -97, -92, -88, -84, -80, -64, - -66, -63, -64, -66, -69, -73, -77, -83, - -83, -86, -91, -98, -104, -111, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -107, - -104, -101, -97, -92, -90, -84, -74, -57, - -58, -52, -55, -54, -50, -52, -50, -52, - -63, -62, -69, -76, -77, -78, -78, -79, - -82, -88, -94, -100, -106, -111, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -106, -102, - -98, -95, -90, -85, -83, -78, -70, -50, - -50, -41, -44, -49, -47, -50, -50, -44, - -55, -46, -47, -48, -48, -54, -49, -49, - -58, -62, -71, -81, -87, -92, -97, -102, - -108, -114, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -106, -102, - -98, -95, -90, -85, -83, -78, -70, -45, - -43, -41, -47, -50, -51, -50, -49, -45, - -47, -41, -44, -41, -39, -43, -38, -37, - -40, -41, -44, -50, -58, -65, -73, -79, - -85, -92, -97, -101, -105, -109, -113, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 1414 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -107, -100, -95, -87, -81, - -85, -83, -88, -93, -100, -107, -114, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -107, -101, -95, -88, -83, -76, - -73, -72, -79, -84, -90, -95, -100, -105, - -110, -115, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -104, -98, -92, -87, -81, -70, - -65, -62, -67, -71, -74, -80, -85, -91, - -95, -99, -103, -108, -111, -114, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -103, -97, -90, -85, -76, -60, - -56, -54, -60, -62, -61, -56, -63, -65, - -73, -74, -77, -75, -78, -81, -86, -87, - -88, -91, -94, -98, -103, -110, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -105, - -100, -97, -92, -86, -81, -79, -70, -57, - -51, -47, -51, -58, -60, -56, -53, -50, - -58, -52, -50, -50, -53, -55, -64, -69, - -71, -85, -82, -78, -81, -85, -95, -102, - -112, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -105, - -100, -97, -92, -85, -83, -79, -72, -49, - -40, -43, -43, -54, -56, -51, -50, -40, - -43, -38, -36, -35, -37, -38, -37, -44, - -54, -60, -57, -60, -70, -75, -84, -92, - -103, -112, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 2000 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -102, -95, -89, -82, - -83, -84, -90, -92, -99, -107, -113, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -107, -101, -95, -89, -83, -72, - -74, -78, -85, -88, -88, -90, -92, -98, - -105, -111, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -109, -103, -97, -93, -87, -81, -70, - -70, -67, -75, -73, -76, -79, -81, -83, - -88, -89, -97, -103, -110, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -107, -100, -94, -88, -83, -75, -63, - -59, -59, -63, -66, -60, -62, -67, -67, - -77, -76, -81, -88, -86, -92, -96, -102, - -109, -116, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -105, -98, -92, -86, -81, -73, -56, - -52, -47, -55, -60, -58, -52, -51, -45, - -49, -50, -53, -54, -61, -71, -70, -69, - -78, -79, -87, -90, -96, -104, -112, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -103, -96, -90, -86, -78, -70, -51, - -42, -47, -48, -55, -54, -54, -53, -42, - -35, -28, -33, -38, -37, -44, -47, -49, - -54, -63, -68, -78, -82, -89, -94, -99, - -104, -109, -114, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 2828 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -110, -100, -90, -79, - -85, -81, -82, -82, -89, -94, -99, -103, - -109, -115, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -105, -97, -85, -72, - -74, -70, -70, -70, -76, -85, -91, -93, - -97, -103, -109, -115, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -112, -93, -81, -68, - -62, -60, -60, -57, -63, -70, -77, -82, - -90, -93, -98, -104, -109, -113, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -113, -100, -93, -84, -63, - -58, -48, -53, -54, -52, -52, -57, -64, - -66, -76, -83, -81, -85, -85, -90, -95, - -98, -101, -103, -106, -108, -111, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -105, -95, -86, -74, -53, - -50, -38, -43, -49, -43, -42, -39, -39, - -46, -52, -57, -56, -72, -69, -74, -81, - -87, -92, -94, -97, -99, -102, -105, -108, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -108, -99, -90, -76, -66, -45, - -43, -41, -44, -47, -43, -47, -40, -30, - -31, -31, -39, -33, -40, -41, -43, -53, - -59, -70, -73, -77, -79, -82, -84, -87, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 4000 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -110, -91, -76, - -75, -85, -93, -98, -104, -110, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -110, -91, -70, - -70, -75, -86, -89, -94, -98, -101, -106, - -110, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -110, -95, -80, -60, - -65, -64, -74, -83, -88, -91, -95, -99, - -103, -107, -110, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -110, -95, -80, -58, - -55, -49, -66, -68, -71, -78, -78, -80, - -88, -85, -89, -97, -100, -105, -110, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -110, -95, -80, -53, - -52, -41, -59, -59, -49, -58, -56, -63, - -86, -79, -90, -93, -98, -103, -107, -112, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -97, -91, -73, -45, - -40, -33, -53, -61, -49, -54, -50, -50, - -60, -52, -67, -74, -81, -92, -96, -100, - -105, -110, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 5657 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -113, -106, -99, -92, -77, - -80, -88, -97, -106, -115, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -116, -109, -102, -95, -89, -74, - -72, -88, -87, -95, -102, -109, -116, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -116, -109, -102, -95, -89, -75, - -66, -74, -77, -78, -86, -87, -90, -96, - -105, -115, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -115, -108, -101, -94, -88, -66, - -56, -61, -70, -65, -78, -72, -83, -84, - -93, -98, -105, -110, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -110, -105, -95, -89, -82, -57, - -52, -52, -59, -56, -59, -58, -69, -67, - -88, -82, -82, -89, -94, -100, -108, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -110, -101, -96, -90, -83, -77, -54, - -43, -38, -50, -48, -52, -48, -42, -42, - -51, -52, -53, -59, -65, -71, -78, -85, - -95, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 8000 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -120, -105, -86, -68, - -78, -79, -90, -100, -110, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -120, -105, -86, -66, - -73, -77, -88, -96, -105, -115, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -120, -105, -92, -80, -61, - -64, -68, -80, -87, -92, -100, -110, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -120, -104, -91, -79, -52, - -60, -54, -64, -69, -77, -80, -82, -84, - -85, -87, -88, -90, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -118, -100, -87, -77, -49, - -50, -44, -58, -61, -61, -67, -65, -62, - -62, -62, -65, -68, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -115, -98, -84, -62, -49, - -44, -38, -46, -49, -49, -46, -39, -37, - -39, -40, -42, -43, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 11314 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -110, -88, -74, - -77, -82, -82, -85, -90, -94, -99, -104, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -110, -88, -66, - -70, -81, -80, -81, -84, -88, -91, -93, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -110, -88, -61, - -63, -70, -71, -74, -77, -80, -83, -85, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -110, -86, -62, - -63, -62, -62, -58, -52, -50, -50, -52, - -54, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -118, -108, -84, -53, - -50, -50, -50, -55, -47, -45, -40, -40, - -40, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -118, -100, -73, -43, - -37, -42, -43, -53, -38, -37, -35, -35, - -38, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}}, - /* 16000 Hz */ - {{-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -100, -91, -84, -74, - -80, -80, -80, -80, -80, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -100, -91, -84, -74, - -68, -68, -68, -68, -68, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -100, -86, -78, -70, - -60, -45, -30, -21, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -100, -87, -78, -67, - -48, -38, -29, -21, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -100, -86, -69, -56, - -45, -35, -33, -29, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}, - {-999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -110, -100, -83, -71, -48, - -27, -38, -37, -34, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999, - -999, -999, -999, -999, -999, -999, -999, -999}} -}; - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/mdct.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/mdct.c deleted file mode 100644 index ebe4228b71..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/mdct.c +++ /dev/null @@ -1,568 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: normalized modified discrete cosine transform - power of two length transform only [64 <= n ] - last mod: $Id: mdct.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - Original algorithm adapted long ago from _The use of multirate filter - banks for coding of high quality digital audio_, by T. Sporer, - K. Brandenburg and B. Edler, collection of the European Signal - Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp - 211-214 - - The below code implements an algorithm that no longer looks much like - that presented in the paper, but the basic structure remains if you - dig deep enough to see it. - - This module DOES NOT INCLUDE code to generate/apply the window - function. Everybody has their own weird favorite including me... I - happen to like the properties of y=sin(.5PI*sin^2(x)), but others may - vehemently disagree. - - ********************************************************************/ - -/* this can also be run as an integer transform by uncommenting a - define in mdct.h; the integerization is a first pass and although - it's likely stable for Vorbis, the dynamic range is constrained and - roundoff isn't done (so it's noisy). Consider it functional, but - only a starting point. There's no point on a machine with an FPU */ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include -#include "../../codec.h" -#include "mdct.h" -#include "os.h" -#include "misc.h" - -/* build lookups for trig functions; also pre-figure scaling and - some window function algebra. */ - -void mdct_init(mdct_lookup *lookup,int n){ - int *bitrev=(int*) _ogg_malloc(sizeof(*bitrev)*(n/4)); - DATA_TYPE *T=(DATA_TYPE*) _ogg_malloc(sizeof(*T)*(n+n/4)); - - int i; - int n2=n>>1; - int log2n=lookup->log2n=rint(log((float)n)/log(2.f)); - lookup->n=n; - lookup->trig=T; - lookup->bitrev=bitrev; - -/* trig lookups... */ - - for(i=0;i>j;j++) - if((msb>>j)&i)acc|=1<scale=FLOAT_CONV(4.f/n); -} - -/* 8 point butterfly (in place, 4 register) */ -STIN void mdct_butterfly_8(DATA_TYPE *x){ - REG_TYPE r0 = x[6] + x[2]; - REG_TYPE r1 = x[6] - x[2]; - REG_TYPE r2 = x[4] + x[0]; - REG_TYPE r3 = x[4] - x[0]; - - x[6] = r0 + r2; - x[4] = r0 - r2; - - r0 = x[5] - x[1]; - r2 = x[7] - x[3]; - x[0] = r1 + r0; - x[2] = r1 - r0; - - r0 = x[5] + x[1]; - r1 = x[7] + x[3]; - x[3] = r2 + r3; - x[1] = r2 - r3; - x[7] = r1 + r0; - x[5] = r1 - r0; - -} - -/* 16 point butterfly (in place, 4 register) */ -STIN void mdct_butterfly_16(DATA_TYPE *x){ - REG_TYPE r0 = x[1] - x[9]; - REG_TYPE r1 = x[0] - x[8]; - - x[8] += x[0]; - x[9] += x[1]; - x[0] = MULT_NORM((r0 + r1) * cPI2_8); - x[1] = MULT_NORM((r0 - r1) * cPI2_8); - - r0 = x[3] - x[11]; - r1 = x[10] - x[2]; - x[10] += x[2]; - x[11] += x[3]; - x[2] = r0; - x[3] = r1; - - r0 = x[12] - x[4]; - r1 = x[13] - x[5]; - x[12] += x[4]; - x[13] += x[5]; - x[4] = MULT_NORM((r0 - r1) * cPI2_8); - x[5] = MULT_NORM((r0 + r1) * cPI2_8); - - r0 = x[14] - x[6]; - r1 = x[15] - x[7]; - x[14] += x[6]; - x[15] += x[7]; - x[6] = r0; - x[7] = r1; - - mdct_butterfly_8(x); - mdct_butterfly_8(x+8); -} - -/* 32 point butterfly (in place, 4 register) */ -STIN void mdct_butterfly_32(DATA_TYPE *x){ - REG_TYPE r0 = x[30] - x[14]; - REG_TYPE r1 = x[31] - x[15]; - - x[30] += x[14]; - x[31] += x[15]; - x[14] = r0; - x[15] = r1; - - r0 = x[28] - x[12]; - r1 = x[29] - x[13]; - x[28] += x[12]; - x[29] += x[13]; - x[12] = MULT_NORM( r0 * cPI1_8 - r1 * cPI3_8 ); - x[13] = MULT_NORM( r0 * cPI3_8 + r1 * cPI1_8 ); - - r0 = x[26] - x[10]; - r1 = x[27] - x[11]; - x[26] += x[10]; - x[27] += x[11]; - x[10] = MULT_NORM(( r0 - r1 ) * cPI2_8); - x[11] = MULT_NORM(( r0 + r1 ) * cPI2_8); - - r0 = x[24] - x[8]; - r1 = x[25] - x[9]; - x[24] += x[8]; - x[25] += x[9]; - x[8] = MULT_NORM( r0 * cPI3_8 - r1 * cPI1_8 ); - x[9] = MULT_NORM( r1 * cPI3_8 + r0 * cPI1_8 ); - - r0 = x[22] - x[6]; - r1 = x[7] - x[23]; - x[22] += x[6]; - x[23] += x[7]; - x[6] = r1; - x[7] = r0; - - r0 = x[4] - x[20]; - r1 = x[5] - x[21]; - x[20] += x[4]; - x[21] += x[5]; - x[4] = MULT_NORM( r1 * cPI1_8 + r0 * cPI3_8 ); - x[5] = MULT_NORM( r1 * cPI3_8 - r0 * cPI1_8 ); - - r0 = x[2] - x[18]; - r1 = x[3] - x[19]; - x[18] += x[2]; - x[19] += x[3]; - x[2] = MULT_NORM(( r1 + r0 ) * cPI2_8); - x[3] = MULT_NORM(( r1 - r0 ) * cPI2_8); - - r0 = x[0] - x[16]; - r1 = x[1] - x[17]; - x[16] += x[0]; - x[17] += x[1]; - x[0] = MULT_NORM( r1 * cPI3_8 + r0 * cPI1_8 ); - x[1] = MULT_NORM( r1 * cPI1_8 - r0 * cPI3_8 ); - - mdct_butterfly_16(x); - mdct_butterfly_16(x+16); - -} - -/* N point first stage butterfly (in place, 2 register) */ -STIN void mdct_butterfly_first(DATA_TYPE *T, - DATA_TYPE *x, - int points){ - - DATA_TYPE *x1 = x + points - 8; - DATA_TYPE *x2 = x + (points>>1) - 8; - REG_TYPE r0; - REG_TYPE r1; - - do{ - - r0 = x1[6] - x2[6]; - r1 = x1[7] - x2[7]; - x1[6] += x2[6]; - x1[7] += x2[7]; - x2[6] = MULT_NORM(r1 * T[1] + r0 * T[0]); - x2[7] = MULT_NORM(r1 * T[0] - r0 * T[1]); - - r0 = x1[4] - x2[4]; - r1 = x1[5] - x2[5]; - x1[4] += x2[4]; - x1[5] += x2[5]; - x2[4] = MULT_NORM(r1 * T[5] + r0 * T[4]); - x2[5] = MULT_NORM(r1 * T[4] - r0 * T[5]); - - r0 = x1[2] - x2[2]; - r1 = x1[3] - x2[3]; - x1[2] += x2[2]; - x1[3] += x2[3]; - x2[2] = MULT_NORM(r1 * T[9] + r0 * T[8]); - x2[3] = MULT_NORM(r1 * T[8] - r0 * T[9]); - - r0 = x1[0] - x2[0]; - r1 = x1[1] - x2[1]; - x1[0] += x2[0]; - x1[1] += x2[1]; - x2[0] = MULT_NORM(r1 * T[13] + r0 * T[12]); - x2[1] = MULT_NORM(r1 * T[12] - r0 * T[13]); - - x1-=8; - x2-=8; - T+=16; - - }while(x2>=x); -} - -/* N/stage point generic N stage butterfly (in place, 2 register) */ -STIN void mdct_butterfly_generic(DATA_TYPE *T, - DATA_TYPE *x, - int points, - int trigint){ - - DATA_TYPE *x1 = x + points - 8; - DATA_TYPE *x2 = x + (points>>1) - 8; - REG_TYPE r0; - REG_TYPE r1; - - do{ - - r0 = x1[6] - x2[6]; - r1 = x1[7] - x2[7]; - x1[6] += x2[6]; - x1[7] += x2[7]; - x2[6] = MULT_NORM(r1 * T[1] + r0 * T[0]); - x2[7] = MULT_NORM(r1 * T[0] - r0 * T[1]); - - T+=trigint; - - r0 = x1[4] - x2[4]; - r1 = x1[5] - x2[5]; - x1[4] += x2[4]; - x1[5] += x2[5]; - x2[4] = MULT_NORM(r1 * T[1] + r0 * T[0]); - x2[5] = MULT_NORM(r1 * T[0] - r0 * T[1]); - - T+=trigint; - - r0 = x1[2] - x2[2]; - r1 = x1[3] - x2[3]; - x1[2] += x2[2]; - x1[3] += x2[3]; - x2[2] = MULT_NORM(r1 * T[1] + r0 * T[0]); - x2[3] = MULT_NORM(r1 * T[0] - r0 * T[1]); - - T+=trigint; - - r0 = x1[0] - x2[0]; - r1 = x1[1] - x2[1]; - x1[0] += x2[0]; - x1[1] += x2[1]; - x2[0] = MULT_NORM(r1 * T[1] + r0 * T[0]); - x2[1] = MULT_NORM(r1 * T[0] - r0 * T[1]); - - T+=trigint; - x1-=8; - x2-=8; - - }while(x2>=x); -} - -STIN void mdct_butterflies(mdct_lookup *init, - DATA_TYPE *x, - int points){ - - DATA_TYPE *T=init->trig; - int stages=init->log2n-5; - int i,j; - - if(--stages>0){ - mdct_butterfly_first(T,x,points); - } - - for(i=1;--stages>0;i++){ - for(j=0;j<(1<>i)*j,points>>i,4<trig)_ogg_free(l->trig); - if(l->bitrev)_ogg_free(l->bitrev); - memset(l,0,sizeof(*l)); - } -} - -STIN void mdct_bitreverse(mdct_lookup *init, - DATA_TYPE *x){ - int n = init->n; - int *bit = init->bitrev; - DATA_TYPE *w0 = x; - DATA_TYPE *w1 = x = w0+(n>>1); - DATA_TYPE *T = init->trig+n; - - do{ - DATA_TYPE *x0 = x+bit[0]; - DATA_TYPE *x1 = x+bit[1]; - - REG_TYPE r0 = x0[1] - x1[1]; - REG_TYPE r1 = x0[0] + x1[0]; - REG_TYPE r2 = MULT_NORM(r1 * T[0] + r0 * T[1]); - REG_TYPE r3 = MULT_NORM(r1 * T[1] - r0 * T[0]); - - w1 -= 4; - - r0 = HALVE(x0[1] + x1[1]); - r1 = HALVE(x0[0] - x1[0]); - - w0[0] = r0 + r2; - w1[2] = r0 - r2; - w0[1] = r1 + r3; - w1[3] = r3 - r1; - - x0 = x+bit[2]; - x1 = x+bit[3]; - - r0 = x0[1] - x1[1]; - r1 = x0[0] + x1[0]; - r2 = MULT_NORM(r1 * T[2] + r0 * T[3]); - r3 = MULT_NORM(r1 * T[3] - r0 * T[2]); - - r0 = HALVE(x0[1] + x1[1]); - r1 = HALVE(x0[0] - x1[0]); - - w0[2] = r0 + r2; - w1[0] = r0 - r2; - w0[3] = r1 + r3; - w1[1] = r3 - r1; - - T += 4; - bit += 4; - w0 += 4; - - }while(w0n; - int n2=n>>1; - int n4=n>>2; - - /* rotate */ - - DATA_TYPE *iX = in+n2-7; - DATA_TYPE *oX = out+n2+n4; - DATA_TYPE *T = init->trig+n4; - - do{ - oX -= 4; - oX[0] = MULT_NORM(-iX[2] * T[3] - iX[0] * T[2]); - oX[1] = MULT_NORM (iX[0] * T[3] - iX[2] * T[2]); - oX[2] = MULT_NORM(-iX[6] * T[1] - iX[4] * T[0]); - oX[3] = MULT_NORM (iX[4] * T[1] - iX[6] * T[0]); - iX -= 8; - T += 4; - }while(iX>=in); - - iX = in+n2-8; - oX = out+n2+n4; - T = init->trig+n4; - - do{ - T -= 4; - oX[0] = MULT_NORM (iX[4] * T[3] + iX[6] * T[2]); - oX[1] = MULT_NORM (iX[4] * T[2] - iX[6] * T[3]); - oX[2] = MULT_NORM (iX[0] * T[1] + iX[2] * T[0]); - oX[3] = MULT_NORM (iX[0] * T[0] - iX[2] * T[1]); - iX -= 8; - oX += 4; - }while(iX>=in); - - mdct_butterflies(init,out+n2,n2); - mdct_bitreverse(init,out); - - /* roatate + window */ - - { - DATA_TYPE *oX1=out+n2+n4; - DATA_TYPE *oX2=out+n2+n4; - DATA_TYPE *iX =out; - T =init->trig+n2; - - do{ - oX1-=4; - - oX1[3] = MULT_NORM (iX[0] * T[1] - iX[1] * T[0]); - oX2[0] = -MULT_NORM (iX[0] * T[0] + iX[1] * T[1]); - - oX1[2] = MULT_NORM (iX[2] * T[3] - iX[3] * T[2]); - oX2[1] = -MULT_NORM (iX[2] * T[2] + iX[3] * T[3]); - - oX1[1] = MULT_NORM (iX[4] * T[5] - iX[5] * T[4]); - oX2[2] = -MULT_NORM (iX[4] * T[4] + iX[5] * T[5]); - - oX1[0] = MULT_NORM (iX[6] * T[7] - iX[7] * T[6]); - oX2[3] = -MULT_NORM (iX[6] * T[6] + iX[7] * T[7]); - - oX2+=4; - iX += 8; - T += 8; - }while(iXoX2); - } -} - -void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){ - int n=init->n; - int n2=n>>1; - int n4=n>>2; - int n8=n>>3; - DATA_TYPE *w=(DATA_TYPE*) alloca(n*sizeof(*w)); /* forward needs working space */ - DATA_TYPE *w2=w+n2; - - /* rotate */ - - /* window + rotate + step 1 */ - - REG_TYPE r0; - REG_TYPE r1; - DATA_TYPE *x0=in+n2+n4; - DATA_TYPE *x1=x0+1; - DATA_TYPE *T=init->trig+n2; - - int i=0; - - for(i=0;itrig+n2; - x0=out+n2; - - for(i=0;iscale); - x0[0] =MULT_NORM((w[0]*T[1]-w[1]*T[0])*init->scale); - w+=2; - T+=2; - } -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/mdct.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/mdct.h deleted file mode 100644 index 9d219ce743..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/mdct.h +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: modified discrete cosine transform prototypes - last mod: $Id: mdct.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _OGG_mdct_H_ -#define _OGG_mdct_H_ - -#include "../../codec.h" - - - - - -/*#define MDCT_INTEGERIZED <- be warned there could be some hurt left here*/ -#ifdef MDCT_INTEGERIZED - -#define DATA_TYPE int -#define REG_TYPE register int -#define TRIGBITS 14 -#define cPI3_8 6270 -#define cPI2_8 11585 -#define cPI1_8 15137 - -#define FLOAT_CONV(x) ((int)((x)*(1<>TRIGBITS) -#define HALVE(x) ((x)>>1) - -#else - -#define DATA_TYPE float -#define REG_TYPE float -#define cPI3_8 .38268343236508977175F -#define cPI2_8 .70710678118654752441F -#define cPI1_8 .92387953251128675613F - -#define FLOAT_CONV(x) (x) -#define MULT_NORM(x) (x) -#define HALVE(x) ((x)*.5f) - -#endif - - -typedef struct { - int n; - int log2n; - - DATA_TYPE *trig; - int *bitrev; - - DATA_TYPE scale; -} mdct_lookup; - -extern void mdct_init(mdct_lookup *lookup,int n); -extern void mdct_clear(mdct_lookup *l); -extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out); -extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/misc.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/misc.h deleted file mode 100644 index 06f3da540b..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/misc.h +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: miscellaneous prototypes - last mod: $Id: misc.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_RANDOM_H_ -#define _V_RANDOM_H_ -#include "../../codec.h" - -extern int analysis_noisy; - -extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes); -extern void _vorbis_block_ripcord(vorbis_block *vb); -extern void _analysis_output(char *base,int i,float *v,int n,int bark,int dB, - ogg_int64_t off); - -#ifdef DEBUG_MALLOC - -#define _VDBG_GRAPHFILE "malloc.m" -extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line); -extern void _VDBG_free(void *ptr,char *file,long line); - -#ifndef MISC_C -#undef _ogg_malloc -#undef _ogg_calloc -#undef _ogg_realloc -#undef _ogg_free - -#define _ogg_malloc(x) _VDBG_malloc(NULL,(x),__FILE__,__LINE__) -#define _ogg_calloc(x,y) _VDBG_malloc(NULL,(x)*(y),__FILE__,__LINE__) -#define _ogg_realloc(x,y) _VDBG_malloc((x),(y),__FILE__,__LINE__) -#define _ogg_free(x) _VDBG_free((x),__FILE__,__LINE__) -#endif -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/floor_all.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/floor_all.h deleted file mode 100644 index 035e455a7e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/floor_all.h +++ /dev/null @@ -1,247 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: key floor settings - last mod: $Id: floor_all.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "../../../codec.h" -#include "../backends.h" -#include "../books/floor/floor_books.h" - -static static_codebook *_floor_128x4_books[]={ - &_huff_book_line_128x4_class0, - &_huff_book_line_128x4_0sub0, - &_huff_book_line_128x4_0sub1, - &_huff_book_line_128x4_0sub2, - &_huff_book_line_128x4_0sub3, -}; -static static_codebook *_floor_256x4_books[]={ - &_huff_book_line_256x4_class0, - &_huff_book_line_256x4_0sub0, - &_huff_book_line_256x4_0sub1, - &_huff_book_line_256x4_0sub2, - &_huff_book_line_256x4_0sub3, -}; -static static_codebook *_floor_128x7_books[]={ - &_huff_book_line_128x7_class0, - &_huff_book_line_128x7_class1, - - &_huff_book_line_128x7_0sub1, - &_huff_book_line_128x7_0sub2, - &_huff_book_line_128x7_0sub3, - &_huff_book_line_128x7_1sub1, - &_huff_book_line_128x7_1sub2, - &_huff_book_line_128x7_1sub3, -}; -static static_codebook *_floor_256x7_books[]={ - &_huff_book_line_256x7_class0, - &_huff_book_line_256x7_class1, - - &_huff_book_line_256x7_0sub1, - &_huff_book_line_256x7_0sub2, - &_huff_book_line_256x7_0sub3, - &_huff_book_line_256x7_1sub1, - &_huff_book_line_256x7_1sub2, - &_huff_book_line_256x7_1sub3, -}; -static static_codebook *_floor_128x11_books[]={ - &_huff_book_line_128x11_class1, - &_huff_book_line_128x11_class2, - &_huff_book_line_128x11_class3, - - &_huff_book_line_128x11_0sub0, - &_huff_book_line_128x11_1sub0, - &_huff_book_line_128x11_1sub1, - &_huff_book_line_128x11_2sub1, - &_huff_book_line_128x11_2sub2, - &_huff_book_line_128x11_2sub3, - &_huff_book_line_128x11_3sub1, - &_huff_book_line_128x11_3sub2, - &_huff_book_line_128x11_3sub3, -}; -static static_codebook *_floor_128x17_books[]={ - &_huff_book_line_128x17_class1, - &_huff_book_line_128x17_class2, - &_huff_book_line_128x17_class3, - - &_huff_book_line_128x17_0sub0, - &_huff_book_line_128x17_1sub0, - &_huff_book_line_128x17_1sub1, - &_huff_book_line_128x17_2sub1, - &_huff_book_line_128x17_2sub2, - &_huff_book_line_128x17_2sub3, - &_huff_book_line_128x17_3sub1, - &_huff_book_line_128x17_3sub2, - &_huff_book_line_128x17_3sub3, -}; -static static_codebook *_floor_256x4low_books[]={ - &_huff_book_line_256x4low_class0, - &_huff_book_line_256x4low_0sub0, - &_huff_book_line_256x4low_0sub1, - &_huff_book_line_256x4low_0sub2, - &_huff_book_line_256x4low_0sub3, -}; -static static_codebook *_floor_1024x27_books[]={ - &_huff_book_line_1024x27_class1, - &_huff_book_line_1024x27_class2, - &_huff_book_line_1024x27_class3, - &_huff_book_line_1024x27_class4, - - &_huff_book_line_1024x27_0sub0, - &_huff_book_line_1024x27_1sub0, - &_huff_book_line_1024x27_1sub1, - &_huff_book_line_1024x27_2sub0, - &_huff_book_line_1024x27_2sub1, - &_huff_book_line_1024x27_3sub1, - &_huff_book_line_1024x27_3sub2, - &_huff_book_line_1024x27_3sub3, - &_huff_book_line_1024x27_4sub1, - &_huff_book_line_1024x27_4sub2, - &_huff_book_line_1024x27_4sub3, -}; -static static_codebook *_floor_2048x27_books[]={ - &_huff_book_line_2048x27_class1, - &_huff_book_line_2048x27_class2, - &_huff_book_line_2048x27_class3, - &_huff_book_line_2048x27_class4, - - &_huff_book_line_2048x27_0sub0, - &_huff_book_line_2048x27_1sub0, - &_huff_book_line_2048x27_1sub1, - &_huff_book_line_2048x27_2sub0, - &_huff_book_line_2048x27_2sub1, - &_huff_book_line_2048x27_3sub1, - &_huff_book_line_2048x27_3sub2, - &_huff_book_line_2048x27_3sub3, - &_huff_book_line_2048x27_4sub1, - &_huff_book_line_2048x27_4sub2, - &_huff_book_line_2048x27_4sub3, -}; - -static static_codebook *_floor_512x17_books[]={ - &_huff_book_line_512x17_class1, - &_huff_book_line_512x17_class2, - &_huff_book_line_512x17_class3, - - &_huff_book_line_512x17_0sub0, - &_huff_book_line_512x17_1sub0, - &_huff_book_line_512x17_1sub1, - &_huff_book_line_512x17_2sub1, - &_huff_book_line_512x17_2sub2, - &_huff_book_line_512x17_2sub3, - &_huff_book_line_512x17_3sub1, - &_huff_book_line_512x17_3sub2, - &_huff_book_line_512x17_3sub3, -}; - -static static_codebook **_floor_books[10]={ - _floor_128x4_books, - _floor_256x4_books, - _floor_128x7_books, - _floor_256x7_books, - _floor_128x11_books, - _floor_128x17_books, - _floor_256x4low_books, - _floor_1024x27_books, - _floor_2048x27_books, - _floor_512x17_books, -}; - -static vorbis_info_floor1 _floor[10]={ - /* 128 x 4 */ - { - 1,{0},{4},{2},{0}, - {{1,2,3,4}}, - 4,{0,128, 33,8,16,70}, - - 60,30,500, 1.,18., -1 - }, - /* 256 x 4 */ - { - 1,{0},{4},{2},{0}, - {{1,2,3,4}}, - 4,{0,256, 66,16,32,140}, - - 60,30,500, 1.,18., -1 - }, - /* 128 x 7 */ - { - 2,{0,1},{3,4},{2,2},{0,1}, - {{-1,2,3,4},{-1,5,6,7}}, - 4,{0,128, 14,4,58, 2,8,28,90}, - - 60,30,500, 1.,18., -1 - }, - /* 256 x 7 */ - { - 2,{0,1},{3,4},{2,2},{0,1}, - {{-1,2,3,4},{-1,5,6,7}}, - 4,{0,256, 28,8,116, 4,16,56,180}, - - 60,30,500, 1.,18., -1 - }, - /* 128 x 11 */ - { - 4,{0,1,2,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2}, - {{3},{4,5},{-1,6,7,8},{-1,9,10,11}}, - - 2,{0,128, 8,33, 4,16,70, 2,6,12, 23,46,90}, - - 60,30,500, 1,18., -1 - }, - /* 128 x 17 */ - { - 6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2}, - {{3},{4,5},{-1,6,7,8},{-1,9,10,11}}, - 2,{0,128, 12,46, 4,8,16, 23,33,70, 2,6,10, 14,19,28, 39,58,90}, - - 60,30,500, 1,18., -1 - }, - /* 256 x 4 (low bitrate version) */ - { - 1,{0},{4},{2},{0}, - {{1,2,3,4}}, - 4,{0,256, 66,16,32,140}, - - 60,30,500, 1.,18., -1 - }, - /* 1024 x 27 */ - { - 8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3}, - {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}}, - 2,{0,1024, 93,23,372, 6,46,186,750, 14,33,65, 130,260,556, - 3,10,18,28, 39,55,79,111, 158,220,312, 464,650,850}, - - 60,30,500, 3,18., -1 /* lowpass */ - }, - /* 2048 x 27 */ - { - 8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3}, - {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}}, - 2,{0,2048, 186,46,744, 12,92,372,1500, 28,66,130, 260,520,1112, - 6,20,36,56, 78,110,158,222, 316,440,624, 928,1300,1700}, - - 60,30,500, 3,18., -1 /* lowpass */ - }, - /* 512 x 17 */ - { - 6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2}, - {{3},{4,5},{-1,6,7,8},{-1,9,10,11}}, - 2,{0,512, 46,186, 16,33,65, 93,130,278, - 7,23,39, 55,79,110, 156,232,360}, - - 60,30,500, 1,18., -1 /* lowpass! */ - }, - -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_11.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_11.h deleted file mode 100644 index bcea049852..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_11.h +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 11kHz settings - last mod: $Id: psych_11.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -static double _psy_lowpass_11[3]={4.5,5.5,30.,}; - -static att3 _psy_tone_masteratt_11[3]={ - {{ 30, 25, 12}, 0, 0}, /* 0 */ - {{ 30, 25, 12}, 0, 0}, /* 0 */ - {{ 20, 0, -14}, 0, 0}, /* 0 */ -}; - -static vp_adjblock _vp_tonemask_adj_11[3]={ - /* adjust for mode zero */ - /* 63 125 250 500 1 2 4 8 16 */ - {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 2, 0,99,99,99}}, /* 0 */ - {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 5, 0, 0,99,99,99}}, /* 1 */ - {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 2 */ -}; - - -static noise3 _psy_noisebias_11[3]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 10, 10, 12, 12, 12, 99, 99, 99}, - {-15,-15,-15,-15,-10,-10, -5, 0, 0, 4, 4, 5, 5, 10, 99, 99, 99}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}}, - - {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 10, 10, 12, 12, 12, 99, 99, 99}, - {-15,-15,-15,-15,-10,-10, -5, -5, -5, 0, 0, 0, 0, 0, 99, 99, 99}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 99, 99, 99}, - {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}}, -}; - -static double _noise_thresh_11[3]={ .3,.5,.5 }; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_16.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_16.h deleted file mode 100644 index a9ec30bf8e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_16.h +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 16kHz settings - last mod: $Id: psych_16.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -/* stereo mode by base quality level */ -static adj_stereo _psy_stereo_modes_16[4]={ - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */ - {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - {{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, -}; - -static double _psy_lowpass_16[4]={6.5,8,30.,99.}; - -static att3 _psy_tone_masteratt_16[4]={ - {{ 30, 25, 12}, 0, 0}, /* 0 */ - {{ 25, 22, 12}, 0, 0}, /* 0 */ - {{ 20, 12, 0}, 0, 0}, /* 0 */ - {{ 15, 0, -14}, 0, 0}, /* 0 */ -}; - -static vp_adjblock _vp_tonemask_adj_16[4]={ - /* adjust for mode zero */ - /* 63 125 250 500 1 2 4 8 16 */ - {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 0 */ - {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 1 */ - {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */ - {{-30,-30,-30,-30,-30,-26,-20,-10, -5, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */ -}; - - -static noise3 _psy_noisebias_16_short[4]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 10, 10, 10, 10, 12, 12, 14, 20}, - {-15,-15,-15,-15,-15,-10,-10, -5, 0, 0, 4, 5, 5, 6, 8, 8, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}}, - - {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 6, 6, 6, 6, 8, 10, 12, 20}, - {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5, 4, 5, 6, 8, 8, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 12}, - {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10, -8, 0, 0, 0, 0, 2, 5}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5, 0, 0, 0, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}}, -}; - -static noise3 _psy_noisebias_16_impulse[4]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 10, 10, 10, 10, 12, 12, 14, 20}, - {-15,-15,-15,-15,-15,-10,-10, -5, 0, 0, 4, 5, 5, 6, 8, 8, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}}, - - {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 4, 4, 4, 5, 5, 6, 8, 15}, - {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5, 0, 0, 0, 0, 4, 10}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 4, 10}, - {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10,-10,-10,-10,-10,-10, -7, -5}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5, 0, 0, 0, 6}, - {-30,-30,-30,-30,-26,-22,-20,-18,-18,-18,-20,-20,-20,-20,-20,-20,-16}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}}, -}; - -static noise3 _psy_noisebias_16[4]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 6, 8, 8, 10, 10, 10, 14, 20}, - {-10,-10,-10,-10,-10, -5, -2, -2, 0, 0, 0, 4, 5, 6, 8, 8, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}}, - - {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 6, 6, 6, 6, 8, 10, 12, 20}, - {-15,-15,-15,-15,-15,-10, -5, -5, 0, 0, 0, 4, 5, 6, 8, 8, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 12}, - {-20,-20,-20,-20,-16,-12,-20,-10, -5, -5, 0, 0, 0, 0, 0, 2, 5}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5, 0, 0, 0, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}}, -}; - -static double _noise_thresh_16[4]={ .3,.5,.5,.5 }; - -static int _noise_start_16[3]={ 256,256,9999 }; -static int _noise_part_16[4]={ 8,8,8,8 }; - -static int _psy_ath_floater_16[4]={ - -100,-100,-100,-105, -}; - -static int _psy_ath_abs_16[4]={ - -130,-130,-130,-140, -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_44.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_44.h deleted file mode 100644 index 291e5cb88d..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_44.h +++ /dev/null @@ -1,666 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: key psychoacoustic settings for 44.1/48kHz - last mod: $Id: psych_44.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - - -/* preecho trigger settings *****************************************/ - -static vorbis_info_psy_global _psy_global_44[5]={ - - {8, /* lines per eighth octave */ - {20.f,14.f,12.f,12.f,12.f,12.f,12.f}, - {-60.f,-30.f,-40.f,-40.f,-40.f,-40.f,-40.f}, 2,-75.f, - -6.f, - {99.},{{99.},{99.}},{0},{0},{{0.},{0.}} - }, - {8, /* lines per eighth octave */ - {14.f,10.f,10.f,10.f,10.f,10.f,10.f}, - {-40.f,-30.f,-25.f,-25.f,-25.f,-25.f,-25.f}, 2,-80.f, - -6.f, - {99.},{{99.},{99.}},{0},{0},{{0.},{0.}} - }, - {8, /* lines per eighth octave */ - {12.f,10.f,10.f,10.f,10.f,10.f,10.f}, - {-20.f,-20.f,-15.f,-15.f,-15.f,-15.f,-15.f}, 0,-80.f, - -6.f, - {99.},{{99.},{99.}},{0},{0},{{0.},{0.}} - }, - {8, /* lines per eighth octave */ - {10.f,8.f,8.f,8.f,8.f,8.f,8.f}, - {-20.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-80.f, - -6.f, - {99.},{{99.},{99.}},{0},{0},{{0.},{0.}} - }, - {8, /* lines per eighth octave */ - {10.f,6.f,6.f,6.f,6.f,6.f,6.f}, - {-15.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-85.f, - -6.f, - {99.},{{99.},{99.}},{0},{0},{{0.},{0.}} - }, -}; - -/* noise compander lookups * low, mid, high quality ****************/ -static compandblock _psy_compand_44[6]={ - /* sub-mode Z short */ - {{ - 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */ - 8, 9,10,11,12,13,14, 15, /* 15dB */ - 16,17,18,19,20,21,22, 23, /* 23dB */ - 24,25,26,27,28,29,30, 31, /* 31dB */ - 32,33,34,35,36,37,38, 39, /* 39dB */ - }}, - /* mode_Z nominal short */ - {{ - 0, 1, 2, 3, 4, 5, 6, 6, /* 7dB */ - 7, 7, 7, 7, 6, 6, 6, 7, /* 15dB */ - 7, 8, 9,10,11,12,13, 14, /* 23dB */ - 15,16,17,17,17,18,18, 19, /* 31dB */ - 19,19,20,21,22,23,24, 25, /* 39dB */ - }}, - /* mode A short */ - {{ - 0, 1, 2, 3, 4, 5, 5, 5, /* 7dB */ - 6, 6, 6, 5, 4, 4, 4, 4, /* 15dB */ - 4, 4, 5, 5, 5, 6, 6, 6, /* 23dB */ - 7, 7, 7, 8, 8, 8, 9, 10, /* 31dB */ - 11,12,13,14,15,16,17, 18, /* 39dB */ - }}, - /* sub-mode Z long */ - {{ - 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */ - 8, 9,10,11,12,13,14, 15, /* 15dB */ - 16,17,18,19,20,21,22, 23, /* 23dB */ - 24,25,26,27,28,29,30, 31, /* 31dB */ - 32,33,34,35,36,37,38, 39, /* 39dB */ - }}, - /* mode_Z nominal long */ - {{ - 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */ - 8, 9,10,11,12,12,13, 13, /* 15dB */ - 13,14,14,14,15,15,15, 15, /* 23dB */ - 16,16,17,17,17,18,18, 19, /* 31dB */ - 19,19,20,21,22,23,24, 25, /* 39dB */ - }}, - /* mode A long */ - {{ - 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */ - 8, 8, 7, 6, 5, 4, 4, 4, /* 15dB */ - 4, 4, 5, 5, 5, 6, 6, 6, /* 23dB */ - 7, 7, 7, 8, 8, 8, 9, 10, /* 31dB */ - 11,12,13,14,15,16,17, 18, /* 39dB */ - }} -}; - -/* tonal masking curve level adjustments *************************/ - -static vp_adjblock _vp_tonemask_adj_longblock[12]={ - - /* 63 125 250 500 1 2 4 8 16 */ - - {{ -3, -8,-13,-15,-10,-10,-10,-10,-10,-10,-10, 0, 0, 0, 0, 0, 0}}, /* -1 */ - -/* {{-15,-15,-15,-15,-10, -8, -4, -2, 0, 0, 0, 10, 0, 0, 0, 0, 0}}, 0 */ - {{ -4,-10,-14,-16,-15,-14,-13,-12,-12,-12,-11, -1, -1, -1, -1, -1, 0}}, /* 0 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 5, 0, 0, 0, 0, 0}}, 1 */ - {{ -6,-12,-14,-16,-15,-15,-14,-13,-13,-12,-12, -2, -2, -1, -1, -1, 0}}, /* 1 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 2 */ - {{-12,-13,-14,-16,-16,-16,-15,-14,-13,-12,-12, -6, -3, -1, -1, -1, 0}}, /* 2 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 3 */ - {{-15,-15,-15,-16,-16,-16,-16,-14,-13,-13,-13,-10, -4, -2, -1, -1, 0}}, /* 3 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, *//* 4 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 4 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 5 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 5 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 6 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -8, -4, -2, -2, 0}}, /* 6 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 7 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 7 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 8 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 8 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 9 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 9 */ - -/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 10 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 10 */ -}; - -static vp_adjblock _vp_tonemask_adj_otherblock[12]={ - /* 63 125 250 500 1 2 4 8 16 */ - - {{ -3, -8,-13,-15,-10,-10, -9, -9, -9, -9, -9, 1, 1, 1, 1, 1, 1}}, /* -1 */ - -/* {{-20,-20,-20,-20,-14,-12,-10, -8, -4, 0, 0, 10, 0, 0, 0, 0, 0}}, 0 */ - {{ -4,-10,-14,-16,-14,-13,-12,-12,-11,-11,-10, 0, 0, 0, 0, 0, 0}}, /* 0 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 5, 0, 0, 0, 0, 0}}, 1 */ - {{ -6,-12,-14,-16,-15,-15,-14,-13,-13,-12,-12, -2, -2, -1, 0, 0, 0}}, /* 1 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 2 */ - {{-12,-13,-14,-16,-16,-16,-15,-14,-13,-12,-12, -5, -2, -1, 0, 0, 0}}, /* 2 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 3 */ - {{-15,-15,-15,-16,-16,-16,-16,-14,-13,-13,-13,-10, -4, -2, 0, 0, 0}}, /* 3 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 4 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 4 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 5 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 5 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 6 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -8, -4, -2, -2, 0}}, /* 6 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 7 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 7 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 8 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 8 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 9 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 9 */ - -/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 10 */ - {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 10 */ -}; - -/* noise bias (transition block) */ -static noise3 _psy_noisebias_trans[12]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - /* -1 */ - {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2, 2, 2, 3, 6, 6, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}}, - /* 0 - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4, 0, 0, 0, 0, 2, 4, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4, -2}}},*/ - {{{-15,-15,-15,-15,-15,-12, -6, -4, 0, 2, 4, 4, 5, 5, 5, 8, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4, 0, 0, 0, 0, 2, 3, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4, -2}}}, - /* 1 - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 8}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},*/ - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2, 0, 1, 4}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}}, - /* 2 - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}}, */ - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -2, -1, 0, 3}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -7, -4}}}, - /* 3 - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/ - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -2, 0, 2}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}}, - /* 4 - {{{-20,-20,-20,-20,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 5}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/ - {{{-20,-20,-20,-20,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -2, -1, 1}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}}, - /* 5 - {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1, 2}, - {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}}, */ - {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -3, -1, 0}, - {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}}, - /* 6 - {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2, 1}, - {-34,-34,-34,-34,-30,-26,-24,-18,-17,-15,-15,-15,-15,-13,-13,-12, -8}}},*/ - {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -5, -2, 0}, - {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}}, - /* 7 - {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-32,-32,-32,-32,-28,-24,-24,-18,-14,-12,-10, -8, -8, -8, -6, -4, 0}, - {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}},*/ - {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7}, - {-32,-32,-32,-32,-28,-24,-24,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2}, - {-34,-34,-34,-34,-30,-26,-26,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}}, - /* 8 - {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2, 0, 0, 0, 1, 2, 3, 7}, - {-36,-36,-36,-36,-30,-30,-30,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2}, - {-36,-36,-36,-36,-34,-30,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},*/ - {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2, 0, 0, 0, 1, 2, 3, 7}, - {-36,-36,-36,-36,-30,-30,-30,-24,-20,-16,-16,-16,-16,-14,-12,-10, -7}, - {-36,-36,-36,-36,-34,-30,-28,-26,-24,-30,-30,-30,-30,-30,-30,-24,-20}}}, - /* 9 - {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2}, - {-36,-36,-36,-36,-34,-32,-32,-28,-20,-16,-16,-16,-16,-14,-12,-10, -7}, - {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},*/ - {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2}, - {-38,-38,-38,-38,-36,-34,-34,-30,-24,-20,-20,-20,-20,-18,-16,-12,-10}, - {-40,-40,-40,-40,-40,-40,-40,-38,-35,-35,-35,-35,-35,-35,-35,-35,-30}}}, - /* 10 */ - {{{-30,-30,-30,-30,-30,-30,-30,-28,-20,-14,-14,-14,-14,-14,-14,-12,-10}, - {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-20}, - {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}}, -}; - -/* noise bias (long block) */ -static noise3 _psy_noisebias_long[12]={ - /*63 125 250 500 1k 2k 4k 8k 16k*/ - /* -1 */ - {{{-10,-10,-10,-10,-10, -4, 0, 0, 0, 6, 6, 6, 6, 10, 10, 12, 20}, - {-20,-20,-20,-20,-20,-20,-10, -2, 0, 0, 0, 0, 0, 2, 4, 6, 15}, - {-20,-20,-20,-20,-20,-20,-20,-10, -6, -6, -6, -6, -6, -4, -4, -4, -2}}}, - - /* 0 */ - /* {{{-10,-10,-10,-10,-10,-10, -8, 2, 2, 2, 4, 4, 5, 5, 5, 8, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14, -6, 0, 0, 0, 0, 0, 2, 4, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}},*/ - {{{-10,-10,-10,-10,-10,-10, -8, 2, 2, 2, 4, 4, 5, 5, 5, 8, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14, -6, 0, 0, 0, 0, 0, 2, 3, 6}, - {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}}, - /* 1 */ - /* {{{-10,-10,-10,-10,-10,-10, -8, -4, 0, 2, 4, 4, 5, 5, 5, 8, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 8}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},*/ - {{{-10,-10,-10,-10,-10,-10, -8, -4, 0, 2, 4, 4, 5, 5, 5, 8, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2, 0, 1, 4}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}}, - /* 2 */ - /* {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 6}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/ - {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -2, -1, 0, 3}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}}, - /* 3 */ - /* {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 6}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/ - {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -2, 0, 2}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -5}}}, - /* 4 */ - /* {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 5}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/ - {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -2, -1, 1}, - {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -7}}}, - /* 5 */ - /* {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1, 2}, - {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},*/ - {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -3, -1, 0}, - {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -8}}}, - /* 6 */ - /* {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2, 1}, - {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12, -8}}},*/ - {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -5, -2, 0}, - {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12,-10}}}, - /* 7 */ - {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7}, - {-24,-24,-24,-24,-24,-24,-24,-18,-14,-10, -8, -8, -8, -8, -6, -4, 0}, - {-26,-26,-26,-26,-26,-26,-26,-22,-20,-19,-19,-19,-19,-18,-17,-16,-12}}}, - /* 8 */ - {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 0, 0, 0, 0, 1, 2, 3, 7}, - {-26,-26,-26,-26,-26,-26,-26,-20,-16,-12,-10,-10,-10,-10, -8, -6, -2}, - {-28,-28,-28,-28,-28,-28,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}}, - /* 9 */ - {{{-22,-22,-22,-22,-22,-22,-22,-18,-14, -8, -4, -4, -4, -4, -4, -2, 2}, - {-26,-26,-26,-26,-26,-26,-26,-22,-18,-16,-16,-16,-16,-14,-12,-10, -7}, - {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-24,-20}}}, - /* 10 */ - {{{-24,-24,-24,-24,-24,-24,-24,-24,-24,-18,-14,-14,-14,-14,-14,-12,-10}, - {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-20}, - {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}}, -}; - -/* noise bias (impulse block) */ -static noise3 _psy_noisebias_impulse[12]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - /* -1 */ - {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2, 2, 2, 3, 6, 6, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}}, - - /* 0 */ - /* {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 4, 8, 8, 8, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2, 0, 0, 0, 0, 2, 4, 10}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},*/ - {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 4, 8, 8, 8, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2, 0, 0, 0, 0, 2, 3, 6}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}}, - /* 1 */ - {{{-12,-12,-12,-12,-12, -8, -6, -4, 0, 4, 4, 4, 4, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -4, -4, -2, -2, -2, -2, 2}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8,-10,-10, -8, -8, -8, -6, -4}}}, - /* 2 */ - {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 8, 10, 10, 16}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, 0}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}}, - /* 3 */ - {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 6, 8, 8, 14}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, 0}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}}, - /* 4 */ - {{{-16,-16,-16,-16,-16,-12,-10, -6, -2, 0, 0, 0, 0, 4, 6, 6, 12}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, 0}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}}, - /* 5 */ - {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 4, 6, 11}, - {-32,-32,-32,-32,-28,-24,-22,-16,-10, -6, -8, -8, -6, -6, -6, -4, -2}, - {-34,-34,-34,-34,-30,-26,-24,-18,-14,-12,-12,-12,-12,-12,-10, -9, -5}}}, - /* 6 - {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 4, 6, 11}, - {-34,-34,-34,-34,-30,-30,-24,-20,-12,-12,-14,-14,-10, -9, -8, -6, -4}, - {-34,-34,-34,-34,-34,-30,-26,-20,-16,-15,-15,-15,-15,-15,-13,-12, -8}}},*/ - {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 4, 6, 11}, - {-34,-34,-34,-34,-30,-30,-30,-24,-16,-16,-16,-16,-16,-16,-14,-14,-12}, - {-36,-36,-36,-36,-36,-34,-28,-24,-20,-20,-20,-20,-20,-20,-20,-18,-16}}}, - /* 7 */ - /* {{{-22,-22,-22,-22,-22,-20,-14,-10, -6, 0, 0, 0, 0, 4, 4, 6, 11}, - {-34,-34,-34,-34,-30,-30,-24,-20,-14,-14,-16,-16,-14,-12,-10,-10,-10}, - {-34,-34,-34,-34,-32,-32,-30,-24,-20,-19,-19,-19,-19,-19,-17,-16,-12}}},*/ - {{{-22,-22,-22,-22,-22,-20,-14,-10, -6, 0, 0, 0, 0, 4, 4, 6, 11}, - {-34,-34,-34,-34,-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-24,-22}, - {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-30,-24}}}, - /* 8 */ - /* {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1, 3, 3, 5, 10}, - {-34,-34,-34,-34,-30,-30,-30,-24,-20,-20,-20,-20,-20,-18,-16,-16,-14}, - {-36,-36,-36,-36,-36,-34,-28,-24,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},*/ - {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1, 3, 3, 5, 10}, - {-34,-34,-34,-34,-34,-32,-32,-30,-26,-26,-26,-26,-26,-26,-26,-26,-24}, - {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-30,-24}}}, - /* 9 */ - /* {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2}, - {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-22,-20,-20,-18}, - {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},*/ - {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2}, - {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26}, - {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}}, - /* 10 */ - {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-16,-16,-16,-16,-16,-14,-12}, - {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-26}, - {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}}, -}; - -/* noise bias (padding block) */ -static noise3 _psy_noisebias_padding[12]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - - /* -1 */ - {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2, 2, 2, 3, 6, 6, 15}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}}, - - /* 0 */ - {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, 2, 3, 6, 6, 8, 10}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -4, -4, -4, -4, -2, 0, 2}}}, - /* 1 */ - {{{-12,-12,-12,-12,-12, -8, -6, -4, 0, 4, 4, 4, 4, 10, 12, 14, 20}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, 0, 0, 0, 2, 2, 4, 8}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -6, -4, -2, 0}}}, - /* 2 */ - /* {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 8, 10, 10, 16}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, 0, 0, 0, 2, 2, 4, 8}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},*/ - {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 8, 10, 10, 16}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, 0, 0, 2, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}}, - /* 3 */ - {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 6, 8, 8, 14}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, 0, 0, 2, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}}, - /* 4 */ - {{{-16,-16,-16,-16,-16,-12,-10, -6, -2, 0, 0, 0, 0, 4, 6, 6, 12}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, -1, 0, 2, 6}, - {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}}, - /* 5 */ - {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 6, 6, 12}, - {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -3, -3, -3, -3, -2, 0, 4}, - {-34,-34,-34,-34,-30,-26,-24,-18,-14,-10,-10,-10,-10,-10, -8, -5, -3}}}, - /* 6 */ - {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 6, 6, 12}, - {-34,-34,-34,-34,-30,-30,-24,-20,-14, -8, -4, -4, -4, -4, -3, -1, 4}, - {-34,-34,-34,-34,-34,-30,-26,-20,-16,-13,-13,-13,-13,-13,-11, -8, -6}}}, - /* 7 */ - {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 6, 6, 12}, - {-34,-34,-34,-34,-30,-30,-30,-24,-16,-10, -8, -6, -6, -6, -5, -3, 1}, - {-34,-34,-34,-34,-32,-32,-28,-22,-18,-16,-16,-16,-16,-16,-14,-12,-10}}}, - /* 8 */ - {{{-22,-22,-22,-22,-22,-20,-14,-10, -4, 0, 0, 0, 0, 3, 5, 5, 11}, - {-34,-34,-34,-34,-30,-30,-30,-24,-16,-12,-10, -8, -8, -8, -7, -5, -2}, - {-36,-36,-36,-36,-36,-34,-28,-22,-20,-20,-20,-20,-20,-20,-20,-16,-14}}}, - /* 9 */ - {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -2, -2, -2, -2, 0, 2, 6}, - {-36,-36,-36,-36,-34,-32,-32,-24,-16,-12,-12,-12,-12,-12,-10, -8, -5}, - {-40,-40,-40,-40,-40,-40,-40,-32,-26,-24,-24,-24,-24,-24,-24,-20,-18}}}, - /* 10 */ - {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-12,-12,-12,-12,-12,-10, -8}, - {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-25,-25,-25,-25,-25,-25,-15}, - {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}}, -}; - - -static noiseguard _psy_noiseguards_44[4]={ - {3,3,15}, - {3,3,15}, - {10,10,100}, - {10,10,100}, -}; - -static int _psy_tone_suppress[12]={ - -20,-20,-20,-20,-20,-24,-30,-40,-40,-45,-45,-45, -}; -static int _psy_tone_0dB[12]={ - 90,90,95,95,95,95,105,105,105,105,105,105, -}; -static int _psy_noise_suppress[12]={ - -20,-20,-24,-24,-24,-24,-30,-40,-40,-45,-45,-45, -}; - -static vorbis_info_psy _psy_info_template={ - /* blockflag */ - -1, - /* ath_adjatt, ath_maxatt */ - -140.,-140., - /* tonemask att boost/decay,suppr,curves */ - {0.f,0.f,0.f}, 0.,0., -40.f, {0.}, - - /*noisemaskp,supp, low/high window, low/hi guard, minimum */ - 1, -0.f, .5f, .5f, 0,0,0, - /* noiseoffset*3, noisecompand, max_curve_dB */ - {{-1},{-1},{-1}},{-1},105.f, - /* noise normalization - channel_p, point_p, start, partition, thresh. */ - 0,0,-1,-1,0., -}; - -/* ath ****************/ - -static int _psy_ath_floater[12]={ - -100,-100,-100,-100,-100,-100,-105,-105,-105,-105,-110,-120, -}; -static int _psy_ath_abs[12]={ - -130,-130,-130,-130,-140,-140,-140,-140,-140,-140,-140,-150, -}; - -/* stereo setup. These don't map directly to quality level, there's - an additional indirection as several of the below may be used in a - single bitmanaged stream - -****************/ - -/* various stereo possibilities */ - -/* stereo mode by base quality level */ -static adj_stereo _psy_stereo_modes_44[12]={ - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -1 */ - {{ 4, 4, 4, 4, 4, 4, 4, 3, 2, 2, 1, 0, 0, 0, 0}, - { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 5, 4, 3}, - { 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 8, 8}, - { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}}, - -/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 */ -/*{{ 4, 4, 4, 4, 4, 4, 4, 3, 2, 2, 1, 0, 0, 0, 0}, - { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 5, 4, 3}, - { 1, 2, 3, 4, 5, 5, 6, 6, 6, 6, 6, 7, 8, 8, 8}, - { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},*/ - {{ 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0, 0, 0, 0, 0}, - { 8, 8, 8, 8, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 3}, - { 1, 2, 3, 4, 4, 5, 6, 6, 6, 6, 6, 8, 8, 8, 8}, - { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}}, - - - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 */ - {{ 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0}, - { 8, 8, 8, 8, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 3}, - { 1, 2, 3, 4, 4, 5, 6, 6, 6, 6, 6, 8, 8, 8, 8}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - - - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 */ - /* {{ 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 0, 0, 0, 0, 0}, - { 8, 8, 8, 6, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1}, - { 3, 4, 4, 4, 5, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, */ - {{ 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0}, - { 8, 8, 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 3, 2, 1}, - { 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3 */ - {{ 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, - { 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1}, - { 4, 4, 5, 6, 6, 6, 6, 6, 8, 8, 10, 10, 10, 10, 10}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 4 */ - {{ 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 0}, - { 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 */ - /* {{ 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0}, - { 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},*/ - {{ 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0}, - { 6, 7, 8, 8, 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 6 */ - /* {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 3, 3, 3, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, */ - {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 3, 3, 3, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 8, 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 7 */ - /* {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 3, 3, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},*/ - {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 3, 3, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 8 */ - /* {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},*/ - {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 9 */ - {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 10 */ - {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, -}; - -/* tone master attenuation by base quality mode and bitrate tweak */ -static att3 _psy_tone_masteratt_44[12]={ - {{ 35, 21, 9}, 0, 0}, /* -1 */ - {{ 30, 20, 8}, -2, 1.25}, /* 0 */ - /* {{ 25, 14, 4}, 0, 0}, *//* 1 */ - {{ 25, 12, 2}, 0, 0}, /* 1 */ - /* {{ 20, 10, -2}, 0, 0}, *//* 2 */ - {{ 20, 9, -3}, 0, 0}, /* 2 */ - {{ 20, 9, -4}, 0, 0}, /* 3 */ - {{ 20, 9, -4}, 0, 0}, /* 4 */ - {{ 20, 6, -6}, 0, 0}, /* 5 */ - {{ 20, 3, -10}, 0, 0}, /* 6 */ - {{ 18, 1, -14}, 0, 0}, /* 7 */ - {{ 18, 0, -16}, 0, 0}, /* 8 */ - {{ 18, -2, -16}, 0, 0}, /* 9 */ - {{ 12, -2, -20}, 0, 0}, /* 10 */ -}; - -/* lowpass by mode **************/ -static double _psy_lowpass_44[12]={ - /* 15.1,15.8,16.5,17.9,20.5,48.,999.,999.,999.,999.,999. */ - 13.9,15.1,15.8,16.5,17.2,18.9,20.1,48.,999.,999.,999.,999. -}; - -/* noise normalization **********/ - -static int _noise_start_short_44[11]={ - /* 16,16,16,16,32,32,9999,9999,9999,9999 */ - 32,16,16,16,32,9999,9999,9999,9999,9999,9999 -}; -static int _noise_start_long_44[11]={ - /* 128,128,128,256,512,512,9999,9999,9999,9999 */ - 256,128,128,256,512,9999,9999,9999,9999,9999,9999 -}; - -static int _noise_part_short_44[11]={ - 8,8,8,8,8,8,8,8,8,8,8 -}; -static int _noise_part_long_44[11]={ - 32,32,32,32,32,32,32,32,32,32,32 -}; - -static double _noise_thresh_44[11]={ - /* .2,.2,.3,.4,.5,.5,9999.,9999.,9999.,9999., */ - .2,.2,.2,.4,.6,9999.,9999.,9999.,9999.,9999.,9999., -}; - -static double _noise_thresh_5only[2]={ - .5,.5, -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_8.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_8.h deleted file mode 100644 index 7f4b57c287..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/psych_8.h +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 8kHz psychoacoustic settings - last mod: $Id: psych_8.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -static att3 _psy_tone_masteratt_8[3]={ - {{ 32, 25, 12}, 0, 0}, /* 0 */ - {{ 30, 25, 12}, 0, 0}, /* 0 */ - {{ 20, 0, -14}, 0, 0}, /* 0 */ -}; - -static vp_adjblock _vp_tonemask_adj_8[3]={ - /* adjust for mode zero */ - /* 63 125 250 500 1 2 4 8 16 */ - {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */ - {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */ - {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 1 */ -}; - - -static noise3 _psy_noisebias_8[3]={ - /* 63 125 250 500 1k 2k 4k 8k 16k*/ - {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 8, 8, 8, 10, 10, 99, 99, 99}, - {-10,-10,-10,-10, -5, -5, -5, 0, 0, 4, 4, 4, 4, 4, 99, 99, 99}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}}, - - {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 8, 8, 8, 10, 10, 99, 99, 99}, - {-10,-10,-10,-10,-10,-10, -5, -5, -5, 0, 0, 0, 0, 0, 99, 99, 99}, - {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}}, - - {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 99, 99, 99}, - {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99}, - {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}}, -}; - -/* stereo mode by base quality level */ -static adj_stereo _psy_stereo_modes_8[3]={ - /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */ - {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, - {{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}}, -}; - -static noiseguard _psy_noiseguards_8[2]={ - {10,10,-1}, - {10,10,-1}, -}; - -static compandblock _psy_compand_8[2]={ - {{ - 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */ - 8, 8, 9, 9,10,10,11, 11, /* 15dB */ - 12,12,13,13,14,14,15, 15, /* 23dB */ - 16,16,17,17,17,18,18, 19, /* 31dB */ - 19,19,20,21,22,23,24, 25, /* 39dB */ - }}, - {{ - 0, 1, 2, 3, 4, 5, 6, 6, /* 7dB */ - 7, 7, 6, 6, 5, 5, 4, 4, /* 15dB */ - 3, 3, 3, 4, 5, 6, 7, 8, /* 23dB */ - 9,10,11,12,13,14,15, 16, /* 31dB */ - 17,18,19,20,21,22,23, 24, /* 39dB */ - }}, -}; - -static double _psy_lowpass_8[3]={3.,4.,4.}; -static int _noise_start_8[2]={ - 64,64, -}; -static int _noise_part_8[2]={ - 8,8, -}; - -static int _psy_ath_floater_8[3]={ - -100,-100,-105, -}; - -static int _psy_ath_abs_8[3]={ - -130,-130,-140, -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_16.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_16.h deleted file mode 100644 index 17fc303579..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_16.h +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel residue templates 16/22kHz - last mod: $Id: residue_16.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -/***** residue backends *********************************************/ - -static static_bookblock _resbook_16s_0={ - { - {0}, - {0,0,&_16c0_s_p1_0}, - {0,0,&_16c0_s_p2_0}, - {0,0,&_16c0_s_p3_0}, - {0,0,&_16c0_s_p4_0}, - {0,0,&_16c0_s_p5_0}, - {0,0,&_16c0_s_p6_0}, - {&_16c0_s_p7_0,&_16c0_s_p7_1}, - {&_16c0_s_p8_0,&_16c0_s_p8_1}, - {&_16c0_s_p9_0,&_16c0_s_p9_1,&_16c0_s_p9_2} - } -}; -static static_bookblock _resbook_16s_1={ - { - {0}, - {0,0,&_16c1_s_p1_0}, - {0,0,&_16c1_s_p2_0}, - {0,0,&_16c1_s_p3_0}, - {0,0,&_16c1_s_p4_0}, - {0,0,&_16c1_s_p5_0}, - {0,0,&_16c1_s_p6_0}, - {&_16c1_s_p7_0,&_16c1_s_p7_1}, - {&_16c1_s_p8_0,&_16c1_s_p8_1}, - {&_16c1_s_p9_0,&_16c1_s_p9_1,&_16c1_s_p9_2} - } -}; -static static_bookblock _resbook_16s_2={ - { - {0}, - {0,0,&_16c2_s_p1_0}, - {0,0,&_16c2_s_p2_0}, - {0,0,&_16c2_s_p3_0}, - {0,0,&_16c2_s_p4_0}, - {&_16c2_s_p5_0,&_16c2_s_p5_1}, - {&_16c2_s_p6_0,&_16c2_s_p6_1}, - {&_16c2_s_p7_0,&_16c2_s_p7_1}, - {&_16c2_s_p8_0,&_16c2_s_p8_1}, - {&_16c2_s_p9_0,&_16c2_s_p9_1,&_16c2_s_p9_2} - } -}; - -static vorbis_residue_template _res_16s_0[]={ - {2,0, &_residue_44_mid, - &_huff_book__16c0_s_single,&_huff_book__16c0_s_single, - &_resbook_16s_0,&_resbook_16s_0}, -}; -static vorbis_residue_template _res_16s_1[]={ - {2,0, &_residue_44_mid, - &_huff_book__16c1_s_short,&_huff_book__16c1_s_short, - &_resbook_16s_1,&_resbook_16s_1}, - - {2,0, &_residue_44_mid, - &_huff_book__16c1_s_long,&_huff_book__16c1_s_long, - &_resbook_16s_1,&_resbook_16s_1} -}; -static vorbis_residue_template _res_16s_2[]={ - {2,0, &_residue_44_high, - &_huff_book__16c2_s_short,&_huff_book__16c2_s_short, - &_resbook_16s_2,&_resbook_16s_2}, - - {2,0, &_residue_44_high, - &_huff_book__16c2_s_long,&_huff_book__16c2_s_long, - &_resbook_16s_2,&_resbook_16s_2} -}; - -static vorbis_mapping_template _mapres_template_16_stereo[3]={ - { _map_nominal, _res_16s_0 }, /* 0 */ - { _map_nominal, _res_16s_1 }, /* 1 */ - { _map_nominal, _res_16s_2 }, /* 2 */ -}; - -static static_bookblock _resbook_16u_0={ - { - {0}, - {0,0,&_16u0__p1_0}, - {0,0,&_16u0__p2_0}, - {0,0,&_16u0__p3_0}, - {0,0,&_16u0__p4_0}, - {0,0,&_16u0__p5_0}, - {&_16u0__p6_0,&_16u0__p6_1}, - {&_16u0__p7_0,&_16u0__p7_1,&_16u0__p7_2} - } -}; -static static_bookblock _resbook_16u_1={ - { - {0}, - {0,0,&_16u1__p1_0}, - {0,0,&_16u1__p2_0}, - {0,0,&_16u1__p3_0}, - {0,0,&_16u1__p4_0}, - {0,0,&_16u1__p5_0}, - {0,0,&_16u1__p6_0}, - {&_16u1__p7_0,&_16u1__p7_1}, - {&_16u1__p8_0,&_16u1__p8_1}, - {&_16u1__p9_0,&_16u1__p9_1,&_16u1__p9_2} - } -}; -static static_bookblock _resbook_16u_2={ - { - {0}, - {0,0,&_16u2_p1_0}, - {0,0,&_16u2_p2_0}, - {0,0,&_16u2_p3_0}, - {0,0,&_16u2_p4_0}, - {&_16u2_p5_0,&_16u2_p5_1}, - {&_16u2_p6_0,&_16u2_p6_1}, - {&_16u2_p7_0,&_16u2_p7_1}, - {&_16u2_p8_0,&_16u2_p8_1}, - {&_16u2_p9_0,&_16u2_p9_1,&_16u2_p9_2} - } -}; - -static vorbis_residue_template _res_16u_0[]={ - {1,0, &_residue_44_low_un, - &_huff_book__16u0__single,&_huff_book__16u0__single, - &_resbook_16u_0,&_resbook_16u_0}, -}; -static vorbis_residue_template _res_16u_1[]={ - {1,0, &_residue_44_mid_un, - &_huff_book__16u1__short,&_huff_book__16u1__short, - &_resbook_16u_1,&_resbook_16u_1}, - - {1,0, &_residue_44_mid_un, - &_huff_book__16u1__long,&_huff_book__16u1__long, - &_resbook_16u_1,&_resbook_16u_1} -}; -static vorbis_residue_template _res_16u_2[]={ - {1,0, &_residue_44_hi_un, - &_huff_book__16u2__short,&_huff_book__16u2__short, - &_resbook_16u_2,&_resbook_16u_2}, - - {1,0, &_residue_44_hi_un, - &_huff_book__16u2__long,&_huff_book__16u2__long, - &_resbook_16u_2,&_resbook_16u_2} -}; - - -static vorbis_mapping_template _mapres_template_16_uncoupled[3]={ - { _map_nominal_u, _res_16u_0 }, /* 0 */ - { _map_nominal_u, _res_16u_1 }, /* 1 */ - { _map_nominal_u, _res_16u_2 }, /* 2 */ -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_44.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_44.h deleted file mode 100644 index 569c98e8b7..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_44.h +++ /dev/null @@ -1,292 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel residue templates for 32/44.1/48kHz - last mod: $Id: residue_44.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "../../../codec.h" -#include "../backends.h" -#include "../books/coupled/res_books_stereo.h" - -/***** residue backends *********************************************/ - -static vorbis_info_residue0 _residue_44_low={ - 0,-1, -1, 9,-1, - /* 0 1 2 3 4 5 6 7 */ - {0}, - {-1}, - { .5, 1.5, 2.5, 2.5, 4.5, 8.5, 16.5, 32.5}, - { .5, .5, .5, 999., 4.5, 8.5, 16.5, 32.5}, -}; - -static vorbis_info_residue0 _residue_44_mid={ - 0,-1, -1, 10,-1, - /* 0 1 2 3 4 5 6 7 8 */ - {0}, - {-1}, - { .5, 1.5, 1.5, 2.5, 2.5, 4.5, 8.5, 16.5, 32.5}, - { .5, .5, 999., .5, 999., 4.5, 8.5, 16.5, 32.5}, -}; - -static vorbis_info_residue0 _residue_44_high={ - 0,-1, -1, 10,-1, - /* 0 1 2 3 4 5 6 7 8 */ - {0}, - {-1}, - { .5, 1.5, 2.5, 4.5, 8.5, 16.5, 32.5, 71.5,157.5}, - { .5, 1.5, 2.5, 3.5, 4.5, 8.5, 16.5, 71.5,157.5}, -}; - -static static_bookblock _resbook_44s_n1={ - { - {0},{0,0,&_44cn1_s_p1_0},{0,0,&_44cn1_s_p2_0}, - {0,0,&_44cn1_s_p3_0},{0,0,&_44cn1_s_p4_0},{0,0,&_44cn1_s_p5_0}, - {&_44cn1_s_p6_0,&_44cn1_s_p6_1},{&_44cn1_s_p7_0,&_44cn1_s_p7_1}, - {&_44cn1_s_p8_0,&_44cn1_s_p8_1,&_44cn1_s_p8_2} - } -}; -static static_bookblock _resbook_44sm_n1={ - { - {0},{0,0,&_44cn1_sm_p1_0},{0,0,&_44cn1_sm_p2_0}, - {0,0,&_44cn1_sm_p3_0},{0,0,&_44cn1_sm_p4_0},{0,0,&_44cn1_sm_p5_0}, - {&_44cn1_sm_p6_0,&_44cn1_sm_p6_1},{&_44cn1_sm_p7_0,&_44cn1_sm_p7_1}, - {&_44cn1_sm_p8_0,&_44cn1_sm_p8_1,&_44cn1_sm_p8_2} - } -}; - -static static_bookblock _resbook_44s_0={ - { - {0},{0,0,&_44c0_s_p1_0},{0,0,&_44c0_s_p2_0}, - {0,0,&_44c0_s_p3_0},{0,0,&_44c0_s_p4_0},{0,0,&_44c0_s_p5_0}, - {&_44c0_s_p6_0,&_44c0_s_p6_1},{&_44c0_s_p7_0,&_44c0_s_p7_1}, - {&_44c0_s_p8_0,&_44c0_s_p8_1,&_44c0_s_p8_2} - } -}; -static static_bookblock _resbook_44sm_0={ - { - {0},{0,0,&_44c0_sm_p1_0},{0,0,&_44c0_sm_p2_0}, - {0,0,&_44c0_sm_p3_0},{0,0,&_44c0_sm_p4_0},{0,0,&_44c0_sm_p5_0}, - {&_44c0_sm_p6_0,&_44c0_sm_p6_1},{&_44c0_sm_p7_0,&_44c0_sm_p7_1}, - {&_44c0_sm_p8_0,&_44c0_sm_p8_1,&_44c0_sm_p8_2} - } -}; - -static static_bookblock _resbook_44s_1={ - { - {0},{0,0,&_44c1_s_p1_0},{0,0,&_44c1_s_p2_0}, - {0,0,&_44c1_s_p3_0},{0,0,&_44c1_s_p4_0},{0,0,&_44c1_s_p5_0}, - {&_44c1_s_p6_0,&_44c1_s_p6_1},{&_44c1_s_p7_0,&_44c1_s_p7_1}, - {&_44c1_s_p8_0,&_44c1_s_p8_1,&_44c1_s_p8_2} - } -}; -static static_bookblock _resbook_44sm_1={ - { - {0},{0,0,&_44c1_sm_p1_0},{0,0,&_44c1_sm_p2_0}, - {0,0,&_44c1_sm_p3_0},{0,0,&_44c1_sm_p4_0},{0,0,&_44c1_sm_p5_0}, - {&_44c1_sm_p6_0,&_44c1_sm_p6_1},{&_44c1_sm_p7_0,&_44c1_sm_p7_1}, - {&_44c1_sm_p8_0,&_44c1_sm_p8_1,&_44c1_sm_p8_2} - } -}; - -static static_bookblock _resbook_44s_2={ - { - {0},{0,0,&_44c2_s_p1_0},{0,0,&_44c2_s_p2_0},{0,0,&_44c2_s_p3_0}, - {0,0,&_44c2_s_p4_0},{0,0,&_44c2_s_p5_0},{0,0,&_44c2_s_p6_0}, - {&_44c2_s_p7_0,&_44c2_s_p7_1},{&_44c2_s_p8_0,&_44c2_s_p8_1}, - {&_44c2_s_p9_0,&_44c2_s_p9_1,&_44c2_s_p9_2} - } -}; -static static_bookblock _resbook_44s_3={ - { - {0},{0,0,&_44c3_s_p1_0},{0,0,&_44c3_s_p2_0},{0,0,&_44c3_s_p3_0}, - {0,0,&_44c3_s_p4_0},{0,0,&_44c3_s_p5_0},{0,0,&_44c3_s_p6_0}, - {&_44c3_s_p7_0,&_44c3_s_p7_1},{&_44c3_s_p8_0,&_44c3_s_p8_1}, - {&_44c3_s_p9_0,&_44c3_s_p9_1,&_44c3_s_p9_2} - } -}; -static static_bookblock _resbook_44s_4={ - { - {0},{0,0,&_44c4_s_p1_0},{0,0,&_44c4_s_p2_0},{0,0,&_44c4_s_p3_0}, - {0,0,&_44c4_s_p4_0},{0,0,&_44c4_s_p5_0},{0,0,&_44c4_s_p6_0}, - {&_44c4_s_p7_0,&_44c4_s_p7_1},{&_44c4_s_p8_0,&_44c4_s_p8_1}, - {&_44c4_s_p9_0,&_44c4_s_p9_1,&_44c4_s_p9_2} - } -}; -static static_bookblock _resbook_44s_5={ - { - {0},{0,0,&_44c5_s_p1_0},{0,0,&_44c5_s_p2_0},{0,0,&_44c5_s_p3_0}, - {0,0,&_44c5_s_p4_0},{0,0,&_44c5_s_p5_0},{0,0,&_44c5_s_p6_0}, - {&_44c5_s_p7_0,&_44c5_s_p7_1},{&_44c5_s_p8_0,&_44c5_s_p8_1}, - {&_44c5_s_p9_0,&_44c5_s_p9_1,&_44c5_s_p9_2} - } -}; -static static_bookblock _resbook_44s_6={ - { - {0},{0,0,&_44c6_s_p1_0},{0,0,&_44c6_s_p2_0},{0,0,&_44c6_s_p3_0}, - {0,0,&_44c6_s_p4_0}, - {&_44c6_s_p5_0,&_44c6_s_p5_1}, - {&_44c6_s_p6_0,&_44c6_s_p6_1}, - {&_44c6_s_p7_0,&_44c6_s_p7_1}, - {&_44c6_s_p8_0,&_44c6_s_p8_1}, - {&_44c6_s_p9_0,&_44c6_s_p9_1,&_44c6_s_p9_2} - } -}; -static static_bookblock _resbook_44s_7={ - { - {0},{0,0,&_44c7_s_p1_0},{0,0,&_44c7_s_p2_0},{0,0,&_44c7_s_p3_0}, - {0,0,&_44c7_s_p4_0}, - {&_44c7_s_p5_0,&_44c7_s_p5_1}, - {&_44c7_s_p6_0,&_44c7_s_p6_1}, - {&_44c7_s_p7_0,&_44c7_s_p7_1}, - {&_44c7_s_p8_0,&_44c7_s_p8_1}, - {&_44c7_s_p9_0,&_44c7_s_p9_1,&_44c7_s_p9_2} - } -}; -static static_bookblock _resbook_44s_8={ - { - {0},{0,0,&_44c8_s_p1_0},{0,0,&_44c8_s_p2_0},{0,0,&_44c8_s_p3_0}, - {0,0,&_44c8_s_p4_0}, - {&_44c8_s_p5_0,&_44c8_s_p5_1}, - {&_44c8_s_p6_0,&_44c8_s_p6_1}, - {&_44c8_s_p7_0,&_44c8_s_p7_1}, - {&_44c8_s_p8_0,&_44c8_s_p8_1}, - {&_44c8_s_p9_0,&_44c8_s_p9_1,&_44c8_s_p9_2} - } -}; -static static_bookblock _resbook_44s_9={ - { - {0},{0,0,&_44c9_s_p1_0},{0,0,&_44c9_s_p2_0},{0,0,&_44c9_s_p3_0}, - {0,0,&_44c9_s_p4_0}, - {&_44c9_s_p5_0,&_44c9_s_p5_1}, - {&_44c9_s_p6_0,&_44c9_s_p6_1}, - {&_44c9_s_p7_0,&_44c9_s_p7_1}, - {&_44c9_s_p8_0,&_44c9_s_p8_1}, - {&_44c9_s_p9_0,&_44c9_s_p9_1,&_44c9_s_p9_2} - } -}; - -static vorbis_residue_template _res_44s_n1[]={ - {2,0, &_residue_44_low, - &_huff_book__44cn1_s_short,&_huff_book__44cn1_sm_short, - &_resbook_44s_n1,&_resbook_44sm_n1}, - - {2,0, &_residue_44_low, - &_huff_book__44cn1_s_long,&_huff_book__44cn1_sm_long, - &_resbook_44s_n1,&_resbook_44sm_n1} -}; -static vorbis_residue_template _res_44s_0[]={ - {2,0, &_residue_44_low, - &_huff_book__44c0_s_short,&_huff_book__44c0_sm_short, - &_resbook_44s_0,&_resbook_44sm_0}, - - {2,0, &_residue_44_low, - &_huff_book__44c0_s_long,&_huff_book__44c0_sm_long, - &_resbook_44s_0,&_resbook_44sm_0} -}; -static vorbis_residue_template _res_44s_1[]={ - {2,0, &_residue_44_low, - &_huff_book__44c1_s_short,&_huff_book__44c1_sm_short, - &_resbook_44s_1,&_resbook_44sm_1}, - - {2,0, &_residue_44_low, - &_huff_book__44c1_s_long,&_huff_book__44c1_sm_long, - &_resbook_44s_1,&_resbook_44sm_1} -}; - -static vorbis_residue_template _res_44s_2[]={ - {2,0, &_residue_44_mid, - &_huff_book__44c2_s_short,&_huff_book__44c2_s_short, - &_resbook_44s_2,&_resbook_44s_2}, - - {2,0, &_residue_44_mid, - &_huff_book__44c2_s_long,&_huff_book__44c2_s_long, - &_resbook_44s_2,&_resbook_44s_2} -}; -static vorbis_residue_template _res_44s_3[]={ - {2,0, &_residue_44_mid, - &_huff_book__44c3_s_short,&_huff_book__44c3_s_short, - &_resbook_44s_3,&_resbook_44s_3}, - - {2,0, &_residue_44_mid, - &_huff_book__44c3_s_long,&_huff_book__44c3_s_long, - &_resbook_44s_3,&_resbook_44s_3} -}; -static vorbis_residue_template _res_44s_4[]={ - {2,0, &_residue_44_mid, - &_huff_book__44c4_s_short,&_huff_book__44c4_s_short, - &_resbook_44s_4,&_resbook_44s_4}, - - {2,0, &_residue_44_mid, - &_huff_book__44c4_s_long,&_huff_book__44c4_s_long, - &_resbook_44s_4,&_resbook_44s_4} -}; -static vorbis_residue_template _res_44s_5[]={ - {2,0, &_residue_44_mid, - &_huff_book__44c5_s_short,&_huff_book__44c5_s_short, - &_resbook_44s_5,&_resbook_44s_5}, - - {2,0, &_residue_44_mid, - &_huff_book__44c5_s_long,&_huff_book__44c5_s_long, - &_resbook_44s_5,&_resbook_44s_5} -}; -static vorbis_residue_template _res_44s_6[]={ - {2,0, &_residue_44_high, - &_huff_book__44c6_s_short,&_huff_book__44c6_s_short, - &_resbook_44s_6,&_resbook_44s_6}, - - {2,0, &_residue_44_high, - &_huff_book__44c6_s_long,&_huff_book__44c6_s_long, - &_resbook_44s_6,&_resbook_44s_6} -}; -static vorbis_residue_template _res_44s_7[]={ - {2,0, &_residue_44_high, - &_huff_book__44c7_s_short,&_huff_book__44c7_s_short, - &_resbook_44s_7,&_resbook_44s_7}, - - {2,0, &_residue_44_high, - &_huff_book__44c7_s_long,&_huff_book__44c7_s_long, - &_resbook_44s_7,&_resbook_44s_7} -}; -static vorbis_residue_template _res_44s_8[]={ - {2,0, &_residue_44_high, - &_huff_book__44c8_s_short,&_huff_book__44c8_s_short, - &_resbook_44s_8,&_resbook_44s_8}, - - {2,0, &_residue_44_high, - &_huff_book__44c8_s_long,&_huff_book__44c8_s_long, - &_resbook_44s_8,&_resbook_44s_8} -}; -static vorbis_residue_template _res_44s_9[]={ - {2,0, &_residue_44_high, - &_huff_book__44c9_s_short,&_huff_book__44c9_s_short, - &_resbook_44s_9,&_resbook_44s_9}, - - {2,0, &_residue_44_high, - &_huff_book__44c9_s_long,&_huff_book__44c9_s_long, - &_resbook_44s_9,&_resbook_44s_9} -}; - -static vorbis_mapping_template _mapres_template_44_stereo[]={ - { _map_nominal, _res_44s_n1 }, /* -1 */ - { _map_nominal, _res_44s_0 }, /* 0 */ - { _map_nominal, _res_44s_1 }, /* 1 */ - { _map_nominal, _res_44s_2 }, /* 2 */ - { _map_nominal, _res_44s_3 }, /* 3 */ - { _map_nominal, _res_44s_4 }, /* 4 */ - { _map_nominal, _res_44s_5 }, /* 5 */ - { _map_nominal, _res_44s_6 }, /* 6 */ - { _map_nominal, _res_44s_7 }, /* 7 */ - { _map_nominal, _res_44s_8 }, /* 8 */ - { _map_nominal, _res_44s_9 }, /* 9 */ -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_44u.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_44u.h deleted file mode 100644 index ccf3918ded..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_44u.h +++ /dev/null @@ -1,318 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel residue templates for 32/44.1/48kHz uncoupled - last mod: $Id: residue_44u.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "../../../codec.h" -#include "../backends.h" -#include "../books/uncoupled/res_books_uncoupled.h" - -/***** residue backends *********************************************/ - - -static vorbis_info_residue0 _residue_44_low_un={ - 0,-1, -1, 8,-1, - {0}, - {-1}, - { .5, 1.5, 1.5, 2.5, 2.5, 4.5, 28.5}, - { -1, 25, -1, 45, -1, -1, -1} -}; - -static vorbis_info_residue0 _residue_44_mid_un={ - 0,-1, -1, 10,-1, - /* 0 1 2 3 4 5 6 7 8 9 */ - {0}, - {-1}, - { .5, 1.5, 1.5, 2.5, 2.5, 4.5, 4.5, 16.5, 60.5}, - { -1, 30, -1, 50, -1, 80, -1, -1, -1} -}; - -static vorbis_info_residue0 _residue_44_hi_un={ - 0,-1, -1, 10,-1, - /* 0 1 2 3 4 5 6 7 8 9 */ - {0}, - {-1}, - { .5, 1.5, 2.5, 4.5, 8.5, 16.5, 32.5, 71.5,157.5}, - { -1, -1, -1, -1, -1, -1, -1, -1, -1} -}; - -/* mapping conventions: - only one submap (this would change for efficient 5.1 support for example)*/ -/* Four psychoacoustic profiles are used, one for each blocktype */ -static vorbis_info_mapping0 _map_nominal_u[2]={ - {1, {0,0}, {0}, {0}, 0,{0},{0}}, - {1, {0,0}, {1}, {1}, 0,{0},{0}} -}; - -static static_bookblock _resbook_44u_n1={ - { - {0}, - {0,0,&_44un1__p1_0}, - {0,0,&_44un1__p2_0}, - {0,0,&_44un1__p3_0}, - {0,0,&_44un1__p4_0}, - {0,0,&_44un1__p5_0}, - {&_44un1__p6_0,&_44un1__p6_1}, - {&_44un1__p7_0,&_44un1__p7_1,&_44un1__p7_2} - } -}; -static static_bookblock _resbook_44u_0={ - { - {0}, - {0,0,&_44u0__p1_0}, - {0,0,&_44u0__p2_0}, - {0,0,&_44u0__p3_0}, - {0,0,&_44u0__p4_0}, - {0,0,&_44u0__p5_0}, - {&_44u0__p6_0,&_44u0__p6_1}, - {&_44u0__p7_0,&_44u0__p7_1,&_44u0__p7_2} - } -}; -static static_bookblock _resbook_44u_1={ - { - {0}, - {0,0,&_44u1__p1_0}, - {0,0,&_44u1__p2_0}, - {0,0,&_44u1__p3_0}, - {0,0,&_44u1__p4_0}, - {0,0,&_44u1__p5_0}, - {&_44u1__p6_0,&_44u1__p6_1}, - {&_44u1__p7_0,&_44u1__p7_1,&_44u1__p7_2} - } -}; -static static_bookblock _resbook_44u_2={ - { - {0}, - {0,0,&_44u2__p1_0}, - {0,0,&_44u2__p2_0}, - {0,0,&_44u2__p3_0}, - {0,0,&_44u2__p4_0}, - {0,0,&_44u2__p5_0}, - {&_44u2__p6_0,&_44u2__p6_1}, - {&_44u2__p7_0,&_44u2__p7_1,&_44u2__p7_2} - } -}; -static static_bookblock _resbook_44u_3={ - { - {0}, - {0,0,&_44u3__p1_0}, - {0,0,&_44u3__p2_0}, - {0,0,&_44u3__p3_0}, - {0,0,&_44u3__p4_0}, - {0,0,&_44u3__p5_0}, - {&_44u3__p6_0,&_44u3__p6_1}, - {&_44u3__p7_0,&_44u3__p7_1,&_44u3__p7_2} - } -}; -static static_bookblock _resbook_44u_4={ - { - {0}, - {0,0,&_44u4__p1_0}, - {0,0,&_44u4__p2_0}, - {0,0,&_44u4__p3_0}, - {0,0,&_44u4__p4_0}, - {0,0,&_44u4__p5_0}, - {&_44u4__p6_0,&_44u4__p6_1}, - {&_44u4__p7_0,&_44u4__p7_1,&_44u4__p7_2} - } -}; -static static_bookblock _resbook_44u_5={ - { - {0}, - {0,0,&_44u5__p1_0}, - {0,0,&_44u5__p2_0}, - {0,0,&_44u5__p3_0}, - {0,0,&_44u5__p4_0}, - {0,0,&_44u5__p5_0}, - {0,0,&_44u5__p6_0}, - {&_44u5__p7_0,&_44u5__p7_1}, - {&_44u5__p8_0,&_44u5__p8_1}, - {&_44u5__p9_0,&_44u5__p9_1,&_44u5__p9_2} - } -}; -static static_bookblock _resbook_44u_6={ - { - {0}, - {0,0,&_44u6__p1_0}, - {0,0,&_44u6__p2_0}, - {0,0,&_44u6__p3_0}, - {0,0,&_44u6__p4_0}, - {0,0,&_44u6__p5_0}, - {0,0,&_44u6__p6_0}, - {&_44u6__p7_0,&_44u6__p7_1}, - {&_44u6__p8_0,&_44u6__p8_1}, - {&_44u6__p9_0,&_44u6__p9_1,&_44u6__p9_2} - } -}; -static static_bookblock _resbook_44u_7={ - { - {0}, - {0,0,&_44u7__p1_0}, - {0,0,&_44u7__p2_0}, - {0,0,&_44u7__p3_0}, - {0,0,&_44u7__p4_0}, - {0,0,&_44u7__p5_0}, - {0,0,&_44u7__p6_0}, - {&_44u7__p7_0,&_44u7__p7_1}, - {&_44u7__p8_0,&_44u7__p8_1}, - {&_44u7__p9_0,&_44u7__p9_1,&_44u7__p9_2} - } -}; -static static_bookblock _resbook_44u_8={ - { - {0}, - {0,0,&_44u8_p1_0}, - {0,0,&_44u8_p2_0}, - {0,0,&_44u8_p3_0}, - {0,0,&_44u8_p4_0}, - {&_44u8_p5_0,&_44u8_p5_1}, - {&_44u8_p6_0,&_44u8_p6_1}, - {&_44u8_p7_0,&_44u8_p7_1}, - {&_44u8_p8_0,&_44u8_p8_1}, - {&_44u8_p9_0,&_44u8_p9_1,&_44u8_p9_2} - } -}; -static static_bookblock _resbook_44u_9={ - { - {0}, - {0,0,&_44u9_p1_0}, - {0,0,&_44u9_p2_0}, - {0,0,&_44u9_p3_0}, - {0,0,&_44u9_p4_0}, - {&_44u9_p5_0,&_44u9_p5_1}, - {&_44u9_p6_0,&_44u9_p6_1}, - {&_44u9_p7_0,&_44u9_p7_1}, - {&_44u9_p8_0,&_44u9_p8_1}, - {&_44u9_p9_0,&_44u9_p9_1,&_44u9_p9_2} - } -}; - -static vorbis_residue_template _res_44u_n1[]={ - {1,0, &_residue_44_low_un, - &_huff_book__44un1__short,&_huff_book__44un1__short, - &_resbook_44u_n1,&_resbook_44u_n1}, - - {1,0, &_residue_44_low_un, - &_huff_book__44un1__long,&_huff_book__44un1__long, - &_resbook_44u_n1,&_resbook_44u_n1} -}; -static vorbis_residue_template _res_44u_0[]={ - {1,0, &_residue_44_low_un, - &_huff_book__44u0__short,&_huff_book__44u0__short, - &_resbook_44u_0,&_resbook_44u_0}, - - {1,0, &_residue_44_low_un, - &_huff_book__44u0__long,&_huff_book__44u0__long, - &_resbook_44u_0,&_resbook_44u_0} -}; -static vorbis_residue_template _res_44u_1[]={ - {1,0, &_residue_44_low_un, - &_huff_book__44u1__short,&_huff_book__44u1__short, - &_resbook_44u_1,&_resbook_44u_1}, - - {1,0, &_residue_44_low_un, - &_huff_book__44u1__long,&_huff_book__44u1__long, - &_resbook_44u_1,&_resbook_44u_1} -}; -static vorbis_residue_template _res_44u_2[]={ - {1,0, &_residue_44_low_un, - &_huff_book__44u2__short,&_huff_book__44u2__short, - &_resbook_44u_2,&_resbook_44u_2}, - - {1,0, &_residue_44_low_un, - &_huff_book__44u2__long,&_huff_book__44u2__long, - &_resbook_44u_2,&_resbook_44u_2} -}; -static vorbis_residue_template _res_44u_3[]={ - {1,0, &_residue_44_low_un, - &_huff_book__44u3__short,&_huff_book__44u3__short, - &_resbook_44u_3,&_resbook_44u_3}, - - {1,0, &_residue_44_low_un, - &_huff_book__44u3__long,&_huff_book__44u3__long, - &_resbook_44u_3,&_resbook_44u_3} -}; -static vorbis_residue_template _res_44u_4[]={ - {1,0, &_residue_44_low_un, - &_huff_book__44u4__short,&_huff_book__44u4__short, - &_resbook_44u_4,&_resbook_44u_4}, - - {1,0, &_residue_44_low_un, - &_huff_book__44u4__long,&_huff_book__44u4__long, - &_resbook_44u_4,&_resbook_44u_4} -}; - -static vorbis_residue_template _res_44u_5[]={ - {1,0, &_residue_44_mid_un, - &_huff_book__44u5__short,&_huff_book__44u5__short, - &_resbook_44u_5,&_resbook_44u_5}, - - {1,0, &_residue_44_mid_un, - &_huff_book__44u5__long,&_huff_book__44u5__long, - &_resbook_44u_5,&_resbook_44u_5} -}; - -static vorbis_residue_template _res_44u_6[]={ - {1,0, &_residue_44_mid_un, - &_huff_book__44u6__short,&_huff_book__44u6__short, - &_resbook_44u_6,&_resbook_44u_6}, - - {1,0, &_residue_44_mid_un, - &_huff_book__44u6__long,&_huff_book__44u6__long, - &_resbook_44u_6,&_resbook_44u_6} -}; - -static vorbis_residue_template _res_44u_7[]={ - {1,0, &_residue_44_mid_un, - &_huff_book__44u7__short,&_huff_book__44u7__short, - &_resbook_44u_7,&_resbook_44u_7}, - - {1,0, &_residue_44_mid_un, - &_huff_book__44u7__long,&_huff_book__44u7__long, - &_resbook_44u_7,&_resbook_44u_7} -}; - -static vorbis_residue_template _res_44u_8[]={ - {1,0, &_residue_44_hi_un, - &_huff_book__44u8__short,&_huff_book__44u8__short, - &_resbook_44u_8,&_resbook_44u_8}, - - {1,0, &_residue_44_hi_un, - &_huff_book__44u8__long,&_huff_book__44u8__long, - &_resbook_44u_8,&_resbook_44u_8} -}; -static vorbis_residue_template _res_44u_9[]={ - {1,0, &_residue_44_hi_un, - &_huff_book__44u9__short,&_huff_book__44u9__short, - &_resbook_44u_9,&_resbook_44u_9}, - - {1,0, &_residue_44_hi_un, - &_huff_book__44u9__long,&_huff_book__44u9__long, - &_resbook_44u_9,&_resbook_44u_9} -}; - -static vorbis_mapping_template _mapres_template_44_uncoupled[]={ - { _map_nominal_u, _res_44u_n1 }, /* -1 */ - { _map_nominal_u, _res_44u_0 }, /* 0 */ - { _map_nominal_u, _res_44u_1 }, /* 1 */ - { _map_nominal_u, _res_44u_2 }, /* 2 */ - { _map_nominal_u, _res_44u_3 }, /* 3 */ - { _map_nominal_u, _res_44u_4 }, /* 4 */ - { _map_nominal_u, _res_44u_5 }, /* 5 */ - { _map_nominal_u, _res_44u_6 }, /* 6 */ - { _map_nominal_u, _res_44u_7 }, /* 7 */ - { _map_nominal_u, _res_44u_8 }, /* 8 */ - { _map_nominal_u, _res_44u_9 }, /* 9 */ -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_8.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_8.h deleted file mode 100644 index 64982381f5..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/residue_8.h +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel residue templates 8/11kHz - last mod: $Id: residue_8.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "../../../codec.h" -#include "../backends.h" - -/***** residue backends *********************************************/ - -static static_bookblock _resbook_8s_0={ - { - {0},{0,0,&_8c0_s_p1_0},{0,0,&_8c0_s_p2_0},{0,0,&_8c0_s_p3_0}, - {0,0,&_8c0_s_p4_0},{0,0,&_8c0_s_p5_0},{0,0,&_8c0_s_p6_0}, - {&_8c0_s_p7_0,&_8c0_s_p7_1},{&_8c0_s_p8_0,&_8c0_s_p8_1}, - {&_8c0_s_p9_0,&_8c0_s_p9_1,&_8c0_s_p9_2} - } -}; -static static_bookblock _resbook_8s_1={ - { - {0},{0,0,&_8c1_s_p1_0},{0,0,&_8c1_s_p2_0},{0,0,&_8c1_s_p3_0}, - {0,0,&_8c1_s_p4_0},{0,0,&_8c1_s_p5_0},{0,0,&_8c1_s_p6_0}, - {&_8c1_s_p7_0,&_8c1_s_p7_1},{&_8c1_s_p8_0,&_8c1_s_p8_1}, - {&_8c1_s_p9_0,&_8c1_s_p9_1,&_8c1_s_p9_2} - } -}; - -static vorbis_residue_template _res_8s_0[]={ - {2,0, &_residue_44_mid, - &_huff_book__8c0_s_single,&_huff_book__8c0_s_single, - &_resbook_8s_0,&_resbook_8s_0}, -}; -static vorbis_residue_template _res_8s_1[]={ - {2,0, &_residue_44_mid, - &_huff_book__8c1_s_single,&_huff_book__8c1_s_single, - &_resbook_8s_1,&_resbook_8s_1}, -}; - -static vorbis_mapping_template _mapres_template_8_stereo[2]={ - { _map_nominal, _res_8s_0 }, /* 0 */ - { _map_nominal, _res_8s_1 }, /* 1 */ -}; - -static static_bookblock _resbook_8u_0={ - { - {0}, - {0,0,&_8u0__p1_0}, - {0,0,&_8u0__p2_0}, - {0,0,&_8u0__p3_0}, - {0,0,&_8u0__p4_0}, - {0,0,&_8u0__p5_0}, - {&_8u0__p6_0,&_8u0__p6_1}, - {&_8u0__p7_0,&_8u0__p7_1,&_8u0__p7_2} - } -}; -static static_bookblock _resbook_8u_1={ - { - {0}, - {0,0,&_8u1__p1_0}, - {0,0,&_8u1__p2_0}, - {0,0,&_8u1__p3_0}, - {0,0,&_8u1__p4_0}, - {0,0,&_8u1__p5_0}, - {0,0,&_8u1__p6_0}, - {&_8u1__p7_0,&_8u1__p7_1}, - {&_8u1__p8_0,&_8u1__p8_1}, - {&_8u1__p9_0,&_8u1__p9_1,&_8u1__p9_2} - } -}; - -static vorbis_residue_template _res_8u_0[]={ - {1,0, &_residue_44_low_un, - &_huff_book__8u0__single,&_huff_book__8u0__single, - &_resbook_8u_0,&_resbook_8u_0}, -}; -static vorbis_residue_template _res_8u_1[]={ - {1,0, &_residue_44_mid_un, - &_huff_book__8u1__single,&_huff_book__8u1__single, - &_resbook_8u_1,&_resbook_8u_1}, -}; - -static vorbis_mapping_template _mapres_template_8_uncoupled[2]={ - { _map_nominal_u, _res_8u_0 }, /* 0 */ - { _map_nominal_u, _res_8u_1 }, /* 1 */ -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_11.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_11.h deleted file mode 100644 index 437202fd9d..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_11.h +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 11kHz settings - last mod: $Id: setup_11.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "psych_11.h" - -static int blocksize_11[2]={ - 512,512 -}; - -static int _floor_mapping_11[2]={ - 6,6, -}; - -static double rate_mapping_11[3]={ - 8000.,13000.,44000., -}; - -static double rate_mapping_11_uncoupled[3]={ - 12000.,20000.,50000., -}; - -static double quality_mapping_11[3]={ - -.1,.0,1. -}; - -ve_setup_data_template ve_setup_11_stereo={ - 2, - rate_mapping_11, - quality_mapping_11, - 2, - 9000, - 15000, - - blocksize_11, - blocksize_11, - - _psy_tone_masteratt_11, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_11, - NULL, - _vp_tonemask_adj_11, - - _psy_noiseguards_8, - _psy_noisebias_11, - _psy_noisebias_11, - NULL, - NULL, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - NULL, - - {_noise_start_8,_noise_start_8}, - {_noise_part_8,_noise_part_8}, - _noise_thresh_11, - - _psy_ath_floater_8, - _psy_ath_abs_8, - - _psy_lowpass_11, - - _psy_global_44, - _global_mapping_8, - _psy_stereo_modes_8, - - _floor_books, - _floor, - _floor_mapping_11, - NULL, - - _mapres_template_8_stereo -}; - -ve_setup_data_template ve_setup_11_uncoupled={ - 2, - rate_mapping_11_uncoupled, - quality_mapping_11, - -1, - 9000, - 15000, - - blocksize_11, - blocksize_11, - - _psy_tone_masteratt_11, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_11, - NULL, - _vp_tonemask_adj_11, - - _psy_noiseguards_8, - _psy_noisebias_11, - _psy_noisebias_11, - NULL, - NULL, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - NULL, - - {_noise_start_8,_noise_start_8}, - {_noise_part_8,_noise_part_8}, - _noise_thresh_11, - - _psy_ath_floater_8, - _psy_ath_abs_8, - - _psy_lowpass_11, - - _psy_global_44, - _global_mapping_8, - _psy_stereo_modes_8, - - _floor_books, - _floor, - _floor_mapping_11, - NULL, - - _mapres_template_8_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_16.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_16.h deleted file mode 100644 index c803a2b4c1..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_16.h +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 16kHz settings - last mod: $Id: setup_16.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "psych_16.h" -#include "residue_16.h" - -static int blocksize_16_short[3]={ - 1024,512,512 -}; -static int blocksize_16_long[3]={ - 1024,1024,1024 -}; - -static int _floor_mapping_16_short[3]={ - 9,3,3 -}; -static int _floor_mapping_16[3]={ - 9,9,9 -}; - -static double rate_mapping_16[4]={ - 12000.,20000.,44000.,86000. -}; - -static double rate_mapping_16_uncoupled[4]={ - 16000.,28000.,64000.,100000. -}; - -static double _global_mapping_16[4]={ 1., 2., 3., 4. }; - -static double quality_mapping_16[4]={ -.1,.05,.5,1. }; - -static double _psy_compand_16_mapping[4]={ 0., .8, 1., 1.}; - -ve_setup_data_template ve_setup_16_stereo={ - 3, - rate_mapping_16, - quality_mapping_16, - 2, - 15000, - 19000, - - blocksize_16_short, - blocksize_16_long, - - _psy_tone_masteratt_16, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - - _psy_noiseguards_8, - _psy_noisebias_16_impulse, - _psy_noisebias_16_short, - _psy_noisebias_16_short, - _psy_noisebias_16, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_16_mapping, - _psy_compand_16_mapping, - - {_noise_start_16,_noise_start_16}, - { _noise_part_16, _noise_part_16}, - _noise_thresh_16, - - _psy_ath_floater_16, - _psy_ath_abs_16, - - _psy_lowpass_16, - - _psy_global_44, - _global_mapping_16, - _psy_stereo_modes_16, - - _floor_books, - _floor, - _floor_mapping_16_short, - _floor_mapping_16, - - _mapres_template_16_stereo -}; - -ve_setup_data_template ve_setup_16_uncoupled={ - 3, - rate_mapping_16_uncoupled, - quality_mapping_16, - -1, - 15000, - 19000, - - blocksize_16_short, - blocksize_16_long, - - _psy_tone_masteratt_16, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - - _psy_noiseguards_8, - _psy_noisebias_16_impulse, - _psy_noisebias_16_short, - _psy_noisebias_16_short, - _psy_noisebias_16, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_16_mapping, - _psy_compand_16_mapping, - - {_noise_start_16,_noise_start_16}, - { _noise_part_16, _noise_part_16}, - _noise_thresh_16, - - _psy_ath_floater_16, - _psy_ath_abs_16, - - _psy_lowpass_16, - - _psy_global_44, - _global_mapping_16, - _psy_stereo_modes_16, - - _floor_books, - _floor, - _floor_mapping_16_short, - _floor_mapping_16, - - _mapres_template_16_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_22.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_22.h deleted file mode 100644 index 5de418f4db..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_22.h +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 22kHz settings - last mod: $Id: setup_22.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -static double rate_mapping_22[4]={ - 15000.,20000.,44000.,86000. -}; - -static double rate_mapping_22_uncoupled[4]={ - 16000.,28000.,50000.,90000. -}; - -static double _psy_lowpass_22[4]={9.5,11.,30.,99.}; - -ve_setup_data_template ve_setup_22_stereo={ - 3, - rate_mapping_22, - quality_mapping_16, - 2, - 19000, - 26000, - - blocksize_16_short, - blocksize_16_long, - - _psy_tone_masteratt_16, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - - _psy_noiseguards_8, - _psy_noisebias_16_impulse, - _psy_noisebias_16_short, - _psy_noisebias_16_short, - _psy_noisebias_16, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - _psy_compand_8_mapping, - - {_noise_start_16,_noise_start_16}, - { _noise_part_16, _noise_part_16}, - _noise_thresh_16, - - _psy_ath_floater_16, - _psy_ath_abs_16, - - _psy_lowpass_22, - - _psy_global_44, - _global_mapping_16, - _psy_stereo_modes_16, - - _floor_books, - _floor, - _floor_mapping_16_short, - _floor_mapping_16, - - _mapres_template_16_stereo -}; - -ve_setup_data_template ve_setup_22_uncoupled={ - 3, - rate_mapping_22_uncoupled, - quality_mapping_16, - -1, - 19000, - 26000, - - blocksize_16_short, - blocksize_16_long, - - _psy_tone_masteratt_16, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - _vp_tonemask_adj_16, - - _psy_noiseguards_8, - _psy_noisebias_16_impulse, - _psy_noisebias_16_short, - _psy_noisebias_16_short, - _psy_noisebias_16, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - _psy_compand_8_mapping, - - {_noise_start_16,_noise_start_16}, - { _noise_part_16, _noise_part_16}, - _noise_thresh_16, - - _psy_ath_floater_16, - _psy_ath_abs_16, - - _psy_lowpass_22, - - _psy_global_44, - _global_mapping_16, - _psy_stereo_modes_16, - - _floor_books, - _floor, - _floor_mapping_16_short, - _floor_mapping_16, - - _mapres_template_16_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_32.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_32.h deleted file mode 100644 index d7ad167127..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_32.h +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel settings for 32kHz - last mod: $Id: setup_32.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -static double rate_mapping_32[12]={ - 18000.,28000.,35000.,45000.,56000.,60000., - 75000.,90000.,100000.,115000.,150000.,190000., -}; - -static double rate_mapping_32_un[12]={ - 30000.,42000.,52000.,64000.,72000.,78000., - 86000.,92000.,110000.,120000.,140000.,190000., -}; - -static double _psy_lowpass_32[12]={ - 12.3,13.,13.,14.,15.,99.,99.,99.,99.,99.,99.,99. -}; - -ve_setup_data_template ve_setup_32_stereo={ - 11, - rate_mapping_32, - quality_mapping_44, - 2, - 26000, - 40000, - - blocksize_short_44, - blocksize_long_44, - - _psy_tone_masteratt_44, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_otherblock, - _vp_tonemask_adj_longblock, - _vp_tonemask_adj_otherblock, - - _psy_noiseguards_44, - _psy_noisebias_impulse, - _psy_noisebias_padding, - _psy_noisebias_trans, - _psy_noisebias_long, - _psy_noise_suppress, - - _psy_compand_44, - _psy_compand_short_mapping, - _psy_compand_long_mapping, - - {_noise_start_short_44,_noise_start_long_44}, - {_noise_part_short_44,_noise_part_long_44}, - _noise_thresh_44, - - _psy_ath_floater, - _psy_ath_abs, - - _psy_lowpass_32, - - _psy_global_44, - _global_mapping_44, - _psy_stereo_modes_44, - - _floor_books, - _floor, - _floor_short_mapping_44, - _floor_long_mapping_44, - - _mapres_template_44_stereo -}; - -ve_setup_data_template ve_setup_32_uncoupled={ - 11, - rate_mapping_32_un, - quality_mapping_44, - -1, - 26000, - 40000, - - blocksize_short_44, - blocksize_long_44, - - _psy_tone_masteratt_44, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_otherblock, - _vp_tonemask_adj_longblock, - _vp_tonemask_adj_otherblock, - - _psy_noiseguards_44, - _psy_noisebias_impulse, - _psy_noisebias_padding, - _psy_noisebias_trans, - _psy_noisebias_long, - _psy_noise_suppress, - - _psy_compand_44, - _psy_compand_short_mapping, - _psy_compand_long_mapping, - - {_noise_start_short_44,_noise_start_long_44}, - {_noise_part_short_44,_noise_part_long_44}, - _noise_thresh_44, - - _psy_ath_floater, - _psy_ath_abs, - - _psy_lowpass_32, - - _psy_global_44, - _global_mapping_44, - NULL, - - _floor_books, - _floor, - _floor_short_mapping_44, - _floor_long_mapping_44, - - _mapres_template_44_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_44.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_44.h deleted file mode 100644 index d58b69101a..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_44.h +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel settings for 44.1/48kHz - last mod: $Id: setup_44.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "floor_all.h" -#include "residue_44.h" -#include "psych_44.h" - -static double rate_mapping_44_stereo[12]={ - 22500.,32000.,40000.,48000.,56000.,64000., - 80000.,96000.,112000.,128000.,160000.,250001. -}; - -static double quality_mapping_44[12]={ - -.1,.0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1.0 -}; - -static int blocksize_short_44[11]={ - 512,256,256,256,256,256,256,256,256,256,256 -}; -static int blocksize_long_44[11]={ - 4096,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048 -}; - -static double _psy_compand_short_mapping[12]={ - 0.5, 1., 1., 1.3, 1.6, 2., 2., 2., 2., 2., 2., 2. -}; -static double _psy_compand_long_mapping[12]={ - 3.5, 4., 4., 4.3, 4.6, 5., 5., 5., 5., 5., 5., 5. -}; - -static double _global_mapping_44[12]={ - /* 1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.5, 4., 4. */ - 0., 1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.7, 4., 4. -}; - -static int _floor_short_mapping_44[11]={ - 1,0,0,2,2,4,5,5,5,5,5 -}; -static int _floor_long_mapping_44[11]={ - 8,7,7,7,7,7,7,7,7,7,7 -}; - -ve_setup_data_template ve_setup_44_stereo={ - 11, - rate_mapping_44_stereo, - quality_mapping_44, - 2, - 40000, - 50000, - - blocksize_short_44, - blocksize_long_44, - - _psy_tone_masteratt_44, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_otherblock, - _vp_tonemask_adj_longblock, - _vp_tonemask_adj_otherblock, - - _psy_noiseguards_44, - _psy_noisebias_impulse, - _psy_noisebias_padding, - _psy_noisebias_trans, - _psy_noisebias_long, - _psy_noise_suppress, - - _psy_compand_44, - _psy_compand_short_mapping, - _psy_compand_long_mapping, - - {_noise_start_short_44,_noise_start_long_44}, - {_noise_part_short_44,_noise_part_long_44}, - _noise_thresh_44, - - _psy_ath_floater, - _psy_ath_abs, - - _psy_lowpass_44, - - _psy_global_44, - _global_mapping_44, - _psy_stereo_modes_44, - - _floor_books, - _floor, - _floor_short_mapping_44, - _floor_long_mapping_44, - - _mapres_template_44_stereo -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_44u.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_44u.h deleted file mode 100644 index 76b18428d8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_44u.h +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel settings for 44.1/48kHz uncoupled modes - last mod: $Id: setup_44u.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "residue_44u.h" - -static double rate_mapping_44_un[12]={ - 32000.,48000.,60000.,70000.,80000.,86000., - 96000.,110000.,120000.,140000.,160000.,240001. -}; - -ve_setup_data_template ve_setup_44_uncoupled={ - 11, - rate_mapping_44_un, - quality_mapping_44, - -1, - 40000, - 50000, - - blocksize_short_44, - blocksize_long_44, - - _psy_tone_masteratt_44, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_otherblock, - _vp_tonemask_adj_longblock, - _vp_tonemask_adj_otherblock, - - _psy_noiseguards_44, - _psy_noisebias_impulse, - _psy_noisebias_padding, - _psy_noisebias_trans, - _psy_noisebias_long, - _psy_noise_suppress, - - _psy_compand_44, - _psy_compand_short_mapping, - _psy_compand_long_mapping, - - {_noise_start_short_44,_noise_start_long_44}, - {_noise_part_short_44,_noise_part_long_44}, - _noise_thresh_44, - - _psy_ath_floater, - _psy_ath_abs, - - _psy_lowpass_44, - - _psy_global_44, - _global_mapping_44, - NULL, - - _floor_books, - _floor, - _floor_short_mapping_44, - _floor_long_mapping_44, - - _mapres_template_44_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_8.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_8.h deleted file mode 100644 index cb2e7f43c0..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_8.h +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: 8kHz settings - last mod: $Id: setup_8.h,v 1.1 2007/06/07 17:49:19 jules_rms Exp $ - - ********************************************************************/ - -#include "psych_8.h" -#include "residue_8.h" - -static int blocksize_8[2]={ - 512,512 -}; - -static int _floor_mapping_8[2]={ - 6,6, -}; - -static double rate_mapping_8[3]={ - 6000.,9000.,32000., -}; - -static double rate_mapping_8_uncoupled[3]={ - 8000.,14000.,42000., -}; - -static double quality_mapping_8[3]={ - -.1,.0,1. -}; - -static double _psy_compand_8_mapping[3]={ 0., 1., 1.}; - -static double _global_mapping_8[3]={ 1., 2., 3. }; - -ve_setup_data_template ve_setup_8_stereo={ - 2, - rate_mapping_8, - quality_mapping_8, - 2, - 8000, - 9000, - - blocksize_8, - blocksize_8, - - _psy_tone_masteratt_8, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_8, - NULL, - _vp_tonemask_adj_8, - - _psy_noiseguards_8, - _psy_noisebias_8, - _psy_noisebias_8, - NULL, - NULL, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - NULL, - - {_noise_start_8,_noise_start_8}, - {_noise_part_8,_noise_part_8}, - _noise_thresh_5only, - - _psy_ath_floater_8, - _psy_ath_abs_8, - - _psy_lowpass_8, - - _psy_global_44, - _global_mapping_8, - _psy_stereo_modes_8, - - _floor_books, - _floor, - _floor_mapping_8, - NULL, - - _mapres_template_8_stereo -}; - -ve_setup_data_template ve_setup_8_uncoupled={ - 2, - rate_mapping_8_uncoupled, - quality_mapping_8, - -1, - 8000, - 9000, - - blocksize_8, - blocksize_8, - - _psy_tone_masteratt_8, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_8, - NULL, - _vp_tonemask_adj_8, - - _psy_noiseguards_8, - _psy_noisebias_8, - _psy_noisebias_8, - NULL, - NULL, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - NULL, - - {_noise_start_8,_noise_start_8}, - {_noise_part_8,_noise_part_8}, - _noise_thresh_5only, - - _psy_ath_floater_8, - _psy_ath_abs_8, - - _psy_lowpass_8, - - _psy_global_44, - _global_mapping_8, - _psy_stereo_modes_8, - - _floor_books, - _floor, - _floor_mapping_8, - NULL, - - _mapres_template_8_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_X.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_X.h deleted file mode 100644 index b2f045188e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/modes/setup_X.h +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: catch-all toplevel settings for q modes only - last mod: $Id: setup_X.h,v 1.1 2007/06/07 17:49:20 jules_rms Exp $ - - ********************************************************************/ - -static double rate_mapping_X[12]={ - -1.,-1.,-1.,-1.,-1.,-1., - -1.,-1.,-1.,-1.,-1.,-1. -}; - -ve_setup_data_template ve_setup_X_stereo={ - 11, - rate_mapping_X, - quality_mapping_44, - 2, - 50000, - 200000, - - blocksize_short_44, - blocksize_long_44, - - _psy_tone_masteratt_44, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_otherblock, - _vp_tonemask_adj_longblock, - _vp_tonemask_adj_otherblock, - - _psy_noiseguards_44, - _psy_noisebias_impulse, - _psy_noisebias_padding, - _psy_noisebias_trans, - _psy_noisebias_long, - _psy_noise_suppress, - - _psy_compand_44, - _psy_compand_short_mapping, - _psy_compand_long_mapping, - - {_noise_start_short_44,_noise_start_long_44}, - {_noise_part_short_44,_noise_part_long_44}, - _noise_thresh_44, - - _psy_ath_floater, - _psy_ath_abs, - - _psy_lowpass_44, - - _psy_global_44, - _global_mapping_44, - _psy_stereo_modes_44, - - _floor_books, - _floor, - _floor_short_mapping_44, - _floor_long_mapping_44, - - _mapres_template_44_stereo -}; - -ve_setup_data_template ve_setup_X_uncoupled={ - 11, - rate_mapping_X, - quality_mapping_44, - -1, - 50000, - 200000, - - blocksize_short_44, - blocksize_long_44, - - _psy_tone_masteratt_44, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_otherblock, - _vp_tonemask_adj_longblock, - _vp_tonemask_adj_otherblock, - - _psy_noiseguards_44, - _psy_noisebias_impulse, - _psy_noisebias_padding, - _psy_noisebias_trans, - _psy_noisebias_long, - _psy_noise_suppress, - - _psy_compand_44, - _psy_compand_short_mapping, - _psy_compand_long_mapping, - - {_noise_start_short_44,_noise_start_long_44}, - {_noise_part_short_44,_noise_part_long_44}, - _noise_thresh_44, - - _psy_ath_floater, - _psy_ath_abs, - - _psy_lowpass_44, - - _psy_global_44, - _global_mapping_44, - NULL, - - _floor_books, - _floor, - _floor_short_mapping_44, - _floor_long_mapping_44, - - _mapres_template_44_uncoupled -}; - -ve_setup_data_template ve_setup_XX_stereo={ - 2, - rate_mapping_X, - quality_mapping_8, - 2, - 0, - 8000, - - blocksize_8, - blocksize_8, - - _psy_tone_masteratt_8, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_8, - NULL, - _vp_tonemask_adj_8, - - _psy_noiseguards_8, - _psy_noisebias_8, - _psy_noisebias_8, - NULL, - NULL, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - NULL, - - {_noise_start_8,_noise_start_8}, - {_noise_part_8,_noise_part_8}, - _noise_thresh_5only, - - _psy_ath_floater_8, - _psy_ath_abs_8, - - _psy_lowpass_8, - - _psy_global_44, - _global_mapping_8, - _psy_stereo_modes_8, - - _floor_books, - _floor, - _floor_mapping_8, - NULL, - - _mapres_template_8_stereo -}; - -ve_setup_data_template ve_setup_XX_uncoupled={ - 2, - rate_mapping_X, - quality_mapping_8, - -1, - 0, - 8000, - - blocksize_8, - blocksize_8, - - _psy_tone_masteratt_8, - _psy_tone_0dB, - _psy_tone_suppress, - - _vp_tonemask_adj_8, - NULL, - _vp_tonemask_adj_8, - - _psy_noiseguards_8, - _psy_noisebias_8, - _psy_noisebias_8, - NULL, - NULL, - _psy_noise_suppress, - - _psy_compand_8, - _psy_compand_8_mapping, - NULL, - - {_noise_start_8,_noise_start_8}, - {_noise_part_8,_noise_part_8}, - _noise_thresh_5only, - - _psy_ath_floater_8, - _psy_ath_abs_8, - - _psy_lowpass_8, - - _psy_global_44, - _global_mapping_8, - _psy_stereo_modes_8, - - _floor_books, - _floor, - _floor_mapping_8, - NULL, - - _mapres_template_8_uncoupled -}; diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/os.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/os.h deleted file mode 100644 index 645f0db3b8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/os.h +++ /dev/null @@ -1,156 +0,0 @@ -#ifndef _OS_H -#define _OS_H -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include "../../os_types.h" - -#include "misc.h" - -#ifndef _V_IFDEFJAIL_H_ -# define _V_IFDEFJAIL_H_ - -# ifdef __GNUC__ -# define STIN static __inline__ -# elif _WIN32 -# define STIN static __inline -# else -# define STIN static -# endif - -#ifdef DJGPP -# define rint(x) (floor((x)+0.5f)) -#endif - -#ifndef M_PI -# define M_PI (3.1415926536f) -#endif - -#if defined(_WIN32) && !defined(__SYMBIAN32__) -# include -# define rint(x) (floor((x)+0.5f)) -# define NO_FLOAT_MATH_LIB -# define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b)) -#endif - -#if defined(__SYMBIAN32__) && defined(__WINS__) -void *_alloca(size_t size); -# define alloca _alloca -#endif - -#ifndef FAST_HYPOT -# define FAST_HYPOT hypot -#endif - -#endif - -#ifdef HAVE_ALLOCA_H -# include -#endif - -#ifdef USE_MEMORY_H -# include -#endif - -#ifndef min -# define min(x,y) ((x)>(y)?(y):(x)) -#endif - -#ifndef max -# define max(x,y) ((x)<(y)?(y):(x)) -#endif - -#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__) -# define VORBIS_FPU_CONTROL -/* both GCC and MSVC are kinda stupid about rounding/casting to int. - Because of encapsulation constraints (GCC can't see inside the asm - block and so we end up doing stupid things like a store/load that - is collectively a noop), we do it this way */ - -/* we must set up the fpu before this works!! */ - -typedef ogg_int16_t vorbis_fpu_control; - -static inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){ - ogg_int16_t ret; - ogg_int16_t temp; - __asm__ __volatile__("fnstcw %0\n\t" - "movw %0,%%dx\n\t" - "orw $62463,%%dx\n\t" - "movw %%dx,%1\n\t" - "fldcw %1\n\t":"=m"(ret):"m"(temp): "dx"); - *fpu=ret; -} - -static inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ - __asm__ __volatile__("fldcw %0":: "m"(fpu)); -} - -/* assumes the FPU is in round mode! */ -static inline int vorbis_ftoi(double f){ /* yes, double! Otherwise, - we get extra fst/fld to - truncate precision */ - int i; - __asm__("fistl %0": "=m"(i) : "t"(f)); - return(i); -} -#endif - - -#if defined(_WIN32) && defined(_X86_) && !defined(__GNUC__) && !defined(__BORLANDC__) -# define VORBIS_FPU_CONTROL - -typedef ogg_int16_t vorbis_fpu_control; - -static __inline int vorbis_ftoi(double f){ - int i; - __asm{ - fld f - fistp i - } - return i; -} - -static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){ -} - -static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ -} - -#endif - - -#ifndef VORBIS_FPU_CONTROL - -typedef int vorbis_fpu_control; - -static int vorbis_ftoi(double f){ - return (int)(f+.5); -} - -/* We don't have special code for this compiler/arch, so do it the slow way */ -# define vorbis_fpu_setround(vorbis_fpu_control) {} -# define vorbis_fpu_restore(vorbis_fpu_control) {} - -#endif - -#endif /* _OS_H */ diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/psy.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/psy.c deleted file mode 100644 index 9acbd81d0e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/psy.c +++ /dev/null @@ -1,1228 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: psychoacoustics not including preecho - last mod: $Id: psy.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include "../../codec.h" -#include "codec_internal.h" - -#include "masking.h" -#include "psy.h" -#include "os.h" -#include "lpc.h" -#include "smallft.h" -#include "scales.h" -#include "misc.h" - -#define NEGINF -9999.f -static double stereo_threshholds[]={0.0, .5, 1.0, 1.5, 2.5, 4.5, 8.5, 16.5, 9e10}; -static double stereo_threshholds_limited[]={0.0, .5, 1.0, 1.5, 2.0, 2.5, 4.5, 8.5, 9e10}; - -vorbis_look_psy_global *_vp_global_look(vorbis_info *vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy_global *gi=&ci->psy_g_param; - vorbis_look_psy_global *look=(vorbis_look_psy_global*)_ogg_calloc(1,sizeof(*look)); - - look->channels=vi->channels; - - look->ampmax=-9999.; - look->gi=gi; - return(look); -} - -void _vp_global_free(vorbis_look_psy_global *look){ - if(look){ - memset(look,0,sizeof(*look)); - _ogg_free(look); - } -} - -void _vi_gpsy_free(vorbis_info_psy_global *i){ - if(i){ - memset(i,0,sizeof(*i)); - _ogg_free(i); - } -} - -void _vi_psy_free(vorbis_info_psy *i){ - if(i){ - memset(i,0,sizeof(*i)); - _ogg_free(i); - } -} - -static void min_curve(float *c, - float *c2){ - int i; - for(i=0;ic[i])c[i]=c2[i]; -} - -static void attenuate_curve(float *c,float att){ - int i; - for(i=0;iATH[j+k+ath_offset])min=ATH[j+k+ath_offset]; - }else{ - if(min>ATH[MAX_ATH-1])min=ATH[MAX_ATH-1]; - } - ath[j]=min; - } - - /* copy curves into working space, replicate the 50dB curve to 30 - and 40, replicate the 100dB curve to 110 */ - for(j=0;j<6;j++) - memcpy(workc[i][j+2],tonemasks[i][j],EHMER_MAX*sizeof(*tonemasks[i][j])); - memcpy(workc[i][0],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0])); - memcpy(workc[i][1],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0])); - - /* apply centered curve boost/decay */ - for(j=0;j0)adj=0.; - if(adj>0. && center_boost<0)adj=0.; - workc[i][j][k]+=adj; - } - } - - /* normalize curves so the driving amplitude is 0dB */ - /* make temp curves with the ATH overlayed */ - for(j=0;j an eighth of an octave and that the eighth - octave values may also be composited. */ - - /* which octave curves will we be compositing? */ - bin=floor(fromOC(i*.5)/binHz); - lo_curve= ceil(toOC(bin*binHz+1)*2); - hi_curve= floor(toOC((bin+1)*binHz)*2); - if(lo_curve>i)lo_curve=i; - if(lo_curve<0)lo_curve=0; - if(hi_curve>=P_BANDS)hi_curve=P_BANDS-1; - - for(m=0;mn)lo_bin=n; - if(lo_binn)hi_bin=n; - - for(;lworkc[k][m][j]) - brute_buffer[l]=workc[k][m][j]; - } - - for(;lworkc[k][m][EHMER_MAX-1]) - brute_buffer[l]=workc[k][m][EHMER_MAX-1]; - - } - - /* be equally paranoid about being valid up to next half ocatve */ - if(i+1n)lo_bin=n; - if(lo_binn)hi_bin=n; - - for(;lworkc[k][m][j]) - brute_buffer[l]=workc[k][m][j]; - } - - for(;lworkc[k][m][EHMER_MAX-1]) - brute_buffer[l]=workc[k][m][EHMER_MAX-1]; - - } - - - for(j=0;j=n){ - ret[i][m][j+2]=-999.; - }else{ - ret[i][m][j+2]=brute_buffer[bin]; - } - } - } - - /* add fenceposts */ - for(j=0;j-200.f)break; - ret[i][m][0]=j; - - for(j=EHMER_MAX-1;j>EHMER_OFFSET+1;j--) - if(ret[i][m][j+2]>-200.f) - break; - ret[i][m][1]=j; - - } - } - - return(ret); -} - -void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi, - vorbis_info_psy_global *gi,int n,long rate){ - long i,j,lo=-99,hi=1; - long maxoc; - memset(p,0,sizeof(*p)); - - p->eighth_octave_lines=gi->eighth_octave_lines; - p->shiftoc=rint(log(gi->eighth_octave_lines*8.f)/log(2.f))-1; - - p->firstoc=toOC(.25f*rate*.5/n)*(1<<(p->shiftoc+1))-gi->eighth_octave_lines; - maxoc=toOC((n+.25f)*rate*.5/n)*(1<<(p->shiftoc+1))+.5f; - p->total_octave_lines=maxoc-p->firstoc+1; - p->ath=(float*)_ogg_malloc(n*sizeof(*p->ath)); - - p->octave=(long*)_ogg_malloc(n*sizeof(*p->octave)); - p->bark=(long*)_ogg_malloc(n*sizeof(*p->bark)); - p->vi=vi; - p->n=n; - p->rate=rate; - - /* AoTuV HF weighting */ - p->m_val = 1.; - if(rate < 26000) p->m_val = 0; - else if(rate < 38000) p->m_val = .94; /* 32kHz */ - else if(rate > 46000) p->m_val = 1.275; /* 48kHz */ - - /* set up the lookups for a given blocksize and sample rate */ - - for(i=0,j=0;iath[j]=base+100.; - base+=delta; - } - } - } - - for(i=0;inoisewindowlominnoisewindowlo);lo++); - - for(;hi<=n && (hinoisewindowhimin || - toBARK(rate/(2*n)*hi)<(bark+vi->noisewindowhi));hi++); - - p->bark[i]=((lo-1)<<16)+(hi-1); - - } - - for(i=0;ioctave[i]=toOC((i+.25f)*.5*rate/n)*(1<<(p->shiftoc+1))+.5f; - - p->tonecurves=setup_tone_curves(vi->toneatt,rate*.5/n,n, - vi->tone_centerboost,vi->tone_decay); - - /* set up rolling noise median */ - p->noiseoffset=(float**)_ogg_malloc(P_NOISECURVES*sizeof(*p->noiseoffset)); - for(i=0;inoiseoffset[i]=(float*)_ogg_malloc(n*sizeof(**p->noiseoffset)); - - for(i=0;i=P_BANDS-1)halfoc=P_BANDS-1; - inthalfoc=(int)halfoc; - del=halfoc-inthalfoc; - - for(j=0;jnoiseoffset[j][i]= - p->vi->noiseoff[j][inthalfoc]*(1.-del) + - p->vi->noiseoff[j][inthalfoc+1]*del; - - } -#if 0 - { - static int ls=0; - _analysis_output_always("noiseoff0",ls,p->noiseoffset[0],n,1,0,0); - _analysis_output_always("noiseoff1",ls,p->noiseoffset[1],n,1,0,0); - _analysis_output_always("noiseoff2",ls++,p->noiseoffset[2],n,1,0,0); - } -#endif -} - -void _vp_psy_clear(vorbis_look_psy *p){ - int i,j; - if(p){ - if(p->ath)_ogg_free(p->ath); - if(p->octave)_ogg_free(p->octave); - if(p->bark)_ogg_free(p->bark); - if(p->tonecurves){ - for(i=0;itonecurves[i][j]); - } - _ogg_free(p->tonecurves[i]); - } - _ogg_free(p->tonecurves); - } - if(p->noiseoffset){ - for(i=0;inoiseoffset[i]); - } - _ogg_free(p->noiseoffset); - } - memset(p,0,sizeof(*p)); - } -} - -/* octave/(8*eighth_octave_lines) x scale and dB y scale */ -static void seed_curve(float *seed, - const float **curves, - float amp, - int oc, int n, - int linesper,float dBoffset){ - int i,post1; - int seedptr; - const float *posts,*curve; - - int choice=(int)((amp+dBoffset-P_LEVEL_0)*.1f); - choice=max(choice,0); - choice=min(choice,P_LEVELS-1); - posts=curves[choice]; - curve=posts+2; - post1=(int)posts[1]; - seedptr=oc+(posts[0]-EHMER_OFFSET)*linesper-(linesper>>1); - - for(i=posts[0];i0){ - float lin=amp+curve[i]; - if(seed[seedptr]=n)break; - } -} - -static void seed_loop(vorbis_look_psy *p, - const float ***curves, - const float *f, - const float *flr, - float *seed, - float specmax){ - vorbis_info_psy *vi=p->vi; - long n=p->n,i; - float dBoffset=vi->max_curve_dB-specmax; - - /* prime the working vector with peak values */ - - for(i=0;ioctave[i]; - while(i+1octave[i+1]==oc){ - i++; - if(f[i]>max)max=f[i]; - } - - if(max+6.f>flr[i]){ - oc=oc>>p->shiftoc; - - if(oc>=P_BANDS)oc=P_BANDS-1; - if(oc<0)oc=0; - - seed_curve(seed, - curves[oc], - max, - p->octave[i]-p->firstoc, - p->total_octave_lines, - p->eighth_octave_lines, - dBoffset); - } - } -} - -static void seed_chase(float *seeds, int linesper, long n){ - long *posstack=(long*)alloca(n*sizeof(*posstack)); - float *ampstack=(float*)alloca(n*sizeof(*ampstack)); - long stack=0; - long pos=0; - long i; - - for(i=0;i1 && ampstack[stack-1]<=ampstack[stack-2] && - iampstack[i]){ - endpos=posstack[i+1]; - }else{ - endpos=posstack[i]+linesper+1; /* +1 is important, else bin 0 is - discarded in short frames */ - } - if(endpos>n)endpos=n; - for(;pos -static void max_seeds(vorbis_look_psy *p, - float *seed, - float *flr){ - long n=p->total_octave_lines; - int linesper=p->eighth_octave_lines; - long linpos=0; - long pos; - - seed_chase(seed,linesper,n); /* for masking */ - - pos=p->octave[0]-p->firstoc-(linesper>>1); - - while(linpos+1n){ - float minV=seed[pos]; - long end=((p->octave[linpos]+p->octave[linpos+1])>>1)-p->firstoc; - if(minV>p->vi->tone_abs_limit)minV=p->vi->tone_abs_limit; - while(pos+1<=end){ - pos++; - if((seed[pos]>NEGINF && seed[pos]firstoc; - for(;linposn && p->octave[linpos]<=end;linpos++) - if(flr[linpos]total_octave_lines-1]; - for(;linposn;linpos++) - if(flr[linpos]> 16; - if( lo>=0 ) break; - hi = b[i] & 0xffff; - - tN = N[hi] + N[-lo]; - tX = X[hi] - X[-lo]; - tXX = XX[hi] + XX[-lo]; - tY = Y[hi] + Y[-lo]; - tXY = XY[hi] - XY[-lo]; - - A = tY * tXX - tX * tXY; - B = tN * tXY - tX * tY; - D = tN * tXX - tX * tX; - R = (A + x * B) / D; - if (R < 0.f) - R = 0.f; - - noise[i] = R - offset; - } - - for ( ;; i++, x += 1.f) { - - lo = b[i] >> 16; - hi = b[i] & 0xffff; - if(hi>=n)break; - - tN = N[hi] - N[lo]; - tX = X[hi] - X[lo]; - tXX = XX[hi] - XX[lo]; - tY = Y[hi] - Y[lo]; - tXY = XY[hi] - XY[lo]; - - A = tY * tXX - tX * tXY; - B = tN * tXY - tX * tY; - D = tN * tXX - tX * tX; - R = (A + x * B) / D; - if (R < 0.f) R = 0.f; - - noise[i] = R - offset; - } - for ( ; i < n; i++, x += 1.f) { - - R = (A + x * B) / D; - if (R < 0.f) R = 0.f; - - noise[i] = R - offset; - } - - if (fixed <= 0) return; - - for (i = 0, x = 0.f;; i++, x += 1.f) { - hi = i + fixed / 2; - lo = hi - fixed; - if(lo>=0)break; - - tN = N[hi] + N[-lo]; - tX = X[hi] - X[-lo]; - tXX = XX[hi] + XX[-lo]; - tY = Y[hi] + Y[-lo]; - tXY = XY[hi] - XY[-lo]; - - - A = tY * tXX - tX * tXY; - B = tN * tXY - tX * tY; - D = tN * tXX - tX * tX; - R = (A + x * B) / D; - - if (R - offset < noise[i]) noise[i] = R - offset; - } - for ( ;; i++, x += 1.f) { - - hi = i + fixed / 2; - lo = hi - fixed; - if(hi>=n)break; - - tN = N[hi] - N[lo]; - tX = X[hi] - X[lo]; - tXX = XX[hi] - XX[lo]; - tY = Y[hi] - Y[lo]; - tXY = XY[hi] - XY[lo]; - - A = tY * tXX - tX * tXY; - B = tN * tXY - tX * tY; - D = tN * tXX - tX * tX; - R = (A + x * B) / D; - - if (R - offset < noise[i]) noise[i] = R - offset; - } - for ( ; i < n; i++, x += 1.f) { - R = (A + x * B) / D; - if (R - offset < noise[i]) noise[i] = R - offset; - } -} - -static float FLOOR1_fromdB_INV_LOOKUP[256]={ - 0.F, 8.81683e+06F, 8.27882e+06F, 7.77365e+06F, - 7.29930e+06F, 6.85389e+06F, 6.43567e+06F, 6.04296e+06F, - 5.67422e+06F, 5.32798e+06F, 5.00286e+06F, 4.69759e+06F, - 4.41094e+06F, 4.14178e+06F, 3.88905e+06F, 3.65174e+06F, - 3.42891e+06F, 3.21968e+06F, 3.02321e+06F, 2.83873e+06F, - 2.66551e+06F, 2.50286e+06F, 2.35014e+06F, 2.20673e+06F, - 2.07208e+06F, 1.94564e+06F, 1.82692e+06F, 1.71544e+06F, - 1.61076e+06F, 1.51247e+06F, 1.42018e+06F, 1.33352e+06F, - 1.25215e+06F, 1.17574e+06F, 1.10400e+06F, 1.03663e+06F, - 973377.F, 913981.F, 858210.F, 805842.F, - 756669.F, 710497.F, 667142.F, 626433.F, - 588208.F, 552316.F, 518613.F, 486967.F, - 457252.F, 429351.F, 403152.F, 378551.F, - 355452.F, 333762.F, 313396.F, 294273.F, - 276316.F, 259455.F, 243623.F, 228757.F, - 214798.F, 201691.F, 189384.F, 177828.F, - 166977.F, 156788.F, 147221.F, 138237.F, - 129802.F, 121881.F, 114444.F, 107461.F, - 100903.F, 94746.3F, 88964.9F, 83536.2F, - 78438.8F, 73652.5F, 69158.2F, 64938.1F, - 60975.6F, 57254.9F, 53761.2F, 50480.6F, - 47400.3F, 44507.9F, 41792.0F, 39241.9F, - 36847.3F, 34598.9F, 32487.7F, 30505.3F, - 28643.8F, 26896.0F, 25254.8F, 23713.7F, - 22266.7F, 20908.0F, 19632.2F, 18434.2F, - 17309.4F, 16253.1F, 15261.4F, 14330.1F, - 13455.7F, 12634.6F, 11863.7F, 11139.7F, - 10460.0F, 9821.72F, 9222.39F, 8659.64F, - 8131.23F, 7635.06F, 7169.17F, 6731.70F, - 6320.93F, 5935.23F, 5573.06F, 5232.99F, - 4913.67F, 4613.84F, 4332.30F, 4067.94F, - 3819.72F, 3586.64F, 3367.78F, 3162.28F, - 2969.31F, 2788.13F, 2617.99F, 2458.24F, - 2308.24F, 2167.39F, 2035.14F, 1910.95F, - 1794.35F, 1684.85F, 1582.04F, 1485.51F, - 1394.86F, 1309.75F, 1229.83F, 1154.78F, - 1084.32F, 1018.15F, 956.024F, 897.687F, - 842.910F, 791.475F, 743.179F, 697.830F, - 655.249F, 615.265F, 577.722F, 542.469F, - 509.367F, 478.286F, 449.101F, 421.696F, - 395.964F, 371.803F, 349.115F, 327.812F, - 307.809F, 289.026F, 271.390F, 254.830F, - 239.280F, 224.679F, 210.969F, 198.096F, - 186.008F, 174.658F, 164.000F, 153.993F, - 144.596F, 135.773F, 127.488F, 119.708F, - 112.404F, 105.545F, 99.1046F, 93.0572F, - 87.3788F, 82.0469F, 77.0404F, 72.3394F, - 67.9252F, 63.7804F, 59.8885F, 56.2341F, - 52.8027F, 49.5807F, 46.5553F, 43.7144F, - 41.0470F, 38.5423F, 36.1904F, 33.9821F, - 31.9085F, 29.9614F, 28.1332F, 26.4165F, - 24.8045F, 23.2910F, 21.8697F, 20.5352F, - 19.2822F, 18.1056F, 17.0008F, 15.9634F, - 14.9893F, 14.0746F, 13.2158F, 12.4094F, - 11.6522F, 10.9411F, 10.2735F, 9.64662F, - 9.05798F, 8.50526F, 7.98626F, 7.49894F, - 7.04135F, 6.61169F, 6.20824F, 5.82941F, - 5.47370F, 5.13970F, 4.82607F, 4.53158F, - 4.25507F, 3.99542F, 3.75162F, 3.52269F, - 3.30774F, 3.10590F, 2.91638F, 2.73842F, - 2.57132F, 2.41442F, 2.26709F, 2.12875F, - 1.99885F, 1.87688F, 1.76236F, 1.65482F, - 1.55384F, 1.45902F, 1.36999F, 1.28640F, - 1.20790F, 1.13419F, 1.06499F, 1.F -}; - -void _vp_remove_floor(vorbis_look_psy *p, - float *mdct, - int *codedflr, - float *residue, - int sliding_lowpass){ - - int i,n=p->n; - - if(sliding_lowpass>n)sliding_lowpass=n; - - for(i=0;in; - float *work=(float*) alloca(n*sizeof(*work)); - - bark_noise_hybridmp(n,p->bark,logmdct,logmask, - 140.,-1); - - for(i=0;ibark,work,logmask,0., - p->vi->noisewindowfixed); - - for(i=0;i=NOISE_COMPAND_LEVELS)dB=NOISE_COMPAND_LEVELS-1; - if(dB<0)dB=0; - logmask[i]= work[i]+p->vi->noisecompand[dB]; - } - -} - -void _vp_tonemask(vorbis_look_psy *p, - float *logfft, - float *logmask, - float global_specmax, - float local_specmax){ - - int i,n=p->n; - - float *seed=(float*) alloca(sizeof(*seed)*p->total_octave_lines); - float att=local_specmax+p->vi->ath_adjatt; - for(i=0;itotal_octave_lines;i++)seed[i]=NEGINF; - - /* set the ATH (floating below localmax, not global max by a - specified att) */ - if(attvi->ath_maxatt)att=p->vi->ath_maxatt; - - for(i=0;iath[i]+att; - - /* tone masking */ - seed_loop(p,(const float ***)p->tonecurves,logfft,logmask,seed,global_specmax); - max_seeds(p,seed,logmask); - -} - -void _vp_offset_and_mix(vorbis_look_psy *p, - float *noise, - float *tone, - int offset_select, - float *logmask, - float *mdct, - float *logmdct){ - int i,n=p->n; - float de, coeffi, cx;/* AoTuV */ - float toneatt=p->vi->tone_masteratt[offset_select]; - - cx = p->m_val; - - for(i=0;inoiseoffset[offset_select][i]; - if(val>p->vi->noisemaxsupp)val=p->vi->noisemaxsupp; - logmask[i]=max(val,tone[i]+toneatt); - - - /* AoTuV */ - /** @ M1 ** - The following codes improve a noise problem. - A fundamental idea uses the value of masking and carries out - the relative compensation of the MDCT. - However, this code is not perfect and all noise problems cannot be solved. - by Aoyumi @ 2004/04/18 - */ - - if(offset_select == 1) { - coeffi = -17.2; /* coeffi is a -17.2dB threshold */ - val = val - logmdct[i]; /* val == mdct line value relative to floor in dB */ - - if(val > coeffi){ - /* mdct value is > -17.2 dB below floor */ - - de = 1.0-((val-coeffi)*0.005*cx); - /* pro-rated attenuation: - -0.00 dB boost if mdct value is -17.2dB (relative to floor) - -0.77 dB boost if mdct value is 0dB (relative to floor) - -1.64 dB boost if mdct value is +17.2dB (relative to floor) - etc... */ - - if(de < 0) de = 0.0001; - }else - /* mdct value is <= -17.2 dB below floor */ - - de = 1.0-((val-coeffi)*0.0003*cx); - /* pro-rated attenuation: - +0.00 dB atten if mdct value is -17.2dB (relative to floor) - +0.45 dB atten if mdct value is -34.4dB (relative to floor) - etc... */ - - mdct[i] *= de; - - } - } -} - -float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd){ - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy_global *gi=&ci->psy_g_param; - - int n=ci->blocksizes[vd->W]/2; - float secs=(float)n/vi->rate; - - amp+=secs*gi->ampmax_att_per_sec; - if(amp<-9999)amp=-9999; - return(amp); -} - -static void couple_lossless(float A, float B, - float *qA, float *qB){ - int test1=fabs(*qA)>fabs(*qB); - test1-= fabs(*qA)fabs(B))<<1)-1; - if(test1==1){ - *qB=(*qA>0.f?*qA-*qB:*qB-*qA); - }else{ - float temp=*qB; - *qB=(*qB>0.f?*qA-*qB:*qB-*qA); - *qA=temp; - } - - if(*qB>fabs(*qA)*1.9999f){ - *qB= -fabs(*qA)*2.f; - *qA= -*qA; - } -} - -static float hypot_lookup[32]={ - -0.009935, -0.011245, -0.012726, -0.014397, - -0.016282, -0.018407, -0.020800, -0.023494, - -0.026522, -0.029923, -0.033737, -0.038010, - -0.042787, -0.048121, -0.054064, -0.060671, - -0.068000, -0.076109, -0.085054, -0.094892, - -0.105675, -0.117451, -0.130260, -0.144134, - -0.159093, -0.175146, -0.192286, -0.210490, - -0.229718, -0.249913, -0.271001, -0.292893}; - -static void precomputed_couple_point(float premag, - int floorA,int floorB, - float *mag, float *ang){ - - int test=(floorA>floorB)-1; - int offset=31-abs(floorA-floorB); - float floormag=hypot_lookup[((offset<0)-1)&offset]+1.f; - - floormag*=FLOOR1_fromdB_INV_LOOKUP[(floorB&test)|(floorA&(~test))]; - - *mag=premag*floormag; - *ang=0.f; -} - -/* just like below, this is currently set up to only do - single-step-depth coupling. Otherwise, we'd have to do more - copying (which will be inevitable later) */ - -/* doing the real circular magnitude calculation is audibly superior - to (A+B)/sqrt(2) */ -static float dipole_hypot(float a, float b){ - if(a>0.){ - if(b>0.)return sqrt(a*a+b*b); - if(a>-b)return sqrt(a*a-b*b); - return -sqrt(b*b-a*a); - } - if(b<0.)return -sqrt(a*a+b*b); - if(-a>b)return -sqrt(a*a-b*b); - return sqrt(b*b-a*a); -} -static float round_hypot(float a, float b){ - if(a>0.){ - if(b>0.)return sqrt(a*a+b*b); - if(a>-b)return sqrt(a*a+b*b); - return -sqrt(b*b+a*a); - } - if(b<0.)return -sqrt(a*a+b*b); - if(-a>b)return -sqrt(a*a+b*b); - return sqrt(b*b+a*a); -} - -/* revert to round hypot for now */ -float **_vp_quantize_couple_memo(vorbis_block *vb, - vorbis_info_psy_global *g, - vorbis_look_psy *p, - vorbis_info_mapping0 *vi, - float **mdct){ - - int i,j,n=p->n; - float **ret=(float**) _vorbis_block_alloc(vb,vi->coupling_steps*sizeof(*ret)); - int limit=g->coupling_pointlimit[p->vi->blockflag][PACKETBLOBS/2]; - - for(i=0;icoupling_steps;i++){ - float *mdctM=mdct[vi->coupling_mag[i]]; - float *mdctA=mdct[vi->coupling_ang[i]]; - ret[i]=(float*) _vorbis_block_alloc(vb,n*sizeof(**ret)); - for(j=0;jf2); -} - -int **_vp_quantize_couple_sort(vorbis_block *vb, - vorbis_look_psy *p, - vorbis_info_mapping0 *vi, - float **mags){ - - - if(p->vi->normal_point_p){ - int i,j,k,n=p->n; - int **ret=(int**) _vorbis_block_alloc(vb,vi->coupling_steps*sizeof(*ret)); - int partition=p->vi->normal_partition; - float **work=(float**) alloca(sizeof(*work)*partition); - - for(i=0;icoupling_steps;i++){ - ret[i]=(int*) _vorbis_block_alloc(vb,n*sizeof(**ret)); - - for(j=0;jn; - vorbis_info_psy *vi=p->vi; - int partition=vi->normal_partition; - float **work=(float**) alloca(sizeof(*work)*partition); - int start=vi->normal_start; - - for(j=start;jn)partition=n-j; - for(i=0;in; - vorbis_info_psy *vi=p->vi; - int partition=vi->normal_partition; - int start=vi->normal_start; - - if(start>n)start=n; - - if(vi->normal_channel_p){ - for(;j=.25f){ - out[k]=rint(in[k]); - acc-=in[k]*in[k]; - flag=1; - }else{ - if(accnormal_thresh)break; - out[k]=unitnorm(in[k]); - acc-=1.; - } - } - - for(;in; - - /* perform any requested channel coupling */ - /* point stereo can only be used in a first stage (in this encoder) - because of the dependency on floor lookups */ - for(i=0;icoupling_steps;i++){ - - /* once we're doing multistage coupling in which a channel goes - through more than one coupling step, the floor vector - magnitudes will also have to be recalculated an propogated - along with PCM. Right now, we're not (that will wait until 5.1 - most likely), so the code isn't here yet. The memory management - here is all assuming single depth couplings anyway. */ - - /* make sure coupling a zero and a nonzero channel results in two - nonzero channels. */ - if(nonzero[vi->coupling_mag[i]] || - nonzero[vi->coupling_ang[i]]){ - - - float *rM=res[vi->coupling_mag[i]]; - float *rA=res[vi->coupling_ang[i]]; - float *qM=rM+n; - float *qA=rA+n; - int *floorM=ifloor[vi->coupling_mag[i]]; - int *floorA=ifloor[vi->coupling_ang[i]]; - float prepoint=stereo_threshholds[g->coupling_prepointamp[blobno]]; - float postpoint=stereo_threshholds[g->coupling_postpointamp[blobno]]; - int partition=(p->vi->normal_point_p?p->vi->normal_partition:p->n); - int limit=g->coupling_pointlimit[p->vi->blockflag][blobno]; - int pointlimit=limit; - - nonzero[vi->coupling_mag[i]]=1; - nonzero[vi->coupling_ang[i]]=1; - - /* The threshold of a stereo is changed with the size of n */ - if(n > 1000) - postpoint=stereo_threshholds_limited[g->coupling_postpointamp[blobno]]; - - for(j=0;jn;j+=partition){ - float acc=0.f; - - for(k=0;k=limit && fabs(rM[l])vi->normal_point_p){ - for(k=0;k=p->vi->normal_thresh;k++){ - int l=mag_sort[i][j+k]; - if(l=pointlimit && rint(qM[l])==0.f){ - qM[l]=unitnorm(qM[l]); - acc-=1.f; - } - } - } - } - } - } -} - -/* AoTuV */ -/** @ M2 ** - The boost problem by the combination of noise normalization and point stereo is eased. - However, this is a temporary patch. - by Aoyumi @ 2004/04/18 -*/ - -void hf_reduction(vorbis_info_psy_global *g, - vorbis_look_psy *p, - vorbis_info_mapping0 *vi, - float **mdct){ - - int i,j,n=p->n, de=0.3*p->m_val; - int limit=g->coupling_pointlimit[p->vi->blockflag][PACKETBLOBS/2]; - - for(i=0; icoupling_steps; i++){ - /* for(j=start; j -#include -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "registry.h" -#include "codebook.h" -#include "misc.h" -#include "os.h" - -#if defined(TRAIN_RES) || defined (TRAIN_RESAUX) -#include -#endif - -typedef struct { - vorbis_info_residue0 *info; - - int parts; - int stages; - codebook *fullbooks; - codebook *phrasebook; - codebook ***partbooks; - - int partvals; - int **decodemap; - - long postbits; - long phrasebits; - long frames; - -#if defined(TRAIN_RES) || defined(TRAIN_RESAUX) - int train_seq; - long *training_data[8][64]; - float training_max[8][64]; - float training_min[8][64]; - float tmin; - float tmax; -#endif - -} vorbis_look_residue0; - -void res0_free_info(vorbis_info_residue *i){ - vorbis_info_residue0 *info=(vorbis_info_residue0 *)i; - if(info){ - memset(info,0,sizeof(*info)); - _ogg_free(info); - } -} - -void res0_free_look(vorbis_look_residue *i){ - int j; - if(i){ - - vorbis_look_residue0 *look=(vorbis_look_residue0 *)i; - -#ifdef TRAIN_RES - { - int j,k,l; - for(j=0;jparts;j++){ - /*fprintf(stderr,"partition %d: ",j);*/ - for(k=0;k<8;k++) - if(look->training_data[k][j]){ - char buffer[80]; - FILE *of; - codebook *statebook=look->partbooks[j][k]; - - /* long and short into the same bucket by current convention */ - sprintf(buffer,"res_part%d_pass%d.vqd",j,k); - of=fopen(buffer,"a"); - - for(l=0;lentries;l++) - fprintf(of,"%d:%ld\n",l,look->training_data[k][j][l]); - - fclose(of); - - /*fprintf(stderr,"%d(%.2f|%.2f) ",k, - look->training_min[k][j],look->training_max[k][j]);*/ - - _ogg_free(look->training_data[k][j]); - look->training_data[k][j]=NULL; - } - /*fprintf(stderr,"\n");*/ - } - } - fprintf(stderr,"min/max residue: %g::%g\n",look->tmin,look->tmax); - - /*fprintf(stderr,"residue bit usage %f:%f (%f total)\n", - (float)look->phrasebits/look->frames, - (float)look->postbits/look->frames, - (float)(look->postbits+look->phrasebits)/look->frames);*/ -#endif - - - /*vorbis_info_residue0 *info=look->info; - - fprintf(stderr, - "%ld frames encoded in %ld phrasebits and %ld residue bits " - "(%g/frame) \n",look->frames,look->phrasebits, - look->resbitsflat, - (look->phrasebits+look->resbitsflat)/(float)look->frames); - - for(j=0;jparts;j++){ - long acc=0; - fprintf(stderr,"\t[%d] == ",j); - for(k=0;kstages;k++) - if((info->secondstages[j]>>k)&1){ - fprintf(stderr,"%ld,",look->resbits[j][k]); - acc+=look->resbits[j][k]; - } - - fprintf(stderr,":: (%ld vals) %1.2fbits/sample\n",look->resvals[j], - acc?(float)acc/(look->resvals[j]*info->grouping):0); - } - fprintf(stderr,"\n");*/ - - for(j=0;jparts;j++) - if(look->partbooks[j])_ogg_free(look->partbooks[j]); - _ogg_free(look->partbooks); - for(j=0;jpartvals;j++) - _ogg_free(look->decodemap[j]); - _ogg_free(look->decodemap); - - memset(look,0,sizeof(*look)); - _ogg_free(look); - } -} - -static int icount(unsigned int v){ - int ret=0; - while(v){ - ret+=v&1; - v>>=1; - } - return(ret); -} - - -void res0_pack(vorbis_info_residue *vr,oggpack_buffer *opb){ - vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr; - int j,acc=0; - oggpack_write(opb,info->begin,24); - oggpack_write(opb,info->end,24); - - oggpack_write(opb,info->grouping-1,24); /* residue vectors to group and - code with a partitioned book */ - oggpack_write(opb,info->partitions-1,6); /* possible partition choices */ - oggpack_write(opb,info->groupbook,8); /* group huffman book */ - - /* secondstages is a bitmask; as encoding progresses pass by pass, a - bitmask of one indicates this partition class has bits to write - this pass */ - for(j=0;jpartitions;j++){ - if(ilog(info->secondstages[j])>3){ - /* yes, this is a minor hack due to not thinking ahead */ - oggpack_write(opb,info->secondstages[j],3); - oggpack_write(opb,1,1); - oggpack_write(opb,info->secondstages[j]>>3,5); - }else - oggpack_write(opb,info->secondstages[j],4); /* trailing zero */ - acc+=icount(info->secondstages[j]); - } - for(j=0;jbooklist[j],8); - -} - -/* vorbis_info is for range checking */ -vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){ - int j,acc=0; - vorbis_info_residue0 *info=(vorbis_info_residue0*) _ogg_calloc(1,sizeof(*info)); - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - - info->begin=oggpack_read(opb,24); - info->end=oggpack_read(opb,24); - info->grouping=oggpack_read(opb,24)+1; - info->partitions=oggpack_read(opb,6)+1; - info->groupbook=oggpack_read(opb,8); - - for(j=0;jpartitions;j++){ - int cascade=oggpack_read(opb,3); - if(oggpack_read(opb,1)) - cascade|=(oggpack_read(opb,5)<<3); - info->secondstages[j]=cascade; - - acc+=icount(cascade); - } - for(j=0;jbooklist[j]=oggpack_read(opb,8); - - if(info->groupbook>=ci->books)goto errout; - for(j=0;jbooklist[j]>=ci->books)goto errout; - - return(info); - errout: - res0_free_info(info); - return(NULL); -} - -vorbis_look_residue *res0_look(vorbis_dsp_state *vd, - vorbis_info_residue *vr){ - vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr; - vorbis_look_residue0 *look=(vorbis_look_residue0 *)_ogg_calloc(1,sizeof(*look)); - codec_setup_info *ci=(codec_setup_info*)vd->vi->codec_setup; - - int j,k,acc=0; - int dim; - int maxstage=0; - look->info=info; - - look->parts=info->partitions; - look->fullbooks=ci->fullbooks; - look->phrasebook=ci->fullbooks+info->groupbook; - dim=look->phrasebook->dim; - - look->partbooks=(codebook***)_ogg_calloc(look->parts,sizeof(*look->partbooks)); - - for(j=0;jparts;j++){ - int stages=ilog(info->secondstages[j]); - if(stages){ - if(stages>maxstage)maxstage=stages; - look->partbooks[j]=(codebook**) _ogg_calloc(stages,sizeof(*look->partbooks[j])); - for(k=0;ksecondstages[j]&(1<partbooks[j][k]=ci->fullbooks+info->booklist[acc++]; -#ifdef TRAIN_RES - look->training_data[k][j]=_ogg_calloc(look->partbooks[j][k]->entries, - sizeof(***look->training_data)); -#endif - } - } - } - - look->partvals=rint(pow((float)look->parts,(float)dim)); - look->stages=maxstage; - look->decodemap=(int**)_ogg_malloc(look->partvals*sizeof(*look->decodemap)); - for(j=0;jpartvals;j++){ - long val=j; - long mult=look->partvals/look->parts; - look->decodemap[j]=(int*)_ogg_malloc(dim*sizeof(*look->decodemap[j])); - for(k=0;kparts; - look->decodemap[j][k]=deco; - } - } -#if defined(TRAIN_RES) || defined (TRAIN_RESAUX) - { - static int train_seq=0; - look->train_seq=train_seq++; - } -#endif - return(look); -} - -/* break an abstraction and copy some code for performance purposes */ -static int local_book_besterror(codebook *book,float *a){ - int dim=book->dim,i,k,o; - int best=0; - encode_aux_threshmatch *tt=book->c->thresh_tree; - - /* find the quant val of each scalar */ - for(k=0,o=dim;kthreshvals>>1; - - if(valquantthresh[i]){ - if(valquantthresh[i-1]){ - for(--i;i>0;--i) - if(val>=tt->quantthresh[i-1]) - break; - } - }else{ - - for(++i;ithreshvals-1;++i) - if(valquantthresh[i])break; - - } - - best=(best*tt->quantvals)+tt->quantmap[i]; - } - /* regular lattices are easy :-) */ - - if(book->c->lengthlist[best]<=0){ - const static_codebook *c=book->c; - int i,j; - float bestf=0.f; - float *e=book->valuelist; - best=-1; - for(i=0;ientries;i++){ - if(c->lengthlist[i]>0){ - float thisx=0.f; - for(j=0;jvaluelist+best*dim; - for(i=0;idim; - int step=n/dim; - - for(i=0;iinfo; - - /* move all this setup out later */ - int samples_per_partition=info->grouping; - int possible_partitions=info->partitions; - int n=info->end-info->begin; - - int partvals=n/samples_per_partition; - long **partword=(long**)_vorbis_block_alloc(vb,ch*sizeof(*partword)); - float scale=100./samples_per_partition; - - /* we find the partition type for each partition of each - channel. We'll go back and do the interleaved encoding in a - bit. For now, clarity */ - - for(i=0;ibegin; - for(j=0;jmax)max=fabs(in[j][offset+k]); - ent+=fabs(rint(in[j][offset+k])); - } - ent*=scale; - - for(k=0;kclassmetric1[k] && - (info->classmetric2[k]<0 || (int)entclassmetric2[k])) - break; - - partword[j][i]=k; - } - } - -#ifdef TRAIN_RESAUX - { - FILE *of; - char buffer[80]; - - for(i=0;itrain_seq); - of=fopen(buffer,"a"); - for(j=0;jframes++; - - return(partword); -} - -/* designed for stereo or other modes where the partition size is an - integer multiple of the number of channels encoded in the current - submap */ -static long **_2class(vorbis_block *vb,vorbis_look_residue *vl,float **in, - int ch){ - long i,j,k,l; - vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl; - vorbis_info_residue0 *info=look->info; - - /* move all this setup out later */ - int samples_per_partition=info->grouping; - int possible_partitions=info->partitions; - int n=info->end-info->begin; - - int partvals=n/samples_per_partition; - long **partword=(long**)_vorbis_block_alloc(vb,sizeof(*partword)); - -#if defined(TRAIN_RES) || defined (TRAIN_RESAUX) - FILE *of; - char buffer[80]; -#endif - - partword[0]=(long*)_vorbis_block_alloc(vb,n*ch/samples_per_partition*sizeof(*partword[0])); - memset(partword[0],0,n*ch/samples_per_partition*sizeof(*partword[0])); - - for(i=0,l=info->begin/ch;imagmax)magmax=fabs(in[0][l]); - for(k=1;kangmax)angmax=fabs(in[k][l]); - l++; - } - - for(j=0;jclassmetric1[j] && - angmax<=info->classmetric2[j]) - break; - - partword[0][i]=j; - - } - -#ifdef TRAIN_RESAUX - sprintf(buffer,"resaux_%d.vqd",look->train_seq); - of=fopen(buffer,"a"); - for(i=0;iframes++; - - return(partword); -} - -static int _01forward(oggpack_buffer *opb, - vorbis_block *vb,vorbis_look_residue *vl, - float **in,int ch, - long **partword, - int (*encode)(oggpack_buffer *,float *,int, - codebook *,long *)){ - long i,j,k,s; - vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl; - vorbis_info_residue0 *info=look->info; - - /* move all this setup out later */ - int samples_per_partition=info->grouping; - int possible_partitions=info->partitions; - int partitions_per_word=look->phrasebook->dim; - int n=info->end-info->begin; - - int partvals=n/samples_per_partition; - long resbits[128]; - long resvals[128]; - -#ifdef TRAIN_RES - for(i=0;ibegin;jend;j++){ - if(in[i][j]>look->tmax)look->tmax=in[i][j]; - if(in[i][j]tmin)look->tmin=in[i][j]; - } -#endif - - memset(resbits,0,sizeof(resbits)); - memset(resvals,0,sizeof(resvals)); - - /* we code the partition words for each channel, then the residual - words for a partition per channel until we've written all the - residual words for that partition word. Then write the next - partition channel words... */ - - for(s=0;sstages;s++){ - - for(i=0;iphrasebook->entries) - look->phrasebits+=vorbis_book_encode(look->phrasebook,val,opb); -#if 0 /*def TRAIN_RES*/ - else - fprintf(stderr,"!"); -#endif - - } - } - - /* now we encode interleaved residual values for the partitions */ - for(k=0;kbegin; - - for(j=0;jsecondstages[partword[j][i]]&(1<partbooks[partword[j][i]][s]; - if(statebook){ - int ret; - long *accumulator=NULL; - -#ifdef TRAIN_RES - accumulator=look->training_data[s][partword[j][i]]; - { - int l; - float *samples=in[j]+offset; - for(l=0;ltraining_min[s][partword[j][i]]) - look->training_min[s][partword[j][i]]=samples[l]; - if(samples[l]>look->training_max[s][partword[j][i]]) - look->training_max[s][partword[j][i]]=samples[l]; - } - } -#endif - - ret=encode(opb,in[j]+offset,samples_per_partition, - statebook,accumulator); - - look->postbits+=ret; - resbits[partword[j][i]]+=ret; - } - } - } - } - } - } - - /*{ - long total=0; - long totalbits=0; - fprintf(stderr,"%d :: ",vb->mode); - for(k=0;kinfo; - - /* move all this setup out later */ - int samples_per_partition=info->grouping; - int partitions_per_word=look->phrasebook->dim; - int n=info->end-info->begin; - - int partvals=n/samples_per_partition; - int partwords=(partvals+partitions_per_word-1)/partitions_per_word; - int ***partword=(int***)alloca(ch*sizeof(*partword)); - - for(j=0;jstages;s++){ - - /* each loop decodes on partition codeword containing - partitions_pre_word partitions */ - for(i=0,l=0;iphrasebook,&vb->opb); - if(temp==-1)goto eopbreak; - partword[j][l]=look->decodemap[temp]; - if(partword[j][l]==NULL)goto errout; - } - } - - /* now we decode residual values for the partitions */ - for(k=0;kbegin+i*samples_per_partition; - if(info->secondstages[partword[j][l][k]]&(1<partbooks[partword[j][l][k]][s]; - if(stagebook){ - if(decodepart(stagebook,in[j]+offset,&vb->opb, - samples_per_partition)==-1)goto eopbreak; - } - } - } - } - } - - errout: - eopbreak: - return(0); -} - -#if 0 -/* residue 0 and 1 are just slight variants of one another. 0 is - interleaved, 1 is not */ -long **res0_class(vorbis_block *vb,vorbis_look_residue *vl, - float **in,int *nonzero,int ch){ - /* we encode only the nonzero parts of a bundle */ - int i,used=0; - for(i=0;ipcmend/2; - for(i=0;ipcmend/2; - for(i=0;ipcmend/2,used=0; - - /* don't duplicate the code; use a working vector hack for now and - reshape ourselves into a single channel res1 */ - /* ugly; reallocs for each coupling pass :-( */ - float *work=(float*)_vorbis_block_alloc(vb,ch*n*sizeof(*work)); - for(i=0;iinfo; - - /* move all this setup out later */ - int samples_per_partition=info->grouping; - int partitions_per_word=look->phrasebook->dim; - int n=info->end-info->begin; - - int partvals=n/samples_per_partition; - int partwords=(partvals+partitions_per_word-1)/partitions_per_word; - int **partword=(int**)_vorbis_block_alloc(vb,partwords*sizeof(*partword)); - - for(i=0;istages;s++){ - for(i=0,l=0;iphrasebook,&vb->opb); - if(temp==-1)goto eopbreak; - partword[l]=look->decodemap[temp]; - if(partword[l]==NULL)goto errout; - } - - /* now we decode residual values for the partitions */ - for(k=0;ksecondstages[partword[l][k]]&(1<partbooks[partword[l][k]][s]; - - if(stagebook){ - if(vorbis_book_decodevv_add(stagebook,in, - i*samples_per_partition+info->begin,ch, - &vb->opb,samples_per_partition)==-1) - goto eopbreak; - } - } - } - } - - errout: - eopbreak: - return(0); -} - - -vorbis_func_residue residue0_exportbundle={ - NULL, - &res0_unpack, - &res0_look, - &res0_free_info, - &res0_free_look, - NULL, - NULL, - &res0_inverse -}; - -vorbis_func_residue residue1_exportbundle={ - &res0_pack, - &res0_unpack, - &res0_look, - &res0_free_info, - &res0_free_look, - &res1_class, - &res1_forward, - &res1_inverse -}; - -vorbis_func_residue residue2_exportbundle={ - &res0_pack, - &res0_unpack, - &res0_look, - &res0_free_info, - &res0_free_look, - &res2_class, - &res2_forward, - &res2_inverse -}; - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/scales.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/scales.h deleted file mode 100644 index 3dd82f6add..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/scales.h +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: linear scale -> dB, Bark and Mel scales - last mod: $Id: scales.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_SCALES_H_ -#define _V_SCALES_H_ - -#include -#include "os.h" - -/* 20log10(x) */ -#define VORBIS_IEEE_FLOAT32 1 -#ifdef VORBIS_IEEE_FLOAT32 - -static float unitnorm(float x){ - union { - ogg_uint32_t i; - float f; - } ix; - ix.f = x; - ix.i = (ix.i & 0x80000000U) | (0x3f800000U); - return ix.f; -} - -/* Segher was off (too high) by ~ .3 decibel. Center the conversion correctly. */ -static float todB(const float *x){ - union { - ogg_uint32_t i; - float f; - } ix; - ix.f = *x; - ix.i = ix.i&0x7fffffff; - return (float)(ix.i * 7.17711438e-7f -764.6161886f); -} - -#define todB_nn(x) todB(x) - -#else - -static float unitnorm(float x){ - if(x<0)return(-1.f); - return(1.f); -} - -#define todB(x) (*(x)==0?-400.f:log(*(x)**(x))*4.34294480f) -#define todB_nn(x) (*(x)==0.f?-400.f:log(*(x))*8.6858896f) - -#endif - -#define fromdB(x) (exp((x)*.11512925f)) - -/* The bark scale equations are approximations, since the original - table was somewhat hand rolled. The below are chosen to have the - best possible fit to the rolled tables, thus their somewhat odd - appearance (these are more accurate and over a longer range than - the oft-quoted bark equations found in the texts I have). The - approximations are valid from 0 - 30kHz (nyquist) or so. - - all f in Hz, z in Bark */ - -#define toBARK(n) (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n)) -#define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f) -#define toMEL(n) (log(1.f+(n)*.001f)*1442.695f) -#define fromMEL(m) (1000.f*exp((m)/1442.695f)-1000.f) - -/* Frequency to octave. We arbitrarily declare 63.5 Hz to be octave - 0.0 */ - -#define toOC(n) (log(n)*1.442695f-5.965784f) -#define fromOC(o) (exp(((o)+5.965784f)*.693147f)) - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/sharedbook.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/sharedbook.c deleted file mode 100644 index c547241019..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/sharedbook.c +++ /dev/null @@ -1,731 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: basic shared codebook operations - last mod: $Id: sharedbook.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include "../../ogg.h" -#include "os.h" -#include "misc.h" -#include "../../codec.h" -#include "codebook.h" -#include "scales.h" - -/**** pack/unpack helpers ******************************************/ -int _ilog(unsigned int v){ - int ret=0; - while(v){ - ret++; - v>>=1; - } - return(ret); -} - -/* 32 bit float (not IEEE; nonnormalized mantissa + - biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm - Why not IEEE? It's just not that important here. */ - -#define VQ_FEXP 10 -#define VQ_FMAN 21 -#define VQ_FEXP_BIAS 768 /* bias toward values smaller than 1. */ - -/* doesn't currently guard under/overflow */ -long _float32_pack(float val){ - int sign=0; - long exp; - long mant; - if(val<0){ - sign=0x80000000; - val= -val; - } - exp= floor(log(val)/log(2.f)); - mant=rint(ldexp(val,(VQ_FMAN-1)-exp)); - exp=(exp+VQ_FEXP_BIAS)<>VQ_FMAN; - if(sign)mant= -mant; - return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS)); -} - -/* given a list of word lengths, generate a list of codewords. Works - for length ordered or unordered, always assigns the lowest valued - codewords first. Extended to handle unused entries (length 0) */ -ogg_uint32_t *_make_words(long *l,long n,long sparsecount){ - long i,j,count=0; - ogg_uint32_t marker[33]; - ogg_uint32_t *r=(ogg_uint32_t*)_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r)); - memset(marker,0,sizeof(marker)); - - for(i=0;i0){ - ogg_uint32_t entry=marker[length]; - - /* when we claim a node for an entry, we also claim the nodes - below it (pruning off the imagined tree that may have dangled - from it) as well as blocking the use of any nodes directly - above for leaves */ - - /* update ourself */ - if(length<32 && (entry>>length)){ - /* error condition; the lengths must specify an overpopulated tree */ - _ogg_free(r); - return(NULL); - } - r[count++]=entry; - - /* Look to see if the next shorter marker points to the node - above. if so, update it and repeat. */ - { - for(j=length;j>0;j--){ - - if(marker[j]&1){ - /* have to jump branches */ - if(j==1) - marker[1]++; - else - marker[j]=marker[j-1]<<1; - break; /* invariant says next upper marker would already - have been moved if it was on the same path */ - } - marker[j]++; - } - } - - /* prune the tree; the implicit invariant says all the longer - markers were dangling from our just-taken node. Dangle them - from our *new* node. */ - for(j=length+1;j<33;j++) - if((marker[j]>>1) == entry){ - entry=marker[j]; - marker[j]=marker[j-1]<<1; - }else - break; - }else - if(sparsecount==0)count++; - } - - /* bitreverse the words because our bitwise packer/unpacker is LSb - endian */ - for(i=0,count=0;i>j)&1; - } - - if(sparsecount){ - if(l[i]) - r[count++]=temp; - }else - r[count++]=temp; - } - - return(r); -} - -/* there might be a straightforward one-line way to do the below - that's portable and totally safe against roundoff, but I haven't - thought of it. Therefore, we opt on the side of caution */ -long _book_maptype1_quantvals(const static_codebook *b){ - long vals=floor(pow((float)b->entries,1.f/b->dim)); - - /* the above *should* be reliable, but we'll not assume that FP is - ever reliable when bitstream sync is at stake; verify via integer - means that vals really is the greatest value of dim for which - vals^b->bim <= b->entries */ - /* treat the above as an initial guess */ - while(1){ - long acc=1; - long acc1=1; - int i; - for(i=0;idim;i++){ - acc*=vals; - acc1*=vals+1; - } - if(acc<=b->entries && acc1>b->entries){ - return(vals); - }else{ - if(acc>b->entries){ - vals--; - }else{ - vals++; - } - } - } -} - -/* unpack the quantized list of values for encode/decode ***********/ -/* we need to deal with two map types: in map type 1, the values are - generated algorithmically (each column of the vector counts through - the values in the quant vector). in map type 2, all the values came - in in an explicit list. Both value lists must be unpacked */ -float *_book_unquantize(const static_codebook *b,int n,int *sparsemap){ - long j,k,count=0; - if(b->maptype==1 || b->maptype==2){ - int quantvals; - float mindel=_float32_unpack(b->q_min); - float delta=_float32_unpack(b->q_delta); - float *r=(float*)_ogg_calloc(n*b->dim,sizeof(*r)); - - /* maptype 1 and 2 both use a quantized value vector, but - different sizes */ - switch(b->maptype){ - case 1: - /* most of the time, entries%dimensions == 0, but we need to be - well defined. We define that the possible vales at each - scalar is values == entries/dim. If entries%dim != 0, we'll - have 'too few' values (values*dimentries;j++){ - if((sparsemap && b->lengthlist[j]) || !sparsemap){ - float last=0.f; - int indexdiv=1; - for(k=0;kdim;k++){ - int index= (j/indexdiv)%quantvals; - float val=b->quantlist[index]; - val=fabs(val)*delta+mindel+last; - if(b->q_sequencep)last=val; - if(sparsemap) - r[sparsemap[count]*b->dim+k]=val; - else - r[count*b->dim+k]=val; - indexdiv*=quantvals; - } - count++; - } - - } - break; - case 2: - for(j=0;jentries;j++){ - if((sparsemap && b->lengthlist[j]) || !sparsemap){ - float last=0.f; - - for(k=0;kdim;k++){ - float val=b->quantlist[j*b->dim+k]; - val=fabs(val)*delta+mindel+last; - if(b->q_sequencep)last=val; - if(sparsemap) - r[sparsemap[count]*b->dim+k]=val; - else - r[count*b->dim+k]=val; - } - count++; - } - } - break; - } - - return(r); - } - return(NULL); -} - -void vorbis_staticbook_clear(static_codebook *b){ - if(b->allocedp){ - if(b->quantlist)_ogg_free(b->quantlist); - if(b->lengthlist)_ogg_free(b->lengthlist); - if(b->nearest_tree){ - _ogg_free(b->nearest_tree->ptr0); - _ogg_free(b->nearest_tree->ptr1); - _ogg_free(b->nearest_tree->p); - _ogg_free(b->nearest_tree->q); - memset(b->nearest_tree,0,sizeof(*b->nearest_tree)); - _ogg_free(b->nearest_tree); - } - if(b->thresh_tree){ - _ogg_free(b->thresh_tree->quantthresh); - _ogg_free(b->thresh_tree->quantmap); - memset(b->thresh_tree,0,sizeof(*b->thresh_tree)); - _ogg_free(b->thresh_tree); - } - - memset(b,0,sizeof(*b)); - } -} - -void vorbis_staticbook_destroy(static_codebook *b){ - if(b->allocedp){ - vorbis_staticbook_clear(b); - _ogg_free(b); - } -} - -void vorbis_book_clear(codebook *b){ - /* static book is not cleared; we're likely called on the lookup and - the static codebook belongs to the info struct */ - if(b->valuelist)_ogg_free(b->valuelist); - if(b->codelist)_ogg_free(b->codelist); - - if(b->dec_index)_ogg_free(b->dec_index); - if(b->dec_codelengths)_ogg_free(b->dec_codelengths); - if(b->dec_firsttable)_ogg_free(b->dec_firsttable); - - memset(b,0,sizeof(*b)); -} - -int vorbis_book_init_encode(codebook *c,const static_codebook *s){ - - memset(c,0,sizeof(*c)); - c->c=s; - c->entries=s->entries; - c->used_entries=s->entries; - c->dim=s->dim; - c->codelist=_make_words(s->lengthlist,s->entries,0); - c->valuelist=_book_unquantize(s,s->entries,NULL); - - return(0); -} - -static int sort32a(const void *a,const void *b){ - return ( **(ogg_uint32_t **)a>**(ogg_uint32_t **)b)- - ( **(ogg_uint32_t **)a<**(ogg_uint32_t **)b); -} - -/* decode codebook arrangement is more heavily optimized than encode */ -int vorbis_book_init_decode(codebook *c,const static_codebook *s){ - int i,j,n=0,tabn; - int *sortindex; - memset(c,0,sizeof(*c)); - - /* count actually used entries */ - for(i=0;ientries;i++) - if(s->lengthlist[i]>0) - n++; - - c->entries=s->entries; - c->used_entries=n; - c->dim=s->dim; - - /* two different remappings go on here. - - First, we collapse the likely sparse codebook down only to - actually represented values/words. This collapsing needs to be - indexed as map-valueless books are used to encode original entry - positions as integers. - - Second, we reorder all vectors, including the entry index above, - by sorted bitreversed codeword to allow treeless decode. */ - - { - /* perform sort */ - ogg_uint32_t *codes=_make_words(s->lengthlist,s->entries,c->used_entries); - ogg_uint32_t **codep=(ogg_uint32_t**)alloca(sizeof(*codep)*n); - - if(codes==NULL)goto err_out; - - for(i=0;icodelist=(ogg_uint32_t*)_ogg_malloc(n*sizeof(*c->codelist)); - /* the index is a reverse index */ - for(i=0;icodelist[sortindex[i]]=codes[i]; - _ogg_free(codes); - } - - c->valuelist=_book_unquantize(s,n,sortindex); - c->dec_index=(int*)_ogg_malloc(n*sizeof(*c->dec_index)); - - for(n=0,i=0;ientries;i++) - if(s->lengthlist[i]>0) - c->dec_index[sortindex[n++]]=i; - - c->dec_codelengths=(char*)_ogg_malloc(n*sizeof(*c->dec_codelengths)); - for(n=0,i=0;ientries;i++) - if(s->lengthlist[i]>0) - c->dec_codelengths[sortindex[n++]]=s->lengthlist[i]; - - c->dec_firsttablen=_ilog(c->used_entries)-4; /* this is magic */ - if(c->dec_firsttablen<5)c->dec_firsttablen=5; - if(c->dec_firsttablen>8)c->dec_firsttablen=8; - - tabn=1<dec_firsttablen; - c->dec_firsttable=(ogg_uint32_t*)_ogg_calloc(tabn,sizeof(*c->dec_firsttable)); - c->dec_maxlength=0; - - for(i=0;idec_maxlengthdec_codelengths[i]) - c->dec_maxlength=c->dec_codelengths[i]; - if(c->dec_codelengths[i]<=c->dec_firsttablen){ - ogg_uint32_t orig=ogg_bitreverse(c->codelist[i]); - for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++) - c->dec_firsttable[orig|(j<dec_codelengths[i])]=i+1; - } - } - - /* now fill in 'unused' entries in the firsttable with hi/lo search - hints for the non-direct-hits */ - { - ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen); - long lo=0,hi=0; - - for(i=0;idec_firsttablen); - if(c->dec_firsttable[ogg_bitreverse(word)]==0){ - while((lo+1)codelist[lo+1]<=word)lo++; - while( hi=(c->codelist[hi]&mask))hi++; - - /* we only actually have 15 bits per hint to play with here. - In order to overflow gracefully (nothing breaks, efficiency - just drops), encode as the difference from the extremes. */ - { - unsigned long loval=lo; - unsigned long hival=n-hi; - - if(loval>0x7fff)loval=0x7fff; - if(hival>0x7fff)hival=0x7fff; - c->dec_firsttable[ogg_bitreverse(word)]= - 0x80000000UL | (loval<<15) | hival; - } - } - } - } - - - return(0); - err_out: - vorbis_book_clear(c); - return(-1); -} - -static float _dist(int el,float *ref, float *b,int step){ - int i; - float acc=0.f; - for(i=0;ic->thresh_tree; - -#if 0 - encode_aux_nearestmatch *nt=book->c->nearest_tree; - encode_aux_pigeonhole *pt=book->c->pigeon_tree; -#endif - int dim=book->dim; - int k,o; - /*int savebest=-1; - float saverr;*/ - - /* do we have a threshhold encode hint? */ - if(tt){ - int index=0,i; - /* find the quant val of each scalar */ - for(k=0,o=step*(dim-1);kthreshvals>>1; - if(a[o]quantthresh[i]){ - - for(;i>0;i--) - if(a[o]>=tt->quantthresh[i-1]) - break; - - }else{ - - for(i++;ithreshvals-1;i++) - if(a[o]quantthresh[i])break; - - } - - index=(index*tt->quantvals)+tt->quantmap[i]; - } - /* regular lattices are easy :-) */ - if(book->c->lengthlist[index]>0) /* is this unused? If so, we'll - use a decision tree after all - and fall through*/ - return(index); - } - -#if 0 - /* do we have a pigeonhole encode hint? */ - if(pt){ - const static_codebook *c=book->c; - int i,besti=-1; - float best=0.f; - int entry=0; - - /* dealing with sequentialness is a pain in the ass */ - if(c->q_sequencep){ - int pv; - long mul=1; - float qlast=0; - for(k=0,o=0;kmin)/pt->del); - if(pv<0 || pv>=pt->mapentries)break; - entry+=pt->pigeonmap[pv]*mul; - mul*=pt->quantvals; - qlast+=pv*pt->del+pt->min; - } - }else{ - for(k=0,o=step*(dim-1);kmin)/pt->del); - if(pv<0 || pv>=pt->mapentries)break; - entry=entry*pt->quantvals+pt->pigeonmap[pv]; - } - } - - /* must be within the pigeonholable range; if we quant outside (or - in an entry that we define no list for), brute force it */ - if(k==dim && pt->fitlength[entry]){ - /* search the abbreviated list */ - long *list=pt->fitlist+pt->fitmap[entry]; - for(i=0;ifitlength[entry];i++){ - float this=_dist(dim,book->valuelist+list[i]*dim,a,step); - if(besti==-1 || thisvaluelist+nt->p[ptr]; - float *q=book->valuelist+nt->q[ptr]; - - for(k=0,o=0;k0.f) /* in A */ - ptr= -nt->ptr0[ptr]; - else /* in B */ - ptr= -nt->ptr1[ptr]; - if(ptr<=0)break; - } - return(-ptr); - } -#endif - - /* brute force it! */ - { - const static_codebook *c=book->c; - int i,besti=-1; - float best=0.f; - float *e=book->valuelist; - for(i=0;ientries;i++){ - if(c->lengthlist[i]>0){ - float thisx=_dist(dim,e,a,step); - if(besti==-1 || thisxvaluelist+savebest*dim)[i]); - fprintf(stderr,"\n" - "bruteforce (entry %d, err %g):",besti,best); - for(i=0;ivaluelist+besti*dim)[i]); - fprintf(stderr,"\n"); - }*/ - return(besti); - } -} - -long vorbis_book_codeword(codebook *book,int entry){ - if(book->c) /* only use with encode; decode optimizations are - allowed to break this */ - return book->codelist[entry]; - return -1; -} - -long vorbis_book_codelen(codebook *book,int entry){ - if(book->c) /* only use with encode; decode optimizations are - allowed to break this */ - return book->c->lengthlist[entry]; - return -1; -} - -#ifdef _V_SELFTEST - -/* Unit tests of the dequantizer; this stuff will be OK - cross-platform, I simply want to be sure that special mapping cases - actually work properly; a bug could go unnoticed for a while */ - -#include - -/* cases: - - no mapping - full, explicit mapping - algorithmic mapping - - nonsequential - sequential -*/ - -static long full_quantlist1[]={0,1,2,3, 4,5,6,7, 8,3,6,1}; -static long partial_quantlist1[]={0,7,2}; - -/* no mapping */ -static_codebook test1={ - 4,16, - NULL, - 0, - 0,0,0,0, - NULL, - NULL,NULL -}; -static float *test1_result=NULL; - -/* linear, full mapping, nonsequential */ -static_codebook test2={ - 4,3, - NULL, - 2, - -533200896,1611661312,4,0, - full_quantlist1, - NULL,NULL -}; -static float test2_result[]={-3,-2,-1,0, 1,2,3,4, 5,0,3,-2}; - -/* linear, full mapping, sequential */ -static_codebook test3={ - 4,3, - NULL, - 2, - -533200896,1611661312,4,1, - full_quantlist1, - NULL,NULL -}; -static float test3_result[]={-3,-5,-6,-6, 1,3,6,10, 5,5,8,6}; - -/* linear, algorithmic mapping, nonsequential */ -static_codebook test4={ - 3,27, - NULL, - 1, - -533200896,1611661312,4,0, - partial_quantlist1, - NULL,NULL -}; -static float test4_result[]={-3,-3,-3, 4,-3,-3, -1,-3,-3, - -3, 4,-3, 4, 4,-3, -1, 4,-3, - -3,-1,-3, 4,-1,-3, -1,-1,-3, - -3,-3, 4, 4,-3, 4, -1,-3, 4, - -3, 4, 4, 4, 4, 4, -1, 4, 4, - -3,-1, 4, 4,-1, 4, -1,-1, 4, - -3,-3,-1, 4,-3,-1, -1,-3,-1, - -3, 4,-1, 4, 4,-1, -1, 4,-1, - -3,-1,-1, 4,-1,-1, -1,-1,-1}; - -/* linear, algorithmic mapping, sequential */ -static_codebook test5={ - 3,27, - NULL, - 1, - -533200896,1611661312,4,1, - partial_quantlist1, - NULL,NULL -}; -static float test5_result[]={-3,-6,-9, 4, 1,-2, -1,-4,-7, - -3, 1,-2, 4, 8, 5, -1, 3, 0, - -3,-4,-7, 4, 3, 0, -1,-2,-5, - -3,-6,-2, 4, 1, 5, -1,-4, 0, - -3, 1, 5, 4, 8,12, -1, 3, 7, - -3,-4, 0, 4, 3, 7, -1,-2, 2, - -3,-6,-7, 4, 1, 0, -1,-4,-5, - -3, 1, 0, 4, 8, 7, -1, 3, 2, - -3,-4,-5, 4, 3, 2, -1,-2,-3}; - -void run_test(static_codebook *b,float *comp){ - float *out=_book_unquantize(b,b->entries,NULL); - int i; - - if(comp){ - if(!out){ - fprintf(stderr,"_book_unquantize incorrectly returned NULL\n"); - exit(1); - } - - for(i=0;ientries*b->dim;i++) - if(fabs(out[i]-comp[i])>.0001){ - fprintf(stderr,"disagreement in unquantized and reference data:\n" - "position %d, %g != %g\n",i,out[i],comp[i]); - exit(1); - } - - }else{ - if(out){ - fprintf(stderr,"_book_unquantize returned a value array: \n" - " correct result should have been NULL\n"); - exit(1); - } - } -} - -int main(){ - /* run the nine dequant tests, and compare to the hand-rolled results */ - fprintf(stderr,"Dequant test 1... "); - run_test(&test1,test1_result); - fprintf(stderr,"OK\nDequant test 2... "); - run_test(&test2,test2_result); - fprintf(stderr,"OK\nDequant test 3... "); - run_test(&test3,test3_result); - fprintf(stderr,"OK\nDequant test 4... "); - run_test(&test4,test4_result); - fprintf(stderr,"OK\nDequant test 5... "); - run_test(&test5,test5_result); - fprintf(stderr,"OK\n\n"); - - return(0); -} - -#endif - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/smallft.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/smallft.c deleted file mode 100644 index 02be866b30..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/smallft.c +++ /dev/null @@ -1,1260 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: *unnormalized* fft transform - last mod: $Id: smallft.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -/* FFT implementation from OggSquish, minus cosine transforms, - * minus all but radix 2/4 case. In Vorbis we only need this - * cut-down version. - * - * To do more than just power-of-two sized vectors, see the full - * version I wrote for NetLib. - * - * Note that the packing is a little strange; rather than the FFT r/i - * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, - * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the - * FORTRAN version - */ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include "smallft.h" -#include "os.h" -#include "misc.h" - -static void drfti1(int n, float *wa, int *ifac){ - static int ntryh[4] = { 4,2,3,5 }; - static float tpi = 6.28318530717958648f; - float arg,argh,argld,fi; - int ntry=0,i,j=-1; - int k1, l1, l2, ib; - int ld, ii, ip, is, nq, nr; - int ido, ipm, nfm1; - int nl=n; - int nf=0; - - L101: - j++; - if (j < 4) - ntry=ntryh[j]; - else - ntry+=2; - - L104: - nq=nl/ntry; - nr=nl-ntry*nq; - if (nr!=0) goto L101; - - nf++; - ifac[nf+1]=ntry; - nl=nq; - if(ntry!=2)goto L107; - if(nf==1)goto L107; - - for (i=1;i>1; - ipp2=ip; - idp2=ido; - nbd=(ido-1)>>1; - t0=l1*ido; - t10=ip*ido; - - if(ido==1)goto L119; - for(ik=0;ikl1){ - for(j=1;j>1; - ipp2=ip; - ipph=(ip+1)>>1; - if(idol1)goto L139; - - is= -ido-1; - t1=0; - for(j=1;jn==1)return; - drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); -} - -void drft_backward(drft_lookup *l,float *data){ - if (l->n==1)return; - drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); -} - -void drft_init(drft_lookup *l,int n){ - l->n=n; - l->trigcache=(float*)_ogg_calloc(3*n,sizeof(*l->trigcache)); - l->splitcache=(int*)_ogg_calloc(32,sizeof(*l->splitcache)); - fdrffti(n, l->trigcache, l->splitcache); -} - -void drft_clear(drft_lookup *l){ - if(l){ - if(l->trigcache)_ogg_free(l->trigcache); - if(l->splitcache)_ogg_free(l->splitcache); - memset(l,0,sizeof(*l)); - } -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/smallft.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/smallft.h deleted file mode 100644 index 17c730290b..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/smallft.h +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: fft transform - last mod: $Id: smallft.h,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _V_SMFT_H_ -#define _V_SMFT_H_ - -#include "../../codec.h" - -typedef struct { - int n; - float *trigcache; - int *splitcache; -} drft_lookup; - -extern void drft_forward(drft_lookup *l,float *data); -extern void drft_backward(drft_lookup *l,float *data); -extern void drft_init(drft_lookup *l,int n); -extern void drft_clear(drft_lookup *l); - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/synthesis.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/synthesis.c deleted file mode 100644 index d7de720ad3..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/synthesis.c +++ /dev/null @@ -1,174 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: single-block PCM synthesis - last mod: $Id: synthesis.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include "../../ogg.h" -#include "../../codec.h" -#include "codec_internal.h" -#include "registry.h" -#include "misc.h" -#include "os.h" - -int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){ - vorbis_dsp_state *vd=vb->vd; - private_state *b=(private_state*)vd->backend_state; - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - oggpack_buffer *opb=&vb->opb; - int type,mode,i; - - /* first things first. Make sure decode is ready */ - _vorbis_block_ripcord(vb); - oggpack_readinit(opb,op->packet,op->bytes); - - /* Check the packet type */ - if(oggpack_read(opb,1)!=0){ - /* Oops. This is not an audio data packet */ - return(OV_ENOTAUDIO); - } - - /* read our mode and pre/post windowsize */ - mode=oggpack_read(opb,b->modebits); - if(mode==-1)return(OV_EBADPACKET); - - vb->mode=mode; - vb->W=ci->mode_param[mode]->blockflag; - if(vb->W){ - - /* this doesn;t get mapped through mode selection as it's used - only for window selection */ - vb->lW=oggpack_read(opb,1); - vb->nW=oggpack_read(opb,1); - if(vb->nW==-1) return(OV_EBADPACKET); - }else{ - vb->lW=0; - vb->nW=0; - } - - /* more setup */ - vb->granulepos=op->granulepos; - vb->sequence=op->packetno; - vb->eofflag=op->e_o_s; - - /* alloc pcm passback storage */ - vb->pcmend=ci->blocksizes[vb->W]; - vb->pcm=(float**)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels); - for(i=0;ichannels;i++) - vb->pcm[i]=(float*)_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i])); - - /* unpack_header enforces range checking */ - type=ci->map_type[ci->mode_param[mode]->mapping]; - - return(_mapping_P[type]->inverse(vb,ci->map_param[ci->mode_param[mode]-> - mapping])); -} - -/* used to track pcm position without actually performing decode. - Useful for sequential 'fast forward' */ -int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op){ - vorbis_dsp_state *vd=vb->vd; - private_state *b=(private_state*)vd->backend_state; - vorbis_info *vi=vd->vi; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - oggpack_buffer *opb=&vb->opb; - int mode; - - /* first things first. Make sure decode is ready */ - _vorbis_block_ripcord(vb); - oggpack_readinit(opb,op->packet,op->bytes); - - /* Check the packet type */ - if(oggpack_read(opb,1)!=0){ - /* Oops. This is not an audio data packet */ - return(OV_ENOTAUDIO); - } - - /* read our mode and pre/post windowsize */ - mode=oggpack_read(opb,b->modebits); - if(mode==-1)return(OV_EBADPACKET); - - vb->mode=mode; - vb->W=ci->mode_param[mode]->blockflag; - if(vb->W){ - vb->lW=oggpack_read(opb,1); - vb->nW=oggpack_read(opb,1); - if(vb->nW==-1) return(OV_EBADPACKET); - }else{ - vb->lW=0; - vb->nW=0; - } - - /* more setup */ - vb->granulepos=op->granulepos; - vb->sequence=op->packetno; - vb->eofflag=op->e_o_s; - - /* no pcm */ - vb->pcmend=0; - vb->pcm=NULL; - - return(0); -} - -long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - oggpack_buffer opb; - int mode; - - oggpack_readinit(&opb,op->packet,op->bytes); - - /* Check the packet type */ - if(oggpack_read(&opb,1)!=0){ - /* Oops. This is not an audio data packet */ - return(OV_ENOTAUDIO); - } - - { - int modebits=0; - int v=ci->modes; - while(v>1){ - modebits++; - v>>=1; - } - - /* read our mode and pre/post windowsize */ - mode=oggpack_read(&opb,modebits); - } - if(mode==-1)return(OV_EBADPACKET); - return(ci->blocksizes[ci->mode_param[mode]->blockflag]); -} - -int vorbis_synthesis_halfrate(vorbis_info *vi,int flag){ - /* set / clear half-sample-rate mode */ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - - /* right now, our MDCT can't handle < 64 sample windows. */ - if(ci->blocksizes[0]<=64 && flag)return -1; - ci->halfrate_flag=(flag?1:0); - return 0; -} - -int vorbis_synthesis_halfrate_p(vorbis_info *vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - return ci->halfrate_flag; -} - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/vorbisenc.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/vorbisenc.c deleted file mode 100644 index 9f1cb6f3f6..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/vorbisenc.c +++ /dev/null @@ -1,1189 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: simple programmatic interface for encoder mode setup - last mod: $Id: vorbisenc.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include - -#include "../../codec.h" -#include "../../vorbisenc.h" - -#include "codec_internal.h" - -#include "os.h" -#include "misc.h" - -/* careful with this; it's using static array sizing to make managing - all the modes a little less annoying. If we use a residue backend - with > 12 partition types, or a different division of iteration, - this needs to be updated. */ -typedef struct { - static_codebook *books[12][3]; -} static_bookblock; - -typedef struct { - int res_type; - int limit_type; /* 0 lowpass limited, 1 point stereo limited */ - vorbis_info_residue0 *res; - static_codebook *book_aux; - static_codebook *book_aux_managed; - static_bookblock *books_base; - static_bookblock *books_base_managed; -} vorbis_residue_template; - -typedef struct { - vorbis_info_mapping0 *map; - vorbis_residue_template *res; -} vorbis_mapping_template; - -typedef struct vp_adjblock{ - int block[P_BANDS]; -} vp_adjblock; - -typedef struct { - int data[NOISE_COMPAND_LEVELS]; -} compandblock; - -/* high level configuration information for setting things up - step-by-step with the detailed vorbis_encode_ctl interface. - There's a fair amount of redundancy such that interactive setup - does not directly deal with any vorbis_info or codec_setup_info - initialization; it's all stored (until full init) in this highlevel - setup, then flushed out to the real codec setup structs later. */ - -typedef struct { - int att[P_NOISECURVES]; - float boost; - float decay; -} att3; -typedef struct { int data[P_NOISECURVES]; } adj3; - -typedef struct { - int pre[PACKETBLOBS]; - int post[PACKETBLOBS]; - float kHz[PACKETBLOBS]; - float lowpasskHz[PACKETBLOBS]; -} adj_stereo; - -typedef struct { - int lo; - int hi; - int fixed; -} noiseguard; -typedef struct { - int data[P_NOISECURVES][17]; -} noise3; - -typedef struct { - int mappings; - double *rate_mapping; - double *quality_mapping; - int coupling_restriction; - long samplerate_min_restriction; - long samplerate_max_restriction; - - - int *blocksize_short; - int *blocksize_long; - - att3 *psy_tone_masteratt; - int *psy_tone_0dB; - int *psy_tone_dBsuppress; - - vp_adjblock *psy_tone_adj_impulse; - vp_adjblock *psy_tone_adj_long; - vp_adjblock *psy_tone_adj_other; - - noiseguard *psy_noiseguards; - noise3 *psy_noise_bias_impulse; - noise3 *psy_noise_bias_padding; - noise3 *psy_noise_bias_trans; - noise3 *psy_noise_bias_long; - int *psy_noise_dBsuppress; - - compandblock *psy_noise_compand; - double *psy_noise_compand_short_mapping; - double *psy_noise_compand_long_mapping; - - int *psy_noise_normal_start[2]; - int *psy_noise_normal_partition[2]; - double *psy_noise_normal_thresh; - - int *psy_ath_float; - int *psy_ath_abs; - - double *psy_lowpass; - - vorbis_info_psy_global *global_params; - double *global_mapping; - adj_stereo *stereo_modes; - - static_codebook ***floor_books; - vorbis_info_floor1 *floor_params; - int *floor_short_mapping; - int *floor_long_mapping; - - vorbis_mapping_template *maps; -} ve_setup_data_template; - -/* a few static coder conventions */ -static vorbis_info_mode _mode_template[2]={ - {0,0,0,0}, - {1,0,0,1} -}; - -static vorbis_info_mapping0 _map_nominal[2]={ - {1, {0,0}, {0}, {0}, 1,{0},{1}}, - {1, {0,0}, {1}, {1}, 1,{0},{1}} -}; - -#include "modes/setup_44.h" -#include "modes/setup_44u.h" -#include "modes/setup_32.h" -#include "modes/setup_8.h" -#include "modes/setup_11.h" -#include "modes/setup_16.h" -#include "modes/setup_22.h" -#include "modes/setup_X.h" - -static ve_setup_data_template *setup_list[]={ - &ve_setup_44_stereo, - &ve_setup_44_uncoupled, - - &ve_setup_32_stereo, - &ve_setup_32_uncoupled, - - &ve_setup_22_stereo, - &ve_setup_22_uncoupled, - &ve_setup_16_stereo, - &ve_setup_16_uncoupled, - - &ve_setup_11_stereo, - &ve_setup_11_uncoupled, - &ve_setup_8_stereo, - &ve_setup_8_uncoupled, - - &ve_setup_X_stereo, - &ve_setup_X_uncoupled, - &ve_setup_XX_stereo, - &ve_setup_XX_uncoupled, - 0 -}; - -static int vorbis_encode_toplevel_setup(vorbis_info *vi,int ch,long rate){ - if(vi && vi->codec_setup){ - - vi->version=0; - vi->channels=ch; - vi->rate=rate; - - return(0); - } - return(OV_EINVAL); -} - -static void vorbis_encode_floor_setup(vorbis_info *vi,double s,int block, - static_codebook ***books, - vorbis_info_floor1 *in, - int *x){ - int i,k,is=s; - vorbis_info_floor1 *f=(vorbis_info_floor1*) _ogg_calloc(1,sizeof(*f)); - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - - memcpy(f,in+x[is],sizeof(*f)); - /* fill in the lowpass field, even if it's temporary */ - f->n=ci->blocksizes[block]>>1; - - /* books */ - { - int partitions=f->partitions; - int maxclass=-1; - int maxbook=-1; - for(i=0;ipartitionclass[i]>maxclass)maxclass=f->partitionclass[i]; - for(i=0;i<=maxclass;i++){ - if(f->class_book[i]>maxbook)maxbook=f->class_book[i]; - f->class_book[i]+=ci->books; - for(k=0;k<(1<class_subs[i]);k++){ - if(f->class_subbook[i][k]>maxbook)maxbook=f->class_subbook[i][k]; - if(f->class_subbook[i][k]>=0)f->class_subbook[i][k]+=ci->books; - } - } - - for(i=0;i<=maxbook;i++) - ci->book_param[ci->books++]=books[x[is]][i]; - } - - /* for now, we're only using floor 1 */ - ci->floor_type[ci->floors]=1; - ci->floor_param[ci->floors]=f; - ci->floors++; - - return; -} - -static void vorbis_encode_global_psych_setup(vorbis_info *vi,double s, - vorbis_info_psy_global *in, - double *x){ - int i,is=s; - double ds=s-is; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy_global *g=&ci->psy_g_param; - - memcpy(g,in+(int)x[is],sizeof(*g)); - - ds=x[is]*(1.-ds)+x[is+1]*ds; - is=(int)ds; - ds-=is; - if(ds==0 && is>0){ - is--; - ds=1.; - } - - /* interpolate the trigger threshholds */ - for(i=0;i<4;i++){ - g->preecho_thresh[i]=in[is].preecho_thresh[i]*(1.-ds)+in[is+1].preecho_thresh[i]*ds; - g->postecho_thresh[i]=in[is].postecho_thresh[i]*(1.-ds)+in[is+1].postecho_thresh[i]*ds; - } - g->ampmax_att_per_sec=ci->hi.amplitude_track_dBpersec; - return; -} - -static void vorbis_encode_global_stereo(vorbis_info *vi, - highlevel_encode_setup *hi, - adj_stereo *p){ - float s=hi->stereo_point_setting; - int i,is=s; - double ds=s-is; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy_global *g=&ci->psy_g_param; - - if(p){ - memcpy(g->coupling_prepointamp,p[is].pre,sizeof(*p[is].pre)*PACKETBLOBS); - memcpy(g->coupling_postpointamp,p[is].post,sizeof(*p[is].post)*PACKETBLOBS); - - if(hi->managed){ - /* interpolate the kHz threshholds */ - for(i=0;icoupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0]; - g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1]; - g->coupling_pkHz[i]=kHz; - - kHz=p[is].lowpasskHz[i]*(1.-ds)+p[is+1].lowpasskHz[i]*ds; - g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0]; - g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1]; - - } - }else{ - float kHz=p[is].kHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].kHz[PACKETBLOBS/2]*ds; - for(i=0;icoupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0]; - g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1]; - g->coupling_pkHz[i]=kHz; - } - - kHz=p[is].lowpasskHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].lowpasskHz[PACKETBLOBS/2]*ds; - for(i=0;isliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0]; - g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1]; - } - } - }else{ - for(i=0;isliding_lowpass[0][i]=ci->blocksizes[0]; - g->sliding_lowpass[1][i]=ci->blocksizes[1]; - } - } - return; -} - -static void vorbis_encode_psyset_setup(vorbis_info *vi,double s, - int *nn_start, - int *nn_partition, - double *nn_thresh, - int block){ - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - vorbis_info_psy *p=ci->psy_param[block]; - highlevel_encode_setup *hi=&ci->hi; - int is=s; - - if(block>=ci->psys) - ci->psys=block+1; - if(!p){ - p=(vorbis_info_psy*)_ogg_calloc(1,sizeof(*p)); - ci->psy_param[block]=p; - } - - memcpy(p,&_psy_info_template,sizeof(*p)); - p->blockflag=block>>1; - - if(hi->noise_normalize_p){ - p->normal_channel_p=1; - p->normal_point_p=1; - p->normal_start=nn_start[is]; - p->normal_partition=nn_partition[is]; - p->normal_thresh=nn_thresh[is]; - } - - return; -} - -static void vorbis_encode_tonemask_setup(vorbis_info *vi,double s,int block, - att3 *att, - int *max, - vp_adjblock *in){ - int i,is=s; - double ds=s-is; - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - vorbis_info_psy *p=ci->psy_param[block]; - - /* 0 and 2 are only used by bitmanagement, but there's no harm to always - filling the values in here */ - p->tone_masteratt[0]=att[is].att[0]*(1.-ds)+att[is+1].att[0]*ds; - p->tone_masteratt[1]=att[is].att[1]*(1.-ds)+att[is+1].att[1]*ds; - p->tone_masteratt[2]=att[is].att[2]*(1.-ds)+att[is+1].att[2]*ds; - p->tone_centerboost=att[is].boost*(1.-ds)+att[is+1].boost*ds; - p->tone_decay=att[is].decay*(1.-ds)+att[is+1].decay*ds; - - p->max_curve_dB=max[is]*(1.-ds)+max[is+1]*ds; - - for(i=0;itoneatt[i]=in[is].block[i]*(1.-ds)+in[is+1].block[i]*ds; - return; -} - - -static void vorbis_encode_compand_setup(vorbis_info *vi,double s,int block, - compandblock *in, double *x){ - int i,is=s; - double ds=s-is; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy *p=ci->psy_param[block]; - - ds=x[is]*(1.-ds)+x[is+1]*ds; - is=(int)ds; - ds-=is; - if(ds==0 && is>0){ - is--; - ds=1.; - } - - /* interpolate the compander settings */ - for(i=0;inoisecompand[i]=in[is].data[i]*(1.-ds)+in[is+1].data[i]*ds; - return; -} - -static void vorbis_encode_peak_setup(vorbis_info *vi,double s,int block, - int *suppress){ - int is=s; - double ds=s-is; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy *p=ci->psy_param[block]; - - p->tone_abs_limit=suppress[is]*(1.-ds)+suppress[is+1]*ds; - - return; -} - -static void vorbis_encode_noisebias_setup(vorbis_info *vi,double s,int block, - int *suppress, - noise3 *in, - noiseguard *guard, - double userbias){ - int i,is=s,j; - double ds=s-is; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy *p=ci->psy_param[block]; - - p->noisemaxsupp=suppress[is]*(1.-ds)+suppress[is+1]*ds; - p->noisewindowlomin=guard[block].lo; - p->noisewindowhimin=guard[block].hi; - p->noisewindowfixed=guard[block].fixed; - - for(j=0;jnoiseoff[j][i]=in[is].data[j][i]*(1.-ds)+in[is+1].data[j][i]*ds; - - /* impulse blocks may take a user specified bias to boost the - nominal/high noise encoding depth */ - for(j=0;jnoiseoff[j][0]+6; /* the lowest it can go */ - for(i=0;inoiseoff[j][i]+=userbias; - if(p->noiseoff[j][i]noiseoff[j][i]=min; - } - } - - return; -} - -static void vorbis_encode_ath_setup(vorbis_info *vi,int block){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - vorbis_info_psy *p=ci->psy_param[block]; - - p->ath_adjatt=ci->hi.ath_floating_dB; - p->ath_maxatt=ci->hi.ath_absolute_dB; - return; -} - - -static int book_dup_or_new(codec_setup_info *ci,static_codebook *book){ - int i; - for(i=0;ibooks;i++) - if(ci->book_param[i]==book)return(i); - - return(ci->books++); -} - -static void vorbis_encode_blocksize_setup(vorbis_info *vi,double s, - int *shortb,int *longb){ - - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int is=s; - - int blockshort=shortb[is]; - int blocklong=longb[is]; - ci->blocksizes[0]=blockshort; - ci->blocksizes[1]=blocklong; - -} - -static void vorbis_encode_residue_setup(vorbis_info *vi, - int number, int block, - vorbis_residue_template *res){ - - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int i,n; - - vorbis_info_residue0 *r=(vorbis_info_residue0*)(ci->residue_param[number]= - (vorbis_info_residue0*)_ogg_malloc(sizeof(*r))); - - memcpy(r,res->res,sizeof(*r)); - if(ci->residues<=number)ci->residues=number+1; - - switch(ci->blocksizes[block]){ - case 64:case 128:case 256: - r->grouping=16; - break; - default: - r->grouping=32; - break; - } - ci->residue_type[number]=res->res_type; - - /* to be adjusted by lowpass/pointlimit later */ - n=r->end=ci->blocksizes[block]>>1; - if(res->res_type==2) - n=r->end*=vi->channels; - - /* fill in all the books */ - { - int booklist=0,k; - - if(ci->hi.managed){ - for(i=0;ipartitions;i++) - for(k=0;k<3;k++) - if(res->books_base_managed->books[i][k]) - r->secondstages[i]|=(1<groupbook=book_dup_or_new(ci,res->book_aux_managed); - ci->book_param[r->groupbook]=res->book_aux_managed; - - for(i=0;ipartitions;i++){ - for(k=0;k<3;k++){ - if(res->books_base_managed->books[i][k]){ - int bookid=book_dup_or_new(ci,res->books_base_managed->books[i][k]); - r->booklist[booklist++]=bookid; - ci->book_param[bookid]=res->books_base_managed->books[i][k]; - } - } - } - - }else{ - - for(i=0;ipartitions;i++) - for(k=0;k<3;k++) - if(res->books_base->books[i][k]) - r->secondstages[i]|=(1<groupbook=book_dup_or_new(ci,res->book_aux); - ci->book_param[r->groupbook]=res->book_aux; - - for(i=0;ipartitions;i++){ - for(k=0;k<3;k++){ - if(res->books_base->books[i][k]){ - int bookid=book_dup_or_new(ci,res->books_base->books[i][k]); - r->booklist[booklist++]=bookid; - ci->book_param[bookid]=res->books_base->books[i][k]; - } - } - } - } - } - - /* lowpass setup/pointlimit */ - { - double freq=ci->hi.lowpass_kHz*1000.; - vorbis_info_floor1 *f=(vorbis_info_floor1*)ci->floor_param[block]; /* by convention */ - double nyq=vi->rate/2.; - long blocksize=ci->blocksizes[block]>>1; - - /* lowpass needs to be set in the floor and the residue. */ - if(freq>nyq)freq=nyq; - /* in the floor, the granularity can be very fine; it doesn't alter - the encoding structure, only the samples used to fit the floor - approximation */ - f->n=freq/nyq*blocksize; - - /* this res may by limited by the maximum pointlimit of the mode, - not the lowpass. the floor is always lowpass limited. */ - if(res->limit_type){ - if(ci->hi.managed) - freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS-1]*1000.; - else - freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS/2]*1000.; - if(freq>nyq)freq=nyq; - } - - /* in the residue, we're constrained, physically, by partition - boundaries. We still lowpass 'wherever', but we have to round up - here to next boundary, or the vorbis spec will round it *down* to - previous boundary in encode/decode */ - if(ci->residue_type[block]==2) - r->end=(int)((freq/nyq*blocksize*2)/r->grouping+.9)* /* round up only if we're well past */ - r->grouping; - else - r->end=(int)((freq/nyq*blocksize)/r->grouping+.9)* /* round up only if we're well past */ - r->grouping; - } -} - -/* we assume two maps in this encoder */ -static void vorbis_encode_map_n_res_setup(vorbis_info *vi,double s, - vorbis_mapping_template *maps){ - - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - int i,j,is=s,modes=2; - vorbis_info_mapping0 *map=maps[is].map; - vorbis_info_mode *mode=_mode_template; - vorbis_residue_template *res=maps[is].res; - - if(ci->blocksizes[0]==ci->blocksizes[1])modes=1; - - for(i=0;imap_param[i]=_ogg_calloc(1,sizeof(*map)); - ci->mode_param[i]=(vorbis_info_mode*)_ogg_calloc(1,sizeof(*mode)); - - memcpy(ci->mode_param[i],mode+i,sizeof(*_mode_template)); - if(i>=ci->modes)ci->modes=i+1; - - ci->map_type[i]=0; - memcpy(ci->map_param[i],map+i,sizeof(*map)); - if(i>=ci->maps)ci->maps=i+1; - - for(j=0;jcodec_setup; - highlevel_encode_setup *hi=&ci->hi; - ve_setup_data_template *setup=(ve_setup_data_template *)hi->setup; - int is=hi->base_setting; - double ds=hi->base_setting-is; - int ch=vi->channels; - double *r=setup->rate_mapping; - - if(r==NULL) - return(-1); - - return((r[is]*(1.-ds)+r[is+1]*ds)*ch); -} - -static void get_setup_template(vorbis_info *vi, - long ch,long srate, - double req,int q_or_bitrate){ - int i=0,j; - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - highlevel_encode_setup *hi=&ci->hi; - if(q_or_bitrate)req/=ch; - - while(setup_list[i]){ - if(setup_list[i]->coupling_restriction==-1 || - setup_list[i]->coupling_restriction==ch){ - if(srate>=setup_list[i]->samplerate_min_restriction && - srate<=setup_list[i]->samplerate_max_restriction){ - int mappings=setup_list[i]->mappings; - double *map=(q_or_bitrate? - setup_list[i]->rate_mapping: - setup_list[i]->quality_mapping); - - /* the template matches. Does the requested quality mode - fall within this template's modes? */ - if(reqmap[setup_list[i]->mappings]){++i;continue;} - for(j=0;j=map[j] && reqsetup=setup_list[i]; - if(j==mappings) - hi->base_setting=j-.001; - else{ - float low=map[j]; - float high=map[j+1]; - float del=(req-low)/(high-low); - hi->base_setting=j+del; - } - - return; - } - } - i++; - } - - hi->setup=NULL; -} - -/* encoders will need to use vorbis_info_init beforehand and call - vorbis_info clear when all done */ - -/* two interfaces; this, more detailed one, and later a convenience - layer on top */ - -/* the final setup call */ -int vorbis_encode_setup_init(vorbis_info *vi){ - int i0=0,singleblock=0; - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - ve_setup_data_template *setup=NULL; - highlevel_encode_setup *hi=&ci->hi; - - if(ci==NULL)return(OV_EINVAL); - if(!hi->impulse_block_p)i0=1; - - /* too low/high an ATH floater is nonsensical, but doesn't break anything */ - if(hi->ath_floating_dB>-80)hi->ath_floating_dB=-80; - if(hi->ath_floating_dB<-200)hi->ath_floating_dB=-200; - - /* again, bound this to avoid the app shooting itself int he foot - too badly */ - if(hi->amplitude_track_dBpersec>0.)hi->amplitude_track_dBpersec=0.; - if(hi->amplitude_track_dBpersec<-99999.)hi->amplitude_track_dBpersec=-99999.; - - /* get the appropriate setup template; matches the fetch in previous - stages */ - setup=(ve_setup_data_template *)hi->setup; - if(setup==NULL)return(OV_EINVAL); - - hi->set_in_stone=1; - /* choose block sizes from configured sizes as well as paying - attention to long_block_p and short_block_p. If the configured - short and long blocks are the same length, we set long_block_p - and unset short_block_p */ - vorbis_encode_blocksize_setup(vi,hi->base_setting, - setup->blocksize_short, - setup->blocksize_long); - if(ci->blocksizes[0]==ci->blocksizes[1])singleblock=1; - - /* floor setup; choose proper floor params. Allocated on the floor - stack in order; if we alloc only long floor, it's 0 */ - vorbis_encode_floor_setup(vi,hi->short_setting,0, - setup->floor_books, - setup->floor_params, - setup->floor_short_mapping); - if(!singleblock) - vorbis_encode_floor_setup(vi,hi->long_setting,1, - setup->floor_books, - setup->floor_params, - setup->floor_long_mapping); - - /* setup of [mostly] short block detection and stereo*/ - vorbis_encode_global_psych_setup(vi,hi->trigger_setting, - setup->global_params, - setup->global_mapping); - vorbis_encode_global_stereo(vi,hi,setup->stereo_modes); - - /* basic psych setup and noise normalization */ - vorbis_encode_psyset_setup(vi,hi->short_setting, - setup->psy_noise_normal_start[0], - setup->psy_noise_normal_partition[0], - setup->psy_noise_normal_thresh, - 0); - vorbis_encode_psyset_setup(vi,hi->short_setting, - setup->psy_noise_normal_start[0], - setup->psy_noise_normal_partition[0], - setup->psy_noise_normal_thresh, - 1); - if(!singleblock){ - vorbis_encode_psyset_setup(vi,hi->long_setting, - setup->psy_noise_normal_start[1], - setup->psy_noise_normal_partition[1], - setup->psy_noise_normal_thresh, - 2); - vorbis_encode_psyset_setup(vi,hi->long_setting, - setup->psy_noise_normal_start[1], - setup->psy_noise_normal_partition[1], - setup->psy_noise_normal_thresh, - 3); - } - - /* tone masking setup */ - vorbis_encode_tonemask_setup(vi,hi->block[i0].tone_mask_setting,0, - setup->psy_tone_masteratt, - setup->psy_tone_0dB, - setup->psy_tone_adj_impulse); - vorbis_encode_tonemask_setup(vi,hi->block[1].tone_mask_setting,1, - setup->psy_tone_masteratt, - setup->psy_tone_0dB, - setup->psy_tone_adj_other); - if(!singleblock){ - vorbis_encode_tonemask_setup(vi,hi->block[2].tone_mask_setting,2, - setup->psy_tone_masteratt, - setup->psy_tone_0dB, - setup->psy_tone_adj_other); - vorbis_encode_tonemask_setup(vi,hi->block[3].tone_mask_setting,3, - setup->psy_tone_masteratt, - setup->psy_tone_0dB, - setup->psy_tone_adj_long); - } - - /* noise companding setup */ - vorbis_encode_compand_setup(vi,hi->block[i0].noise_compand_setting,0, - setup->psy_noise_compand, - setup->psy_noise_compand_short_mapping); - vorbis_encode_compand_setup(vi,hi->block[1].noise_compand_setting,1, - setup->psy_noise_compand, - setup->psy_noise_compand_short_mapping); - if(!singleblock){ - vorbis_encode_compand_setup(vi,hi->block[2].noise_compand_setting,2, - setup->psy_noise_compand, - setup->psy_noise_compand_long_mapping); - vorbis_encode_compand_setup(vi,hi->block[3].noise_compand_setting,3, - setup->psy_noise_compand, - setup->psy_noise_compand_long_mapping); - } - - /* peak guarding setup */ - vorbis_encode_peak_setup(vi,hi->block[i0].tone_peaklimit_setting,0, - setup->psy_tone_dBsuppress); - vorbis_encode_peak_setup(vi,hi->block[1].tone_peaklimit_setting,1, - setup->psy_tone_dBsuppress); - if(!singleblock){ - vorbis_encode_peak_setup(vi,hi->block[2].tone_peaklimit_setting,2, - setup->psy_tone_dBsuppress); - vorbis_encode_peak_setup(vi,hi->block[3].tone_peaklimit_setting,3, - setup->psy_tone_dBsuppress); - } - - /* noise bias setup */ - vorbis_encode_noisebias_setup(vi,hi->block[i0].noise_bias_setting,0, - setup->psy_noise_dBsuppress, - setup->psy_noise_bias_impulse, - setup->psy_noiseguards, - (i0==0?hi->impulse_noisetune:0.)); - vorbis_encode_noisebias_setup(vi,hi->block[1].noise_bias_setting,1, - setup->psy_noise_dBsuppress, - setup->psy_noise_bias_padding, - setup->psy_noiseguards,0.); - if(!singleblock){ - vorbis_encode_noisebias_setup(vi,hi->block[2].noise_bias_setting,2, - setup->psy_noise_dBsuppress, - setup->psy_noise_bias_trans, - setup->psy_noiseguards,0.); - vorbis_encode_noisebias_setup(vi,hi->block[3].noise_bias_setting,3, - setup->psy_noise_dBsuppress, - setup->psy_noise_bias_long, - setup->psy_noiseguards,0.); - } - - vorbis_encode_ath_setup(vi,0); - vorbis_encode_ath_setup(vi,1); - if(!singleblock){ - vorbis_encode_ath_setup(vi,2); - vorbis_encode_ath_setup(vi,3); - } - - vorbis_encode_map_n_res_setup(vi,hi->base_setting,setup->maps); - - /* set bitrate readonlies and management */ - if(hi->bitrate_av>0) - vi->bitrate_nominal=hi->bitrate_av; - else{ - vi->bitrate_nominal=setting_to_approx_bitrate(vi); - } - - vi->bitrate_lower=hi->bitrate_min; - vi->bitrate_upper=hi->bitrate_max; - if(hi->bitrate_av) - vi->bitrate_window=(double)hi->bitrate_reservoir/hi->bitrate_av; - else - vi->bitrate_window=0.; - - if(hi->managed){ - ci->bi.avg_rate=hi->bitrate_av; - ci->bi.min_rate=hi->bitrate_min; - ci->bi.max_rate=hi->bitrate_max; - - ci->bi.reservoir_bits=hi->bitrate_reservoir; - ci->bi.reservoir_bias= - hi->bitrate_reservoir_bias; - - ci->bi.slew_damp=hi->bitrate_av_damp; - - } - - return(0); - -} - -static int vorbis_encode_setup_setting(vorbis_info *vi, - long channels, - long rate){ - int ret=0,i,is; - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - highlevel_encode_setup *hi=&ci->hi; - ve_setup_data_template *setup=(ve_setup_data_template*) hi->setup; - double ds; - - ret=vorbis_encode_toplevel_setup(vi,channels,rate); - if(ret)return(ret); - - is=hi->base_setting; - ds=hi->base_setting-is; - - hi->short_setting=hi->base_setting; - hi->long_setting=hi->base_setting; - - hi->managed=0; - - hi->impulse_block_p=1; - hi->noise_normalize_p=1; - - hi->stereo_point_setting=hi->base_setting; - hi->lowpass_kHz= - setup->psy_lowpass[is]*(1.-ds)+setup->psy_lowpass[is+1]*ds; - - hi->ath_floating_dB=setup->psy_ath_float[is]*(1.-ds)+ - setup->psy_ath_float[is+1]*ds; - hi->ath_absolute_dB=setup->psy_ath_abs[is]*(1.-ds)+ - setup->psy_ath_abs[is+1]*ds; - - hi->amplitude_track_dBpersec=-6.; - hi->trigger_setting=hi->base_setting; - - for(i=0;i<4;i++){ - hi->block[i].tone_mask_setting=hi->base_setting; - hi->block[i].tone_peaklimit_setting=hi->base_setting; - hi->block[i].noise_bias_setting=hi->base_setting; - hi->block[i].noise_compand_setting=hi->base_setting; - } - - return(ret); -} - -int vorbis_encode_setup_vbr(vorbis_info *vi, - long channels, - long rate, - float quality){ - codec_setup_info *ci=(codec_setup_info*) vi->codec_setup; - highlevel_encode_setup *hi=&ci->hi; - - quality+=.0000001; - if(quality>=1.)quality=.9999; - - get_setup_template(vi,channels,rate,quality,0); - if(!hi->setup)return OV_EIMPL; - - return vorbis_encode_setup_setting(vi,channels,rate); -} - -int vorbis_encode_init_vbr(vorbis_info *vi, - long channels, - long rate, - - float base_quality /* 0. to 1. */ - ){ - int ret=0; - - ret=vorbis_encode_setup_vbr(vi,channels,rate,base_quality); - - if(ret){ - vorbis_info_clear(vi); - return ret; - } - ret=vorbis_encode_setup_init(vi); - if(ret) - vorbis_info_clear(vi); - return(ret); -} - -int vorbis_encode_setup_managed(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate){ - - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - highlevel_encode_setup *hi=&ci->hi; - double tnominal=nominal_bitrate; - int ret=0; - - if(nominal_bitrate<=0.){ - if(max_bitrate>0.){ - if(min_bitrate>0.) - nominal_bitrate=(max_bitrate+min_bitrate)*.5; - else - nominal_bitrate=max_bitrate*.875; - }else{ - if(min_bitrate>0.){ - nominal_bitrate=min_bitrate; - }else{ - return(OV_EINVAL); - } - } - } - - get_setup_template(vi,channels,rate,nominal_bitrate,1); - if(!hi->setup)return OV_EIMPL; - - ret=vorbis_encode_setup_setting(vi,channels,rate); - if(ret){ - vorbis_info_clear(vi); - return ret; - } - - /* initialize management with sane defaults */ - hi->managed=1; - hi->bitrate_min=min_bitrate; - hi->bitrate_max=max_bitrate; - hi->bitrate_av=tnominal; - hi->bitrate_av_damp=1.5f; /* full range in no less than 1.5 second */ - hi->bitrate_reservoir=nominal_bitrate*2; - hi->bitrate_reservoir_bias=.1; /* bias toward hoarding bits */ - - return(ret); - -} - -int vorbis_encode_init(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate){ - - int ret=vorbis_encode_setup_managed(vi,channels,rate, - max_bitrate, - nominal_bitrate, - min_bitrate); - if(ret){ - vorbis_info_clear(vi); - return(ret); - } - - ret=vorbis_encode_setup_init(vi); - if(ret) - vorbis_info_clear(vi); - return(ret); -} - -int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){ - if(vi){ - codec_setup_info *ci=(codec_setup_info*)vi->codec_setup; - highlevel_encode_setup *hi=&ci->hi; - int setp=(number&0xf); /* a read request has a low nibble of 0 */ - - if(setp && hi->set_in_stone)return(OV_EINVAL); - - switch(number){ - - /* now deprecated *****************/ - case OV_ECTL_RATEMANAGE_GET: - { - - struct ovectl_ratemanage_arg *ai= - (struct ovectl_ratemanage_arg *)arg; - - ai->management_active=hi->managed; - ai->bitrate_hard_window=ai->bitrate_av_window= - (double)hi->bitrate_reservoir/vi->rate; - ai->bitrate_av_window_center=1.; - ai->bitrate_hard_min=hi->bitrate_min; - ai->bitrate_hard_max=hi->bitrate_max; - ai->bitrate_av_lo=hi->bitrate_av; - ai->bitrate_av_hi=hi->bitrate_av; - - } - return(0); - - /* now deprecated *****************/ - case OV_ECTL_RATEMANAGE_SET: - { - struct ovectl_ratemanage_arg *ai= - (struct ovectl_ratemanage_arg *)arg; - if(ai==NULL){ - hi->managed=0; - }else{ - hi->managed=ai->management_active; - vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_AVG,arg); - vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_HARD,arg); - } - } - return 0; - - /* now deprecated *****************/ - case OV_ECTL_RATEMANAGE_AVG: - { - struct ovectl_ratemanage_arg *ai= - (struct ovectl_ratemanage_arg *)arg; - if(ai==NULL){ - hi->bitrate_av=0; - }else{ - hi->bitrate_av=(ai->bitrate_av_lo+ai->bitrate_av_hi)*.5; - } - } - return(0); - /* now deprecated *****************/ - case OV_ECTL_RATEMANAGE_HARD: - { - struct ovectl_ratemanage_arg *ai= - (struct ovectl_ratemanage_arg *)arg; - if(ai==NULL){ - hi->bitrate_min=0; - hi->bitrate_max=0; - }else{ - hi->bitrate_min=ai->bitrate_hard_min; - hi->bitrate_max=ai->bitrate_hard_max; - hi->bitrate_reservoir=ai->bitrate_hard_window* - (hi->bitrate_max+hi->bitrate_min)*.5; - } - if(hi->bitrate_reservoir<128.) - hi->bitrate_reservoir=128.; - } - return(0); - - /* replacement ratemanage interface */ - case OV_ECTL_RATEMANAGE2_GET: - { - struct ovectl_ratemanage2_arg *ai= - (struct ovectl_ratemanage2_arg *)arg; - if(ai==NULL)return OV_EINVAL; - - ai->management_active=hi->managed; - ai->bitrate_limit_min_kbps=hi->bitrate_min/1000; - ai->bitrate_limit_max_kbps=hi->bitrate_max/1000; - ai->bitrate_average_kbps=hi->bitrate_av/1000; - ai->bitrate_average_damping=hi->bitrate_av_damp; - ai->bitrate_limit_reservoir_bits=hi->bitrate_reservoir; - ai->bitrate_limit_reservoir_bias=hi->bitrate_reservoir_bias; - } - return (0); - case OV_ECTL_RATEMANAGE2_SET: - { - struct ovectl_ratemanage2_arg *ai= - (struct ovectl_ratemanage2_arg *)arg; - if(ai==NULL){ - hi->managed=0; - }else{ - /* sanity check; only catch invariant violations */ - if(ai->bitrate_limit_min_kbps>0 && - ai->bitrate_average_kbps>0 && - ai->bitrate_limit_min_kbps>ai->bitrate_average_kbps) - return OV_EINVAL; - - if(ai->bitrate_limit_max_kbps>0 && - ai->bitrate_average_kbps>0 && - ai->bitrate_limit_max_kbpsbitrate_average_kbps) - return OV_EINVAL; - - if(ai->bitrate_limit_min_kbps>0 && - ai->bitrate_limit_max_kbps>0 && - ai->bitrate_limit_min_kbps>ai->bitrate_limit_max_kbps) - return OV_EINVAL; - - if(ai->bitrate_average_damping <= 0.) - return OV_EINVAL; - - if(ai->bitrate_limit_reservoir_bits < 0) - return OV_EINVAL; - - if(ai->bitrate_limit_reservoir_bias < 0.) - return OV_EINVAL; - - if(ai->bitrate_limit_reservoir_bias > 1.) - return OV_EINVAL; - - hi->managed=ai->management_active; - hi->bitrate_min=ai->bitrate_limit_min_kbps * 1000; - hi->bitrate_max=ai->bitrate_limit_max_kbps * 1000; - hi->bitrate_av=ai->bitrate_average_kbps * 1000; - hi->bitrate_av_damp=ai->bitrate_average_damping; - hi->bitrate_reservoir=ai->bitrate_limit_reservoir_bits; - hi->bitrate_reservoir_bias=ai->bitrate_limit_reservoir_bias; - } - } - return 0; - - case OV_ECTL_LOWPASS_GET: - { - double *farg=(double *)arg; - *farg=hi->lowpass_kHz; - } - return(0); - case OV_ECTL_LOWPASS_SET: - { - double *farg=(double *)arg; - hi->lowpass_kHz=*farg; - - if(hi->lowpass_kHz<2.)hi->lowpass_kHz=2.; - if(hi->lowpass_kHz>99.)hi->lowpass_kHz=99.; - } - return(0); - case OV_ECTL_IBLOCK_GET: - { - double *farg=(double *)arg; - *farg=hi->impulse_noisetune; - } - return(0); - case OV_ECTL_IBLOCK_SET: - { - double *farg=(double *)arg; - hi->impulse_noisetune=*farg; - - if(hi->impulse_noisetune>0.)hi->impulse_noisetune=0.; - if(hi->impulse_noisetune<-15.)hi->impulse_noisetune=-15.; - } - return(0); - } - - - return(OV_EIMPL); - } - return(OV_EINVAL); -} - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/vorbisfile.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/vorbisfile.c deleted file mode 100644 index ad101fc4a8..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/vorbisfile.c +++ /dev/null @@ -1,1988 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: stdio-based convenience library for opening/seeking/decoding - last mod: $Id: vorbisfile.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include -#include -#include - -#include "../../codec.h" -#include "../../vorbisfile.h" - -#include "os.h" -#include "misc.h" - -/* A 'chained bitstream' is a Vorbis bitstream that contains more than - one logical bitstream arranged end to end (the only form of Ogg - multiplexing allowed in a Vorbis bitstream; grouping [parallel - multiplexing] is not allowed in Vorbis) */ - -/* A Vorbis file can be played beginning to end (streamed) without - worrying ahead of time about chaining (see decoder_example.c). If - we have the whole file, however, and want random access - (seeking/scrubbing) or desire to know the total length/time of a - file, we need to account for the possibility of chaining. */ - -/* We can handle things a number of ways; we can determine the entire - bitstream structure right off the bat, or find pieces on demand. - This example determines and caches structure for the entire - bitstream, but builds a virtual decoder on the fly when moving - between links in the chain. */ - -/* There are also different ways to implement seeking. Enough - information exists in an Ogg bitstream to seek to - sample-granularity positions in the output. Or, one can seek by - picking some portion of the stream roughly in the desired area if - we only want coarse navigation through the stream. */ - -/************************************************************************* - * Many, many internal helpers. The intention is not to be confusing; - * rampant duplication and monolithic function implementation would be - * harder to understand anyway. The high level functions are last. Begin - * grokking near the end of the file */ - -/* read a little more data from the file/pipe into the ogg_sync framer -*/ -#define CHUNKSIZE 8500 /* a shade over 8k; anyone using pages well - over 8k gets what they deserve */ -static long _get_data(OggVorbis_File *vf){ - errno=0; - if(vf->datasource){ - char *buffer=ogg_sync_buffer(&vf->oy,CHUNKSIZE); - long bytes=(vf->callbacks.read_func)(buffer,1,CHUNKSIZE,vf->datasource); - if(bytes>0)ogg_sync_wrote(&vf->oy,bytes); - if(bytes==0 && errno)return(-1); - return(bytes); - }else - return(0); -} - -/* save a tiny smidge of verbosity to make the code more readable */ -static void _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){ - if(vf->datasource){ - (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET); - vf->offset=offset; - ogg_sync_reset(&vf->oy); - }else{ - /* shouldn't happen unless someone writes a broken callback */ - return; - } -} - -/* The read/seek functions track absolute position within the stream */ - -/* from the head of the stream, get the next page. boundary specifies - if the function is allowed to fetch more data from the stream (and - how much) or only use internally buffered data. - - boundary: -1) unbounded search - 0) read no additional data; use cached only - n) search for a new page beginning for n bytes - - return: <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD) - n) found a page at absolute offset n */ - -static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og, - ogg_int64_t boundary){ - if(boundary>0)boundary+=vf->offset; - while(1){ - long more; - - if(boundary>0 && vf->offset>=boundary)return(OV_FALSE); - more=ogg_sync_pageseek(&vf->oy,og); - - if(more<0){ - /* skipped n bytes */ - vf->offset-=more; - }else{ - if(more==0){ - /* send more paramedics */ - if(!boundary)return(OV_FALSE); - { - long ret=_get_data(vf); - if(ret==0)return(OV_EOF); - if(ret<0)return(OV_EREAD); - } - }else{ - /* got a page. Return the offset at the page beginning, - advance the internal offset past the page end */ - ogg_int64_t ret=vf->offset; - vf->offset+=more; - return(ret); - - } - } - } -} - -/* find the latest page beginning before the current stream cursor - position. Much dirtier than the above as Ogg doesn't have any - backward search linkage. no 'readp' as it will certainly have to - read. */ -/* returns offset or OV_EREAD, OV_FAULT */ -static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){ - ogg_int64_t begin=vf->offset; - ogg_int64_t end=begin; - ogg_int64_t ret; - ogg_int64_t offset=-1; - - while(offset==-1){ - begin-=CHUNKSIZE; - if(begin<0) - begin=0; - _seek_helper(vf,begin); - while(vf->offsetoffset); - if(ret==OV_EREAD)return(OV_EREAD); - if(ret<0){ - break; - }else{ - offset=ret; - } - } - } - - /* we have the offset. Actually snork and hold the page now */ - _seek_helper(vf,offset); - ret=_get_next_page(vf,og,CHUNKSIZE); - if(ret<0) - /* this shouldn't be possible */ - return(OV_EFAULT); - - return(offset); -} - -/* finds each bitstream link one at a time using a bisection search - (has to begin by knowing the offset of the lb's initial page). - Recurses for each link so it can alloc the link storage after - finding them all, then unroll and fill the cache at the same time */ -static int _bisect_forward_serialno(OggVorbis_File *vf, - ogg_int64_t begin, - ogg_int64_t searched, - ogg_int64_t end, - long currentno, - long m){ - ogg_int64_t endsearched=end; - ogg_int64_t next=end; - ogg_page og; - ogg_int64_t ret; - - /* the below guards against garbage seperating the last and - first pages of two links. */ - while(searched=0)next=ret; - }else{ - searched=ret+og.header_len+og.body_len; - } - } - - _seek_helper(vf,next); - ret=_get_next_page(vf,&og,-1); - if(ret==OV_EREAD)return(OV_EREAD); - - if(searched>=end || ret<0){ - vf->links=m+1; - vf->offsets=(ogg_int64_t*)_ogg_malloc((vf->links+1)*sizeof(*vf->offsets)); - vf->serialnos=(long*)_ogg_malloc(vf->links*sizeof(*vf->serialnos)); - vf->offsets[m+1]=searched; - }else{ - ret=_bisect_forward_serialno(vf,next,vf->offset, - end,ogg_page_serialno(&og),m+1); - if(ret==OV_EREAD)return(OV_EREAD); - } - - vf->offsets[m]=begin; - vf->serialnos[m]=currentno; - return(0); -} - -/* uses the local ogg_stream storage in vf; this is important for - non-streaming input sources */ -static int _fetch_headers(OggVorbis_File *vf,vorbis_info *vi,vorbis_comment *vc, - long *serialno,ogg_page *og_ptr){ - ogg_page og; - ogg_packet op; - int i,ret; - - if(!og_ptr){ - ogg_int64_t llret=_get_next_page(vf,&og,CHUNKSIZE); - if(llret==OV_EREAD)return(OV_EREAD); - if(llret<0)return OV_ENOTVORBIS; - og_ptr=&og; - } - - ogg_stream_reset_serialno(&vf->os,ogg_page_serialno(og_ptr)); - if(serialno)*serialno=vf->os.serialno; - vf->ready_state=STREAMSET; - - /* extract the initial header from the first page and verify that the - Ogg bitstream is in fact Vorbis data */ - - vorbis_info_init(vi); - vorbis_comment_init(vc); - - i=0; - while(i<3){ - ogg_stream_pagein(&vf->os,og_ptr); - while(i<3){ - int result=ogg_stream_packetout(&vf->os,&op); - if(result==0)break; - if(result==-1){ - ret=OV_EBADHEADER; - goto bail_header; - } - if((ret=vorbis_synthesis_headerin(vi,vc,&op))){ - goto bail_header; - } - i++; - } - if(i<3) - if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){ - ret=OV_EBADHEADER; - goto bail_header; - } - } - return 0; - - bail_header: - vorbis_info_clear(vi); - vorbis_comment_clear(vc); - vf->ready_state=OPENED; - - return ret; -} - -/* last step of the OggVorbis_File initialization; get all the - vorbis_info structs and PCM positions. Only called by the seekable - initialization (local stream storage is hacked slightly; pay - attention to how that's done) */ - -/* this is void and does not propogate errors up because we want to be - able to open and use damaged bitstreams as well as we can. Just - watch out for missing information for links in the OggVorbis_File - struct */ -static void _prefetch_all_headers(OggVorbis_File *vf, ogg_int64_t dataoffset){ - ogg_page og; - int i; - ogg_int64_t ret; - - vf->vi=(vorbis_info*) _ogg_realloc(vf->vi,vf->links*sizeof(*vf->vi)); - vf->vc=(vorbis_comment*) _ogg_realloc(vf->vc,vf->links*sizeof(*vf->vc)); - vf->dataoffsets=(ogg_int64_t*) _ogg_malloc(vf->links*sizeof(*vf->dataoffsets)); - vf->pcmlengths=(ogg_int64_t*) _ogg_malloc(vf->links*2*sizeof(*vf->pcmlengths)); - - for(i=0;ilinks;i++){ - if(i==0){ - /* we already grabbed the initial header earlier. Just set the offset */ - vf->dataoffsets[i]=dataoffset; - _seek_helper(vf,dataoffset); - - }else{ - - /* seek to the location of the initial header */ - - _seek_helper(vf,vf->offsets[i]); - if(_fetch_headers(vf,vf->vi+i,vf->vc+i,NULL,NULL)<0){ - vf->dataoffsets[i]=-1; - }else{ - vf->dataoffsets[i]=vf->offset; - } - } - - /* fetch beginning PCM offset */ - - if(vf->dataoffsets[i]!=-1){ - ogg_int64_t accumulated=0; - long lastblock=-1; - int result; - - ogg_stream_reset_serialno(&vf->os,vf->serialnos[i]); - - while(1){ - ogg_packet op; - - ret=_get_next_page(vf,&og,-1); - if(ret<0) - /* this should not be possible unless the file is - truncated/mangled */ - break; - - if(ogg_page_serialno(&og)!=vf->serialnos[i]) - break; - - /* count blocksizes of all frames in the page */ - ogg_stream_pagein(&vf->os,&og); - while((result=ogg_stream_packetout(&vf->os,&op))){ - if(result>0){ /* ignore holes */ - long thisblock=vorbis_packet_blocksize(vf->vi+i,&op); - if(lastblock!=-1) - accumulated+=(lastblock+thisblock)>>2; - lastblock=thisblock; - } - } - - if(ogg_page_granulepos(&og)!=-1){ - /* pcm offset of last packet on the first audio page */ - accumulated= ogg_page_granulepos(&og)-accumulated; - break; - } - } - - /* less than zero? This is a stream with samples trimmed off - the beginning, a normal occurrence; set the offset to zero */ - if(accumulated<0)accumulated=0; - - vf->pcmlengths[i*2]=accumulated; - } - - /* get the PCM length of this link. To do this, - get the last page of the stream */ - { - ogg_int64_t end=vf->offsets[i+1]; - _seek_helper(vf,end); - - while(1){ - ret=_get_prev_page(vf,&og); - if(ret<0){ - /* this should not be possible */ - vorbis_info_clear(vf->vi+i); - vorbis_comment_clear(vf->vc+i); - break; - } - if(ogg_page_granulepos(&og)!=-1){ - vf->pcmlengths[i*2+1]=ogg_page_granulepos(&og)-vf->pcmlengths[i*2]; - break; - } - vf->offset=ret; - } - } - } -} - -static int _make_decode_ready(OggVorbis_File *vf){ - if(vf->ready_state>STREAMSET)return 0; - if(vf->ready_stateseekable){ - if(vorbis_synthesis_init(&vf->vd,vf->vi+vf->current_link)) - return OV_EBADLINK; - }else{ - if(vorbis_synthesis_init(&vf->vd,vf->vi)) - return OV_EBADLINK; - } - vorbis_block_init(&vf->vd,&vf->vb); - vf->ready_state=INITSET; - vf->bittrack=0.f; - vf->samptrack=0.f; - return 0; -} - -static int _open_seekable2(OggVorbis_File *vf){ - long serialno=vf->current_serialno; - ogg_int64_t dataoffset=vf->offset, end; - ogg_page og; - - /* we're partially open and have a first link header state in - storage in vf */ - /* we can seek, so set out learning all about this file */ - (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END); - vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource); - - /* We get the offset for the last page of the physical bitstream. - Most OggVorbis files will contain a single logical bitstream */ - end=_get_prev_page(vf,&og); - if(end<0)return(end); - - /* more than one logical bitstream? */ - if(ogg_page_serialno(&og)!=serialno){ - - /* Chained bitstream. Bisect-search each logical bitstream - section. Do so based on serial number only */ - if(_bisect_forward_serialno(vf,0,0,end+1,serialno,0)<0)return(OV_EREAD); - - }else{ - - /* Only one logical bitstream */ - if(_bisect_forward_serialno(vf,0,end,end+1,serialno,0))return(OV_EREAD); - - } - - /* the initial header memory is referenced by vf after; don't free it */ - _prefetch_all_headers(vf,dataoffset); - return(ov_raw_seek(vf,0)); -} - -/* clear out the current logical bitstream decoder */ -static void _decode_clear(OggVorbis_File *vf){ - vorbis_dsp_clear(&vf->vd); - vorbis_block_clear(&vf->vb); - vf->ready_state=OPENED; -} - -/* fetch and process a packet. Handles the case where we're at a - bitstream boundary and dumps the decoding machine. If the decoding - machine is unloaded, it loads it. It also keeps pcm_offset up to - date (seek and read both use this. seek uses a special hack with - readp). - - return: <0) error, OV_HOLE (lost packet) or OV_EOF - 0) need more data (only if readp==0) - 1) got a packet -*/ - -static int _fetch_and_process_packet(OggVorbis_File *vf, - ogg_packet *op_in, - int readp, - int spanp){ - ogg_page og; - - /* handle one packet. Try to fetch it from current stream state */ - /* extract packets from page */ - while(1){ - - /* process a packet if we can. If the machine isn't loaded, - neither is a page */ - if(vf->ready_state==INITSET){ - while(1) { - ogg_packet op; - ogg_packet *op_ptr=(op_in?op_in:&op); - int result=ogg_stream_packetout(&vf->os,op_ptr); - ogg_int64_t granulepos; - - op_in=NULL; - if(result==-1)return(OV_HOLE); /* hole in the data. */ - if(result>0){ - /* got a packet. process it */ - granulepos=op_ptr->granulepos; - if(!vorbis_synthesis(&vf->vb,op_ptr)){ /* lazy check for lazy - header handling. The - header packets aren't - audio, so if/when we - submit them, - vorbis_synthesis will - reject them */ - - /* suck in the synthesis data and track bitrate */ - { - int oldsamples=vorbis_synthesis_pcmout(&vf->vd,NULL); - /* for proper use of libvorbis within libvorbisfile, - oldsamples will always be zero. */ - if(oldsamples)return(OV_EFAULT); - - vorbis_synthesis_blockin(&vf->vd,&vf->vb); - vf->samptrack+=vorbis_synthesis_pcmout(&vf->vd,NULL)-oldsamples; - vf->bittrack+=op_ptr->bytes*8; - } - - /* update the pcm offset. */ - if(granulepos!=-1 && !op_ptr->e_o_s){ - int link=(vf->seekable?vf->current_link:0); - int i,samples; - - /* this packet has a pcm_offset on it (the last packet - completed on a page carries the offset) After processing - (above), we know the pcm position of the *last* sample - ready to be returned. Find the offset of the *first* - - As an aside, this trick is inaccurate if we begin - reading anew right at the last page; the end-of-stream - granulepos declares the last frame in the stream, and the - last packet of the last page may be a partial frame. - So, we need a previous granulepos from an in-sequence page - to have a reference point. Thus the !op_ptr->e_o_s clause - above */ - - if(vf->seekable && link>0) - granulepos-=vf->pcmlengths[link*2]; - if(granulepos<0)granulepos=0; /* actually, this - shouldn't be possible - here unless the stream - is very broken */ - - samples=vorbis_synthesis_pcmout(&vf->vd,NULL); - - granulepos-=samples; - for(i=0;ipcmlengths[i*2+1]; - vf->pcm_offset=granulepos; - } - return(1); - } - } - else - break; - } - } - - if(vf->ready_state>=OPENED){ - ogg_int64_t ret; - if(!readp)return(0); - if((ret=_get_next_page(vf,&og,-1))<0){ - return(OV_EOF); /* eof. - leave unitialized */ - } - - /* bitrate tracking; add the header's bytes here, the body bytes - are done by packet above */ - vf->bittrack+=og.header_len*8; - - /* has our decoding just traversed a bitstream boundary? */ - if(vf->ready_state==INITSET){ - if(vf->current_serialno!=ogg_page_serialno(&og)){ - if(!spanp) - return(OV_EOF); - - _decode_clear(vf); - - if(!vf->seekable){ - vorbis_info_clear(vf->vi); - vorbis_comment_clear(vf->vc); - } - } - } - } - - /* Do we need to load a new machine before submitting the page? */ - /* This is different in the seekable and non-seekable cases. - - In the seekable case, we already have all the header - information loaded and cached; we just initialize the machine - with it and continue on our merry way. - - In the non-seekable (streaming) case, we'll only be at a - boundary if we just left the previous logical bitstream and - we're now nominally at the header of the next bitstream - */ - - if(vf->ready_state!=INITSET){ - int link; - - if(vf->ready_stateseekable){ - vf->current_serialno=ogg_page_serialno(&og); - - /* match the serialno to bitstream section. We use this rather than - offset positions to avoid problems near logical bitstream - boundaries */ - for(link=0;linklinks;link++) - if(vf->serialnos[link]==vf->current_serialno)break; - if(link==vf->links)return(OV_EBADLINK); /* sign of a bogus - stream. error out, - leave machine - uninitialized */ - - vf->current_link=link; - - ogg_stream_reset_serialno(&vf->os,vf->current_serialno); - vf->ready_state=STREAMSET; - - }else{ - /* we're streaming */ - /* fetch the three header packets, build the info struct */ - - int ret=_fetch_headers(vf,vf->vi,vf->vc,&vf->current_serialno,&og); - if(ret)return(ret); - vf->current_link++; - link=0; - } - } - - { - int ret=_make_decode_ready(vf); - if(ret<0)return ret; - } - } - ogg_stream_pagein(&vf->os,&og); - } -} - -/* if, eg, 64 bit stdio is configured by default, this will build with - fseek64 */ -static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){ - if(f==NULL)return(-1); - return fseek(f,off,whence); -} - -static int _ov_open1(void *f,OggVorbis_File *vf,char *initial, - long ibytes, ov_callbacks callbacks){ - int offsettest=(f?callbacks.seek_func(f,0,SEEK_CUR):-1); - int ret; - - memset(vf,0,sizeof(*vf)); - vf->datasource=f; - vf->callbacks = callbacks; - - /* init the framing state */ - ogg_sync_init(&vf->oy); - - /* perhaps some data was previously read into a buffer for testing - against other stream types. Allow initialization from this - previously read data (as we may be reading from a non-seekable - stream) */ - if(initial){ - char *buffer=ogg_sync_buffer(&vf->oy,ibytes); - memcpy(buffer,initial,ibytes); - ogg_sync_wrote(&vf->oy,ibytes); - } - - /* can we seek? Stevens suggests the seek test was portable */ - if(offsettest!=-1)vf->seekable=1; - - /* No seeking yet; Set up a 'single' (current) logical bitstream - entry for partial open */ - vf->links=1; - vf->vi=(vorbis_info*) _ogg_calloc(vf->links,sizeof(*vf->vi)); - vf->vc=(vorbis_comment*) _ogg_calloc(vf->links,sizeof(*vf->vc)); - ogg_stream_init(&vf->os,-1); /* fill in the serialno later */ - - /* Try to fetch the headers, maintaining all the storage */ - if((ret=_fetch_headers(vf,vf->vi,vf->vc,&vf->current_serialno,NULL))<0){ - vf->datasource=NULL; - ov_clear(vf); - }else - vf->ready_state=PARTOPEN; - return(ret); -} - -static int _ov_open2(OggVorbis_File *vf){ - if(vf->ready_state != PARTOPEN) return OV_EINVAL; - vf->ready_state=OPENED; - if(vf->seekable){ - int ret=_open_seekable2(vf); - if(ret){ - vf->datasource=NULL; - ov_clear(vf); - } - return(ret); - }else - vf->ready_state=STREAMSET; - - return 0; -} - - -/* clear out the OggVorbis_File struct */ -int ov_clear(OggVorbis_File *vf){ - if(vf){ - vorbis_block_clear(&vf->vb); - vorbis_dsp_clear(&vf->vd); - ogg_stream_clear(&vf->os); - - if(vf->vi && vf->links){ - int i; - for(i=0;ilinks;i++){ - vorbis_info_clear(vf->vi+i); - vorbis_comment_clear(vf->vc+i); - } - _ogg_free(vf->vi); - _ogg_free(vf->vc); - } - if(vf->dataoffsets)_ogg_free(vf->dataoffsets); - if(vf->pcmlengths)_ogg_free(vf->pcmlengths); - if(vf->serialnos)_ogg_free(vf->serialnos); - if(vf->offsets)_ogg_free(vf->offsets); - ogg_sync_clear(&vf->oy); - if(vf->datasource)(vf->callbacks.close_func)(vf->datasource); - memset(vf,0,sizeof(*vf)); - } -#ifdef DEBUG_LEAKS - _VDBG_dump(); -#endif - return(0); -} - -/* inspects the OggVorbis file and finds/documents all the logical - bitstreams contained in it. Tries to be tolerant of logical - bitstream sections that are truncated/woogie. - - return: -1) error - 0) OK -*/ - -int ov_open_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes, - ov_callbacks callbacks){ - int ret=_ov_open1(f,vf,initial,ibytes,callbacks); - if(ret)return ret; - return _ov_open2(vf); -} - -int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){ - ov_callbacks callbacks = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap, - (int (*)(void *)) fclose, - (long (*)(void *)) ftell - }; - - return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks); -} - -/* cheap hack for game usage where downsampling is desirable; there's - no need for SRC as we can just do it cheaply in libvorbis. */ - -int ov_halfrate(OggVorbis_File *vf,int flag){ - int i; - if(vf->vi==NULL)return OV_EINVAL; - if(!vf->seekable)return OV_EINVAL; - if(vf->ready_state>=STREAMSET) - _decode_clear(vf); /* clear out stream state; later on libvorbis - will be able to swap this on the fly, but - for now dumping the decode machine is needed - to reinit the MDCT lookups. 1.1 libvorbis - is planned to be able to switch on the fly */ - - for(i=0;ilinks;i++){ - if(vorbis_synthesis_halfrate(vf->vi+i,flag)){ - ov_halfrate(vf,0); - return OV_EINVAL; - } - } - return 0; -} - -int ov_halfrate_p(OggVorbis_File *vf){ - if(vf->vi==NULL)return OV_EINVAL; - return vorbis_synthesis_halfrate_p(vf->vi); -} - -/* Only partially open the vorbis file; test for Vorbisness, and load - the headers for the first chain. Do not seek (although test for - seekability). Use ov_test_open to finish opening the file, else - ov_clear to close/free it. Same return codes as open. */ - -int ov_test_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes, - ov_callbacks callbacks) -{ - return _ov_open1(f,vf,initial,ibytes,callbacks); -} - -int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){ - ov_callbacks callbacks = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap, - (int (*)(void *)) fclose, - (long (*)(void *)) ftell - }; - - return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks); -} - -int ov_test_open(OggVorbis_File *vf){ - if(vf->ready_state!=PARTOPEN)return(OV_EINVAL); - return _ov_open2(vf); -} - -/* How many logical bitstreams in this physical bitstream? */ -long ov_streams(OggVorbis_File *vf){ - return vf->links; -} - -/* Is the FILE * associated with vf seekable? */ -long ov_seekable(OggVorbis_File *vf){ - return vf->seekable; -} - -/* returns the bitrate for a given logical bitstream or the entire - physical bitstream. If the file is open for random access, it will - find the *actual* average bitrate. If the file is streaming, it - returns the nominal bitrate (if set) else the average of the - upper/lower bounds (if set) else -1 (unset). - - If you want the actual bitrate field settings, get them from the - vorbis_info structs */ - -long ov_bitrate(OggVorbis_File *vf,int i){ - if(vf->ready_state=vf->links)return(OV_EINVAL); - if(!vf->seekable && i!=0)return(ov_bitrate(vf,0)); - if(i<0){ - ogg_int64_t bits=0; - int i; - float br; - for(i=0;ilinks;i++) - bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8; - /* This once read: return(rint(bits/ov_time_total(vf,-1))); - * gcc 3.x on x86 miscompiled this at optimisation level 2 and above, - * so this is slightly transformed to make it work. - */ - br = bits/ov_time_total(vf,-1); - return(rint(br)); - }else{ - if(vf->seekable){ - /* return the actual bitrate */ - return(rint((vf->offsets[i+1]-vf->dataoffsets[i])*8/ov_time_total(vf,i))); - }else{ - /* return nominal if set */ - if(vf->vi[i].bitrate_nominal>0){ - return vf->vi[i].bitrate_nominal; - }else{ - if(vf->vi[i].bitrate_upper>0){ - if(vf->vi[i].bitrate_lower>0){ - return (vf->vi[i].bitrate_upper+vf->vi[i].bitrate_lower)/2; - }else{ - return vf->vi[i].bitrate_upper; - } - } - return(OV_FALSE); - } - } - } -} - -/* returns the actual bitrate since last call. returns -1 if no - additional data to offer since last call (or at beginning of stream), - EINVAL if stream is only partially open -*/ -long ov_bitrate_instant(OggVorbis_File *vf){ - int link=(vf->seekable?vf->current_link:0); - long ret; - if(vf->ready_statesamptrack==0)return(OV_FALSE); - ret=vf->bittrack/vf->samptrack*vf->vi[link].rate+.5; - vf->bittrack=0.f; - vf->samptrack=0.f; - return(ret); -} - -/* Guess */ -long ov_serialnumber(OggVorbis_File *vf,int i){ - if(i>=vf->links)return(ov_serialnumber(vf,vf->links-1)); - if(!vf->seekable && i>=0)return(ov_serialnumber(vf,-1)); - if(i<0){ - return(vf->current_serialno); - }else{ - return(vf->serialnos[i]); - } -} - -/* returns: total raw (compressed) length of content if i==-1 - raw (compressed) length of that logical bitstream for i==0 to n - OV_EINVAL if the stream is not seekable (we can't know the length) - or if stream is only partially open -*/ -ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){ - if(vf->ready_stateseekable || i>=vf->links)return(OV_EINVAL); - if(i<0){ - ogg_int64_t acc=0; - int i; - for(i=0;ilinks;i++) - acc+=ov_raw_total(vf,i); - return(acc); - }else{ - return(vf->offsets[i+1]-vf->offsets[i]); - } -} - -/* returns: total PCM length (samples) of content if i==-1 PCM length - (samples) of that logical bitstream for i==0 to n - OV_EINVAL if the stream is not seekable (we can't know the - length) or only partially open -*/ -ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){ - if(vf->ready_stateseekable || i>=vf->links)return(OV_EINVAL); - if(i<0){ - ogg_int64_t acc=0; - int i; - for(i=0;ilinks;i++) - acc+=ov_pcm_total(vf,i); - return(acc); - }else{ - return(vf->pcmlengths[i*2+1]); - } -} - -/* returns: total seconds of content if i==-1 - seconds in that logical bitstream for i==0 to n - OV_EINVAL if the stream is not seekable (we can't know the - length) or only partially open -*/ -double ov_time_total(OggVorbis_File *vf,int i){ - if(vf->ready_stateseekable || i>=vf->links)return(OV_EINVAL); - if(i<0){ - double acc=0; - int i; - for(i=0;ilinks;i++) - acc+=ov_time_total(vf,i); - return(acc); - }else{ - return((double)(vf->pcmlengths[i*2+1])/vf->vi[i].rate); - } -} - -/* seek to an offset relative to the *compressed* data. This also - scans packets to update the PCM cursor. It will cross a logical - bitstream boundary, but only if it can't get any packets out of the - tail of the bitstream we seek to (so no surprises). - - returns zero on success, nonzero on failure */ - -int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){ - ogg_stream_state work_os; - - if(vf->ready_stateseekable) - return(OV_ENOSEEK); /* don't dump machine if we can't seek */ - - if(pos<0 || pos>vf->end)return(OV_EINVAL); - - /* don't yet clear out decoding machine (if it's initialized), in - the case we're in the same link. Restart the decode lapping, and - let _fetch_and_process_packet deal with a potential bitstream - boundary */ - vf->pcm_offset=-1; - ogg_stream_reset_serialno(&vf->os, - vf->current_serialno); /* must set serialno */ - vorbis_synthesis_restart(&vf->vd); - - _seek_helper(vf,pos); - - /* we need to make sure the pcm_offset is set, but we don't want to - advance the raw cursor past good packets just to get to the first - with a granulepos. That's not equivalent behavior to beginning - decoding as immediately after the seek position as possible. - - So, a hack. We use two stream states; a local scratch state and - the shared vf->os stream state. We use the local state to - scan, and the shared state as a buffer for later decode. - - Unfortuantely, on the last page we still advance to last packet - because the granulepos on the last page is not necessarily on a - packet boundary, and we need to make sure the granpos is - correct. - */ - - { - ogg_page og; - ogg_packet op; - int lastblock=0; - int accblock=0; - int thisblock; - int eosflag; - - ogg_stream_init(&work_os,vf->current_serialno); /* get the memory ready */ - ogg_stream_reset(&work_os); /* eliminate the spurious OV_HOLE - return from not necessarily - starting from the beginning */ - - while(1){ - if(vf->ready_state>=STREAMSET){ - /* snarf/scan a packet if we can */ - int result=ogg_stream_packetout(&work_os,&op); - - if(result>0){ - - if(vf->vi[vf->current_link].codec_setup){ - thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op); - if(thisblock<0){ - ogg_stream_packetout(&vf->os,NULL); - thisblock=0; - }else{ - - if(eosflag) - ogg_stream_packetout(&vf->os,NULL); - else - if(lastblock)accblock+=(lastblock+thisblock)>>2; - } - - if(op.granulepos!=-1){ - int i,link=vf->current_link; - ogg_int64_t granulepos=op.granulepos-vf->pcmlengths[link*2]; - if(granulepos<0)granulepos=0; - - for(i=0;ipcmlengths[i*2+1]; - vf->pcm_offset=granulepos-accblock; - break; - } - lastblock=thisblock; - continue; - }else - ogg_stream_packetout(&vf->os,NULL); - } - } - - if(!lastblock){ - if(_get_next_page(vf,&og,-1)<0){ - vf->pcm_offset=ov_pcm_total(vf,-1); - break; - } - }else{ - /* huh? Bogus stream with packets but no granulepos */ - vf->pcm_offset=-1; - break; - } - - /* has our decoding just traversed a bitstream boundary? */ - if(vf->ready_state>=STREAMSET) - if(vf->current_serialno!=ogg_page_serialno(&og)){ - _decode_clear(vf); /* clear out stream state */ - ogg_stream_clear(&work_os); - } - - if(vf->ready_statecurrent_serialno=ogg_page_serialno(&og); - for(link=0;linklinks;link++) - if(vf->serialnos[link]==vf->current_serialno)break; - if(link==vf->links)goto seek_error; /* sign of a bogus stream. - error out, leave - machine uninitialized */ - vf->current_link=link; - - ogg_stream_reset_serialno(&vf->os,vf->current_serialno); - ogg_stream_reset_serialno(&work_os,vf->current_serialno); - vf->ready_state=STREAMSET; - - } - - ogg_stream_pagein(&vf->os,&og); - ogg_stream_pagein(&work_os,&og); - eosflag=ogg_page_eos(&og); - } - } - - ogg_stream_clear(&work_os); - vf->bittrack=0.f; - vf->samptrack=0.f; - return(0); - - seek_error: - /* dump the machine so we're in a known state */ - vf->pcm_offset=-1; - ogg_stream_clear(&work_os); - _decode_clear(vf); - return OV_EBADLINK; -} - -/* Page granularity seek (faster than sample granularity because we - don't do the last bit of decode to find a specific sample). - - Seek to the last [granule marked] page preceeding the specified pos - location, such that decoding past the returned point will quickly - arrive at the requested position. */ -int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){ - int link=-1; - ogg_int64_t result=0; - ogg_int64_t total=ov_pcm_total(vf,-1); - - if(vf->ready_stateseekable)return(OV_ENOSEEK); - - if(pos<0 || pos>total)return(OV_EINVAL); - - /* which bitstream section does this pcm offset occur in? */ - for(link=vf->links-1;link>=0;link--){ - total-=vf->pcmlengths[link*2+1]; - if(pos>=total)break; - } - - /* search within the logical bitstream for the page with the highest - pcm_pos preceeding (or equal to) pos. There is a danger here; - missing pages or incorrect frame number information in the - bitstream could make our task impossible. Account for that (it - would be an error condition) */ - - /* new search algorithm by HB (Nicholas Vinen) */ - { - ogg_int64_t end=vf->offsets[link+1]; - ogg_int64_t begin=vf->offsets[link]; - ogg_int64_t begintime = vf->pcmlengths[link*2]; - ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime; - ogg_int64_t target=pos-total+begintime; - ogg_int64_t best=begin; - - ogg_page og; - while(beginoffset); - if(result==OV_EREAD) goto seek_error; - if(result<0){ - if(bisect<=begin+1) - end=begin; /* found it */ - else{ - if(bisect==0) goto seek_error; - bisect-=CHUNKSIZE; - if(bisect<=begin)bisect=begin+1; - _seek_helper(vf,bisect); - } - }else{ - ogg_int64_t granulepos=ogg_page_granulepos(&og); - if(granulepos==-1)continue; - if(granuleposoffset; /* raw offset of next page */ - begintime=granulepos; - - if(target-begintime>44100)break; - bisect=begin; /* *not* begin + 1 */ - }else{ - if(bisect<=begin+1) - end=begin; /* found it */ - else{ - if(end==vf->offset){ /* we're pretty close - we'd be stuck in */ - end=result; - bisect-=CHUNKSIZE; /* an endless loop otherwise. */ - if(bisect<=begin)bisect=begin+1; - _seek_helper(vf,bisect); - }else{ - end=result; - endtime=granulepos; - break; - } - } - } - } - } - } - - /* found our page. seek to it, update pcm offset. Easier case than - raw_seek, don't keep packets preceeding granulepos. */ - { - ogg_page og; - ogg_packet op; - - /* seek */ - _seek_helper(vf,best); - vf->pcm_offset=-1; - - if(_get_next_page(vf,&og,-1)<0)return(OV_EOF); /* shouldn't happen */ - - if(link!=vf->current_link){ - /* Different link; dump entire decode machine */ - _decode_clear(vf); - - vf->current_link=link; - vf->current_serialno=ogg_page_serialno(&og); - vf->ready_state=STREAMSET; - - }else{ - vorbis_synthesis_restart(&vf->vd); - } - - ogg_stream_reset_serialno(&vf->os,vf->current_serialno); - ogg_stream_pagein(&vf->os,&og); - - /* pull out all but last packet; the one with granulepos */ - while(1){ - result=ogg_stream_packetpeek(&vf->os,&op); - if(result==0){ - /* !!! the packet finishing this page originated on a - preceeding page. Keep fetching previous pages until we - get one with a granulepos or without the 'continued' flag - set. Then just use raw_seek for simplicity. */ - - _seek_helper(vf,best); - - while(1){ - result=_get_prev_page(vf,&og); - if(result<0) goto seek_error; - if(ogg_page_granulepos(&og)>-1 || - !ogg_page_continued(&og)){ - return ov_raw_seek(vf,result); - } - vf->offset=result; - } - } - if(result<0){ - result = OV_EBADPACKET; - goto seek_error; - } - if(op.granulepos!=-1){ - vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2]; - if(vf->pcm_offset<0)vf->pcm_offset=0; - vf->pcm_offset+=total; - break; - }else - result=ogg_stream_packetout(&vf->os,NULL); - } - } - } - - /* verify result */ - if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){ - result=OV_EFAULT; - goto seek_error; - } - vf->bittrack=0.f; - vf->samptrack=0.f; - return(0); - - seek_error: - /* dump machine so we're in a known state */ - vf->pcm_offset=-1; - _decode_clear(vf); - return (int)result; -} - -/* seek to a sample offset relative to the decompressed pcm stream - returns zero on success, nonzero on failure */ - -int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){ - int thisblock,lastblock=0; - int ret=ov_pcm_seek_page(vf,pos); - if(ret<0)return(ret); - if((ret=_make_decode_ready(vf)))return ret; - - /* discard leading packets we don't need for the lapping of the - position we want; don't decode them */ - - while(1){ - ogg_packet op; - ogg_page og; - - int ret=ogg_stream_packetpeek(&vf->os,&op); - if(ret>0){ - thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op); - if(thisblock<0){ - ogg_stream_packetout(&vf->os,NULL); - continue; /* non audio packet */ - } - if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2; - - if(vf->pcm_offset+((thisblock+ - vorbis_info_blocksize(vf->vi,1))>>2)>=pos)break; - - /* remove the packet from packet queue and track its granulepos */ - ogg_stream_packetout(&vf->os,NULL); - vorbis_synthesis_trackonly(&vf->vb,&op); /* set up a vb with - only tracking, no - pcm_decode */ - vorbis_synthesis_blockin(&vf->vd,&vf->vb); - - /* end of logical stream case is hard, especially with exact - length positioning. */ - - if(op.granulepos>-1){ - int i; - /* always believe the stream markers */ - vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2]; - if(vf->pcm_offset<0)vf->pcm_offset=0; - for(i=0;icurrent_link;i++) - vf->pcm_offset+=vf->pcmlengths[i*2+1]; - } - - lastblock=thisblock; - - }else{ - if(ret<0 && ret!=OV_HOLE)break; - - /* suck in a new page */ - if(_get_next_page(vf,&og,-1)<0)break; - if(vf->current_serialno!=ogg_page_serialno(&og))_decode_clear(vf); - - if(vf->ready_statecurrent_serialno=ogg_page_serialno(&og); - for(link=0;linklinks;link++) - if(vf->serialnos[link]==vf->current_serialno)break; - if(link==vf->links)return(OV_EBADLINK); - vf->current_link=link; - - ogg_stream_reset_serialno(&vf->os,vf->current_serialno); - vf->ready_state=STREAMSET; - ret=_make_decode_ready(vf); - if(ret)return ret; - lastblock=0; - } - - ogg_stream_pagein(&vf->os,&og); - } - } - - vf->bittrack=0.f; - vf->samptrack=0.f; - /* discard samples until we reach the desired position. Crossing a - logical bitstream boundary with abandon is OK. */ - while(vf->pcm_offsetpcm_offset; - long samples=vorbis_synthesis_pcmout(&vf->vd,NULL); - - if(samples>target)samples=target; - vorbis_synthesis_read(&vf->vd,samples); - vf->pcm_offset+=samples; - - if(samplespcm_offset=ov_pcm_total(vf,-1); /* eof */ - } - return 0; -} - -/* seek to a playback time relative to the decompressed pcm stream - returns zero on success, nonzero on failure */ -int ov_time_seek(OggVorbis_File *vf,double seconds){ - /* translate time to PCM position and call ov_pcm_seek */ - - int link=-1; - ogg_int64_t pcm_total=ov_pcm_total(vf,-1); - double time_total=ov_time_total(vf,-1); - - if(vf->ready_stateseekable)return(OV_ENOSEEK); - if(seconds<0 || seconds>time_total)return(OV_EINVAL); - - /* which bitstream section does this time offset occur in? */ - for(link=vf->links-1;link>=0;link--){ - pcm_total-=vf->pcmlengths[link*2+1]; - time_total-=ov_time_total(vf,link); - if(seconds>=time_total)break; - } - - /* enough information to convert time offset to pcm offset */ - { - ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate; - return(ov_pcm_seek(vf,target)); - } -} - -/* page-granularity version of ov_time_seek - returns zero on success, nonzero on failure */ -int ov_time_seek_page(OggVorbis_File *vf,double seconds){ - /* translate time to PCM position and call ov_pcm_seek */ - - int link=-1; - ogg_int64_t pcm_total=ov_pcm_total(vf,-1); - double time_total=ov_time_total(vf,-1); - - if(vf->ready_stateseekable)return(OV_ENOSEEK); - if(seconds<0 || seconds>time_total)return(OV_EINVAL); - - /* which bitstream section does this time offset occur in? */ - for(link=vf->links-1;link>=0;link--){ - pcm_total-=vf->pcmlengths[link*2+1]; - time_total-=ov_time_total(vf,link); - if(seconds>=time_total)break; - } - - /* enough information to convert time offset to pcm offset */ - { - ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate; - return(ov_pcm_seek_page(vf,target)); - } -} - -/* tell the current stream offset cursor. Note that seek followed by - tell will likely not give the set offset due to caching */ -ogg_int64_t ov_raw_tell(OggVorbis_File *vf){ - if(vf->ready_stateoffset); -} - -/* return PCM offset (sample) of next PCM sample to be read */ -ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){ - if(vf->ready_statepcm_offset); -} - -/* return time offset (seconds) of next PCM sample to be read */ -double ov_time_tell(OggVorbis_File *vf){ - int link=0; - ogg_int64_t pcm_total=0; - double time_total=0.f; - - if(vf->ready_stateseekable){ - pcm_total=ov_pcm_total(vf,-1); - time_total=ov_time_total(vf,-1); - - /* which bitstream section does this time offset occur in? */ - for(link=vf->links-1;link>=0;link--){ - pcm_total-=vf->pcmlengths[link*2+1]; - time_total-=ov_time_total(vf,link); - if(vf->pcm_offset>=pcm_total)break; - } - } - - return((double)time_total+(double)(vf->pcm_offset-pcm_total)/vf->vi[link].rate); -} - -/* link: -1) return the vorbis_info struct for the bitstream section - currently being decoded - 0-n) to request information for a specific bitstream section - - In the case of a non-seekable bitstream, any call returns the - current bitstream. NULL in the case that the machine is not - initialized */ - -vorbis_info *ov_info(OggVorbis_File *vf,int link){ - if(vf->seekable){ - if(link<0) - if(vf->ready_state>=STREAMSET) - return vf->vi+vf->current_link; - else - return vf->vi; - else - if(link>=vf->links) - return NULL; - else - return vf->vi+link; - }else{ - return vf->vi; - } -} - -/* grr, strong typing, grr, no templates/inheritence, grr */ -vorbis_comment *ov_comment(OggVorbis_File *vf,int link){ - if(vf->seekable){ - if(link<0) - if(vf->ready_state>=STREAMSET) - return vf->vc+vf->current_link; - else - return vf->vc; - else - if(link>=vf->links) - return NULL; - else - return vf->vc+link; - }else{ - return vf->vc; - } -} - -static int host_is_big_endian() { - ogg_int32_t pattern = 0xfeedface; /* deadbeef */ - unsigned char *bytewise = (unsigned char *)&pattern; - if (bytewise[0] == 0xfe) return 1; - return 0; -} - -/* up to this point, everything could more or less hide the multiple - logical bitstream nature of chaining from the toplevel application - if the toplevel application didn't particularly care. However, at - the point that we actually read audio back, the multiple-section - nature must surface: Multiple bitstream sections do not necessarily - have to have the same number of channels or sampling rate. - - ov_read returns the sequential logical bitstream number currently - being decoded along with the PCM data in order that the toplevel - application can take action on channel/sample rate changes. This - number will be incremented even for streamed (non-seekable) streams - (for seekable streams, it represents the actual logical bitstream - index within the physical bitstream. Note that the accessor - functions above are aware of this dichotomy). - - input values: buffer) a buffer to hold packed PCM data for return - length) the byte length requested to be placed into buffer - bigendianp) should the data be packed LSB first (0) or - MSB first (1) - word) word size for output. currently 1 (byte) or - 2 (16 bit short) - - return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL) - 0) EOF - n) number of bytes of PCM actually returned. The - below works on a packet-by-packet basis, so the - return length is not related to the 'length' passed - in, just guaranteed to fit. - - *section) set to the logical bitstream number */ - -long ov_read(OggVorbis_File *vf,char *buffer,int length, - int bigendianp,int word,int sgned,int *bitstream){ - int i,j; - int host_endian = host_is_big_endian(); - - float **pcm; - long samples; - - if(vf->ready_stateready_state==INITSET){ - samples=vorbis_synthesis_pcmout(&vf->vd,&pcm); - if(samples)break; - } - - /* suck in another packet */ - { - int ret=_fetch_and_process_packet(vf,NULL,1,1); - if(ret==OV_EOF) - return(0); - if(ret<=0) - return(ret); - } - - } - - if(samples>0){ - - /* yay! proceed to pack data into the byte buffer */ - - long channels=ov_info(vf,-1)->channels; - long bytespersample=word * channels; - vorbis_fpu_control fpu; - (void) fpu; // (to avoid a warning about it being unused) - if(samples>length/bytespersample)samples=length/bytespersample; - - if(samples <= 0) - return OV_EINVAL; - - /* a tight loop to pack each size */ - { - int val; - if(word==1){ - int off=(sgned?0:128); - vorbis_fpu_setround(&fpu); - for(j=0;j127)val=127; - else if(val<-128)val=-128; - *buffer++=val+off; - } - vorbis_fpu_restore(fpu); - }else{ - int off=(sgned?0:32768); - - if(host_endian==bigendianp){ - if(sgned){ - - vorbis_fpu_setround(&fpu); - for(i=0;i32767)val=32767; - else if(val<-32768)val=-32768; - *dest=val; - dest+=channels; - } - } - vorbis_fpu_restore(fpu); - - }else{ - - vorbis_fpu_setround(&fpu); - for(i=0;i32767)val=32767; - else if(val<-32768)val=-32768; - *dest=val+off; - dest+=channels; - } - } - vorbis_fpu_restore(fpu); - - } - }else if(bigendianp){ - - vorbis_fpu_setround(&fpu); - for(j=0;j32767)val=32767; - else if(val<-32768)val=-32768; - val+=off; - *buffer++=(val>>8); - *buffer++=(val&0xff); - } - vorbis_fpu_restore(fpu); - - }else{ - int val; - vorbis_fpu_setround(&fpu); - for(j=0;j32767)val=32767; - else if(val<-32768)val=-32768; - val+=off; - *buffer++=(val&0xff); - *buffer++=(val>>8); - } - vorbis_fpu_restore(fpu); - - } - } - } - - vorbis_synthesis_read(&vf->vd,samples); - vf->pcm_offset+=samples; - if(bitstream)*bitstream=vf->current_link; - return(samples*bytespersample); - }else{ - return(samples); - } -} - -/* input values: pcm_channels) a float vector per channel of output - length) the sample length being read by the app - - return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL) - 0) EOF - n) number of samples of PCM actually returned. The - below works on a packet-by-packet basis, so the - return length is not related to the 'length' passed - in, just guaranteed to fit. - - *section) set to the logical bitstream number */ - - - -long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int length, - int *bitstream){ - - if(vf->ready_stateready_state==INITSET){ - float **pcm; - long samples=vorbis_synthesis_pcmout(&vf->vd,&pcm); - if(samples){ - if(pcm_channels)*pcm_channels=pcm; - if(samples>length)samples=length; - vorbis_synthesis_read(&vf->vd,samples); - vf->pcm_offset+=samples; - if(bitstream)*bitstream=vf->current_link; - return samples; - - } - } - - /* suck in another packet */ - { - int ret=_fetch_and_process_packet(vf,NULL,1,1); - if(ret==OV_EOF)return(0); - if(ret<=0)return(ret); - } - - } -} - -extern float *vorbis_window(vorbis_dsp_state *v,int W); -extern void _analysis_output_always(const char *base,int i,float *v,int n,int bark,int dB, - ogg_int64_t off); - -static void _ov_splice(float **pcm,float **lappcm, - int n1, int n2, - int ch1, int ch2, - float *w1, float *w2){ - int i,j; - float *w=w1; - int n=n1; - - if(n1>n2){ - n=n2; - w=w2; - } - - /* splice */ - for(j=0;jready_state==INITSET)break; - /* suck in another packet */ - { - int ret=_fetch_and_process_packet(vf,NULL,1,0); - if(ret<0 && ret!=OV_HOLE)return(ret); - } - } - return 0; -} - -/* make sure vf is INITSET and that we have a primed buffer; if - we're crosslapping at a stream section boundary, this also makes - sure we're sanity checking against the right stream information */ -static int _ov_initprime(OggVorbis_File *vf){ - vorbis_dsp_state *vd=&vf->vd; - while(1){ - if(vf->ready_state==INITSET) - if(vorbis_synthesis_pcmout(vd,NULL))break; - - /* suck in another packet */ - { - int ret=_fetch_and_process_packet(vf,NULL,1,0); - if(ret<0 && ret!=OV_HOLE)return(ret); - } - } - return 0; -} - -/* grab enough data for lapping from vf; this may be in the form of - unreturned, already-decoded pcm, remaining PCM we will need to - decode, or synthetic postextrapolation from last packets. */ -static void _ov_getlap(OggVorbis_File *vf,vorbis_info *vi,vorbis_dsp_state *vd, - float **lappcm,int lapsize){ - int lapcount=0,i; - float **pcm; - - /* try first to decode the lapping data */ - while(lapcountlapsize-lapcount)samples=lapsize-lapcount; - for(i=0;ichannels;i++) - memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples); - lapcount+=samples; - vorbis_synthesis_read(vd,samples); - }else{ - /* suck in another packet */ - int ret=_fetch_and_process_packet(vf,NULL,1,0); /* do *not* span */ - if(ret==OV_EOF)break; - } - } - if(lapcountvd,&pcm); - if(samples==0){ - for(i=0;ichannels;i++) - memset(lappcm[i]+lapcount,0,sizeof(**pcm)*lapsize-lapcount); - lapcount=lapsize; - }else{ - if(samples>lapsize-lapcount)samples=lapsize-lapcount; - for(i=0;ichannels;i++) - memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples); - lapcount+=samples; - } - } -} - -/* this sets up crosslapping of a sample by using trailing data from - sample 1 and lapping it into the windowing buffer of sample 2 */ -int ov_crosslap(OggVorbis_File *vf1, OggVorbis_File *vf2){ - vorbis_info *vi1,*vi2; - float **lappcm; - float **pcm; - float *w1,*w2; - int n1,n2,i,ret,hs1,hs2; - - if(vf1==vf2)return(0); /* degenerate case */ - if(vf1->ready_stateready_statechannels); - n1=vorbis_info_blocksize(vi1,0)>>(1+hs1); - n2=vorbis_info_blocksize(vi2,0)>>(1+hs2); - w1=vorbis_window(&vf1->vd,0); - w2=vorbis_window(&vf2->vd,0); - - for(i=0;ichannels;i++) - lappcm[i]=(float*) alloca(sizeof(**lappcm)*n1); - - _ov_getlap(vf1,vi1,&vf1->vd,lappcm,n1); - - /* have a lapping buffer from vf1; now to splice it into the lapping - buffer of vf2 */ - /* consolidate and expose the buffer. */ - vorbis_synthesis_lapout(&vf2->vd,&pcm); - _analysis_output_always("pcmL",0,pcm[0],n1*2,0,0,0); - _analysis_output_always("pcmR",0,pcm[1],n1*2,0,0,0); - - /* splice */ - _ov_splice(pcm,lappcm,n1,n2,vi1->channels,vi2->channels,w1,w2); - - /* done */ - return(0); -} - -static int _ov_64_seek_lap(OggVorbis_File *vf,ogg_int64_t pos, - int (*localseek)(OggVorbis_File *,ogg_int64_t)){ - vorbis_info *vi; - float **lappcm; - float **pcm; - float *w1,*w2; - int n1,n2,ch1,ch2,hs; - int i,ret; - - if(vf->ready_statechannels; - n1=vorbis_info_blocksize(vi,0)>>(1+hs); - w1=vorbis_window(&vf->vd,0); /* window arrays from libvorbis are - persistent; even if the decode state - from this link gets dumped, this - window array continues to exist */ - - lappcm=(float**) alloca(sizeof(*lappcm)*ch1); - for(i=0;ivd,lappcm,n1); - - /* have lapping data; seek and prime the buffer */ - ret=localseek(vf,pos); - if(ret)return ret; - ret=_ov_initprime(vf); - if(ret)return(ret); - - /* Guard against cross-link changes; they're perfectly legal */ - vi=ov_info(vf,-1); - ch2=vi->channels; - n2=vorbis_info_blocksize(vi,0)>>(1+hs); - w2=vorbis_window(&vf->vd,0); - - /* consolidate and expose the buffer. */ - vorbis_synthesis_lapout(&vf->vd,&pcm); - - /* splice */ - _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2); - - /* done */ - return(0); -} - -int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){ - return _ov_64_seek_lap(vf,pos,ov_raw_seek); -} - -int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){ - return _ov_64_seek_lap(vf,pos,ov_pcm_seek); -} - -int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos){ - return _ov_64_seek_lap(vf,pos,ov_pcm_seek_page); -} - -static int _ov_d_seek_lap(OggVorbis_File *vf,double pos, - int (*localseek)(OggVorbis_File *,double)){ - vorbis_info *vi; - float **lappcm; - float **pcm; - float *w1,*w2; - int n1,n2,ch1,ch2,hs; - int i,ret; - - if(vf->ready_statechannels; - n1=vorbis_info_blocksize(vi,0)>>(1+hs); - w1=vorbis_window(&vf->vd,0); /* window arrays from libvorbis are - persistent; even if the decode state - from this link gets dumped, this - window array continues to exist */ - - lappcm=(float**) alloca(sizeof(*lappcm)*ch1); - for(i=0;ivd,lappcm,n1); - - /* have lapping data; seek and prime the buffer */ - ret=localseek(vf,pos); - if(ret)return ret; - ret=_ov_initprime(vf); - if(ret)return(ret); - - /* Guard against cross-link changes; they're perfectly legal */ - vi=ov_info(vf,-1); - ch2=vi->channels; - n2=vorbis_info_blocksize(vi,0)>>(1+hs); - w2=vorbis_window(&vf->vd,0); - - /* consolidate and expose the buffer. */ - vorbis_synthesis_lapout(&vf->vd,&pcm); - - /* splice */ - _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2); - - /* done */ - return(0); -} - -int ov_time_seek_lap(OggVorbis_File *vf,double pos){ - return _ov_d_seek_lap(vf,pos,ov_time_seek); -} - -int ov_time_seek_page_lap(OggVorbis_File *vf,double pos){ - return _ov_d_seek_lap(vf,pos,ov_time_seek_page); -} - - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/window.c b/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/window.c deleted file mode 100644 index 422ea2ff20..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/libvorbis-1.1.2/lib/window.c +++ /dev/null @@ -1,2140 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: window functions - last mod: $Id: window.c,v 1.1 2007/06/07 17:49:18 jules_rms Exp $ - - ********************************************************************/ - -#include "../../juce_OggVorbisHeader.h" -#if JUCE_USE_OGGVORBIS - -#include -#include -#include "os.h" -#include "misc.h" - -static float vwin64[32] = { - 0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F, - 0.0753351908F, 0.1115073077F, 0.1539457973F, 0.2020557475F, - 0.2551056759F, 0.3122276645F, 0.3724270287F, 0.4346027792F, - 0.4975789974F, 0.5601459521F, 0.6211085051F, 0.6793382689F, - 0.7338252629F, 0.7837245849F, 0.8283939355F, 0.8674186656F, - 0.9006222429F, 0.9280614787F, 0.9500073081F, 0.9669131782F, - 0.9793740220F, 0.9880792941F, 0.9937636139F, 0.9971582668F, - 0.9989462667F, 0.9997230082F, 0.9999638688F, 0.9999995525F, -}; - -static float vwin128[64] = { - 0.0002365472F, 0.0021280687F, 0.0059065254F, 0.0115626550F, - 0.0190823442F, 0.0284463735F, 0.0396300935F, 0.0526030430F, - 0.0673285281F, 0.0837631763F, 0.1018564887F, 0.1215504095F, - 0.1427789367F, 0.1654677960F, 0.1895342001F, 0.2148867160F, - 0.2414252576F, 0.2690412240F, 0.2976177952F, 0.3270303960F, - 0.3571473350F, 0.3878306189F, 0.4189369387F, 0.4503188188F, - 0.4818259135F, 0.5133064334F, 0.5446086751F, 0.5755826278F, - 0.6060816248F, 0.6359640047F, 0.6650947483F, 0.6933470543F, - 0.7206038179F, 0.7467589810F, 0.7717187213F, 0.7954024542F, - 0.8177436264F, 0.8386902831F, 0.8582053981F, 0.8762669622F, - 0.8928678298F, 0.9080153310F, 0.9217306608F, 0.9340480615F, - 0.9450138200F, 0.9546851041F, 0.9631286621F, 0.9704194171F, - 0.9766389810F, 0.9818741197F, 0.9862151938F, 0.9897546035F, - 0.9925852598F, 0.9947991032F, 0.9964856900F, 0.9977308602F, - 0.9986155015F, 0.9992144193F, 0.9995953200F, 0.9998179155F, - 0.9999331503F, 0.9999825563F, 0.9999977357F, 0.9999999720F, -}; - -static float vwin256[128] = { - 0.0000591390F, 0.0005321979F, 0.0014780301F, 0.0028960636F, - 0.0047854363F, 0.0071449926F, 0.0099732775F, 0.0132685298F, - 0.0170286741F, 0.0212513119F, 0.0259337111F, 0.0310727950F, - 0.0366651302F, 0.0427069140F, 0.0491939614F, 0.0561216907F, - 0.0634851102F, 0.0712788035F, 0.0794969160F, 0.0881331402F, - 0.0971807028F, 0.1066323515F, 0.1164803426F, 0.1267164297F, - 0.1373318534F, 0.1483173323F, 0.1596630553F, 0.1713586755F, - 0.1833933062F, 0.1957555184F, 0.2084333404F, 0.2214142599F, - 0.2346852280F, 0.2482326664F, 0.2620424757F, 0.2761000481F, - 0.2903902813F, 0.3048975959F, 0.3196059553F, 0.3344988887F, - 0.3495595160F, 0.3647705766F, 0.3801144597F, 0.3955732382F, - 0.4111287047F, 0.4267624093F, 0.4424557009F, 0.4581897696F, - 0.4739456913F, 0.4897044744F, 0.5054471075F, 0.5211546088F, - 0.5368080763F, 0.5523887395F, 0.5678780103F, 0.5832575361F, - 0.5985092508F, 0.6136154277F, 0.6285587300F, 0.6433222619F, - 0.6578896175F, 0.6722449294F, 0.6863729144F, 0.7002589187F, - 0.7138889597F, 0.7272497662F, 0.7403288154F, 0.7531143679F, - 0.7655954985F, 0.7777621249F, 0.7896050322F, 0.8011158947F, - 0.8122872932F, 0.8231127294F, 0.8335866365F, 0.8437043850F, - 0.8534622861F, 0.8628575905F, 0.8718884835F, 0.8805540765F, - 0.8888543947F, 0.8967903616F, 0.9043637797F, 0.9115773078F, - 0.9184344360F, 0.9249394562F, 0.9310974312F, 0.9369141608F, - 0.9423961446F, 0.9475505439F, 0.9523851406F, 0.9569082947F, - 0.9611289005F, 0.9650563408F, 0.9687004405F, 0.9720714191F, - 0.9751798427F, 0.9780365753F, 0.9806527301F, 0.9830396204F, - 0.9852087111F, 0.9871715701F, 0.9889398207F, 0.9905250941F, - 0.9919389832F, 0.9931929973F, 0.9942985174F, 0.9952667537F, - 0.9961087037F, 0.9968351119F, 0.9974564312F, 0.9979827858F, - 0.9984239359F, 0.9987892441F, 0.9990876435F, 0.9993276081F, - 0.9995171241F, 0.9996636648F, 0.9997741654F, 0.9998550016F, - 0.9999119692F, 0.9999502656F, 0.9999744742F, 0.9999885497F, - 0.9999958064F, 0.9999989077F, 0.9999998584F, 0.9999999983F, -}; - -static float vwin512[256] = { - 0.0000147849F, 0.0001330607F, 0.0003695946F, 0.0007243509F, - 0.0011972759F, 0.0017882983F, 0.0024973285F, 0.0033242588F, - 0.0042689632F, 0.0053312973F, 0.0065110982F, 0.0078081841F, - 0.0092223540F, 0.0107533880F, 0.0124010466F, 0.0141650703F, - 0.0160451800F, 0.0180410758F, 0.0201524373F, 0.0223789233F, - 0.0247201710F, 0.0271757958F, 0.0297453914F, 0.0324285286F, - 0.0352247556F, 0.0381335972F, 0.0411545545F, 0.0442871045F, - 0.0475306997F, 0.0508847676F, 0.0543487103F, 0.0579219038F, - 0.0616036982F, 0.0653934164F, 0.0692903546F, 0.0732937809F, - 0.0774029356F, 0.0816170305F, 0.0859352485F, 0.0903567428F, - 0.0948806375F, 0.0995060259F, 0.1042319712F, 0.1090575056F, - 0.1139816300F, 0.1190033137F, 0.1241214941F, 0.1293350764F, - 0.1346429333F, 0.1400439046F, 0.1455367974F, 0.1511203852F, - 0.1567934083F, 0.1625545735F, 0.1684025537F, 0.1743359881F, - 0.1803534820F, 0.1864536069F, 0.1926349000F, 0.1988958650F, - 0.2052349715F, 0.2116506555F, 0.2181413191F, 0.2247053313F, - 0.2313410275F, 0.2380467105F, 0.2448206500F, 0.2516610835F, - 0.2585662164F, 0.2655342226F, 0.2725632448F, 0.2796513950F, - 0.2867967551F, 0.2939973773F, 0.3012512852F, 0.3085564739F, - 0.3159109111F, 0.3233125375F, 0.3307592680F, 0.3382489922F, - 0.3457795756F, 0.3533488602F, 0.3609546657F, 0.3685947904F, - 0.3762670121F, 0.3839690896F, 0.3916987634F, 0.3994537572F, - 0.4072317788F, 0.4150305215F, 0.4228476653F, 0.4306808783F, - 0.4385278181F, 0.4463861329F, 0.4542534630F, 0.4621274424F, - 0.4700057001F, 0.4778858615F, 0.4857655502F, 0.4936423891F, - 0.5015140023F, 0.5093780165F, 0.5172320626F, 0.5250737772F, - 0.5329008043F, 0.5407107971F, 0.5485014192F, 0.5562703465F, - 0.5640152688F, 0.5717338914F, 0.5794239366F, 0.5870831457F, - 0.5947092801F, 0.6023001235F, 0.6098534829F, 0.6173671907F, - 0.6248391059F, 0.6322671161F, 0.6396491384F, 0.6469831217F, - 0.6542670475F, 0.6614989319F, 0.6686768267F, 0.6757988210F, - 0.6828630426F, 0.6898676592F, 0.6968108799F, 0.7036909564F, - 0.7105061843F, 0.7172549043F, 0.7239355032F, 0.7305464154F, - 0.7370861235F, 0.7435531598F, 0.7499461068F, 0.7562635986F, - 0.7625043214F, 0.7686670148F, 0.7747504721F, 0.7807535410F, - 0.7866751247F, 0.7925141825F, 0.7982697296F, 0.8039408387F, - 0.8095266395F, 0.8150263196F, 0.8204391248F, 0.8257643590F, - 0.8310013848F, 0.8361496236F, 0.8412085555F, 0.8461777194F, - 0.8510567129F, 0.8558451924F, 0.8605428730F, 0.8651495278F, - 0.8696649882F, 0.8740891432F, 0.8784219392F, 0.8826633797F, - 0.8868135244F, 0.8908724888F, 0.8948404441F, 0.8987176157F, - 0.9025042831F, 0.9062007791F, 0.9098074886F, 0.9133248482F, - 0.9167533451F, 0.9200935163F, 0.9233459472F, 0.9265112712F, - 0.9295901680F, 0.9325833632F, 0.9354916263F, 0.9383157705F, - 0.9410566504F, 0.9437151618F, 0.9462922398F, 0.9487888576F, - 0.9512060252F, 0.9535447882F, 0.9558062262F, 0.9579914516F, - 0.9601016078F, 0.9621378683F, 0.9641014348F, 0.9659935361F, - 0.9678154261F, 0.9695683830F, 0.9712537071F, 0.9728727198F, - 0.9744267618F, 0.9759171916F, 0.9773453842F, 0.9787127293F, - 0.9800206298F, 0.9812705006F, 0.9824637665F, 0.9836018613F, - 0.9846862258F, 0.9857183066F, 0.9866995544F, 0.9876314227F, - 0.9885153662F, 0.9893528393F, 0.9901452948F, 0.9908941823F, - 0.9916009470F, 0.9922670279F, 0.9928938570F, 0.9934828574F, - 0.9940354423F, 0.9945530133F, 0.9950369595F, 0.9954886562F, - 0.9959094633F, 0.9963007242F, 0.9966637649F, 0.9969998925F, - 0.9973103939F, 0.9975965351F, 0.9978595598F, 0.9981006885F, - 0.9983211172F, 0.9985220166F, 0.9987045311F, 0.9988697776F, - 0.9990188449F, 0.9991527924F, 0.9992726499F, 0.9993794157F, - 0.9994740570F, 0.9995575079F, 0.9996306699F, 0.9996944099F, - 0.9997495605F, 0.9997969190F, 0.9998372465F, 0.9998712678F, - 0.9998996704F, 0.9999231041F, 0.9999421807F, 0.9999574732F, - 0.9999695157F, 0.9999788026F, 0.9999857885F, 0.9999908879F, - 0.9999944746F, 0.9999968817F, 0.9999984010F, 0.9999992833F, - 0.9999997377F, 0.9999999317F, 0.9999999911F, 0.9999999999F, -}; - -static float vwin1024[512] = { - 0.0000036962F, 0.0000332659F, 0.0000924041F, 0.0001811086F, - 0.0002993761F, 0.0004472021F, 0.0006245811F, 0.0008315063F, - 0.0010679699F, 0.0013339631F, 0.0016294757F, 0.0019544965F, - 0.0023090133F, 0.0026930125F, 0.0031064797F, 0.0035493989F, - 0.0040217533F, 0.0045235250F, 0.0050546946F, 0.0056152418F, - 0.0062051451F, 0.0068243817F, 0.0074729278F, 0.0081507582F, - 0.0088578466F, 0.0095941655F, 0.0103596863F, 0.0111543789F, - 0.0119782122F, 0.0128311538F, 0.0137131701F, 0.0146242260F, - 0.0155642855F, 0.0165333111F, 0.0175312640F, 0.0185581042F, - 0.0196137903F, 0.0206982797F, 0.0218115284F, 0.0229534910F, - 0.0241241208F, 0.0253233698F, 0.0265511886F, 0.0278075263F, - 0.0290923308F, 0.0304055484F, 0.0317471241F, 0.0331170013F, - 0.0345151222F, 0.0359414274F, 0.0373958560F, 0.0388783456F, - 0.0403888325F, 0.0419272511F, 0.0434935347F, 0.0450876148F, - 0.0467094213F, 0.0483588828F, 0.0500359261F, 0.0517404765F, - 0.0534724575F, 0.0552317913F, 0.0570183983F, 0.0588321971F, - 0.0606731048F, 0.0625410369F, 0.0644359070F, 0.0663576272F, - 0.0683061077F, 0.0702812571F, 0.0722829821F, 0.0743111878F, - 0.0763657775F, 0.0784466526F, 0.0805537129F, 0.0826868561F, - 0.0848459782F, 0.0870309736F, 0.0892417345F, 0.0914781514F, - 0.0937401128F, 0.0960275056F, 0.0983402145F, 0.1006781223F, - 0.1030411101F, 0.1054290568F, 0.1078418397F, 0.1102793336F, - 0.1127414119F, 0.1152279457F, 0.1177388042F, 0.1202738544F, - 0.1228329618F, 0.1254159892F, 0.1280227980F, 0.1306532471F, - 0.1333071937F, 0.1359844927F, 0.1386849970F, 0.1414085575F, - 0.1441550230F, 0.1469242403F, 0.1497160539F, 0.1525303063F, - 0.1553668381F, 0.1582254875F, 0.1611060909F, 0.1640084822F, - 0.1669324936F, 0.1698779549F, 0.1728446939F, 0.1758325362F, - 0.1788413055F, 0.1818708232F, 0.1849209084F, 0.1879913785F, - 0.1910820485F, 0.1941927312F, 0.1973232376F, 0.2004733764F, - 0.2036429541F, 0.2068317752F, 0.2100396421F, 0.2132663552F, - 0.2165117125F, 0.2197755102F, 0.2230575422F, 0.2263576007F, - 0.2296754753F, 0.2330109540F, 0.2363638225F, 0.2397338646F, - 0.2431208619F, 0.2465245941F, 0.2499448389F, 0.2533813719F, - 0.2568339669F, 0.2603023956F, 0.2637864277F, 0.2672858312F, - 0.2708003718F, 0.2743298135F, 0.2778739186F, 0.2814324472F, - 0.2850051576F, 0.2885918065F, 0.2921921485F, 0.2958059366F, - 0.2994329219F, 0.3030728538F, 0.3067254799F, 0.3103905462F, - 0.3140677969F, 0.3177569747F, 0.3214578205F, 0.3251700736F, - 0.3288934718F, 0.3326277513F, 0.3363726468F, 0.3401278914F, - 0.3438932168F, 0.3476683533F, 0.3514530297F, 0.3552469734F, - 0.3590499106F, 0.3628615659F, 0.3666816630F, 0.3705099239F, - 0.3743460698F, 0.3781898204F, 0.3820408945F, 0.3858990095F, - 0.3897638820F, 0.3936352274F, 0.3975127601F, 0.4013961936F, - 0.4052852405F, 0.4091796123F, 0.4130790198F, 0.4169831732F, - 0.4208917815F, 0.4248045534F, 0.4287211965F, 0.4326414181F, - 0.4365649248F, 0.4404914225F, 0.4444206167F, 0.4483522125F, - 0.4522859146F, 0.4562214270F, 0.4601584538F, 0.4640966984F, - 0.4680358644F, 0.4719756548F, 0.4759157726F, 0.4798559209F, - 0.4837958024F, 0.4877351199F, 0.4916735765F, 0.4956108751F, - 0.4995467188F, 0.5034808109F, 0.5074128550F, 0.5113425550F, - 0.5152696149F, 0.5191937395F, 0.5231146336F, 0.5270320028F, - 0.5309455530F, 0.5348549910F, 0.5387600239F, 0.5426603597F, - 0.5465557070F, 0.5504457754F, 0.5543302752F, 0.5582089175F, - 0.5620814145F, 0.5659474793F, 0.5698068262F, 0.5736591704F, - 0.5775042283F, 0.5813417176F, 0.5851713571F, 0.5889928670F, - 0.5928059689F, 0.5966103856F, 0.6004058415F, 0.6041920626F, - 0.6079687761F, 0.6117357113F, 0.6154925986F, 0.6192391705F, - 0.6229751612F, 0.6267003064F, 0.6304143441F, 0.6341170137F, - 0.6378080569F, 0.6414872173F, 0.6451542405F, 0.6488088741F, - 0.6524508681F, 0.6560799742F, 0.6596959469F, 0.6632985424F, - 0.6668875197F, 0.6704626398F, 0.6740236662F, 0.6775703649F, - 0.6811025043F, 0.6846198554F, 0.6881221916F, 0.6916092892F, - 0.6950809269F, 0.6985368861F, 0.7019769510F, 0.7054009085F, - 0.7088085484F, 0.7121996632F, 0.7155740484F, 0.7189315023F, - 0.7222718263F, 0.7255948245F, 0.7289003043F, 0.7321880760F, - 0.7354579530F, 0.7387097518F, 0.7419432921F, 0.7451583966F, - 0.7483548915F, 0.7515326059F, 0.7546913723F, 0.7578310265F, - 0.7609514077F, 0.7640523581F, 0.7671337237F, 0.7701953535F, - 0.7732371001F, 0.7762588195F, 0.7792603711F, 0.7822416178F, - 0.7852024259F, 0.7881426654F, 0.7910622097F, 0.7939609356F, - 0.7968387237F, 0.7996954579F, 0.8025310261F, 0.8053453193F, - 0.8081382324F, 0.8109096638F, 0.8136595156F, 0.8163876936F, - 0.8190941071F, 0.8217786690F, 0.8244412960F, 0.8270819086F, - 0.8297004305F, 0.8322967896F, 0.8348709171F, 0.8374227481F, - 0.8399522213F, 0.8424592789F, 0.8449438672F, 0.8474059356F, - 0.8498454378F, 0.8522623306F, 0.8546565748F, 0.8570281348F, - 0.8593769787F, 0.8617030779F, 0.8640064080F, 0.8662869477F, - 0.8685446796F, 0.8707795899F, 0.8729916682F, 0.8751809079F, - 0.8773473059F, 0.8794908626F, 0.8816115819F, 0.8837094713F, - 0.8857845418F, 0.8878368079F, 0.8898662874F, 0.8918730019F, - 0.8938569760F, 0.8958182380F, 0.8977568194F, 0.8996727552F, - 0.9015660837F, 0.9034368465F, 0.9052850885F, 0.9071108577F, - 0.9089142057F, 0.9106951869F, 0.9124538591F, 0.9141902832F, - 0.9159045233F, 0.9175966464F, 0.9192667228F, 0.9209148257F, - 0.9225410313F, 0.9241454187F, 0.9257280701F, 0.9272890704F, - 0.9288285075F, 0.9303464720F, 0.9318430576F, 0.9333183603F, - 0.9347724792F, 0.9362055158F, 0.9376175745F, 0.9390087622F, - 0.9403791881F, 0.9417289644F, 0.9430582055F, 0.9443670283F, - 0.9456555521F, 0.9469238986F, 0.9481721917F, 0.9494005577F, - 0.9506091252F, 0.9517980248F, 0.9529673894F, 0.9541173540F, - 0.9552480557F, 0.9563596334F, 0.9574522282F, 0.9585259830F, - 0.9595810428F, 0.9606175542F, 0.9616356656F, 0.9626355274F, - 0.9636172915F, 0.9645811114F, 0.9655271425F, 0.9664555414F, - 0.9673664664F, 0.9682600774F, 0.9691365355F, 0.9699960034F, - 0.9708386448F, 0.9716646250F, 0.9724741103F, 0.9732672685F, - 0.9740442683F, 0.9748052795F, 0.9755504729F, 0.9762800205F, - 0.9769940950F, 0.9776928703F, 0.9783765210F, 0.9790452223F, - 0.9796991504F, 0.9803384823F, 0.9809633954F, 0.9815740679F, - 0.9821706784F, 0.9827534063F, 0.9833224312F, 0.9838779332F, - 0.9844200928F, 0.9849490910F, 0.9854651087F, 0.9859683274F, - 0.9864589286F, 0.9869370940F, 0.9874030054F, 0.9878568447F, - 0.9882987937F, 0.9887290343F, 0.9891477481F, 0.9895551169F, - 0.9899513220F, 0.9903365446F, 0.9907109658F, 0.9910747662F, - 0.9914281260F, 0.9917712252F, 0.9921042433F, 0.9924273593F, - 0.9927407516F, 0.9930445982F, 0.9933390763F, 0.9936243626F, - 0.9939006331F, 0.9941680631F, 0.9944268269F, 0.9946770982F, - 0.9949190498F, 0.9951528537F, 0.9953786808F, 0.9955967011F, - 0.9958070836F, 0.9960099963F, 0.9962056061F, 0.9963940787F, - 0.9965755786F, 0.9967502693F, 0.9969183129F, 0.9970798704F, - 0.9972351013F, 0.9973841640F, 0.9975272151F, 0.9976644103F, - 0.9977959036F, 0.9979218476F, 0.9980423932F, 0.9981576901F, - 0.9982678862F, 0.9983731278F, 0.9984735596F, 0.9985693247F, - 0.9986605645F, 0.9987474186F, 0.9988300248F, 0.9989085193F, - 0.9989830364F, 0.9990537085F, 0.9991206662F, 0.9991840382F, - 0.9992439513F, 0.9993005303F, 0.9993538982F, 0.9994041757F, - 0.9994514817F, 0.9994959330F, 0.9995376444F, 0.9995767286F, - 0.9996132960F, 0.9996474550F, 0.9996793121F, 0.9997089710F, - 0.9997365339F, 0.9997621003F, 0.9997857677F, 0.9998076311F, - 0.9998277836F, 0.9998463156F, 0.9998633155F, 0.9998788692F, - 0.9998930603F, 0.9999059701F, 0.9999176774F, 0.9999282586F, - 0.9999377880F, 0.9999463370F, 0.9999539749F, 0.9999607685F, - 0.9999667820F, 0.9999720773F, 0.9999767136F, 0.9999807479F, - 0.9999842344F, 0.9999872249F, 0.9999897688F, 0.9999919127F, - 0.9999937009F, 0.9999951749F, 0.9999963738F, 0.9999973342F, - 0.9999980900F, 0.9999986724F, 0.9999991103F, 0.9999994297F, - 0.9999996543F, 0.9999998049F, 0.9999999000F, 0.9999999552F, - 0.9999999836F, 0.9999999957F, 0.9999999994F, 1.0000000000F, -}; - -static float vwin2048[1024] = { - 0.0000009241F, 0.0000083165F, 0.0000231014F, 0.0000452785F, - 0.0000748476F, 0.0001118085F, 0.0001561608F, 0.0002079041F, - 0.0002670379F, 0.0003335617F, 0.0004074748F, 0.0004887765F, - 0.0005774661F, 0.0006735427F, 0.0007770054F, 0.0008878533F, - 0.0010060853F, 0.0011317002F, 0.0012646969F, 0.0014050742F, - 0.0015528307F, 0.0017079650F, 0.0018704756F, 0.0020403610F, - 0.0022176196F, 0.0024022497F, 0.0025942495F, 0.0027936173F, - 0.0030003511F, 0.0032144490F, 0.0034359088F, 0.0036647286F, - 0.0039009061F, 0.0041444391F, 0.0043953253F, 0.0046535621F, - 0.0049191472F, 0.0051920781F, 0.0054723520F, 0.0057599664F, - 0.0060549184F, 0.0063572052F, 0.0066668239F, 0.0069837715F, - 0.0073080449F, 0.0076396410F, 0.0079785566F, 0.0083247884F, - 0.0086783330F, 0.0090391871F, 0.0094073470F, 0.0097828092F, - 0.0101655700F, 0.0105556258F, 0.0109529726F, 0.0113576065F, - 0.0117695237F, 0.0121887200F, 0.0126151913F, 0.0130489335F, - 0.0134899422F, 0.0139382130F, 0.0143937415F, 0.0148565233F, - 0.0153265536F, 0.0158038279F, 0.0162883413F, 0.0167800889F, - 0.0172790660F, 0.0177852675F, 0.0182986882F, 0.0188193231F, - 0.0193471668F, 0.0198822141F, 0.0204244594F, 0.0209738974F, - 0.0215305225F, 0.0220943289F, 0.0226653109F, 0.0232434627F, - 0.0238287784F, 0.0244212519F, 0.0250208772F, 0.0256276481F, - 0.0262415582F, 0.0268626014F, 0.0274907711F, 0.0281260608F, - 0.0287684638F, 0.0294179736F, 0.0300745833F, 0.0307382859F, - 0.0314090747F, 0.0320869424F, 0.0327718819F, 0.0334638860F, - 0.0341629474F, 0.0348690586F, 0.0355822122F, 0.0363024004F, - 0.0370296157F, 0.0377638502F, 0.0385050960F, 0.0392533451F, - 0.0400085896F, 0.0407708211F, 0.0415400315F, 0.0423162123F, - 0.0430993552F, 0.0438894515F, 0.0446864926F, 0.0454904698F, - 0.0463013742F, 0.0471191969F, 0.0479439288F, 0.0487755607F, - 0.0496140836F, 0.0504594879F, 0.0513117642F, 0.0521709031F, - 0.0530368949F, 0.0539097297F, 0.0547893979F, 0.0556758894F, - 0.0565691941F, 0.0574693019F, 0.0583762026F, 0.0592898858F, - 0.0602103410F, 0.0611375576F, 0.0620715250F, 0.0630122324F, - 0.0639596688F, 0.0649138234F, 0.0658746848F, 0.0668422421F, - 0.0678164838F, 0.0687973985F, 0.0697849746F, 0.0707792005F, - 0.0717800645F, 0.0727875547F, 0.0738016591F, 0.0748223656F, - 0.0758496620F, 0.0768835359F, 0.0779239751F, 0.0789709668F, - 0.0800244985F, 0.0810845574F, 0.0821511306F, 0.0832242052F, - 0.0843037679F, 0.0853898056F, 0.0864823050F, 0.0875812525F, - 0.0886866347F, 0.0897984378F, 0.0909166480F, 0.0920412513F, - 0.0931722338F, 0.0943095813F, 0.0954532795F, 0.0966033140F, - 0.0977596702F, 0.0989223336F, 0.1000912894F, 0.1012665227F, - 0.1024480185F, 0.1036357616F, 0.1048297369F, 0.1060299290F, - 0.1072363224F, 0.1084489014F, 0.1096676504F, 0.1108925534F, - 0.1121235946F, 0.1133607577F, 0.1146040267F, 0.1158533850F, - 0.1171088163F, 0.1183703040F, 0.1196378312F, 0.1209113812F, - 0.1221909370F, 0.1234764815F, 0.1247679974F, 0.1260654674F, - 0.1273688740F, 0.1286781995F, 0.1299934263F, 0.1313145365F, - 0.1326415121F, 0.1339743349F, 0.1353129866F, 0.1366574490F, - 0.1380077035F, 0.1393637315F, 0.1407255141F, 0.1420930325F, - 0.1434662677F, 0.1448452004F, 0.1462298115F, 0.1476200814F, - 0.1490159906F, 0.1504175195F, 0.1518246482F, 0.1532373569F, - 0.1546556253F, 0.1560794333F, 0.1575087606F, 0.1589435866F, - 0.1603838909F, 0.1618296526F, 0.1632808509F, 0.1647374648F, - 0.1661994731F, 0.1676668546F, 0.1691395880F, 0.1706176516F, - 0.1721010238F, 0.1735896829F, 0.1750836068F, 0.1765827736F, - 0.1780871610F, 0.1795967468F, 0.1811115084F, 0.1826314234F, - 0.1841564689F, 0.1856866221F, 0.1872218600F, 0.1887621595F, - 0.1903074974F, 0.1918578503F, 0.1934131947F, 0.1949735068F, - 0.1965387630F, 0.1981089393F, 0.1996840117F, 0.2012639560F, - 0.2028487479F, 0.2044383630F, 0.2060327766F, 0.2076319642F, - 0.2092359007F, 0.2108445614F, 0.2124579211F, 0.2140759545F, - 0.2156986364F, 0.2173259411F, 0.2189578432F, 0.2205943168F, - 0.2222353361F, 0.2238808751F, 0.2255309076F, 0.2271854073F, - 0.2288443480F, 0.2305077030F, 0.2321754457F, 0.2338475493F, - 0.2355239869F, 0.2372047315F, 0.2388897560F, 0.2405790329F, - 0.2422725350F, 0.2439702347F, 0.2456721043F, 0.2473781159F, - 0.2490882418F, 0.2508024539F, 0.2525207240F, 0.2542430237F, - 0.2559693248F, 0.2576995986F, 0.2594338166F, 0.2611719498F, - 0.2629139695F, 0.2646598466F, 0.2664095520F, 0.2681630564F, - 0.2699203304F, 0.2716813445F, 0.2734460691F, 0.2752144744F, - 0.2769865307F, 0.2787622079F, 0.2805414760F, 0.2823243047F, - 0.2841106637F, 0.2859005227F, 0.2876938509F, 0.2894906179F, - 0.2912907928F, 0.2930943447F, 0.2949012426F, 0.2967114554F, - 0.2985249520F, 0.3003417009F, 0.3021616708F, 0.3039848301F, - 0.3058111471F, 0.3076405901F, 0.3094731273F, 0.3113087266F, - 0.3131473560F, 0.3149889833F, 0.3168335762F, 0.3186811024F, - 0.3205315294F, 0.3223848245F, 0.3242409552F, 0.3260998886F, - 0.3279615918F, 0.3298260319F, 0.3316931758F, 0.3335629903F, - 0.3354354423F, 0.3373104982F, 0.3391881247F, 0.3410682882F, - 0.3429509551F, 0.3448360917F, 0.3467236642F, 0.3486136387F, - 0.3505059811F, 0.3524006575F, 0.3542976336F, 0.3561968753F, - 0.3580983482F, 0.3600020179F, 0.3619078499F, 0.3638158096F, - 0.3657258625F, 0.3676379737F, 0.3695521086F, 0.3714682321F, - 0.3733863094F, 0.3753063055F, 0.3772281852F, 0.3791519134F, - 0.3810774548F, 0.3830047742F, 0.3849338362F, 0.3868646053F, - 0.3887970459F, 0.3907311227F, 0.3926667998F, 0.3946040417F, - 0.3965428125F, 0.3984830765F, 0.4004247978F, 0.4023679403F, - 0.4043124683F, 0.4062583455F, 0.4082055359F, 0.4101540034F, - 0.4121037117F, 0.4140546246F, 0.4160067058F, 0.4179599190F, - 0.4199142277F, 0.4218695956F, 0.4238259861F, 0.4257833627F, - 0.4277416888F, 0.4297009279F, 0.4316610433F, 0.4336219983F, - 0.4355837562F, 0.4375462803F, 0.4395095337F, 0.4414734797F, - 0.4434380815F, 0.4454033021F, 0.4473691046F, 0.4493354521F, - 0.4513023078F, 0.4532696345F, 0.4552373954F, 0.4572055533F, - 0.4591740713F, 0.4611429123F, 0.4631120393F, 0.4650814151F, - 0.4670510028F, 0.4690207650F, 0.4709906649F, 0.4729606651F, - 0.4749307287F, 0.4769008185F, 0.4788708972F, 0.4808409279F, - 0.4828108732F, 0.4847806962F, 0.4867503597F, 0.4887198264F, - 0.4906890593F, 0.4926580213F, 0.4946266753F, 0.4965949840F, - 0.4985629105F, 0.5005304176F, 0.5024974683F, 0.5044640255F, - 0.5064300522F, 0.5083955114F, 0.5103603659F, 0.5123245790F, - 0.5142881136F, 0.5162509328F, 0.5182129997F, 0.5201742774F, - 0.5221347290F, 0.5240943178F, 0.5260530070F, 0.5280107598F, - 0.5299675395F, 0.5319233095F, 0.5338780330F, 0.5358316736F, - 0.5377841946F, 0.5397355596F, 0.5416857320F, 0.5436346755F, - 0.5455823538F, 0.5475287304F, 0.5494737691F, 0.5514174337F, - 0.5533596881F, 0.5553004962F, 0.5572398218F, 0.5591776291F, - 0.5611138821F, 0.5630485449F, 0.5649815818F, 0.5669129570F, - 0.5688426349F, 0.5707705799F, 0.5726967564F, 0.5746211290F, - 0.5765436624F, 0.5784643212F, 0.5803830702F, 0.5822998743F, - 0.5842146984F, 0.5861275076F, 0.5880382669F, 0.5899469416F, - 0.5918534968F, 0.5937578981F, 0.5956601107F, 0.5975601004F, - 0.5994578326F, 0.6013532732F, 0.6032463880F, 0.6051371429F, - 0.6070255039F, 0.6089114372F, 0.6107949090F, 0.6126758856F, - 0.6145543334F, 0.6164302191F, 0.6183035092F, 0.6201741706F, - 0.6220421700F, 0.6239074745F, 0.6257700513F, 0.6276298674F, - 0.6294868903F, 0.6313410873F, 0.6331924262F, 0.6350408745F, - 0.6368864001F, 0.6387289710F, 0.6405685552F, 0.6424051209F, - 0.6442386364F, 0.6460690702F, 0.6478963910F, 0.6497205673F, - 0.6515415682F, 0.6533593625F, 0.6551739194F, 0.6569852082F, - 0.6587931984F, 0.6605978593F, 0.6623991609F, 0.6641970728F, - 0.6659915652F, 0.6677826081F, 0.6695701718F, 0.6713542268F, - 0.6731347437F, 0.6749116932F, 0.6766850461F, 0.6784547736F, - 0.6802208469F, 0.6819832374F, 0.6837419164F, 0.6854968559F, - 0.6872480275F, 0.6889954034F, 0.6907389556F, 0.6924786566F, - 0.6942144788F, 0.6959463950F, 0.6976743780F, 0.6993984008F, - 0.7011184365F, 0.7028344587F, 0.7045464407F, 0.7062543564F, - 0.7079581796F, 0.7096578844F, 0.7113534450F, 0.7130448359F, - 0.7147320316F, 0.7164150070F, 0.7180937371F, 0.7197681970F, - 0.7214383620F, 0.7231042077F, 0.7247657098F, 0.7264228443F, - 0.7280755871F, 0.7297239147F, 0.7313678035F, 0.7330072301F, - 0.7346421715F, 0.7362726046F, 0.7378985069F, 0.7395198556F, - 0.7411366285F, 0.7427488034F, 0.7443563584F, 0.7459592717F, - 0.7475575218F, 0.7491510873F, 0.7507399471F, 0.7523240803F, - 0.7539034661F, 0.7554780839F, 0.7570479136F, 0.7586129349F, - 0.7601731279F, 0.7617284730F, 0.7632789506F, 0.7648245416F, - 0.7663652267F, 0.7679009872F, 0.7694318044F, 0.7709576599F, - 0.7724785354F, 0.7739944130F, 0.7755052749F, 0.7770111035F, - 0.7785118815F, 0.7800075916F, 0.7814982170F, 0.7829837410F, - 0.7844641472F, 0.7859394191F, 0.7874095408F, 0.7888744965F, - 0.7903342706F, 0.7917888476F, 0.7932382124F, 0.7946823501F, - 0.7961212460F, 0.7975548855F, 0.7989832544F, 0.8004063386F, - 0.8018241244F, 0.8032365981F, 0.8046437463F, 0.8060455560F, - 0.8074420141F, 0.8088331080F, 0.8102188253F, 0.8115991536F, - 0.8129740810F, 0.8143435957F, 0.8157076861F, 0.8170663409F, - 0.8184195489F, 0.8197672994F, 0.8211095817F, 0.8224463853F, - 0.8237777001F, 0.8251035161F, 0.8264238235F, 0.8277386129F, - 0.8290478750F, 0.8303516008F, 0.8316497814F, 0.8329424083F, - 0.8342294731F, 0.8355109677F, 0.8367868841F, 0.8380572148F, - 0.8393219523F, 0.8405810893F, 0.8418346190F, 0.8430825345F, - 0.8443248294F, 0.8455614974F, 0.8467925323F, 0.8480179285F, - 0.8492376802F, 0.8504517822F, 0.8516602292F, 0.8528630164F, - 0.8540601391F, 0.8552515928F, 0.8564373733F, 0.8576174766F, - 0.8587918990F, 0.8599606368F, 0.8611236868F, 0.8622810460F, - 0.8634327113F, 0.8645786802F, 0.8657189504F, 0.8668535195F, - 0.8679823857F, 0.8691055472F, 0.8702230025F, 0.8713347503F, - 0.8724407896F, 0.8735411194F, 0.8746357394F, 0.8757246489F, - 0.8768078479F, 0.8778853364F, 0.8789571146F, 0.8800231832F, - 0.8810835427F, 0.8821381942F, 0.8831871387F, 0.8842303777F, - 0.8852679127F, 0.8862997456F, 0.8873258784F, 0.8883463132F, - 0.8893610527F, 0.8903700994F, 0.8913734562F, 0.8923711263F, - 0.8933631129F, 0.8943494196F, 0.8953300500F, 0.8963050083F, - 0.8972742985F, 0.8982379249F, 0.8991958922F, 0.9001482052F, - 0.9010948688F, 0.9020358883F, 0.9029712690F, 0.9039010165F, - 0.9048251367F, 0.9057436357F, 0.9066565195F, 0.9075637946F, - 0.9084654678F, 0.9093615456F, 0.9102520353F, 0.9111369440F, - 0.9120162792F, 0.9128900484F, 0.9137582595F, 0.9146209204F, - 0.9154780394F, 0.9163296248F, 0.9171756853F, 0.9180162296F, - 0.9188512667F, 0.9196808057F, 0.9205048559F, 0.9213234270F, - 0.9221365285F, 0.9229441704F, 0.9237463629F, 0.9245431160F, - 0.9253344404F, 0.9261203465F, 0.9269008453F, 0.9276759477F, - 0.9284456648F, 0.9292100080F, 0.9299689889F, 0.9307226190F, - 0.9314709103F, 0.9322138747F, 0.9329515245F, 0.9336838721F, - 0.9344109300F, 0.9351327108F, 0.9358492275F, 0.9365604931F, - 0.9372665208F, 0.9379673239F, 0.9386629160F, 0.9393533107F, - 0.9400385220F, 0.9407185637F, 0.9413934501F, 0.9420631954F, - 0.9427278141F, 0.9433873208F, 0.9440417304F, 0.9446910576F, - 0.9453353176F, 0.9459745255F, 0.9466086968F, 0.9472378469F, - 0.9478619915F, 0.9484811463F, 0.9490953274F, 0.9497045506F, - 0.9503088323F, 0.9509081888F, 0.9515026365F, 0.9520921921F, - 0.9526768723F, 0.9532566940F, 0.9538316742F, 0.9544018300F, - 0.9549671786F, 0.9555277375F, 0.9560835241F, 0.9566345562F, - 0.9571808513F, 0.9577224275F, 0.9582593027F, 0.9587914949F, - 0.9593190225F, 0.9598419038F, 0.9603601571F, 0.9608738012F, - 0.9613828546F, 0.9618873361F, 0.9623872646F, 0.9628826591F, - 0.9633735388F, 0.9638599227F, 0.9643418303F, 0.9648192808F, - 0.9652922939F, 0.9657608890F, 0.9662250860F, 0.9666849046F, - 0.9671403646F, 0.9675914861F, 0.9680382891F, 0.9684807937F, - 0.9689190202F, 0.9693529890F, 0.9697827203F, 0.9702082347F, - 0.9706295529F, 0.9710466953F, 0.9714596828F, 0.9718685362F, - 0.9722732762F, 0.9726739240F, 0.9730705005F, 0.9734630267F, - 0.9738515239F, 0.9742360134F, 0.9746165163F, 0.9749930540F, - 0.9753656481F, 0.9757343198F, 0.9760990909F, 0.9764599829F, - 0.9768170175F, 0.9771702164F, 0.9775196013F, 0.9778651941F, - 0.9782070167F, 0.9785450909F, 0.9788794388F, 0.9792100824F, - 0.9795370437F, 0.9798603449F, 0.9801800080F, 0.9804960554F, - 0.9808085092F, 0.9811173916F, 0.9814227251F, 0.9817245318F, - 0.9820228343F, 0.9823176549F, 0.9826090160F, 0.9828969402F, - 0.9831814498F, 0.9834625674F, 0.9837403156F, 0.9840147169F, - 0.9842857939F, 0.9845535692F, 0.9848180654F, 0.9850793052F, - 0.9853373113F, 0.9855921062F, 0.9858437127F, 0.9860921535F, - 0.9863374512F, 0.9865796287F, 0.9868187085F, 0.9870547136F, - 0.9872876664F, 0.9875175899F, 0.9877445067F, 0.9879684396F, - 0.9881894112F, 0.9884074444F, 0.9886225619F, 0.9888347863F, - 0.9890441404F, 0.9892506468F, 0.9894543284F, 0.9896552077F, - 0.9898533074F, 0.9900486502F, 0.9902412587F, 0.9904311555F, - 0.9906183633F, 0.9908029045F, 0.9909848019F, 0.9911640779F, - 0.9913407550F, 0.9915148557F, 0.9916864025F, 0.9918554179F, - 0.9920219241F, 0.9921859437F, 0.9923474989F, 0.9925066120F, - 0.9926633054F, 0.9928176012F, 0.9929695218F, 0.9931190891F, - 0.9932663254F, 0.9934112527F, 0.9935538932F, 0.9936942686F, - 0.9938324012F, 0.9939683126F, 0.9941020248F, 0.9942335597F, - 0.9943629388F, 0.9944901841F, 0.9946153170F, 0.9947383593F, - 0.9948593325F, 0.9949782579F, 0.9950951572F, 0.9952100516F, - 0.9953229625F, 0.9954339111F, 0.9955429186F, 0.9956500062F, - 0.9957551948F, 0.9958585056F, 0.9959599593F, 0.9960595769F, - 0.9961573792F, 0.9962533869F, 0.9963476206F, 0.9964401009F, - 0.9965308483F, 0.9966198833F, 0.9967072261F, 0.9967928971F, - 0.9968769164F, 0.9969593041F, 0.9970400804F, 0.9971192651F, - 0.9971968781F, 0.9972729391F, 0.9973474680F, 0.9974204842F, - 0.9974920074F, 0.9975620569F, 0.9976306521F, 0.9976978122F, - 0.9977635565F, 0.9978279039F, 0.9978908736F, 0.9979524842F, - 0.9980127547F, 0.9980717037F, 0.9981293499F, 0.9981857116F, - 0.9982408073F, 0.9982946554F, 0.9983472739F, 0.9983986810F, - 0.9984488947F, 0.9984979328F, 0.9985458132F, 0.9985925534F, - 0.9986381711F, 0.9986826838F, 0.9987261086F, 0.9987684630F, - 0.9988097640F, 0.9988500286F, 0.9988892738F, 0.9989275163F, - 0.9989647727F, 0.9990010597F, 0.9990363938F, 0.9990707911F, - 0.9991042679F, 0.9991368404F, 0.9991685244F, 0.9991993358F, - 0.9992292905F, 0.9992584038F, 0.9992866914F, 0.9993141686F, - 0.9993408506F, 0.9993667526F, 0.9993918895F, 0.9994162761F, - 0.9994399273F, 0.9994628576F, 0.9994850815F, 0.9995066133F, - 0.9995274672F, 0.9995476574F, 0.9995671978F, 0.9995861021F, - 0.9996043841F, 0.9996220573F, 0.9996391352F, 0.9996556310F, - 0.9996715579F, 0.9996869288F, 0.9997017568F, 0.9997160543F, - 0.9997298342F, 0.9997431088F, 0.9997558905F, 0.9997681914F, - 0.9997800236F, 0.9997913990F, 0.9998023292F, 0.9998128261F, - 0.9998229009F, 0.9998325650F, 0.9998418296F, 0.9998507058F, - 0.9998592044F, 0.9998673362F, 0.9998751117F, 0.9998825415F, - 0.9998896358F, 0.9998964047F, 0.9999028584F, 0.9999090066F, - 0.9999148590F, 0.9999204253F, 0.9999257148F, 0.9999307368F, - 0.9999355003F, 0.9999400144F, 0.9999442878F, 0.9999483293F, - 0.9999521472F, 0.9999557499F, 0.9999591457F, 0.9999623426F, - 0.9999653483F, 0.9999681708F, 0.9999708175F, 0.9999732959F, - 0.9999756132F, 0.9999777765F, 0.9999797928F, 0.9999816688F, - 0.9999834113F, 0.9999850266F, 0.9999865211F, 0.9999879009F, - 0.9999891721F, 0.9999903405F, 0.9999914118F, 0.9999923914F, - 0.9999932849F, 0.9999940972F, 0.9999948336F, 0.9999954989F, - 0.9999960978F, 0.9999966349F, 0.9999971146F, 0.9999975411F, - 0.9999979185F, 0.9999982507F, 0.9999985414F, 0.9999987944F, - 0.9999990129F, 0.9999992003F, 0.9999993596F, 0.9999994939F, - 0.9999996059F, 0.9999996981F, 0.9999997732F, 0.9999998333F, - 0.9999998805F, 0.9999999170F, 0.9999999444F, 0.9999999643F, - 0.9999999784F, 0.9999999878F, 0.9999999937F, 0.9999999972F, - 0.9999999990F, 0.9999999997F, 1.0000000000F, 1.0000000000F, -}; - -static float vwin4096[2048] = { - 0.0000002310F, 0.0000020791F, 0.0000057754F, 0.0000113197F, - 0.0000187121F, 0.0000279526F, 0.0000390412F, 0.0000519777F, - 0.0000667623F, 0.0000833949F, 0.0001018753F, 0.0001222036F, - 0.0001443798F, 0.0001684037F, 0.0001942754F, 0.0002219947F, - 0.0002515616F, 0.0002829761F, 0.0003162380F, 0.0003513472F, - 0.0003883038F, 0.0004271076F, 0.0004677584F, 0.0005102563F, - 0.0005546011F, 0.0006007928F, 0.0006488311F, 0.0006987160F, - 0.0007504474F, 0.0008040251F, 0.0008594490F, 0.0009167191F, - 0.0009758351F, 0.0010367969F, 0.0010996044F, 0.0011642574F, - 0.0012307558F, 0.0012990994F, 0.0013692880F, 0.0014413216F, - 0.0015151998F, 0.0015909226F, 0.0016684898F, 0.0017479011F, - 0.0018291565F, 0.0019122556F, 0.0019971983F, 0.0020839845F, - 0.0021726138F, 0.0022630861F, 0.0023554012F, 0.0024495588F, - 0.0025455588F, 0.0026434008F, 0.0027430847F, 0.0028446103F, - 0.0029479772F, 0.0030531853F, 0.0031602342F, 0.0032691238F, - 0.0033798538F, 0.0034924239F, 0.0036068338F, 0.0037230833F, - 0.0038411721F, 0.0039610999F, 0.0040828664F, 0.0042064714F, - 0.0043319145F, 0.0044591954F, 0.0045883139F, 0.0047192696F, - 0.0048520622F, 0.0049866914F, 0.0051231569F, 0.0052614583F, - 0.0054015953F, 0.0055435676F, 0.0056873748F, 0.0058330166F, - 0.0059804926F, 0.0061298026F, 0.0062809460F, 0.0064339226F, - 0.0065887320F, 0.0067453738F, 0.0069038476F, 0.0070641531F, - 0.0072262899F, 0.0073902575F, 0.0075560556F, 0.0077236838F, - 0.0078931417F, 0.0080644288F, 0.0082375447F, 0.0084124891F, - 0.0085892615F, 0.0087678614F, 0.0089482885F, 0.0091305422F, - 0.0093146223F, 0.0095005281F, 0.0096882592F, 0.0098778153F, - 0.0100691958F, 0.0102624002F, 0.0104574281F, 0.0106542791F, - 0.0108529525F, 0.0110534480F, 0.0112557651F, 0.0114599032F, - 0.0116658618F, 0.0118736405F, 0.0120832387F, 0.0122946560F, - 0.0125078917F, 0.0127229454F, 0.0129398166F, 0.0131585046F, - 0.0133790090F, 0.0136013292F, 0.0138254647F, 0.0140514149F, - 0.0142791792F, 0.0145087572F, 0.0147401481F, 0.0149733515F, - 0.0152083667F, 0.0154451932F, 0.0156838304F, 0.0159242777F, - 0.0161665345F, 0.0164106001F, 0.0166564741F, 0.0169041557F, - 0.0171536443F, 0.0174049393F, 0.0176580401F, 0.0179129461F, - 0.0181696565F, 0.0184281708F, 0.0186884883F, 0.0189506084F, - 0.0192145303F, 0.0194802535F, 0.0197477772F, 0.0200171008F, - 0.0202882236F, 0.0205611449F, 0.0208358639F, 0.0211123801F, - 0.0213906927F, 0.0216708011F, 0.0219527043F, 0.0222364019F, - 0.0225218930F, 0.0228091769F, 0.0230982529F, 0.0233891203F, - 0.0236817782F, 0.0239762259F, 0.0242724628F, 0.0245704880F, - 0.0248703007F, 0.0251719002F, 0.0254752858F, 0.0257804565F, - 0.0260874117F, 0.0263961506F, 0.0267066722F, 0.0270189760F, - 0.0273330609F, 0.0276489263F, 0.0279665712F, 0.0282859949F, - 0.0286071966F, 0.0289301753F, 0.0292549303F, 0.0295814607F, - 0.0299097656F, 0.0302398442F, 0.0305716957F, 0.0309053191F, - 0.0312407135F, 0.0315778782F, 0.0319168122F, 0.0322575145F, - 0.0325999844F, 0.0329442209F, 0.0332902231F, 0.0336379900F, - 0.0339875208F, 0.0343388146F, 0.0346918703F, 0.0350466871F, - 0.0354032640F, 0.0357616000F, 0.0361216943F, 0.0364835458F, - 0.0368471535F, 0.0372125166F, 0.0375796339F, 0.0379485046F, - 0.0383191276F, 0.0386915020F, 0.0390656267F, 0.0394415008F, - 0.0398191231F, 0.0401984927F, 0.0405796086F, 0.0409624698F, - 0.0413470751F, 0.0417334235F, 0.0421215141F, 0.0425113457F, - 0.0429029172F, 0.0432962277F, 0.0436912760F, 0.0440880610F, - 0.0444865817F, 0.0448868370F, 0.0452888257F, 0.0456925468F, - 0.0460979992F, 0.0465051816F, 0.0469140931F, 0.0473247325F, - 0.0477370986F, 0.0481511902F, 0.0485670064F, 0.0489845458F, - 0.0494038074F, 0.0498247899F, 0.0502474922F, 0.0506719131F, - 0.0510980514F, 0.0515259060F, 0.0519554756F, 0.0523867590F, - 0.0528197550F, 0.0532544624F, 0.0536908800F, 0.0541290066F, - 0.0545688408F, 0.0550103815F, 0.0554536274F, 0.0558985772F, - 0.0563452297F, 0.0567935837F, 0.0572436377F, 0.0576953907F, - 0.0581488412F, 0.0586039880F, 0.0590608297F, 0.0595193651F, - 0.0599795929F, 0.0604415117F, 0.0609051202F, 0.0613704170F, - 0.0618374009F, 0.0623060704F, 0.0627764243F, 0.0632484611F, - 0.0637221795F, 0.0641975781F, 0.0646746555F, 0.0651534104F, - 0.0656338413F, 0.0661159469F, 0.0665997257F, 0.0670851763F, - 0.0675722973F, 0.0680610873F, 0.0685515448F, 0.0690436684F, - 0.0695374567F, 0.0700329081F, 0.0705300213F, 0.0710287947F, - 0.0715292269F, 0.0720313163F, 0.0725350616F, 0.0730404612F, - 0.0735475136F, 0.0740562172F, 0.0745665707F, 0.0750785723F, - 0.0755922207F, 0.0761075143F, 0.0766244515F, 0.0771430307F, - 0.0776632505F, 0.0781851092F, 0.0787086052F, 0.0792337371F, - 0.0797605032F, 0.0802889018F, 0.0808189315F, 0.0813505905F, - 0.0818838773F, 0.0824187903F, 0.0829553277F, 0.0834934881F, - 0.0840332697F, 0.0845746708F, 0.0851176899F, 0.0856623252F, - 0.0862085751F, 0.0867564379F, 0.0873059119F, 0.0878569954F, - 0.0884096867F, 0.0889639840F, 0.0895198858F, 0.0900773902F, - 0.0906364955F, 0.0911972000F, 0.0917595019F, 0.0923233995F, - 0.0928888909F, 0.0934559745F, 0.0940246485F, 0.0945949110F, - 0.0951667604F, 0.0957401946F, 0.0963152121F, 0.0968918109F, - 0.0974699893F, 0.0980497454F, 0.0986310773F, 0.0992139832F, - 0.0997984614F, 0.1003845098F, 0.1009721267F, 0.1015613101F, - 0.1021520582F, 0.1027443692F, 0.1033382410F, 0.1039336718F, - 0.1045306597F, 0.1051292027F, 0.1057292990F, 0.1063309466F, - 0.1069341435F, 0.1075388878F, 0.1081451776F, 0.1087530108F, - 0.1093623856F, 0.1099732998F, 0.1105857516F, 0.1111997389F, - 0.1118152597F, 0.1124323121F, 0.1130508939F, 0.1136710032F, - 0.1142926379F, 0.1149157960F, 0.1155404755F, 0.1161666742F, - 0.1167943901F, 0.1174236211F, 0.1180543652F, 0.1186866202F, - 0.1193203841F, 0.1199556548F, 0.1205924300F, 0.1212307078F, - 0.1218704860F, 0.1225117624F, 0.1231545349F, 0.1237988013F, - 0.1244445596F, 0.1250918074F, 0.1257405427F, 0.1263907632F, - 0.1270424667F, 0.1276956512F, 0.1283503142F, 0.1290064537F, - 0.1296640674F, 0.1303231530F, 0.1309837084F, 0.1316457312F, - 0.1323092193F, 0.1329741703F, 0.1336405820F, 0.1343084520F, - 0.1349777782F, 0.1356485582F, 0.1363207897F, 0.1369944704F, - 0.1376695979F, 0.1383461700F, 0.1390241842F, 0.1397036384F, - 0.1403845300F, 0.1410668567F, 0.1417506162F, 0.1424358061F, - 0.1431224240F, 0.1438104674F, 0.1444999341F, 0.1451908216F, - 0.1458831274F, 0.1465768492F, 0.1472719844F, 0.1479685308F, - 0.1486664857F, 0.1493658468F, 0.1500666115F, 0.1507687775F, - 0.1514723422F, 0.1521773031F, 0.1528836577F, 0.1535914035F, - 0.1543005380F, 0.1550110587F, 0.1557229631F, 0.1564362485F, - 0.1571509124F, 0.1578669524F, 0.1585843657F, 0.1593031499F, - 0.1600233024F, 0.1607448205F, 0.1614677017F, 0.1621919433F, - 0.1629175428F, 0.1636444975F, 0.1643728047F, 0.1651024619F, - 0.1658334665F, 0.1665658156F, 0.1672995067F, 0.1680345371F, - 0.1687709041F, 0.1695086050F, 0.1702476372F, 0.1709879978F, - 0.1717296843F, 0.1724726938F, 0.1732170237F, 0.1739626711F, - 0.1747096335F, 0.1754579079F, 0.1762074916F, 0.1769583819F, - 0.1777105760F, 0.1784640710F, 0.1792188642F, 0.1799749529F, - 0.1807323340F, 0.1814910049F, 0.1822509628F, 0.1830122046F, - 0.1837747277F, 0.1845385292F, 0.1853036062F, 0.1860699558F, - 0.1868375751F, 0.1876064613F, 0.1883766114F, 0.1891480226F, - 0.1899206919F, 0.1906946164F, 0.1914697932F, 0.1922462194F, - 0.1930238919F, 0.1938028079F, 0.1945829643F, 0.1953643583F, - 0.1961469868F, 0.1969308468F, 0.1977159353F, 0.1985022494F, - 0.1992897859F, 0.2000785420F, 0.2008685145F, 0.2016597005F, - 0.2024520968F, 0.2032457005F, 0.2040405084F, 0.2048365175F, - 0.2056337247F, 0.2064321269F, 0.2072317211F, 0.2080325041F, - 0.2088344727F, 0.2096376240F, 0.2104419547F, 0.2112474618F, - 0.2120541420F, 0.2128619923F, 0.2136710094F, 0.2144811902F, - 0.2152925315F, 0.2161050301F, 0.2169186829F, 0.2177334866F, - 0.2185494381F, 0.2193665340F, 0.2201847712F, 0.2210041465F, - 0.2218246565F, 0.2226462981F, 0.2234690680F, 0.2242929629F, - 0.2251179796F, 0.2259441147F, 0.2267713650F, 0.2275997272F, - 0.2284291979F, 0.2292597739F, 0.2300914518F, 0.2309242283F, - 0.2317581001F, 0.2325930638F, 0.2334291160F, 0.2342662534F, - 0.2351044727F, 0.2359437703F, 0.2367841431F, 0.2376255875F, - 0.2384681001F, 0.2393116776F, 0.2401563165F, 0.2410020134F, - 0.2418487649F, 0.2426965675F, 0.2435454178F, 0.2443953122F, - 0.2452462474F, 0.2460982199F, 0.2469512262F, 0.2478052628F, - 0.2486603262F, 0.2495164129F, 0.2503735194F, 0.2512316421F, - 0.2520907776F, 0.2529509222F, 0.2538120726F, 0.2546742250F, - 0.2555373760F, 0.2564015219F, 0.2572666593F, 0.2581327845F, - 0.2589998939F, 0.2598679840F, 0.2607370510F, 0.2616070916F, - 0.2624781019F, 0.2633500783F, 0.2642230173F, 0.2650969152F, - 0.2659717684F, 0.2668475731F, 0.2677243257F, 0.2686020226F, - 0.2694806601F, 0.2703602344F, 0.2712407419F, 0.2721221789F, - 0.2730045417F, 0.2738878265F, 0.2747720297F, 0.2756571474F, - 0.2765431760F, 0.2774301117F, 0.2783179508F, 0.2792066895F, - 0.2800963240F, 0.2809868505F, 0.2818782654F, 0.2827705647F, - 0.2836637447F, 0.2845578016F, 0.2854527315F, 0.2863485307F, - 0.2872451953F, 0.2881427215F, 0.2890411055F, 0.2899403433F, - 0.2908404312F, 0.2917413654F, 0.2926431418F, 0.2935457567F, - 0.2944492061F, 0.2953534863F, 0.2962585932F, 0.2971645230F, - 0.2980712717F, 0.2989788356F, 0.2998872105F, 0.3007963927F, - 0.3017063781F, 0.3026171629F, 0.3035287430F, 0.3044411145F, - 0.3053542736F, 0.3062682161F, 0.3071829381F, 0.3080984356F, - 0.3090147047F, 0.3099317413F, 0.3108495414F, 0.3117681011F, - 0.3126874163F, 0.3136074830F, 0.3145282972F, 0.3154498548F, - 0.3163721517F, 0.3172951841F, 0.3182189477F, 0.3191434385F, - 0.3200686525F, 0.3209945856F, 0.3219212336F, 0.3228485927F, - 0.3237766585F, 0.3247054271F, 0.3256348943F, 0.3265650560F, - 0.3274959081F, 0.3284274465F, 0.3293596671F, 0.3302925657F, - 0.3312261382F, 0.3321603804F, 0.3330952882F, 0.3340308574F, - 0.3349670838F, 0.3359039634F, 0.3368414919F, 0.3377796651F, - 0.3387184789F, 0.3396579290F, 0.3405980113F, 0.3415387216F, - 0.3424800556F, 0.3434220091F, 0.3443645779F, 0.3453077578F, - 0.3462515446F, 0.3471959340F, 0.3481409217F, 0.3490865036F, - 0.3500326754F, 0.3509794328F, 0.3519267715F, 0.3528746873F, - 0.3538231759F, 0.3547722330F, 0.3557218544F, 0.3566720357F, - 0.3576227727F, 0.3585740610F, 0.3595258964F, 0.3604782745F, - 0.3614311910F, 0.3623846417F, 0.3633386221F, 0.3642931280F, - 0.3652481549F, 0.3662036987F, 0.3671597548F, 0.3681163191F, - 0.3690733870F, 0.3700309544F, 0.3709890167F, 0.3719475696F, - 0.3729066089F, 0.3738661299F, 0.3748261285F, 0.3757866002F, - 0.3767475406F, 0.3777089453F, 0.3786708100F, 0.3796331302F, - 0.3805959014F, 0.3815591194F, 0.3825227796F, 0.3834868777F, - 0.3844514093F, 0.3854163698F, 0.3863817549F, 0.3873475601F, - 0.3883137810F, 0.3892804131F, 0.3902474521F, 0.3912148933F, - 0.3921827325F, 0.3931509650F, 0.3941195865F, 0.3950885925F, - 0.3960579785F, 0.3970277400F, 0.3979978725F, 0.3989683716F, - 0.3999392328F, 0.4009104516F, 0.4018820234F, 0.4028539438F, - 0.4038262084F, 0.4047988125F, 0.4057717516F, 0.4067450214F, - 0.4077186172F, 0.4086925345F, 0.4096667688F, 0.4106413155F, - 0.4116161703F, 0.4125913284F, 0.4135667854F, 0.4145425368F, - 0.4155185780F, 0.4164949044F, 0.4174715116F, 0.4184483949F, - 0.4194255498F, 0.4204029718F, 0.4213806563F, 0.4223585987F, - 0.4233367946F, 0.4243152392F, 0.4252939281F, 0.4262728566F, - 0.4272520202F, 0.4282314144F, 0.4292110345F, 0.4301908760F, - 0.4311709343F, 0.4321512047F, 0.4331316828F, 0.4341123639F, - 0.4350932435F, 0.4360743168F, 0.4370555794F, 0.4380370267F, - 0.4390186540F, 0.4400004567F, 0.4409824303F, 0.4419645701F, - 0.4429468716F, 0.4439293300F, 0.4449119409F, 0.4458946996F, - 0.4468776014F, 0.4478606418F, 0.4488438162F, 0.4498271199F, - 0.4508105483F, 0.4517940967F, 0.4527777607F, 0.4537615355F, - 0.4547454165F, 0.4557293991F, 0.4567134786F, 0.4576976505F, - 0.4586819101F, 0.4596662527F, 0.4606506738F, 0.4616351687F, - 0.4626197328F, 0.4636043614F, 0.4645890499F, 0.4655737936F, - 0.4665585880F, 0.4675434284F, 0.4685283101F, 0.4695132286F, - 0.4704981791F, 0.4714831570F, 0.4724681577F, 0.4734531766F, - 0.4744382089F, 0.4754232501F, 0.4764082956F, 0.4773933406F, - 0.4783783806F, 0.4793634108F, 0.4803484267F, 0.4813334237F, - 0.4823183969F, 0.4833033419F, 0.4842882540F, 0.4852731285F, - 0.4862579608F, 0.4872427462F, 0.4882274802F, 0.4892121580F, - 0.4901967751F, 0.4911813267F, 0.4921658083F, 0.4931502151F, - 0.4941345427F, 0.4951187863F, 0.4961029412F, 0.4970870029F, - 0.4980709667F, 0.4990548280F, 0.5000385822F, 0.5010222245F, - 0.5020057505F, 0.5029891553F, 0.5039724345F, 0.5049555834F, - 0.5059385973F, 0.5069214716F, 0.5079042018F, 0.5088867831F, - 0.5098692110F, 0.5108514808F, 0.5118335879F, 0.5128155277F, - 0.5137972956F, 0.5147788869F, 0.5157602971F, 0.5167415215F, - 0.5177225555F, 0.5187033945F, 0.5196840339F, 0.5206644692F, - 0.5216446956F, 0.5226247086F, 0.5236045035F, 0.5245840759F, - 0.5255634211F, 0.5265425344F, 0.5275214114F, 0.5285000474F, - 0.5294784378F, 0.5304565781F, 0.5314344637F, 0.5324120899F, - 0.5333894522F, 0.5343665461F, 0.5353433670F, 0.5363199102F, - 0.5372961713F, 0.5382721457F, 0.5392478287F, 0.5402232159F, - 0.5411983027F, 0.5421730845F, 0.5431475569F, 0.5441217151F, - 0.5450955548F, 0.5460690714F, 0.5470422602F, 0.5480151169F, - 0.5489876368F, 0.5499598155F, 0.5509316484F, 0.5519031310F, - 0.5528742587F, 0.5538450271F, 0.5548154317F, 0.5557854680F, - 0.5567551314F, 0.5577244174F, 0.5586933216F, 0.5596618395F, - 0.5606299665F, 0.5615976983F, 0.5625650302F, 0.5635319580F, - 0.5644984770F, 0.5654645828F, 0.5664302709F, 0.5673955370F, - 0.5683603765F, 0.5693247850F, 0.5702887580F, 0.5712522912F, - 0.5722153800F, 0.5731780200F, 0.5741402069F, 0.5751019362F, - 0.5760632034F, 0.5770240042F, 0.5779843341F, 0.5789441889F, - 0.5799035639F, 0.5808624549F, 0.5818208575F, 0.5827787673F, - 0.5837361800F, 0.5846930910F, 0.5856494961F, 0.5866053910F, - 0.5875607712F, 0.5885156324F, 0.5894699703F, 0.5904237804F, - 0.5913770586F, 0.5923298004F, 0.5932820016F, 0.5942336578F, - 0.5951847646F, 0.5961353179F, 0.5970853132F, 0.5980347464F, - 0.5989836131F, 0.5999319090F, 0.6008796298F, 0.6018267713F, - 0.6027733292F, 0.6037192993F, 0.6046646773F, 0.6056094589F, - 0.6065536400F, 0.6074972162F, 0.6084401833F, 0.6093825372F, - 0.6103242736F, 0.6112653884F, 0.6122058772F, 0.6131457359F, - 0.6140849604F, 0.6150235464F, 0.6159614897F, 0.6168987862F, - 0.6178354318F, 0.6187714223F, 0.6197067535F, 0.6206414213F, - 0.6215754215F, 0.6225087501F, 0.6234414028F, 0.6243733757F, - 0.6253046646F, 0.6262352654F, 0.6271651739F, 0.6280943862F, - 0.6290228982F, 0.6299507057F, 0.6308778048F, 0.6318041913F, - 0.6327298612F, 0.6336548105F, 0.6345790352F, 0.6355025312F, - 0.6364252945F, 0.6373473211F, 0.6382686070F, 0.6391891483F, - 0.6401089409F, 0.6410279808F, 0.6419462642F, 0.6428637869F, - 0.6437805452F, 0.6446965350F, 0.6456117524F, 0.6465261935F, - 0.6474398544F, 0.6483527311F, 0.6492648197F, 0.6501761165F, - 0.6510866174F, 0.6519963186F, 0.6529052162F, 0.6538133064F, - 0.6547205854F, 0.6556270492F, 0.6565326941F, 0.6574375162F, - 0.6583415117F, 0.6592446769F, 0.6601470079F, 0.6610485009F, - 0.6619491521F, 0.6628489578F, 0.6637479143F, 0.6646460177F, - 0.6655432643F, 0.6664396505F, 0.6673351724F, 0.6682298264F, - 0.6691236087F, 0.6700165157F, 0.6709085436F, 0.6717996889F, - 0.6726899478F, 0.6735793167F, 0.6744677918F, 0.6753553697F, - 0.6762420466F, 0.6771278190F, 0.6780126832F, 0.6788966357F, - 0.6797796728F, 0.6806617909F, 0.6815429866F, 0.6824232562F, - 0.6833025961F, 0.6841810030F, 0.6850584731F, 0.6859350031F, - 0.6868105894F, 0.6876852284F, 0.6885589168F, 0.6894316510F, - 0.6903034275F, 0.6911742430F, 0.6920440939F, 0.6929129769F, - 0.6937808884F, 0.6946478251F, 0.6955137837F, 0.6963787606F, - 0.6972427525F, 0.6981057560F, 0.6989677678F, 0.6998287845F, - 0.7006888028F, 0.7015478194F, 0.7024058309F, 0.7032628340F, - 0.7041188254F, 0.7049738019F, 0.7058277601F, 0.7066806969F, - 0.7075326089F, 0.7083834929F, 0.7092333457F, 0.7100821640F, - 0.7109299447F, 0.7117766846F, 0.7126223804F, 0.7134670291F, - 0.7143106273F, 0.7151531721F, 0.7159946602F, 0.7168350885F, - 0.7176744539F, 0.7185127534F, 0.7193499837F, 0.7201861418F, - 0.7210212247F, 0.7218552293F, 0.7226881526F, 0.7235199914F, - 0.7243507428F, 0.7251804039F, 0.7260089715F, 0.7268364426F, - 0.7276628144F, 0.7284880839F, 0.7293122481F, 0.7301353040F, - 0.7309572487F, 0.7317780794F, 0.7325977930F, 0.7334163868F, - 0.7342338579F, 0.7350502033F, 0.7358654202F, 0.7366795059F, - 0.7374924573F, 0.7383042718F, 0.7391149465F, 0.7399244787F, - 0.7407328655F, 0.7415401041F, 0.7423461920F, 0.7431511261F, - 0.7439549040F, 0.7447575227F, 0.7455589797F, 0.7463592723F, - 0.7471583976F, 0.7479563532F, 0.7487531363F, 0.7495487443F, - 0.7503431745F, 0.7511364244F, 0.7519284913F, 0.7527193726F, - 0.7535090658F, 0.7542975683F, 0.7550848776F, 0.7558709910F, - 0.7566559062F, 0.7574396205F, 0.7582221314F, 0.7590034366F, - 0.7597835334F, 0.7605624194F, 0.7613400923F, 0.7621165495F, - 0.7628917886F, 0.7636658072F, 0.7644386030F, 0.7652101735F, - 0.7659805164F, 0.7667496292F, 0.7675175098F, 0.7682841556F, - 0.7690495645F, 0.7698137341F, 0.7705766622F, 0.7713383463F, - 0.7720987844F, 0.7728579741F, 0.7736159132F, 0.7743725994F, - 0.7751280306F, 0.7758822046F, 0.7766351192F, 0.7773867722F, - 0.7781371614F, 0.7788862848F, 0.7796341401F, 0.7803807253F, - 0.7811260383F, 0.7818700769F, 0.7826128392F, 0.7833543230F, - 0.7840945263F, 0.7848334471F, 0.7855710833F, 0.7863074330F, - 0.7870424941F, 0.7877762647F, 0.7885087428F, 0.7892399264F, - 0.7899698137F, 0.7906984026F, 0.7914256914F, 0.7921516780F, - 0.7928763607F, 0.7935997375F, 0.7943218065F, 0.7950425661F, - 0.7957620142F, 0.7964801492F, 0.7971969692F, 0.7979124724F, - 0.7986266570F, 0.7993395214F, 0.8000510638F, 0.8007612823F, - 0.8014701754F, 0.8021777413F, 0.8028839784F, 0.8035888849F, - 0.8042924592F, 0.8049946997F, 0.8056956048F, 0.8063951727F, - 0.8070934020F, 0.8077902910F, 0.8084858381F, 0.8091800419F, - 0.8098729007F, 0.8105644130F, 0.8112545774F, 0.8119433922F, - 0.8126308561F, 0.8133169676F, 0.8140017251F, 0.8146851272F, - 0.8153671726F, 0.8160478598F, 0.8167271874F, 0.8174051539F, - 0.8180817582F, 0.8187569986F, 0.8194308741F, 0.8201033831F, - 0.8207745244F, 0.8214442966F, 0.8221126986F, 0.8227797290F, - 0.8234453865F, 0.8241096700F, 0.8247725781F, 0.8254341097F, - 0.8260942636F, 0.8267530385F, 0.8274104334F, 0.8280664470F, - 0.8287210782F, 0.8293743259F, 0.8300261889F, 0.8306766662F, - 0.8313257566F, 0.8319734591F, 0.8326197727F, 0.8332646963F, - 0.8339082288F, 0.8345503692F, 0.8351911167F, 0.8358304700F, - 0.8364684284F, 0.8371049907F, 0.8377401562F, 0.8383739238F, - 0.8390062927F, 0.8396372618F, 0.8402668305F, 0.8408949977F, - 0.8415217626F, 0.8421471245F, 0.8427710823F, 0.8433936354F, - 0.8440147830F, 0.8446345242F, 0.8452528582F, 0.8458697844F, - 0.8464853020F, 0.8470994102F, 0.8477121084F, 0.8483233958F, - 0.8489332718F, 0.8495417356F, 0.8501487866F, 0.8507544243F, - 0.8513586479F, 0.8519614568F, 0.8525628505F, 0.8531628283F, - 0.8537613897F, 0.8543585341F, 0.8549542611F, 0.8555485699F, - 0.8561414603F, 0.8567329315F, 0.8573229832F, 0.8579116149F, - 0.8584988262F, 0.8590846165F, 0.8596689855F, 0.8602519327F, - 0.8608334577F, 0.8614135603F, 0.8619922399F, 0.8625694962F, - 0.8631453289F, 0.8637197377F, 0.8642927222F, 0.8648642821F, - 0.8654344172F, 0.8660031272F, 0.8665704118F, 0.8671362708F, - 0.8677007039F, 0.8682637109F, 0.8688252917F, 0.8693854460F, - 0.8699441737F, 0.8705014745F, 0.8710573485F, 0.8716117953F, - 0.8721648150F, 0.8727164073F, 0.8732665723F, 0.8738153098F, - 0.8743626197F, 0.8749085021F, 0.8754529569F, 0.8759959840F, - 0.8765375835F, 0.8770777553F, 0.8776164996F, 0.8781538162F, - 0.8786897054F, 0.8792241670F, 0.8797572013F, 0.8802888082F, - 0.8808189880F, 0.8813477407F, 0.8818750664F, 0.8824009653F, - 0.8829254375F, 0.8834484833F, 0.8839701028F, 0.8844902961F, - 0.8850090636F, 0.8855264054F, 0.8860423218F, 0.8865568131F, - 0.8870698794F, 0.8875815212F, 0.8880917386F, 0.8886005319F, - 0.8891079016F, 0.8896138479F, 0.8901183712F, 0.8906214719F, - 0.8911231503F, 0.8916234067F, 0.8921222417F, 0.8926196556F, - 0.8931156489F, 0.8936102219F, 0.8941033752F, 0.8945951092F, - 0.8950854244F, 0.8955743212F, 0.8960618003F, 0.8965478621F, - 0.8970325071F, 0.8975157359F, 0.8979975490F, 0.8984779471F, - 0.8989569307F, 0.8994345004F, 0.8999106568F, 0.9003854005F, - 0.9008587323F, 0.9013306526F, 0.9018011623F, 0.9022702619F, - 0.9027379521F, 0.9032042337F, 0.9036691074F, 0.9041325739F, - 0.9045946339F, 0.9050552882F, 0.9055145376F, 0.9059723828F, - 0.9064288246F, 0.9068838638F, 0.9073375013F, 0.9077897379F, - 0.9082405743F, 0.9086900115F, 0.9091380503F, 0.9095846917F, - 0.9100299364F, 0.9104737854F, 0.9109162397F, 0.9113573001F, - 0.9117969675F, 0.9122352430F, 0.9126721275F, 0.9131076219F, - 0.9135417273F, 0.9139744447F, 0.9144057750F, 0.9148357194F, - 0.9152642787F, 0.9156914542F, 0.9161172468F, 0.9165416576F, - 0.9169646877F, 0.9173863382F, 0.9178066102F, 0.9182255048F, - 0.9186430232F, 0.9190591665F, 0.9194739359F, 0.9198873324F, - 0.9202993574F, 0.9207100120F, 0.9211192973F, 0.9215272147F, - 0.9219337653F, 0.9223389504F, 0.9227427713F, 0.9231452290F, - 0.9235463251F, 0.9239460607F, 0.9243444371F, 0.9247414557F, - 0.9251371177F, 0.9255314245F, 0.9259243774F, 0.9263159778F, - 0.9267062270F, 0.9270951264F, 0.9274826774F, 0.9278688814F, - 0.9282537398F, 0.9286372540F, 0.9290194254F, 0.9294002555F, - 0.9297797458F, 0.9301578976F, 0.9305347125F, 0.9309101919F, - 0.9312843373F, 0.9316571503F, 0.9320286323F, 0.9323987849F, - 0.9327676097F, 0.9331351080F, 0.9335012816F, 0.9338661320F, - 0.9342296607F, 0.9345918694F, 0.9349527596F, 0.9353123330F, - 0.9356705911F, 0.9360275357F, 0.9363831683F, 0.9367374905F, - 0.9370905042F, 0.9374422108F, 0.9377926122F, 0.9381417099F, - 0.9384895057F, 0.9388360014F, 0.9391811985F, 0.9395250989F, - 0.9398677043F, 0.9402090165F, 0.9405490371F, 0.9408877680F, - 0.9412252110F, 0.9415613678F, 0.9418962402F, 0.9422298301F, - 0.9425621392F, 0.9428931695F, 0.9432229226F, 0.9435514005F, - 0.9438786050F, 0.9442045381F, 0.9445292014F, 0.9448525971F, - 0.9451747268F, 0.9454955926F, 0.9458151963F, 0.9461335399F, - 0.9464506253F, 0.9467664545F, 0.9470810293F, 0.9473943517F, - 0.9477064238F, 0.9480172474F, 0.9483268246F, 0.9486351573F, - 0.9489422475F, 0.9492480973F, 0.9495527087F, 0.9498560837F, - 0.9501582243F, 0.9504591325F, 0.9507588105F, 0.9510572603F, - 0.9513544839F, 0.9516504834F, 0.9519452609F, 0.9522388186F, - 0.9525311584F, 0.9528222826F, 0.9531121932F, 0.9534008923F, - 0.9536883821F, 0.9539746647F, 0.9542597424F, 0.9545436171F, - 0.9548262912F, 0.9551077667F, 0.9553880459F, 0.9556671309F, - 0.9559450239F, 0.9562217272F, 0.9564972429F, 0.9567715733F, - 0.9570447206F, 0.9573166871F, 0.9575874749F, 0.9578570863F, - 0.9581255236F, 0.9583927890F, 0.9586588849F, 0.9589238134F, - 0.9591875769F, 0.9594501777F, 0.9597116180F, 0.9599719003F, - 0.9602310267F, 0.9604889995F, 0.9607458213F, 0.9610014942F, - 0.9612560206F, 0.9615094028F, 0.9617616433F, 0.9620127443F, - 0.9622627083F, 0.9625115376F, 0.9627592345F, 0.9630058016F, - 0.9632512411F, 0.9634955555F, 0.9637387471F, 0.9639808185F, - 0.9642217720F, 0.9644616100F, 0.9647003349F, 0.9649379493F, - 0.9651744556F, 0.9654098561F, 0.9656441534F, 0.9658773499F, - 0.9661094480F, 0.9663404504F, 0.9665703593F, 0.9667991774F, - 0.9670269071F, 0.9672535509F, 0.9674791114F, 0.9677035909F, - 0.9679269921F, 0.9681493174F, 0.9683705694F, 0.9685907506F, - 0.9688098636F, 0.9690279108F, 0.9692448948F, 0.9694608182F, - 0.9696756836F, 0.9698894934F, 0.9701022503F, 0.9703139569F, - 0.9705246156F, 0.9707342291F, 0.9709428000F, 0.9711503309F, - 0.9713568243F, 0.9715622829F, 0.9717667093F, 0.9719701060F, - 0.9721724757F, 0.9723738210F, 0.9725741446F, 0.9727734490F, - 0.9729717369F, 0.9731690109F, 0.9733652737F, 0.9735605279F, - 0.9737547762F, 0.9739480212F, 0.9741402656F, 0.9743315120F, - 0.9745217631F, 0.9747110216F, 0.9748992901F, 0.9750865714F, - 0.9752728681F, 0.9754581829F, 0.9756425184F, 0.9758258775F, - 0.9760082627F, 0.9761896768F, 0.9763701224F, 0.9765496024F, - 0.9767281193F, 0.9769056760F, 0.9770822751F, 0.9772579193F, - 0.9774326114F, 0.9776063542F, 0.9777791502F, 0.9779510023F, - 0.9781219133F, 0.9782918858F, 0.9784609226F, 0.9786290264F, - 0.9787962000F, 0.9789624461F, 0.9791277676F, 0.9792921671F, - 0.9794556474F, 0.9796182113F, 0.9797798615F, 0.9799406009F, - 0.9801004321F, 0.9802593580F, 0.9804173813F, 0.9805745049F, - 0.9807307314F, 0.9808860637F, 0.9810405046F, 0.9811940568F, - 0.9813467232F, 0.9814985065F, 0.9816494095F, 0.9817994351F, - 0.9819485860F, 0.9820968650F, 0.9822442750F, 0.9823908186F, - 0.9825364988F, 0.9826813184F, 0.9828252801F, 0.9829683868F, - 0.9831106413F, 0.9832520463F, 0.9833926048F, 0.9835323195F, - 0.9836711932F, 0.9838092288F, 0.9839464291F, 0.9840827969F, - 0.9842183351F, 0.9843530464F, 0.9844869337F, 0.9846199998F, - 0.9847522475F, 0.9848836798F, 0.9850142993F, 0.9851441090F, - 0.9852731117F, 0.9854013101F, 0.9855287073F, 0.9856553058F, - 0.9857811087F, 0.9859061188F, 0.9860303388F, 0.9861537717F, - 0.9862764202F, 0.9863982872F, 0.9865193756F, 0.9866396882F, - 0.9867592277F, 0.9868779972F, 0.9869959993F, 0.9871132370F, - 0.9872297131F, 0.9873454304F, 0.9874603918F, 0.9875746001F, - 0.9876880581F, 0.9878007688F, 0.9879127348F, 0.9880239592F, - 0.9881344447F, 0.9882441941F, 0.9883532104F, 0.9884614962F, - 0.9885690546F, 0.9886758883F, 0.9887820001F, 0.9888873930F, - 0.9889920697F, 0.9890960331F, 0.9891992859F, 0.9893018312F, - 0.9894036716F, 0.9895048100F, 0.9896052493F, 0.9897049923F, - 0.9898040418F, 0.9899024006F, 0.9900000717F, 0.9900970577F, - 0.9901933616F, 0.9902889862F, 0.9903839343F, 0.9904782087F, - 0.9905718122F, 0.9906647477F, 0.9907570180F, 0.9908486259F, - 0.9909395742F, 0.9910298658F, 0.9911195034F, 0.9912084899F, - 0.9912968281F, 0.9913845208F, 0.9914715708F, 0.9915579810F, - 0.9916437540F, 0.9917288928F, 0.9918134001F, 0.9918972788F, - 0.9919805316F, 0.9920631613F, 0.9921451707F, 0.9922265626F, - 0.9923073399F, 0.9923875052F, 0.9924670615F, 0.9925460114F, - 0.9926243577F, 0.9927021033F, 0.9927792508F, 0.9928558032F, - 0.9929317631F, 0.9930071333F, 0.9930819167F, 0.9931561158F, - 0.9932297337F, 0.9933027728F, 0.9933752362F, 0.9934471264F, - 0.9935184462F, 0.9935891985F, 0.9936593859F, 0.9937290112F, - 0.9937980771F, 0.9938665864F, 0.9939345418F, 0.9940019460F, - 0.9940688018F, 0.9941351118F, 0.9942008789F, 0.9942661057F, - 0.9943307950F, 0.9943949494F, 0.9944585717F, 0.9945216645F, - 0.9945842307F, 0.9946462728F, 0.9947077936F, 0.9947687957F, - 0.9948292820F, 0.9948892550F, 0.9949487174F, 0.9950076719F, - 0.9950661212F, 0.9951240679F, 0.9951815148F, 0.9952384645F, - 0.9952949196F, 0.9953508828F, 0.9954063568F, 0.9954613442F, - 0.9955158476F, 0.9955698697F, 0.9956234132F, 0.9956764806F, - 0.9957290746F, 0.9957811978F, 0.9958328528F, 0.9958840423F, - 0.9959347688F, 0.9959850351F, 0.9960348435F, 0.9960841969F, - 0.9961330977F, 0.9961815486F, 0.9962295521F, 0.9962771108F, - 0.9963242274F, 0.9963709043F, 0.9964171441F, 0.9964629494F, - 0.9965083228F, 0.9965532668F, 0.9965977840F, 0.9966418768F, - 0.9966855479F, 0.9967287998F, 0.9967716350F, 0.9968140559F, - 0.9968560653F, 0.9968976655F, 0.9969388591F, 0.9969796485F, - 0.9970200363F, 0.9970600250F, 0.9970996170F, 0.9971388149F, - 0.9971776211F, 0.9972160380F, 0.9972540683F, 0.9972917142F, - 0.9973289783F, 0.9973658631F, 0.9974023709F, 0.9974385042F, - 0.9974742655F, 0.9975096571F, 0.9975446816F, 0.9975793413F, - 0.9976136386F, 0.9976475759F, 0.9976811557F, 0.9977143803F, - 0.9977472521F, 0.9977797736F, 0.9978119470F, 0.9978437748F, - 0.9978752593F, 0.9979064029F, 0.9979372079F, 0.9979676768F, - 0.9979978117F, 0.9980276151F, 0.9980570893F, 0.9980862367F, - 0.9981150595F, 0.9981435600F, 0.9981717406F, 0.9981996035F, - 0.9982271511F, 0.9982543856F, 0.9982813093F, 0.9983079246F, - 0.9983342336F, 0.9983602386F, 0.9983859418F, 0.9984113456F, - 0.9984364522F, 0.9984612638F, 0.9984857825F, 0.9985100108F, - 0.9985339507F, 0.9985576044F, 0.9985809743F, 0.9986040624F, - 0.9986268710F, 0.9986494022F, 0.9986716583F, 0.9986936413F, - 0.9987153535F, 0.9987367969F, 0.9987579738F, 0.9987788864F, - 0.9987995366F, 0.9988199267F, 0.9988400587F, 0.9988599348F, - 0.9988795572F, 0.9988989278F, 0.9989180487F, 0.9989369222F, - 0.9989555501F, 0.9989739347F, 0.9989920780F, 0.9990099820F, - 0.9990276487F, 0.9990450803F, 0.9990622787F, 0.9990792460F, - 0.9990959841F, 0.9991124952F, 0.9991287812F, 0.9991448440F, - 0.9991606858F, 0.9991763084F, 0.9991917139F, 0.9992069042F, - 0.9992218813F, 0.9992366471F, 0.9992512035F, 0.9992655525F, - 0.9992796961F, 0.9992936361F, 0.9993073744F, 0.9993209131F, - 0.9993342538F, 0.9993473987F, 0.9993603494F, 0.9993731080F, - 0.9993856762F, 0.9993980559F, 0.9994102490F, 0.9994222573F, - 0.9994340827F, 0.9994457269F, 0.9994571918F, 0.9994684793F, - 0.9994795910F, 0.9994905288F, 0.9995012945F, 0.9995118898F, - 0.9995223165F, 0.9995325765F, 0.9995426713F, 0.9995526029F, - 0.9995623728F, 0.9995719829F, 0.9995814349F, 0.9995907304F, - 0.9995998712F, 0.9996088590F, 0.9996176954F, 0.9996263821F, - 0.9996349208F, 0.9996433132F, 0.9996515609F, 0.9996596656F, - 0.9996676288F, 0.9996754522F, 0.9996831375F, 0.9996906862F, - 0.9996981000F, 0.9997053804F, 0.9997125290F, 0.9997195474F, - 0.9997264371F, 0.9997331998F, 0.9997398369F, 0.9997463500F, - 0.9997527406F, 0.9997590103F, 0.9997651606F, 0.9997711930F, - 0.9997771089F, 0.9997829098F, 0.9997885973F, 0.9997941728F, - 0.9997996378F, 0.9998049936F, 0.9998102419F, 0.9998153839F, - 0.9998204211F, 0.9998253550F, 0.9998301868F, 0.9998349182F, - 0.9998395503F, 0.9998440847F, 0.9998485226F, 0.9998528654F, - 0.9998571146F, 0.9998612713F, 0.9998653370F, 0.9998693130F, - 0.9998732007F, 0.9998770012F, 0.9998807159F, 0.9998843461F, - 0.9998878931F, 0.9998913581F, 0.9998947424F, 0.9998980473F, - 0.9999012740F, 0.9999044237F, 0.9999074976F, 0.9999104971F, - 0.9999134231F, 0.9999162771F, 0.9999190601F, 0.9999217733F, - 0.9999244179F, 0.9999269950F, 0.9999295058F, 0.9999319515F, - 0.9999343332F, 0.9999366519F, 0.9999389088F, 0.9999411050F, - 0.9999432416F, 0.9999453196F, 0.9999473402F, 0.9999493044F, - 0.9999512132F, 0.9999530677F, 0.9999548690F, 0.9999566180F, - 0.9999583157F, 0.9999599633F, 0.9999615616F, 0.9999631116F, - 0.9999646144F, 0.9999660709F, 0.9999674820F, 0.9999688487F, - 0.9999701719F, 0.9999714526F, 0.9999726917F, 0.9999738900F, - 0.9999750486F, 0.9999761682F, 0.9999772497F, 0.9999782941F, - 0.9999793021F, 0.9999802747F, 0.9999812126F, 0.9999821167F, - 0.9999829878F, 0.9999838268F, 0.9999846343F, 0.9999854113F, - 0.9999861584F, 0.9999868765F, 0.9999875664F, 0.9999882287F, - 0.9999888642F, 0.9999894736F, 0.9999900577F, 0.9999906172F, - 0.9999911528F, 0.9999916651F, 0.9999921548F, 0.9999926227F, - 0.9999930693F, 0.9999934954F, 0.9999939015F, 0.9999942883F, - 0.9999946564F, 0.9999950064F, 0.9999953390F, 0.9999956547F, - 0.9999959541F, 0.9999962377F, 0.9999965062F, 0.9999967601F, - 0.9999969998F, 0.9999972260F, 0.9999974392F, 0.9999976399F, - 0.9999978285F, 0.9999980056F, 0.9999981716F, 0.9999983271F, - 0.9999984724F, 0.9999986081F, 0.9999987345F, 0.9999988521F, - 0.9999989613F, 0.9999990625F, 0.9999991562F, 0.9999992426F, - 0.9999993223F, 0.9999993954F, 0.9999994625F, 0.9999995239F, - 0.9999995798F, 0.9999996307F, 0.9999996768F, 0.9999997184F, - 0.9999997559F, 0.9999997895F, 0.9999998195F, 0.9999998462F, - 0.9999998698F, 0.9999998906F, 0.9999999088F, 0.9999999246F, - 0.9999999383F, 0.9999999500F, 0.9999999600F, 0.9999999684F, - 0.9999999754F, 0.9999999811F, 0.9999999858F, 0.9999999896F, - 0.9999999925F, 0.9999999948F, 0.9999999965F, 0.9999999978F, - 0.9999999986F, 0.9999999992F, 0.9999999996F, 0.9999999998F, - 0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F, -}; - -static float vwin8192[4096] = { - 0.0000000578F, 0.0000005198F, 0.0000014438F, 0.0000028299F, - 0.0000046780F, 0.0000069882F, 0.0000097604F, 0.0000129945F, - 0.0000166908F, 0.0000208490F, 0.0000254692F, 0.0000305515F, - 0.0000360958F, 0.0000421021F, 0.0000485704F, 0.0000555006F, - 0.0000628929F, 0.0000707472F, 0.0000790635F, 0.0000878417F, - 0.0000970820F, 0.0001067842F, 0.0001169483F, 0.0001275744F, - 0.0001386625F, 0.0001502126F, 0.0001622245F, 0.0001746984F, - 0.0001876343F, 0.0002010320F, 0.0002148917F, 0.0002292132F, - 0.0002439967F, 0.0002592421F, 0.0002749493F, 0.0002911184F, - 0.0003077493F, 0.0003248421F, 0.0003423967F, 0.0003604132F, - 0.0003788915F, 0.0003978316F, 0.0004172335F, 0.0004370971F, - 0.0004574226F, 0.0004782098F, 0.0004994587F, 0.0005211694F, - 0.0005433418F, 0.0005659759F, 0.0005890717F, 0.0006126292F, - 0.0006366484F, 0.0006611292F, 0.0006860716F, 0.0007114757F, - 0.0007373414F, 0.0007636687F, 0.0007904576F, 0.0008177080F, - 0.0008454200F, 0.0008735935F, 0.0009022285F, 0.0009313250F, - 0.0009608830F, 0.0009909025F, 0.0010213834F, 0.0010523257F, - 0.0010837295F, 0.0011155946F, 0.0011479211F, 0.0011807090F, - 0.0012139582F, 0.0012476687F, 0.0012818405F, 0.0013164736F, - 0.0013515679F, 0.0013871235F, 0.0014231402F, 0.0014596182F, - 0.0014965573F, 0.0015339576F, 0.0015718190F, 0.0016101415F, - 0.0016489251F, 0.0016881698F, 0.0017278754F, 0.0017680421F, - 0.0018086698F, 0.0018497584F, 0.0018913080F, 0.0019333185F, - 0.0019757898F, 0.0020187221F, 0.0020621151F, 0.0021059690F, - 0.0021502837F, 0.0021950591F, 0.0022402953F, 0.0022859921F, - 0.0023321497F, 0.0023787679F, 0.0024258467F, 0.0024733861F, - 0.0025213861F, 0.0025698466F, 0.0026187676F, 0.0026681491F, - 0.0027179911F, 0.0027682935F, 0.0028190562F, 0.0028702794F, - 0.0029219628F, 0.0029741066F, 0.0030267107F, 0.0030797749F, - 0.0031332994F, 0.0031872841F, 0.0032417289F, 0.0032966338F, - 0.0033519988F, 0.0034078238F, 0.0034641089F, 0.0035208539F, - 0.0035780589F, 0.0036357237F, 0.0036938485F, 0.0037524331F, - 0.0038114775F, 0.0038709817F, 0.0039309456F, 0.0039913692F, - 0.0040522524F, 0.0041135953F, 0.0041753978F, 0.0042376599F, - 0.0043003814F, 0.0043635624F, 0.0044272029F, 0.0044913028F, - 0.0045558620F, 0.0046208806F, 0.0046863585F, 0.0047522955F, - 0.0048186919F, 0.0048855473F, 0.0049528619F, 0.0050206356F, - 0.0050888684F, 0.0051575601F, 0.0052267108F, 0.0052963204F, - 0.0053663890F, 0.0054369163F, 0.0055079025F, 0.0055793474F, - 0.0056512510F, 0.0057236133F, 0.0057964342F, 0.0058697137F, - 0.0059434517F, 0.0060176482F, 0.0060923032F, 0.0061674166F, - 0.0062429883F, 0.0063190183F, 0.0063955066F, 0.0064724532F, - 0.0065498579F, 0.0066277207F, 0.0067060416F, 0.0067848205F, - 0.0068640575F, 0.0069437523F, 0.0070239051F, 0.0071045157F, - 0.0071855840F, 0.0072671102F, 0.0073490940F, 0.0074315355F, - 0.0075144345F, 0.0075977911F, 0.0076816052F, 0.0077658768F, - 0.0078506057F, 0.0079357920F, 0.0080214355F, 0.0081075363F, - 0.0081940943F, 0.0082811094F, 0.0083685816F, 0.0084565108F, - 0.0085448970F, 0.0086337401F, 0.0087230401F, 0.0088127969F, - 0.0089030104F, 0.0089936807F, 0.0090848076F, 0.0091763911F, - 0.0092684311F, 0.0093609276F, 0.0094538805F, 0.0095472898F, - 0.0096411554F, 0.0097354772F, 0.0098302552F, 0.0099254894F, - 0.0100211796F, 0.0101173259F, 0.0102139281F, 0.0103109863F, - 0.0104085002F, 0.0105064700F, 0.0106048955F, 0.0107037766F, - 0.0108031133F, 0.0109029056F, 0.0110031534F, 0.0111038565F, - 0.0112050151F, 0.0113066289F, 0.0114086980F, 0.0115112222F, - 0.0116142015F, 0.0117176359F, 0.0118215252F, 0.0119258695F, - 0.0120306686F, 0.0121359225F, 0.0122416312F, 0.0123477944F, - 0.0124544123F, 0.0125614847F, 0.0126690116F, 0.0127769928F, - 0.0128854284F, 0.0129943182F, 0.0131036623F, 0.0132134604F, - 0.0133237126F, 0.0134344188F, 0.0135455790F, 0.0136571929F, - 0.0137692607F, 0.0138817821F, 0.0139947572F, 0.0141081859F, - 0.0142220681F, 0.0143364037F, 0.0144511927F, 0.0145664350F, - 0.0146821304F, 0.0147982791F, 0.0149148808F, 0.0150319355F, - 0.0151494431F, 0.0152674036F, 0.0153858168F, 0.0155046828F, - 0.0156240014F, 0.0157437726F, 0.0158639962F, 0.0159846723F, - 0.0161058007F, 0.0162273814F, 0.0163494142F, 0.0164718991F, - 0.0165948361F, 0.0167182250F, 0.0168420658F, 0.0169663584F, - 0.0170911027F, 0.0172162987F, 0.0173419462F, 0.0174680452F, - 0.0175945956F, 0.0177215974F, 0.0178490504F, 0.0179769545F, - 0.0181053098F, 0.0182341160F, 0.0183633732F, 0.0184930812F, - 0.0186232399F, 0.0187538494F, 0.0188849094F, 0.0190164200F, - 0.0191483809F, 0.0192807923F, 0.0194136539F, 0.0195469656F, - 0.0196807275F, 0.0198149394F, 0.0199496012F, 0.0200847128F, - 0.0202202742F, 0.0203562853F, 0.0204927460F, 0.0206296561F, - 0.0207670157F, 0.0209048245F, 0.0210430826F, 0.0211817899F, - 0.0213209462F, 0.0214605515F, 0.0216006057F, 0.0217411086F, - 0.0218820603F, 0.0220234605F, 0.0221653093F, 0.0223076066F, - 0.0224503521F, 0.0225935459F, 0.0227371879F, 0.0228812779F, - 0.0230258160F, 0.0231708018F, 0.0233162355F, 0.0234621169F, - 0.0236084459F, 0.0237552224F, 0.0239024462F, 0.0240501175F, - 0.0241982359F, 0.0243468015F, 0.0244958141F, 0.0246452736F, - 0.0247951800F, 0.0249455331F, 0.0250963329F, 0.0252475792F, - 0.0253992720F, 0.0255514111F, 0.0257039965F, 0.0258570281F, - 0.0260105057F, 0.0261644293F, 0.0263187987F, 0.0264736139F, - 0.0266288747F, 0.0267845811F, 0.0269407330F, 0.0270973302F, - 0.0272543727F, 0.0274118604F, 0.0275697930F, 0.0277281707F, - 0.0278869932F, 0.0280462604F, 0.0282059723F, 0.0283661287F, - 0.0285267295F, 0.0286877747F, 0.0288492641F, 0.0290111976F, - 0.0291735751F, 0.0293363965F, 0.0294996617F, 0.0296633706F, - 0.0298275231F, 0.0299921190F, 0.0301571583F, 0.0303226409F, - 0.0304885667F, 0.0306549354F, 0.0308217472F, 0.0309890017F, - 0.0311566989F, 0.0313248388F, 0.0314934211F, 0.0316624459F, - 0.0318319128F, 0.0320018220F, 0.0321721732F, 0.0323429663F, - 0.0325142013F, 0.0326858779F, 0.0328579962F, 0.0330305559F, - 0.0332035570F, 0.0333769994F, 0.0335508829F, 0.0337252074F, - 0.0338999728F, 0.0340751790F, 0.0342508259F, 0.0344269134F, - 0.0346034412F, 0.0347804094F, 0.0349578178F, 0.0351356663F, - 0.0353139548F, 0.0354926831F, 0.0356718511F, 0.0358514588F, - 0.0360315059F, 0.0362119924F, 0.0363929182F, 0.0365742831F, - 0.0367560870F, 0.0369383297F, 0.0371210113F, 0.0373041315F, - 0.0374876902F, 0.0376716873F, 0.0378561226F, 0.0380409961F, - 0.0382263077F, 0.0384120571F, 0.0385982443F, 0.0387848691F, - 0.0389719315F, 0.0391594313F, 0.0393473683F, 0.0395357425F, - 0.0397245537F, 0.0399138017F, 0.0401034866F, 0.0402936080F, - 0.0404841660F, 0.0406751603F, 0.0408665909F, 0.0410584576F, - 0.0412507603F, 0.0414434988F, 0.0416366731F, 0.0418302829F, - 0.0420243282F, 0.0422188088F, 0.0424137246F, 0.0426090755F, - 0.0428048613F, 0.0430010819F, 0.0431977371F, 0.0433948269F, - 0.0435923511F, 0.0437903095F, 0.0439887020F, 0.0441875285F, - 0.0443867889F, 0.0445864830F, 0.0447866106F, 0.0449871717F, - 0.0451881661F, 0.0453895936F, 0.0455914542F, 0.0457937477F, - 0.0459964738F, 0.0461996326F, 0.0464032239F, 0.0466072475F, - 0.0468117032F, 0.0470165910F, 0.0472219107F, 0.0474276622F, - 0.0476338452F, 0.0478404597F, 0.0480475056F, 0.0482549827F, - 0.0484628907F, 0.0486712297F, 0.0488799994F, 0.0490891998F, - 0.0492988306F, 0.0495088917F, 0.0497193830F, 0.0499303043F, - 0.0501416554F, 0.0503534363F, 0.0505656468F, 0.0507782867F, - 0.0509913559F, 0.0512048542F, 0.0514187815F, 0.0516331376F, - 0.0518479225F, 0.0520631358F, 0.0522787775F, 0.0524948475F, - 0.0527113455F, 0.0529282715F, 0.0531456252F, 0.0533634066F, - 0.0535816154F, 0.0538002515F, 0.0540193148F, 0.0542388051F, - 0.0544587222F, 0.0546790660F, 0.0548998364F, 0.0551210331F, - 0.0553426561F, 0.0555647051F, 0.0557871801F, 0.0560100807F, - 0.0562334070F, 0.0564571587F, 0.0566813357F, 0.0569059378F, - 0.0571309649F, 0.0573564168F, 0.0575822933F, 0.0578085942F, - 0.0580353195F, 0.0582624689F, 0.0584900423F, 0.0587180396F, - 0.0589464605F, 0.0591753049F, 0.0594045726F, 0.0596342635F, - 0.0598643774F, 0.0600949141F, 0.0603258735F, 0.0605572555F, - 0.0607890597F, 0.0610212862F, 0.0612539346F, 0.0614870049F, - 0.0617204968F, 0.0619544103F, 0.0621887451F, 0.0624235010F, - 0.0626586780F, 0.0628942758F, 0.0631302942F, 0.0633667331F, - 0.0636035923F, 0.0638408717F, 0.0640785710F, 0.0643166901F, - 0.0645552288F, 0.0647941870F, 0.0650335645F, 0.0652733610F, - 0.0655135765F, 0.0657542108F, 0.0659952636F, 0.0662367348F, - 0.0664786242F, 0.0667209316F, 0.0669636570F, 0.0672068000F, - 0.0674503605F, 0.0676943384F, 0.0679387334F, 0.0681835454F, - 0.0684287742F, 0.0686744196F, 0.0689204814F, 0.0691669595F, - 0.0694138536F, 0.0696611637F, 0.0699088894F, 0.0701570307F, - 0.0704055873F, 0.0706545590F, 0.0709039458F, 0.0711537473F, - 0.0714039634F, 0.0716545939F, 0.0719056387F, 0.0721570975F, - 0.0724089702F, 0.0726612565F, 0.0729139563F, 0.0731670694F, - 0.0734205956F, 0.0736745347F, 0.0739288866F, 0.0741836510F, - 0.0744388277F, 0.0746944166F, 0.0749504175F, 0.0752068301F, - 0.0754636543F, 0.0757208899F, 0.0759785367F, 0.0762365946F, - 0.0764950632F, 0.0767539424F, 0.0770132320F, 0.0772729319F, - 0.0775330418F, 0.0777935616F, 0.0780544909F, 0.0783158298F, - 0.0785775778F, 0.0788397349F, 0.0791023009F, 0.0793652755F, - 0.0796286585F, 0.0798924498F, 0.0801566492F, 0.0804212564F, - 0.0806862712F, 0.0809516935F, 0.0812175231F, 0.0814837597F, - 0.0817504031F, 0.0820174532F, 0.0822849097F, 0.0825527724F, - 0.0828210412F, 0.0830897158F, 0.0833587960F, 0.0836282816F, - 0.0838981724F, 0.0841684682F, 0.0844391688F, 0.0847102740F, - 0.0849817835F, 0.0852536973F, 0.0855260150F, 0.0857987364F, - 0.0860718614F, 0.0863453897F, 0.0866193211F, 0.0868936554F, - 0.0871683924F, 0.0874435319F, 0.0877190737F, 0.0879950175F, - 0.0882713632F, 0.0885481105F, 0.0888252592F, 0.0891028091F, - 0.0893807600F, 0.0896591117F, 0.0899378639F, 0.0902170165F, - 0.0904965692F, 0.0907765218F, 0.0910568740F, 0.0913376258F, - 0.0916187767F, 0.0919003268F, 0.0921822756F, 0.0924646230F, - 0.0927473687F, 0.0930305126F, 0.0933140545F, 0.0935979940F, - 0.0938823310F, 0.0941670653F, 0.0944521966F, 0.0947377247F, - 0.0950236494F, 0.0953099704F, 0.0955966876F, 0.0958838007F, - 0.0961713094F, 0.0964592136F, 0.0967475131F, 0.0970362075F, - 0.0973252967F, 0.0976147805F, 0.0979046585F, 0.0981949307F, - 0.0984855967F, 0.0987766563F, 0.0990681093F, 0.0993599555F, - 0.0996521945F, 0.0999448263F, 0.1002378506F, 0.1005312671F, - 0.1008250755F, 0.1011192757F, 0.1014138675F, 0.1017088505F, - 0.1020042246F, 0.1022999895F, 0.1025961450F, 0.1028926909F, - 0.1031896268F, 0.1034869526F, 0.1037846680F, 0.1040827729F, - 0.1043812668F, 0.1046801497F, 0.1049794213F, 0.1052790813F, - 0.1055791294F, 0.1058795656F, 0.1061803894F, 0.1064816006F, - 0.1067831991F, 0.1070851846F, 0.1073875568F, 0.1076903155F, - 0.1079934604F, 0.1082969913F, 0.1086009079F, 0.1089052101F, - 0.1092098975F, 0.1095149699F, 0.1098204270F, 0.1101262687F, - 0.1104324946F, 0.1107391045F, 0.1110460982F, 0.1113534754F, - 0.1116612359F, 0.1119693793F, 0.1122779055F, 0.1125868142F, - 0.1128961052F, 0.1132057781F, 0.1135158328F, 0.1138262690F, - 0.1141370863F, 0.1144482847F, 0.1147598638F, 0.1150718233F, - 0.1153841631F, 0.1156968828F, 0.1160099822F, 0.1163234610F, - 0.1166373190F, 0.1169515559F, 0.1172661714F, 0.1175811654F, - 0.1178965374F, 0.1182122874F, 0.1185284149F, 0.1188449198F, - 0.1191618018F, 0.1194790606F, 0.1197966960F, 0.1201147076F, - 0.1204330953F, 0.1207518587F, 0.1210709976F, 0.1213905118F, - 0.1217104009F, 0.1220306647F, 0.1223513029F, 0.1226723153F, - 0.1229937016F, 0.1233154615F, 0.1236375948F, 0.1239601011F, - 0.1242829803F, 0.1246062319F, 0.1249298559F, 0.1252538518F, - 0.1255782195F, 0.1259029586F, 0.1262280689F, 0.1265535501F, - 0.1268794019F, 0.1272056241F, 0.1275322163F, 0.1278591784F, - 0.1281865099F, 0.1285142108F, 0.1288422805F, 0.1291707190F, - 0.1294995259F, 0.1298287009F, 0.1301582437F, 0.1304881542F, - 0.1308184319F, 0.1311490766F, 0.1314800881F, 0.1318114660F, - 0.1321432100F, 0.1324753200F, 0.1328077955F, 0.1331406364F, - 0.1334738422F, 0.1338074129F, 0.1341413479F, 0.1344756472F, - 0.1348103103F, 0.1351453370F, 0.1354807270F, 0.1358164801F, - 0.1361525959F, 0.1364890741F, 0.1368259145F, 0.1371631167F, - 0.1375006805F, 0.1378386056F, 0.1381768917F, 0.1385155384F, - 0.1388545456F, 0.1391939129F, 0.1395336400F, 0.1398737266F, - 0.1402141724F, 0.1405549772F, 0.1408961406F, 0.1412376623F, - 0.1415795421F, 0.1419217797F, 0.1422643746F, 0.1426073268F, - 0.1429506358F, 0.1432943013F, 0.1436383231F, 0.1439827008F, - 0.1443274342F, 0.1446725229F, 0.1450179667F, 0.1453637652F, - 0.1457099181F, 0.1460564252F, 0.1464032861F, 0.1467505006F, - 0.1470980682F, 0.1474459888F, 0.1477942620F, 0.1481428875F, - 0.1484918651F, 0.1488411942F, 0.1491908748F, 0.1495409065F, - 0.1498912889F, 0.1502420218F, 0.1505931048F, 0.1509445376F, - 0.1512963200F, 0.1516484516F, 0.1520009321F, 0.1523537612F, - 0.1527069385F, 0.1530604638F, 0.1534143368F, 0.1537685571F, - 0.1541231244F, 0.1544780384F, 0.1548332987F, 0.1551889052F, - 0.1555448574F, 0.1559011550F, 0.1562577978F, 0.1566147853F, - 0.1569721173F, 0.1573297935F, 0.1576878135F, 0.1580461771F, - 0.1584048838F, 0.1587639334F, 0.1591233255F, 0.1594830599F, - 0.1598431361F, 0.1602035540F, 0.1605643131F, 0.1609254131F, - 0.1612868537F, 0.1616486346F, 0.1620107555F, 0.1623732160F, - 0.1627360158F, 0.1630991545F, 0.1634626319F, 0.1638264476F, - 0.1641906013F, 0.1645550926F, 0.1649199212F, 0.1652850869F, - 0.1656505892F, 0.1660164278F, 0.1663826024F, 0.1667491127F, - 0.1671159583F, 0.1674831388F, 0.1678506541F, 0.1682185036F, - 0.1685866872F, 0.1689552044F, 0.1693240549F, 0.1696932384F, - 0.1700627545F, 0.1704326029F, 0.1708027833F, 0.1711732952F, - 0.1715441385F, 0.1719153127F, 0.1722868175F, 0.1726586526F, - 0.1730308176F, 0.1734033121F, 0.1737761359F, 0.1741492886F, - 0.1745227698F, 0.1748965792F, 0.1752707164F, 0.1756451812F, - 0.1760199731F, 0.1763950918F, 0.1767705370F, 0.1771463083F, - 0.1775224054F, 0.1778988279F, 0.1782755754F, 0.1786526477F, - 0.1790300444F, 0.1794077651F, 0.1797858094F, 0.1801641771F, - 0.1805428677F, 0.1809218810F, 0.1813012165F, 0.1816808739F, - 0.1820608528F, 0.1824411530F, 0.1828217739F, 0.1832027154F, - 0.1835839770F, 0.1839655584F, 0.1843474592F, 0.1847296790F, - 0.1851122175F, 0.1854950744F, 0.1858782492F, 0.1862617417F, - 0.1866455514F, 0.1870296780F, 0.1874141211F, 0.1877988804F, - 0.1881839555F, 0.1885693461F, 0.1889550517F, 0.1893410721F, - 0.1897274068F, 0.1901140555F, 0.1905010178F, 0.1908882933F, - 0.1912758818F, 0.1916637828F, 0.1920519959F, 0.1924405208F, - 0.1928293571F, 0.1932185044F, 0.1936079625F, 0.1939977308F, - 0.1943878091F, 0.1947781969F, 0.1951688939F, 0.1955598998F, - 0.1959512141F, 0.1963428364F, 0.1967347665F, 0.1971270038F, - 0.1975195482F, 0.1979123990F, 0.1983055561F, 0.1986990190F, - 0.1990927873F, 0.1994868607F, 0.1998812388F, 0.2002759212F, - 0.2006709075F, 0.2010661974F, 0.2014617904F, 0.2018576862F, - 0.2022538844F, 0.2026503847F, 0.2030471865F, 0.2034442897F, - 0.2038416937F, 0.2042393982F, 0.2046374028F, 0.2050357071F, - 0.2054343107F, 0.2058332133F, 0.2062324145F, 0.2066319138F, - 0.2070317110F, 0.2074318055F, 0.2078321970F, 0.2082328852F, - 0.2086338696F, 0.2090351498F, 0.2094367255F, 0.2098385962F, - 0.2102407617F, 0.2106432213F, 0.2110459749F, 0.2114490220F, - 0.2118523621F, 0.2122559950F, 0.2126599202F, 0.2130641373F, - 0.2134686459F, 0.2138734456F, 0.2142785361F, 0.2146839168F, - 0.2150895875F, 0.2154955478F, 0.2159017972F, 0.2163083353F, - 0.2167151617F, 0.2171222761F, 0.2175296780F, 0.2179373670F, - 0.2183453428F, 0.2187536049F, 0.2191621529F, 0.2195709864F, - 0.2199801051F, 0.2203895085F, 0.2207991961F, 0.2212091677F, - 0.2216194228F, 0.2220299610F, 0.2224407818F, 0.2228518850F, - 0.2232632699F, 0.2236749364F, 0.2240868839F, 0.2244991121F, - 0.2249116204F, 0.2253244086F, 0.2257374763F, 0.2261508229F, - 0.2265644481F, 0.2269783514F, 0.2273925326F, 0.2278069911F, - 0.2282217265F, 0.2286367384F, 0.2290520265F, 0.2294675902F, - 0.2298834292F, 0.2302995431F, 0.2307159314F, 0.2311325937F, - 0.2315495297F, 0.2319667388F, 0.2323842207F, 0.2328019749F, - 0.2332200011F, 0.2336382988F, 0.2340568675F, 0.2344757070F, - 0.2348948166F, 0.2353141961F, 0.2357338450F, 0.2361537629F, - 0.2365739493F, 0.2369944038F, 0.2374151261F, 0.2378361156F, - 0.2382573720F, 0.2386788948F, 0.2391006836F, 0.2395227380F, - 0.2399450575F, 0.2403676417F, 0.2407904902F, 0.2412136026F, - 0.2416369783F, 0.2420606171F, 0.2424845185F, 0.2429086820F, - 0.2433331072F, 0.2437577936F, 0.2441827409F, 0.2446079486F, - 0.2450334163F, 0.2454591435F, 0.2458851298F, 0.2463113747F, - 0.2467378779F, 0.2471646389F, 0.2475916573F, 0.2480189325F, - 0.2484464643F, 0.2488742521F, 0.2493022955F, 0.2497305940F, - 0.2501591473F, 0.2505879549F, 0.2510170163F, 0.2514463311F, - 0.2518758989F, 0.2523057193F, 0.2527357916F, 0.2531661157F, - 0.2535966909F, 0.2540275169F, 0.2544585931F, 0.2548899193F, - 0.2553214948F, 0.2557533193F, 0.2561853924F, 0.2566177135F, - 0.2570502822F, 0.2574830981F, 0.2579161608F, 0.2583494697F, - 0.2587830245F, 0.2592168246F, 0.2596508697F, 0.2600851593F, - 0.2605196929F, 0.2609544701F, 0.2613894904F, 0.2618247534F, - 0.2622602586F, 0.2626960055F, 0.2631319938F, 0.2635682230F, - 0.2640046925F, 0.2644414021F, 0.2648783511F, 0.2653155391F, - 0.2657529657F, 0.2661906305F, 0.2666285329F, 0.2670666725F, - 0.2675050489F, 0.2679436616F, 0.2683825101F, 0.2688215940F, - 0.2692609127F, 0.2697004660F, 0.2701402532F, 0.2705802739F, - 0.2710205278F, 0.2714610142F, 0.2719017327F, 0.2723426830F, - 0.2727838644F, 0.2732252766F, 0.2736669191F, 0.2741087914F, - 0.2745508930F, 0.2749932235F, 0.2754357824F, 0.2758785693F, - 0.2763215837F, 0.2767648251F, 0.2772082930F, 0.2776519870F, - 0.2780959066F, 0.2785400513F, 0.2789844207F, 0.2794290143F, - 0.2798738316F, 0.2803188722F, 0.2807641355F, 0.2812096211F, - 0.2816553286F, 0.2821012574F, 0.2825474071F, 0.2829937773F, - 0.2834403673F, 0.2838871768F, 0.2843342053F, 0.2847814523F, - 0.2852289174F, 0.2856765999F, 0.2861244996F, 0.2865726159F, - 0.2870209482F, 0.2874694962F, 0.2879182594F, 0.2883672372F, - 0.2888164293F, 0.2892658350F, 0.2897154540F, 0.2901652858F, - 0.2906153298F, 0.2910655856F, 0.2915160527F, 0.2919667306F, - 0.2924176189F, 0.2928687171F, 0.2933200246F, 0.2937715409F, - 0.2942232657F, 0.2946751984F, 0.2951273386F, 0.2955796856F, - 0.2960322391F, 0.2964849986F, 0.2969379636F, 0.2973911335F, - 0.2978445080F, 0.2982980864F, 0.2987518684F, 0.2992058534F, - 0.2996600409F, 0.3001144305F, 0.3005690217F, 0.3010238139F, - 0.3014788067F, 0.3019339995F, 0.3023893920F, 0.3028449835F, - 0.3033007736F, 0.3037567618F, 0.3042129477F, 0.3046693306F, - 0.3051259102F, 0.3055826859F, 0.3060396572F, 0.3064968236F, - 0.3069541847F, 0.3074117399F, 0.3078694887F, 0.3083274307F, - 0.3087855653F, 0.3092438920F, 0.3097024104F, 0.3101611199F, - 0.3106200200F, 0.3110791103F, 0.3115383902F, 0.3119978592F, - 0.3124575169F, 0.3129173627F, 0.3133773961F, 0.3138376166F, - 0.3142980238F, 0.3147586170F, 0.3152193959F, 0.3156803598F, - 0.3161415084F, 0.3166028410F, 0.3170643573F, 0.3175260566F, - 0.3179879384F, 0.3184500023F, 0.3189122478F, 0.3193746743F, - 0.3198372814F, 0.3203000685F, 0.3207630351F, 0.3212261807F, - 0.3216895048F, 0.3221530069F, 0.3226166865F, 0.3230805430F, - 0.3235445760F, 0.3240087849F, 0.3244731693F, 0.3249377285F, - 0.3254024622F, 0.3258673698F, 0.3263324507F, 0.3267977045F, - 0.3272631306F, 0.3277287286F, 0.3281944978F, 0.3286604379F, - 0.3291265482F, 0.3295928284F, 0.3300592777F, 0.3305258958F, - 0.3309926821F, 0.3314596361F, 0.3319267573F, 0.3323940451F, - 0.3328614990F, 0.3333291186F, 0.3337969033F, 0.3342648525F, - 0.3347329658F, 0.3352012427F, 0.3356696825F, 0.3361382849F, - 0.3366070492F, 0.3370759749F, 0.3375450616F, 0.3380143087F, - 0.3384837156F, 0.3389532819F, 0.3394230071F, 0.3398928905F, - 0.3403629317F, 0.3408331302F, 0.3413034854F, 0.3417739967F, - 0.3422446638F, 0.3427154860F, 0.3431864628F, 0.3436575938F, - 0.3441288782F, 0.3446003158F, 0.3450719058F, 0.3455436478F, - 0.3460155412F, 0.3464875856F, 0.3469597804F, 0.3474321250F, - 0.3479046189F, 0.3483772617F, 0.3488500527F, 0.3493229914F, - 0.3497960774F, 0.3502693100F, 0.3507426887F, 0.3512162131F, - 0.3516898825F, 0.3521636965F, 0.3526376545F, 0.3531117559F, - 0.3535860003F, 0.3540603870F, 0.3545349157F, 0.3550095856F, - 0.3554843964F, 0.3559593474F, 0.3564344381F, 0.3569096680F, - 0.3573850366F, 0.3578605432F, 0.3583361875F, 0.3588119687F, - 0.3592878865F, 0.3597639402F, 0.3602401293F, 0.3607164533F, - 0.3611929117F, 0.3616695038F, 0.3621462292F, 0.3626230873F, - 0.3631000776F, 0.3635771995F, 0.3640544525F, 0.3645318360F, - 0.3650093496F, 0.3654869926F, 0.3659647645F, 0.3664426648F, - 0.3669206930F, 0.3673988484F, 0.3678771306F, 0.3683555390F, - 0.3688340731F, 0.3693127322F, 0.3697915160F, 0.3702704237F, - 0.3707494549F, 0.3712286091F, 0.3717078857F, 0.3721872840F, - 0.3726668037F, 0.3731464441F, 0.3736262047F, 0.3741060850F, - 0.3745860843F, 0.3750662023F, 0.3755464382F, 0.3760267915F, - 0.3765072618F, 0.3769878484F, 0.3774685509F, 0.3779493686F, - 0.3784303010F, 0.3789113475F, 0.3793925076F, 0.3798737809F, - 0.3803551666F, 0.3808366642F, 0.3813182733F, 0.3817999932F, - 0.3822818234F, 0.3827637633F, 0.3832458124F, 0.3837279702F, - 0.3842102360F, 0.3846926093F, 0.3851750897F, 0.3856576764F, - 0.3861403690F, 0.3866231670F, 0.3871060696F, 0.3875890765F, - 0.3880721870F, 0.3885554007F, 0.3890387168F, 0.3895221349F, - 0.3900056544F, 0.3904892748F, 0.3909729955F, 0.3914568160F, - 0.3919407356F, 0.3924247539F, 0.3929088702F, 0.3933930841F, - 0.3938773949F, 0.3943618021F, 0.3948463052F, 0.3953309035F, - 0.3958155966F, 0.3963003838F, 0.3967852646F, 0.3972702385F, - 0.3977553048F, 0.3982404631F, 0.3987257127F, 0.3992110531F, - 0.3996964838F, 0.4001820041F, 0.4006676136F, 0.4011533116F, - 0.4016390976F, 0.4021249710F, 0.4026109313F, 0.4030969779F, - 0.4035831102F, 0.4040693277F, 0.4045556299F, 0.4050420160F, - 0.4055284857F, 0.4060150383F, 0.4065016732F, 0.4069883899F, - 0.4074751879F, 0.4079620665F, 0.4084490252F, 0.4089360635F, - 0.4094231807F, 0.4099103763F, 0.4103976498F, 0.4108850005F, - 0.4113724280F, 0.4118599315F, 0.4123475107F, 0.4128351648F, - 0.4133228934F, 0.4138106959F, 0.4142985716F, 0.4147865201F, - 0.4152745408F, 0.4157626330F, 0.4162507963F, 0.4167390301F, - 0.4172273337F, 0.4177157067F, 0.4182041484F, 0.4186926583F, - 0.4191812359F, 0.4196698805F, 0.4201585915F, 0.4206473685F, - 0.4211362108F, 0.4216251179F, 0.4221140892F, 0.4226031241F, - 0.4230922221F, 0.4235813826F, 0.4240706050F, 0.4245598887F, - 0.4250492332F, 0.4255386379F, 0.4260281022F, 0.4265176256F, - 0.4270072075F, 0.4274968473F, 0.4279865445F, 0.4284762984F, - 0.4289661086F, 0.4294559743F, 0.4299458951F, 0.4304358704F, - 0.4309258996F, 0.4314159822F, 0.4319061175F, 0.4323963050F, - 0.4328865441F, 0.4333768342F, 0.4338671749F, 0.4343575654F, - 0.4348480052F, 0.4353384938F, 0.4358290306F, 0.4363196149F, - 0.4368102463F, 0.4373009241F, 0.4377916478F, 0.4382824168F, - 0.4387732305F, 0.4392640884F, 0.4397549899F, 0.4402459343F, - 0.4407369212F, 0.4412279499F, 0.4417190198F, 0.4422101305F, - 0.4427012813F, 0.4431924717F, 0.4436837010F, 0.4441749686F, - 0.4446662742F, 0.4451576169F, 0.4456489963F, 0.4461404118F, - 0.4466318628F, 0.4471233487F, 0.4476148690F, 0.4481064230F, - 0.4485980103F, 0.4490896302F, 0.4495812821F, 0.4500729654F, - 0.4505646797F, 0.4510564243F, 0.4515481986F, 0.4520400021F, - 0.4525318341F, 0.4530236942F, 0.4535155816F, 0.4540074959F, - 0.4544994365F, 0.4549914028F, 0.4554833941F, 0.4559754100F, - 0.4564674499F, 0.4569595131F, 0.4574515991F, 0.4579437074F, - 0.4584358372F, 0.4589279881F, 0.4594201595F, 0.4599123508F, - 0.4604045615F, 0.4608967908F, 0.4613890383F, 0.4618813034F, - 0.4623735855F, 0.4628658841F, 0.4633581984F, 0.4638505281F, - 0.4643428724F, 0.4648352308F, 0.4653276028F, 0.4658199877F, - 0.4663123849F, 0.4668047940F, 0.4672972143F, 0.4677896451F, - 0.4682820861F, 0.4687745365F, 0.4692669958F, 0.4697594634F, - 0.4702519387F, 0.4707444211F, 0.4712369102F, 0.4717294052F, - 0.4722219056F, 0.4727144109F, 0.4732069204F, 0.4736994336F, - 0.4741919498F, 0.4746844686F, 0.4751769893F, 0.4756695113F, - 0.4761620341F, 0.4766545571F, 0.4771470797F, 0.4776396013F, - 0.4781321213F, 0.4786246392F, 0.4791171544F, 0.4796096663F, - 0.4801021744F, 0.4805946779F, 0.4810871765F, 0.4815796694F, - 0.4820721561F, 0.4825646360F, 0.4830571086F, 0.4835495732F, - 0.4840420293F, 0.4845344763F, 0.4850269136F, 0.4855193407F, - 0.4860117569F, 0.4865041617F, 0.4869965545F, 0.4874889347F, - 0.4879813018F, 0.4884736551F, 0.4889659941F, 0.4894583182F, - 0.4899506268F, 0.4904429193F, 0.4909351952F, 0.4914274538F, - 0.4919196947F, 0.4924119172F, 0.4929041207F, 0.4933963046F, - 0.4938884685F, 0.4943806116F, 0.4948727335F, 0.4953648335F, - 0.4958569110F, 0.4963489656F, 0.4968409965F, 0.4973330032F, - 0.4978249852F, 0.4983169419F, 0.4988088726F, 0.4993007768F, - 0.4997926539F, 0.5002845034F, 0.5007763247F, 0.5012681171F, - 0.5017598801F, 0.5022516132F, 0.5027433157F, 0.5032349871F, - 0.5037266268F, 0.5042182341F, 0.5047098086F, 0.5052013497F, - 0.5056928567F, 0.5061843292F, 0.5066757664F, 0.5071671679F, - 0.5076585330F, 0.5081498613F, 0.5086411520F, 0.5091324047F, - 0.5096236187F, 0.5101147934F, 0.5106059284F, 0.5110970230F, - 0.5115880766F, 0.5120790887F, 0.5125700587F, 0.5130609860F, - 0.5135518700F, 0.5140427102F, 0.5145335059F, 0.5150242566F, - 0.5155149618F, 0.5160056208F, 0.5164962331F, 0.5169867980F, - 0.5174773151F, 0.5179677837F, 0.5184582033F, 0.5189485733F, - 0.5194388931F, 0.5199291621F, 0.5204193798F, 0.5209095455F, - 0.5213996588F, 0.5218897190F, 0.5223797256F, 0.5228696779F, - 0.5233595755F, 0.5238494177F, 0.5243392039F, 0.5248289337F, - 0.5253186063F, 0.5258082213F, 0.5262977781F, 0.5267872760F, - 0.5272767146F, 0.5277660932F, 0.5282554112F, 0.5287446682F, - 0.5292338635F, 0.5297229965F, 0.5302120667F, 0.5307010736F, - 0.5311900164F, 0.5316788947F, 0.5321677079F, 0.5326564554F, - 0.5331451366F, 0.5336337511F, 0.5341222981F, 0.5346107771F, - 0.5350991876F, 0.5355875290F, 0.5360758007F, 0.5365640021F, - 0.5370521327F, 0.5375401920F, 0.5380281792F, 0.5385160939F, - 0.5390039355F, 0.5394917034F, 0.5399793971F, 0.5404670159F, - 0.5409545594F, 0.5414420269F, 0.5419294179F, 0.5424167318F, - 0.5429039680F, 0.5433911261F, 0.5438782053F, 0.5443652051F, - 0.5448521250F, 0.5453389644F, 0.5458257228F, 0.5463123995F, - 0.5467989940F, 0.5472855057F, 0.5477719341F, 0.5482582786F, - 0.5487445387F, 0.5492307137F, 0.5497168031F, 0.5502028063F, - 0.5506887228F, 0.5511745520F, 0.5516602934F, 0.5521459463F, - 0.5526315103F, 0.5531169847F, 0.5536023690F, 0.5540876626F, - 0.5545728649F, 0.5550579755F, 0.5555429937F, 0.5560279189F, - 0.5565127507F, 0.5569974884F, 0.5574821315F, 0.5579666794F, - 0.5584511316F, 0.5589354875F, 0.5594197465F, 0.5599039080F, - 0.5603879716F, 0.5608719367F, 0.5613558026F, 0.5618395689F, - 0.5623232350F, 0.5628068002F, 0.5632902642F, 0.5637736262F, - 0.5642568858F, 0.5647400423F, 0.5652230953F, 0.5657060442F, - 0.5661888883F, 0.5666716272F, 0.5671542603F, 0.5676367870F, - 0.5681192069F, 0.5686015192F, 0.5690837235F, 0.5695658192F, - 0.5700478058F, 0.5705296827F, 0.5710114494F, 0.5714931052F, - 0.5719746497F, 0.5724560822F, 0.5729374023F, 0.5734186094F, - 0.5738997029F, 0.5743806823F, 0.5748615470F, 0.5753422965F, - 0.5758229301F, 0.5763034475F, 0.5767838480F, 0.5772641310F, - 0.5777442960F, 0.5782243426F, 0.5787042700F, 0.5791840778F, - 0.5796637654F, 0.5801433322F, 0.5806227778F, 0.5811021016F, - 0.5815813029F, 0.5820603814F, 0.5825393363F, 0.5830181673F, - 0.5834968737F, 0.5839754549F, 0.5844539105F, 0.5849322399F, - 0.5854104425F, 0.5858885179F, 0.5863664653F, 0.5868442844F, - 0.5873219746F, 0.5877995353F, 0.5882769660F, 0.5887542661F, - 0.5892314351F, 0.5897084724F, 0.5901853776F, 0.5906621500F, - 0.5911387892F, 0.5916152945F, 0.5920916655F, 0.5925679016F, - 0.5930440022F, 0.5935199669F, 0.5939957950F, 0.5944714861F, - 0.5949470396F, 0.5954224550F, 0.5958977317F, 0.5963728692F, - 0.5968478669F, 0.5973227244F, 0.5977974411F, 0.5982720163F, - 0.5987464497F, 0.5992207407F, 0.5996948887F, 0.6001688932F, - 0.6006427537F, 0.6011164696F, 0.6015900405F, 0.6020634657F, - 0.6025367447F, 0.6030098770F, 0.6034828621F, 0.6039556995F, - 0.6044283885F, 0.6049009288F, 0.6053733196F, 0.6058455606F, - 0.6063176512F, 0.6067895909F, 0.6072613790F, 0.6077330152F, - 0.6082044989F, 0.6086758295F, 0.6091470065F, 0.6096180294F, - 0.6100888977F, 0.6105596108F, 0.6110301682F, 0.6115005694F, - 0.6119708139F, 0.6124409011F, 0.6129108305F, 0.6133806017F, - 0.6138502139F, 0.6143196669F, 0.6147889599F, 0.6152580926F, - 0.6157270643F, 0.6161958746F, 0.6166645230F, 0.6171330088F, - 0.6176013317F, 0.6180694910F, 0.6185374863F, 0.6190053171F, - 0.6194729827F, 0.6199404828F, 0.6204078167F, 0.6208749841F, - 0.6213419842F, 0.6218088168F, 0.6222754811F, 0.6227419768F, - 0.6232083032F, 0.6236744600F, 0.6241404465F, 0.6246062622F, - 0.6250719067F, 0.6255373795F, 0.6260026799F, 0.6264678076F, - 0.6269327619F, 0.6273975425F, 0.6278621487F, 0.6283265800F, - 0.6287908361F, 0.6292549163F, 0.6297188201F, 0.6301825471F, - 0.6306460966F, 0.6311094683F, 0.6315726617F, 0.6320356761F, - 0.6324985111F, 0.6329611662F, 0.6334236410F, 0.6338859348F, - 0.6343480472F, 0.6348099777F, 0.6352717257F, 0.6357332909F, - 0.6361946726F, 0.6366558704F, 0.6371168837F, 0.6375777122F, - 0.6380383552F, 0.6384988123F, 0.6389590830F, 0.6394191668F, - 0.6398790631F, 0.6403387716F, 0.6407982916F, 0.6412576228F, - 0.6417167645F, 0.6421757163F, 0.6426344778F, 0.6430930483F, - 0.6435514275F, 0.6440096149F, 0.6444676098F, 0.6449254119F, - 0.6453830207F, 0.6458404356F, 0.6462976562F, 0.6467546820F, - 0.6472115125F, 0.6476681472F, 0.6481245856F, 0.6485808273F, - 0.6490368717F, 0.6494927183F, 0.6499483667F, 0.6504038164F, - 0.6508590670F, 0.6513141178F, 0.6517689684F, 0.6522236185F, - 0.6526780673F, 0.6531323146F, 0.6535863598F, 0.6540402024F, - 0.6544938419F, 0.6549472779F, 0.6554005099F, 0.6558535373F, - 0.6563063598F, 0.6567589769F, 0.6572113880F, 0.6576635927F, - 0.6581155906F, 0.6585673810F, 0.6590189637F, 0.6594703380F, - 0.6599215035F, 0.6603724598F, 0.6608232064F, 0.6612737427F, - 0.6617240684F, 0.6621741829F, 0.6626240859F, 0.6630737767F, - 0.6635232550F, 0.6639725202F, 0.6644215720F, 0.6648704098F, - 0.6653190332F, 0.6657674417F, 0.6662156348F, 0.6666636121F, - 0.6671113731F, 0.6675589174F, 0.6680062445F, 0.6684533538F, - 0.6689002450F, 0.6693469177F, 0.6697933712F, 0.6702396052F, - 0.6706856193F, 0.6711314129F, 0.6715769855F, 0.6720223369F, - 0.6724674664F, 0.6729123736F, 0.6733570581F, 0.6738015194F, - 0.6742457570F, 0.6746897706F, 0.6751335596F, 0.6755771236F, - 0.6760204621F, 0.6764635747F, 0.6769064609F, 0.6773491204F, - 0.6777915525F, 0.6782337570F, 0.6786757332F, 0.6791174809F, - 0.6795589995F, 0.6800002886F, 0.6804413477F, 0.6808821765F, - 0.6813227743F, 0.6817631409F, 0.6822032758F, 0.6826431785F, - 0.6830828485F, 0.6835222855F, 0.6839614890F, 0.6844004585F, - 0.6848391936F, 0.6852776939F, 0.6857159589F, 0.6861539883F, - 0.6865917815F, 0.6870293381F, 0.6874666576F, 0.6879037398F, - 0.6883405840F, 0.6887771899F, 0.6892135571F, 0.6896496850F, - 0.6900855733F, 0.6905212216F, 0.6909566294F, 0.6913917963F, - 0.6918267218F, 0.6922614055F, 0.6926958471F, 0.6931300459F, - 0.6935640018F, 0.6939977141F, 0.6944311825F, 0.6948644066F, - 0.6952973859F, 0.6957301200F, 0.6961626085F, 0.6965948510F, - 0.6970268470F, 0.6974585961F, 0.6978900980F, 0.6983213521F, - 0.6987523580F, 0.6991831154F, 0.6996136238F, 0.7000438828F, - 0.7004738921F, 0.7009036510F, 0.7013331594F, 0.7017624166F, - 0.7021914224F, 0.7026201763F, 0.7030486779F, 0.7034769268F, - 0.7039049226F, 0.7043326648F, 0.7047601531F, 0.7051873870F, - 0.7056143662F, 0.7060410902F, 0.7064675586F, 0.7068937711F, - 0.7073197271F, 0.7077454264F, 0.7081708684F, 0.7085960529F, - 0.7090209793F, 0.7094456474F, 0.7098700566F, 0.7102942066F, - 0.7107180970F, 0.7111417274F, 0.7115650974F, 0.7119882066F, - 0.7124110545F, 0.7128336409F, 0.7132559653F, 0.7136780272F, - 0.7140998264F, 0.7145213624F, 0.7149426348F, 0.7153636433F, - 0.7157843874F, 0.7162048668F, 0.7166250810F, 0.7170450296F, - 0.7174647124F, 0.7178841289F, 0.7183032786F, 0.7187221613F, - 0.7191407765F, 0.7195591239F, 0.7199772030F, 0.7203950135F, - 0.7208125550F, 0.7212298271F, 0.7216468294F, 0.7220635616F, - 0.7224800233F, 0.7228962140F, 0.7233121335F, 0.7237277813F, - 0.7241431571F, 0.7245582604F, 0.7249730910F, 0.7253876484F, - 0.7258019322F, 0.7262159422F, 0.7266296778F, 0.7270431388F, - 0.7274563247F, 0.7278692353F, 0.7282818700F, 0.7286942287F, - 0.7291063108F, 0.7295181160F, 0.7299296440F, 0.7303408944F, - 0.7307518669F, 0.7311625609F, 0.7315729763F, 0.7319831126F, - 0.7323929695F, 0.7328025466F, 0.7332118435F, 0.7336208600F, - 0.7340295955F, 0.7344380499F, 0.7348462226F, 0.7352541134F, - 0.7356617220F, 0.7360690478F, 0.7364760907F, 0.7368828502F, - 0.7372893259F, 0.7376955176F, 0.7381014249F, 0.7385070475F, - 0.7389123849F, 0.7393174368F, 0.7397222029F, 0.7401266829F, - 0.7405308763F, 0.7409347829F, 0.7413384023F, 0.7417417341F, - 0.7421447780F, 0.7425475338F, 0.7429500009F, 0.7433521791F, - 0.7437540681F, 0.7441556674F, 0.7445569769F, 0.7449579960F, - 0.7453587245F, 0.7457591621F, 0.7461593084F, 0.7465591631F, - 0.7469587259F, 0.7473579963F, 0.7477569741F, 0.7481556590F, - 0.7485540506F, 0.7489521486F, 0.7493499526F, 0.7497474623F, - 0.7501446775F, 0.7505415977F, 0.7509382227F, 0.7513345521F, - 0.7517305856F, 0.7521263229F, 0.7525217636F, 0.7529169074F, - 0.7533117541F, 0.7537063032F, 0.7541005545F, 0.7544945076F, - 0.7548881623F, 0.7552815182F, 0.7556745749F, 0.7560673323F, - 0.7564597899F, 0.7568519474F, 0.7572438046F, 0.7576353611F, - 0.7580266166F, 0.7584175708F, 0.7588082235F, 0.7591985741F, - 0.7595886226F, 0.7599783685F, 0.7603678116F, 0.7607569515F, - 0.7611457879F, 0.7615343206F, 0.7619225493F, 0.7623104735F, - 0.7626980931F, 0.7630854078F, 0.7634724171F, 0.7638591209F, - 0.7642455188F, 0.7646316106F, 0.7650173959F, 0.7654028744F, - 0.7657880459F, 0.7661729100F, 0.7665574664F, 0.7669417150F, - 0.7673256553F, 0.7677092871F, 0.7680926100F, 0.7684756239F, - 0.7688583284F, 0.7692407232F, 0.7696228080F, 0.7700045826F, - 0.7703860467F, 0.7707671999F, 0.7711480420F, 0.7715285728F, - 0.7719087918F, 0.7722886989F, 0.7726682938F, 0.7730475762F, - 0.7734265458F, 0.7738052023F, 0.7741835454F, 0.7745615750F, - 0.7749392906F, 0.7753166921F, 0.7756937791F, 0.7760705514F, - 0.7764470087F, 0.7768231508F, 0.7771989773F, 0.7775744880F, - 0.7779496827F, 0.7783245610F, 0.7786991227F, 0.7790733676F, - 0.7794472953F, 0.7798209056F, 0.7801941982F, 0.7805671729F, - 0.7809398294F, 0.7813121675F, 0.7816841869F, 0.7820558873F, - 0.7824272684F, 0.7827983301F, 0.7831690720F, 0.7835394940F, - 0.7839095957F, 0.7842793768F, 0.7846488373F, 0.7850179767F, - 0.7853867948F, 0.7857552914F, 0.7861234663F, 0.7864913191F, - 0.7868588497F, 0.7872260578F, 0.7875929431F, 0.7879595055F, - 0.7883257445F, 0.7886916601F, 0.7890572520F, 0.7894225198F, - 0.7897874635F, 0.7901520827F, 0.7905163772F, 0.7908803468F, - 0.7912439912F, 0.7916073102F, 0.7919703035F, 0.7923329710F, - 0.7926953124F, 0.7930573274F, 0.7934190158F, 0.7937803774F, - 0.7941414120F, 0.7945021193F, 0.7948624991F, 0.7952225511F, - 0.7955822752F, 0.7959416711F, 0.7963007387F, 0.7966594775F, - 0.7970178875F, 0.7973759685F, 0.7977337201F, 0.7980911422F, - 0.7984482346F, 0.7988049970F, 0.7991614292F, 0.7995175310F, - 0.7998733022F, 0.8002287426F, 0.8005838519F, 0.8009386299F, - 0.8012930765F, 0.8016471914F, 0.8020009744F, 0.8023544253F, - 0.8027075438F, 0.8030603298F, 0.8034127831F, 0.8037649035F, - 0.8041166906F, 0.8044681445F, 0.8048192647F, 0.8051700512F, - 0.8055205038F, 0.8058706222F, 0.8062204062F, 0.8065698556F, - 0.8069189702F, 0.8072677499F, 0.8076161944F, 0.8079643036F, - 0.8083120772F, 0.8086595151F, 0.8090066170F, 0.8093533827F, - 0.8096998122F, 0.8100459051F, 0.8103916613F, 0.8107370806F, - 0.8110821628F, 0.8114269077F, 0.8117713151F, 0.8121153849F, - 0.8124591169F, 0.8128025108F, 0.8131455666F, 0.8134882839F, - 0.8138306627F, 0.8141727027F, 0.8145144038F, 0.8148557658F, - 0.8151967886F, 0.8155374718F, 0.8158778154F, 0.8162178192F, - 0.8165574830F, 0.8168968067F, 0.8172357900F, 0.8175744328F, - 0.8179127349F, 0.8182506962F, 0.8185883164F, 0.8189255955F, - 0.8192625332F, 0.8195991295F, 0.8199353840F, 0.8202712967F, - 0.8206068673F, 0.8209420958F, 0.8212769820F, 0.8216115256F, - 0.8219457266F, 0.8222795848F, 0.8226131000F, 0.8229462721F, - 0.8232791009F, 0.8236115863F, 0.8239437280F, 0.8242755260F, - 0.8246069801F, 0.8249380901F, 0.8252688559F, 0.8255992774F, - 0.8259293544F, 0.8262590867F, 0.8265884741F, 0.8269175167F, - 0.8272462141F, 0.8275745663F, 0.8279025732F, 0.8282302344F, - 0.8285575501F, 0.8288845199F, 0.8292111437F, 0.8295374215F, - 0.8298633530F, 0.8301889382F, 0.8305141768F, 0.8308390688F, - 0.8311636141F, 0.8314878124F, 0.8318116637F, 0.8321351678F, - 0.8324583246F, 0.8327811340F, 0.8331035957F, 0.8334257098F, - 0.8337474761F, 0.8340688944F, 0.8343899647F, 0.8347106867F, - 0.8350310605F, 0.8353510857F, 0.8356707624F, 0.8359900904F, - 0.8363090696F, 0.8366276999F, 0.8369459811F, 0.8372639131F, - 0.8375814958F, 0.8378987292F, 0.8382156130F, 0.8385321472F, - 0.8388483316F, 0.8391641662F, 0.8394796508F, 0.8397947853F, - 0.8401095697F, 0.8404240037F, 0.8407380873F, 0.8410518204F, - 0.8413652029F, 0.8416782347F, 0.8419909156F, 0.8423032456F, - 0.8426152245F, 0.8429268523F, 0.8432381289F, 0.8435490541F, - 0.8438596279F, 0.8441698502F, 0.8444797208F, 0.8447892396F, - 0.8450984067F, 0.8454072218F, 0.8457156849F, 0.8460237959F, - 0.8463315547F, 0.8466389612F, 0.8469460154F, 0.8472527170F, - 0.8475590661F, 0.8478650625F, 0.8481707063F, 0.8484759971F, - 0.8487809351F, 0.8490855201F, 0.8493897521F, 0.8496936308F, - 0.8499971564F, 0.8503003286F, 0.8506031474F, 0.8509056128F, - 0.8512077246F, 0.8515094828F, 0.8518108872F, 0.8521119379F, - 0.8524126348F, 0.8527129777F, 0.8530129666F, 0.8533126015F, - 0.8536118822F, 0.8539108087F, 0.8542093809F, 0.8545075988F, - 0.8548054623F, 0.8551029712F, 0.8554001257F, 0.8556969255F, - 0.8559933707F, 0.8562894611F, 0.8565851968F, 0.8568805775F, - 0.8571756034F, 0.8574702743F, 0.8577645902F, 0.8580585509F, - 0.8583521566F, 0.8586454070F, 0.8589383021F, 0.8592308420F, - 0.8595230265F, 0.8598148556F, 0.8601063292F, 0.8603974473F, - 0.8606882098F, 0.8609786167F, 0.8612686680F, 0.8615583636F, - 0.8618477034F, 0.8621366874F, 0.8624253156F, 0.8627135878F, - 0.8630015042F, 0.8632890646F, 0.8635762690F, 0.8638631173F, - 0.8641496096F, 0.8644357457F, 0.8647215257F, 0.8650069495F, - 0.8652920171F, 0.8655767283F, 0.8658610833F, 0.8661450820F, - 0.8664287243F, 0.8667120102F, 0.8669949397F, 0.8672775127F, - 0.8675597293F, 0.8678415894F, 0.8681230929F, 0.8684042398F, - 0.8686850302F, 0.8689654640F, 0.8692455412F, 0.8695252617F, - 0.8698046255F, 0.8700836327F, 0.8703622831F, 0.8706405768F, - 0.8709185138F, 0.8711960940F, 0.8714733174F, 0.8717501840F, - 0.8720266939F, 0.8723028469F, 0.8725786430F, 0.8728540824F, - 0.8731291648F, 0.8734038905F, 0.8736782592F, 0.8739522711F, - 0.8742259261F, 0.8744992242F, 0.8747721653F, 0.8750447496F, - 0.8753169770F, 0.8755888475F, 0.8758603611F, 0.8761315177F, - 0.8764023175F, 0.8766727603F, 0.8769428462F, 0.8772125752F, - 0.8774819474F, 0.8777509626F, 0.8780196209F, 0.8782879224F, - 0.8785558669F, 0.8788234546F, 0.8790906854F, 0.8793575594F, - 0.8796240765F, 0.8798902368F, 0.8801560403F, 0.8804214870F, - 0.8806865768F, 0.8809513099F, 0.8812156863F, 0.8814797059F, - 0.8817433687F, 0.8820066749F, 0.8822696243F, 0.8825322171F, - 0.8827944532F, 0.8830563327F, 0.8833178556F, 0.8835790219F, - 0.8838398316F, 0.8841002848F, 0.8843603815F, 0.8846201217F, - 0.8848795054F, 0.8851385327F, 0.8853972036F, 0.8856555182F, - 0.8859134764F, 0.8861710783F, 0.8864283239F, 0.8866852133F, - 0.8869417464F, 0.8871979234F, 0.8874537443F, 0.8877092090F, - 0.8879643177F, 0.8882190704F, 0.8884734671F, 0.8887275078F, - 0.8889811927F, 0.8892345216F, 0.8894874948F, 0.8897401122F, - 0.8899923738F, 0.8902442798F, 0.8904958301F, 0.8907470248F, - 0.8909978640F, 0.8912483477F, 0.8914984759F, 0.8917482487F, - 0.8919976662F, 0.8922467284F, 0.8924954353F, 0.8927437871F, - 0.8929917837F, 0.8932394252F, 0.8934867118F, 0.8937336433F, - 0.8939802199F, 0.8942264417F, 0.8944723087F, 0.8947178210F, - 0.8949629785F, 0.8952077815F, 0.8954522299F, 0.8956963239F, - 0.8959400634F, 0.8961834486F, 0.8964264795F, 0.8966691561F, - 0.8969114786F, 0.8971534470F, 0.8973950614F, 0.8976363219F, - 0.8978772284F, 0.8981177812F, 0.8983579802F, 0.8985978256F, - 0.8988373174F, 0.8990764556F, 0.8993152405F, 0.8995536720F, - 0.8997917502F, 0.9000294751F, 0.9002668470F, 0.9005038658F, - 0.9007405317F, 0.9009768446F, 0.9012128048F, 0.9014484123F, - 0.9016836671F, 0.9019185693F, 0.9021531191F, 0.9023873165F, - 0.9026211616F, 0.9028546546F, 0.9030877954F, 0.9033205841F, - 0.9035530210F, 0.9037851059F, 0.9040168392F, 0.9042482207F, - 0.9044792507F, 0.9047099293F, 0.9049402564F, 0.9051702323F, - 0.9053998569F, 0.9056291305F, 0.9058580531F, 0.9060866248F, - 0.9063148457F, 0.9065427159F, 0.9067702355F, 0.9069974046F, - 0.9072242233F, 0.9074506917F, 0.9076768100F, 0.9079025782F, - 0.9081279964F, 0.9083530647F, 0.9085777833F, 0.9088021523F, - 0.9090261717F, 0.9092498417F, 0.9094731623F, 0.9096961338F, - 0.9099187561F, 0.9101410295F, 0.9103629540F, 0.9105845297F, - 0.9108057568F, 0.9110266354F, 0.9112471656F, 0.9114673475F, - 0.9116871812F, 0.9119066668F, 0.9121258046F, 0.9123445945F, - 0.9125630367F, 0.9127811314F, 0.9129988786F, 0.9132162785F, - 0.9134333312F, 0.9136500368F, 0.9138663954F, 0.9140824073F, - 0.9142980724F, 0.9145133910F, 0.9147283632F, 0.9149429890F, - 0.9151572687F, 0.9153712023F, 0.9155847900F, 0.9157980319F, - 0.9160109282F, 0.9162234790F, 0.9164356844F, 0.9166475445F, - 0.9168590595F, 0.9170702296F, 0.9172810548F, 0.9174915354F, - 0.9177016714F, 0.9179114629F, 0.9181209102F, 0.9183300134F, - 0.9185387726F, 0.9187471879F, 0.9189552595F, 0.9191629876F, - 0.9193703723F, 0.9195774136F, 0.9197841119F, 0.9199904672F, - 0.9201964797F, 0.9204021495F, 0.9206074767F, 0.9208124616F, - 0.9210171043F, 0.9212214049F, 0.9214253636F, 0.9216289805F, - 0.9218322558F, 0.9220351896F, 0.9222377821F, 0.9224400335F, - 0.9226419439F, 0.9228435134F, 0.9230447423F, 0.9232456307F, - 0.9234461787F, 0.9236463865F, 0.9238462543F, 0.9240457822F, - 0.9242449704F, 0.9244438190F, 0.9246423282F, 0.9248404983F, - 0.9250383293F, 0.9252358214F, 0.9254329747F, 0.9256297896F, - 0.9258262660F, 0.9260224042F, 0.9262182044F, 0.9264136667F, - 0.9266087913F, 0.9268035783F, 0.9269980280F, 0.9271921405F, - 0.9273859160F, 0.9275793546F, 0.9277724566F, 0.9279652221F, - 0.9281576513F, 0.9283497443F, 0.9285415014F, 0.9287329227F, - 0.9289240084F, 0.9291147586F, 0.9293051737F, 0.9294952536F, - 0.9296849987F, 0.9298744091F, 0.9300634850F, 0.9302522266F, - 0.9304406340F, 0.9306287074F, 0.9308164471F, 0.9310038532F, - 0.9311909259F, 0.9313776654F, 0.9315640719F, 0.9317501455F, - 0.9319358865F, 0.9321212951F, 0.9323063713F, 0.9324911155F, - 0.9326755279F, 0.9328596085F, 0.9330433577F, 0.9332267756F, - 0.9334098623F, 0.9335926182F, 0.9337750434F, 0.9339571380F, - 0.9341389023F, 0.9343203366F, 0.9345014409F, 0.9346822155F, - 0.9348626606F, 0.9350427763F, 0.9352225630F, 0.9354020207F, - 0.9355811498F, 0.9357599503F, 0.9359384226F, 0.9361165667F, - 0.9362943830F, 0.9364718716F, 0.9366490327F, 0.9368258666F, - 0.9370023733F, 0.9371785533F, 0.9373544066F, 0.9375299335F, - 0.9377051341F, 0.9378800087F, 0.9380545576F, 0.9382287809F, - 0.9384026787F, 0.9385762515F, 0.9387494993F, 0.9389224223F, - 0.9390950209F, 0.9392672951F, 0.9394392453F, 0.9396108716F, - 0.9397821743F, 0.9399531536F, 0.9401238096F, 0.9402941427F, - 0.9404641530F, 0.9406338407F, 0.9408032061F, 0.9409722495F, - 0.9411409709F, 0.9413093707F, 0.9414774491F, 0.9416452062F, - 0.9418126424F, 0.9419797579F, 0.9421465528F, 0.9423130274F, - 0.9424791819F, 0.9426450166F, 0.9428105317F, 0.9429757274F, - 0.9431406039F, 0.9433051616F, 0.9434694005F, 0.9436333209F, - 0.9437969232F, 0.9439602074F, 0.9441231739F, 0.9442858229F, - 0.9444481545F, 0.9446101691F, 0.9447718669F, 0.9449332481F, - 0.9450943129F, 0.9452550617F, 0.9454154945F, 0.9455756118F, - 0.9457354136F, 0.9458949003F, 0.9460540721F, 0.9462129292F, - 0.9463714719F, 0.9465297003F, 0.9466876149F, 0.9468452157F, - 0.9470025031F, 0.9471594772F, 0.9473161384F, 0.9474724869F, - 0.9476285229F, 0.9477842466F, 0.9479396584F, 0.9480947585F, - 0.9482495470F, 0.9484040243F, 0.9485581906F, 0.9487120462F, - 0.9488655913F, 0.9490188262F, 0.9491717511F, 0.9493243662F, - 0.9494766718F, 0.9496286683F, 0.9497803557F, 0.9499317345F, - 0.9500828047F, 0.9502335668F, 0.9503840209F, 0.9505341673F, - 0.9506840062F, 0.9508335380F, 0.9509827629F, 0.9511316810F, - 0.9512802928F, 0.9514285984F, 0.9515765982F, 0.9517242923F, - 0.9518716810F, 0.9520187646F, 0.9521655434F, 0.9523120176F, - 0.9524581875F, 0.9526040534F, 0.9527496154F, 0.9528948739F, - 0.9530398292F, 0.9531844814F, 0.9533288310F, 0.9534728780F, - 0.9536166229F, 0.9537600659F, 0.9539032071F, 0.9540460470F, - 0.9541885858F, 0.9543308237F, 0.9544727611F, 0.9546143981F, - 0.9547557351F, 0.9548967723F, 0.9550375100F, 0.9551779485F, - 0.9553180881F, 0.9554579290F, 0.9555974714F, 0.9557367158F, - 0.9558756623F, 0.9560143112F, 0.9561526628F, 0.9562907174F, - 0.9564284752F, 0.9565659366F, 0.9567031017F, 0.9568399710F, - 0.9569765446F, 0.9571128229F, 0.9572488061F, 0.9573844944F, - 0.9575198883F, 0.9576549879F, 0.9577897936F, 0.9579243056F, - 0.9580585242F, 0.9581924497F, 0.9583260824F, 0.9584594226F, - 0.9585924705F, 0.9587252264F, 0.9588576906F, 0.9589898634F, - 0.9591217452F, 0.9592533360F, 0.9593846364F, 0.9595156465F, - 0.9596463666F, 0.9597767971F, 0.9599069382F, 0.9600367901F, - 0.9601663533F, 0.9602956279F, 0.9604246143F, 0.9605533128F, - 0.9606817236F, 0.9608098471F, 0.9609376835F, 0.9610652332F, - 0.9611924963F, 0.9613194733F, 0.9614461644F, 0.9615725699F, - 0.9616986901F, 0.9618245253F, 0.9619500757F, 0.9620753418F, - 0.9622003238F, 0.9623250219F, 0.9624494365F, 0.9625735679F, - 0.9626974163F, 0.9628209821F, 0.9629442656F, 0.9630672671F, - 0.9631899868F, 0.9633124251F, 0.9634345822F, 0.9635564585F, - 0.9636780543F, 0.9637993699F, 0.9639204056F, 0.9640411616F, - 0.9641616383F, 0.9642818359F, 0.9644017549F, 0.9645213955F, - 0.9646407579F, 0.9647598426F, 0.9648786497F, 0.9649971797F, - 0.9651154328F, 0.9652334092F, 0.9653511095F, 0.9654685337F, - 0.9655856823F, 0.9657025556F, 0.9658191538F, 0.9659354773F, - 0.9660515263F, 0.9661673013F, 0.9662828024F, 0.9663980300F, - 0.9665129845F, 0.9666276660F, 0.9667420750F, 0.9668562118F, - 0.9669700766F, 0.9670836698F, 0.9671969917F, 0.9673100425F, - 0.9674228227F, 0.9675353325F, 0.9676475722F, 0.9677595422F, - 0.9678712428F, 0.9679826742F, 0.9680938368F, 0.9682047309F, - 0.9683153569F, 0.9684257150F, 0.9685358056F, 0.9686456289F, - 0.9687551853F, 0.9688644752F, 0.9689734987F, 0.9690822564F, - 0.9691907483F, 0.9692989750F, 0.9694069367F, 0.9695146337F, - 0.9696220663F, 0.9697292349F, 0.9698361398F, 0.9699427813F, - 0.9700491597F, 0.9701552754F, 0.9702611286F, 0.9703667197F, - 0.9704720490F, 0.9705771169F, 0.9706819236F, 0.9707864695F, - 0.9708907549F, 0.9709947802F, 0.9710985456F, 0.9712020514F, - 0.9713052981F, 0.9714082859F, 0.9715110151F, 0.9716134862F, - 0.9717156993F, 0.9718176549F, 0.9719193532F, 0.9720207946F, - 0.9721219794F, 0.9722229080F, 0.9723235806F, 0.9724239976F, - 0.9725241593F, 0.9726240661F, 0.9727237183F, 0.9728231161F, - 0.9729222601F, 0.9730211503F, 0.9731197873F, 0.9732181713F, - 0.9733163027F, 0.9734141817F, 0.9735118088F, 0.9736091842F, - 0.9737063083F, 0.9738031814F, 0.9738998039F, 0.9739961760F, - 0.9740922981F, 0.9741881706F, 0.9742837938F, 0.9743791680F, - 0.9744742935F, 0.9745691707F, 0.9746637999F, 0.9747581814F, - 0.9748523157F, 0.9749462029F, 0.9750398435F, 0.9751332378F, - 0.9752263861F, 0.9753192887F, 0.9754119461F, 0.9755043585F, - 0.9755965262F, 0.9756884496F, 0.9757801291F, 0.9758715650F, - 0.9759627575F, 0.9760537071F, 0.9761444141F, 0.9762348789F, - 0.9763251016F, 0.9764150828F, 0.9765048228F, 0.9765943218F, - 0.9766835802F, 0.9767725984F, 0.9768613767F, 0.9769499154F, - 0.9770382149F, 0.9771262755F, 0.9772140976F, 0.9773016815F, - 0.9773890275F, 0.9774761360F, 0.9775630073F, 0.9776496418F, - 0.9777360398F, 0.9778222016F, 0.9779081277F, 0.9779938182F, - 0.9780792736F, 0.9781644943F, 0.9782494805F, 0.9783342326F, - 0.9784187509F, 0.9785030359F, 0.9785870877F, 0.9786709069F, - 0.9787544936F, 0.9788378484F, 0.9789209714F, 0.9790038631F, - 0.9790865238F, 0.9791689538F, 0.9792511535F, 0.9793331232F, - 0.9794148633F, 0.9794963742F, 0.9795776561F, 0.9796587094F, - 0.9797395345F, 0.9798201316F, 0.9799005013F, 0.9799806437F, - 0.9800605593F, 0.9801402483F, 0.9802197112F, 0.9802989483F, - 0.9803779600F, 0.9804567465F, 0.9805353082F, 0.9806136455F, - 0.9806917587F, 0.9807696482F, 0.9808473143F, 0.9809247574F, - 0.9810019778F, 0.9810789759F, 0.9811557519F, 0.9812323064F, - 0.9813086395F, 0.9813847517F, 0.9814606433F, 0.9815363147F, - 0.9816117662F, 0.9816869981F, 0.9817620108F, 0.9818368047F, - 0.9819113801F, 0.9819857374F, 0.9820598769F, 0.9821337989F, - 0.9822075038F, 0.9822809920F, 0.9823542638F, 0.9824273195F, - 0.9825001596F, 0.9825727843F, 0.9826451940F, 0.9827173891F, - 0.9827893700F, 0.9828611368F, 0.9829326901F, 0.9830040302F, - 0.9830751574F, 0.9831460720F, 0.9832167745F, 0.9832872652F, - 0.9833575444F, 0.9834276124F, 0.9834974697F, 0.9835671166F, - 0.9836365535F, 0.9837057806F, 0.9837747983F, 0.9838436071F, - 0.9839122072F, 0.9839805990F, 0.9840487829F, 0.9841167591F, - 0.9841845282F, 0.9842520903F, 0.9843194459F, 0.9843865953F, - 0.9844535389F, 0.9845202771F, 0.9845868101F, 0.9846531383F, - 0.9847192622F, 0.9847851820F, 0.9848508980F, 0.9849164108F, - 0.9849817205F, 0.9850468276F, 0.9851117324F, 0.9851764352F, - 0.9852409365F, 0.9853052366F, 0.9853693358F, 0.9854332344F, - 0.9854969330F, 0.9855604317F, 0.9856237309F, 0.9856868310F, - 0.9857497325F, 0.9858124355F, 0.9858749404F, 0.9859372477F, - 0.9859993577F, 0.9860612707F, 0.9861229871F, 0.9861845072F, - 0.9862458315F, 0.9863069601F, 0.9863678936F, 0.9864286322F, - 0.9864891764F, 0.9865495264F, 0.9866096826F, 0.9866696454F, - 0.9867294152F, 0.9867889922F, 0.9868483769F, 0.9869075695F, - 0.9869665706F, 0.9870253803F, 0.9870839991F, 0.9871424273F, - 0.9872006653F, 0.9872587135F, 0.9873165721F, 0.9873742415F, - 0.9874317222F, 0.9874890144F, 0.9875461185F, 0.9876030348F, - 0.9876597638F, 0.9877163057F, 0.9877726610F, 0.9878288300F, - 0.9878848130F, 0.9879406104F, 0.9879962225F, 0.9880516497F, - 0.9881068924F, 0.9881619509F, 0.9882168256F, 0.9882715168F, - 0.9883260249F, 0.9883803502F, 0.9884344931F, 0.9884884539F, - 0.9885422331F, 0.9885958309F, 0.9886492477F, 0.9887024838F, - 0.9887555397F, 0.9888084157F, 0.9888611120F, 0.9889136292F, - 0.9889659675F, 0.9890181273F, 0.9890701089F, 0.9891219128F, - 0.9891735392F, 0.9892249885F, 0.9892762610F, 0.9893273572F, - 0.9893782774F, 0.9894290219F, 0.9894795911F, 0.9895299853F, - 0.9895802049F, 0.9896302502F, 0.9896801217F, 0.9897298196F, - 0.9897793443F, 0.9898286961F, 0.9898778755F, 0.9899268828F, - 0.9899757183F, 0.9900243823F, 0.9900728753F, 0.9901211976F, - 0.9901693495F, 0.9902173314F, 0.9902651436F, 0.9903127865F, - 0.9903602605F, 0.9904075659F, 0.9904547031F, 0.9905016723F, - 0.9905484740F, 0.9905951086F, 0.9906415763F, 0.9906878775F, - 0.9907340126F, 0.9907799819F, 0.9908257858F, 0.9908714247F, - 0.9909168988F, 0.9909622086F, 0.9910073543F, 0.9910523364F, - 0.9910971552F, 0.9911418110F, 0.9911863042F, 0.9912306351F, - 0.9912748042F, 0.9913188117F, 0.9913626580F, 0.9914063435F, - 0.9914498684F, 0.9914932333F, 0.9915364383F, 0.9915794839F, - 0.9916223703F, 0.9916650981F, 0.9917076674F, 0.9917500787F, - 0.9917923323F, 0.9918344286F, 0.9918763679F, 0.9919181505F, - 0.9919597769F, 0.9920012473F, 0.9920425621F, 0.9920837217F, - 0.9921247263F, 0.9921655765F, 0.9922062724F, 0.9922468145F, - 0.9922872030F, 0.9923274385F, 0.9923675211F, 0.9924074513F, - 0.9924472294F, 0.9924868557F, 0.9925263306F, 0.9925656544F, - 0.9926048275F, 0.9926438503F, 0.9926827230F, 0.9927214461F, - 0.9927600199F, 0.9927984446F, 0.9928367208F, 0.9928748486F, - 0.9929128285F, 0.9929506608F, 0.9929883459F, 0.9930258841F, - 0.9930632757F, 0.9931005211F, 0.9931376207F, 0.9931745747F, - 0.9932113836F, 0.9932480476F, 0.9932845671F, 0.9933209425F, - 0.9933571742F, 0.9933932623F, 0.9934292074F, 0.9934650097F, - 0.9935006696F, 0.9935361874F, 0.9935715635F, 0.9936067982F, - 0.9936418919F, 0.9936768448F, 0.9937116574F, 0.9937463300F, - 0.9937808629F, 0.9938152565F, 0.9938495111F, 0.9938836271F, - 0.9939176047F, 0.9939514444F, 0.9939851465F, 0.9940187112F, - 0.9940521391F, 0.9940854303F, 0.9941185853F, 0.9941516044F, - 0.9941844879F, 0.9942172361F, 0.9942498495F, 0.9942823283F, - 0.9943146729F, 0.9943468836F, 0.9943789608F, 0.9944109047F, - 0.9944427158F, 0.9944743944F, 0.9945059408F, 0.9945373553F, - 0.9945686384F, 0.9945997902F, 0.9946308112F, 0.9946617017F, - 0.9946924621F, 0.9947230926F, 0.9947535937F, 0.9947839656F, - 0.9948142086F, 0.9948443232F, 0.9948743097F, 0.9949041683F, - 0.9949338995F, 0.9949635035F, 0.9949929807F, 0.9950223315F, - 0.9950515561F, 0.9950806549F, 0.9951096282F, 0.9951384764F, - 0.9951671998F, 0.9951957987F, 0.9952242735F, 0.9952526245F, - 0.9952808520F, 0.9953089564F, 0.9953369380F, 0.9953647971F, - 0.9953925340F, 0.9954201491F, 0.9954476428F, 0.9954750153F, - 0.9955022670F, 0.9955293981F, 0.9955564092F, 0.9955833003F, - 0.9956100720F, 0.9956367245F, 0.9956632582F, 0.9956896733F, - 0.9957159703F, 0.9957421494F, 0.9957682110F, 0.9957941553F, - 0.9958199828F, 0.9958456937F, 0.9958712884F, 0.9958967672F, - 0.9959221305F, 0.9959473784F, 0.9959725115F, 0.9959975300F, - 0.9960224342F, 0.9960472244F, 0.9960719011F, 0.9960964644F, - 0.9961209148F, 0.9961452525F, 0.9961694779F, 0.9961935913F, - 0.9962175930F, 0.9962414834F, 0.9962652627F, 0.9962889313F, - 0.9963124895F, 0.9963359377F, 0.9963592761F, 0.9963825051F, - 0.9964056250F, 0.9964286361F, 0.9964515387F, 0.9964743332F, - 0.9964970198F, 0.9965195990F, 0.9965420709F, 0.9965644360F, - 0.9965866946F, 0.9966088469F, 0.9966308932F, 0.9966528340F, - 0.9966746695F, 0.9966964001F, 0.9967180260F, 0.9967395475F, - 0.9967609651F, 0.9967822789F, 0.9968034894F, 0.9968245968F, - 0.9968456014F, 0.9968665036F, 0.9968873037F, 0.9969080019F, - 0.9969285987F, 0.9969490942F, 0.9969694889F, 0.9969897830F, - 0.9970099769F, 0.9970300708F, 0.9970500651F, 0.9970699601F, - 0.9970897561F, 0.9971094533F, 0.9971290522F, 0.9971485531F, - 0.9971679561F, 0.9971872617F, 0.9972064702F, 0.9972255818F, - 0.9972445968F, 0.9972635157F, 0.9972823386F, 0.9973010659F, - 0.9973196980F, 0.9973382350F, 0.9973566773F, 0.9973750253F, - 0.9973932791F, 0.9974114392F, 0.9974295059F, 0.9974474793F, - 0.9974653599F, 0.9974831480F, 0.9975008438F, 0.9975184476F, - 0.9975359598F, 0.9975533806F, 0.9975707104F, 0.9975879495F, - 0.9976050981F, 0.9976221566F, 0.9976391252F, 0.9976560043F, - 0.9976727941F, 0.9976894950F, 0.9977061073F, 0.9977226312F, - 0.9977390671F, 0.9977554152F, 0.9977716759F, 0.9977878495F, - 0.9978039361F, 0.9978199363F, 0.9978358501F, 0.9978516780F, - 0.9978674202F, 0.9978830771F, 0.9978986488F, 0.9979141358F, - 0.9979295383F, 0.9979448566F, 0.9979600909F, 0.9979752417F, - 0.9979903091F, 0.9980052936F, 0.9980201952F, 0.9980350145F, - 0.9980497515F, 0.9980644067F, 0.9980789804F, 0.9980934727F, - 0.9981078841F, 0.9981222147F, 0.9981364649F, 0.9981506350F, - 0.9981647253F, 0.9981787360F, 0.9981926674F, 0.9982065199F, - 0.9982202936F, 0.9982339890F, 0.9982476062F, 0.9982611456F, - 0.9982746074F, 0.9982879920F, 0.9983012996F, 0.9983145304F, - 0.9983276849F, 0.9983407632F, 0.9983537657F, 0.9983666926F, - 0.9983795442F, 0.9983923208F, 0.9984050226F, 0.9984176501F, - 0.9984302033F, 0.9984426827F, 0.9984550884F, 0.9984674208F, - 0.9984796802F, 0.9984918667F, 0.9985039808F, 0.9985160227F, - 0.9985279926F, 0.9985398909F, 0.9985517177F, 0.9985634734F, - 0.9985751583F, 0.9985867727F, 0.9985983167F, 0.9986097907F, - 0.9986211949F, 0.9986325297F, 0.9986437953F, 0.9986549919F, - 0.9986661199F, 0.9986771795F, 0.9986881710F, 0.9986990946F, - 0.9987099507F, 0.9987207394F, 0.9987314611F, 0.9987421161F, - 0.9987527045F, 0.9987632267F, 0.9987736829F, 0.9987840734F, - 0.9987943985F, 0.9988046584F, 0.9988148534F, 0.9988249838F, - 0.9988350498F, 0.9988450516F, 0.9988549897F, 0.9988648641F, - 0.9988746753F, 0.9988844233F, 0.9988941086F, 0.9989037313F, - 0.9989132918F, 0.9989227902F, 0.9989322269F, 0.9989416021F, - 0.9989509160F, 0.9989601690F, 0.9989693613F, 0.9989784931F, - 0.9989875647F, 0.9989965763F, 0.9990055283F, 0.9990144208F, - 0.9990232541F, 0.9990320286F, 0.9990407443F, 0.9990494016F, - 0.9990580008F, 0.9990665421F, 0.9990750257F, 0.9990834519F, - 0.9990918209F, 0.9991001331F, 0.9991083886F, 0.9991165877F, - 0.9991247307F, 0.9991328177F, 0.9991408491F, 0.9991488251F, - 0.9991567460F, 0.9991646119F, 0.9991724232F, 0.9991801801F, - 0.9991878828F, 0.9991955316F, 0.9992031267F, 0.9992106684F, - 0.9992181569F, 0.9992255925F, 0.9992329753F, 0.9992403057F, - 0.9992475839F, 0.9992548101F, 0.9992619846F, 0.9992691076F, - 0.9992761793F, 0.9992832001F, 0.9992901701F, 0.9992970895F, - 0.9993039587F, 0.9993107777F, 0.9993175470F, 0.9993242667F, - 0.9993309371F, 0.9993375583F, 0.9993441307F, 0.9993506545F, - 0.9993571298F, 0.9993635570F, 0.9993699362F, 0.9993762678F, - 0.9993825519F, 0.9993887887F, 0.9993949785F, 0.9994011216F, - 0.9994072181F, 0.9994132683F, 0.9994192725F, 0.9994252307F, - 0.9994311434F, 0.9994370107F, 0.9994428327F, 0.9994486099F, - 0.9994543423F, 0.9994600303F, 0.9994656739F, 0.9994712736F, - 0.9994768294F, 0.9994823417F, 0.9994878105F, 0.9994932363F, - 0.9994986191F, 0.9995039592F, 0.9995092568F, 0.9995145122F, - 0.9995197256F, 0.9995248971F, 0.9995300270F, 0.9995351156F, - 0.9995401630F, 0.9995451695F, 0.9995501352F, 0.9995550604F, - 0.9995599454F, 0.9995647903F, 0.9995695953F, 0.9995743607F, - 0.9995790866F, 0.9995837734F, 0.9995884211F, 0.9995930300F, - 0.9995976004F, 0.9996021324F, 0.9996066263F, 0.9996110822F, - 0.9996155004F, 0.9996198810F, 0.9996242244F, 0.9996285306F, - 0.9996327999F, 0.9996370326F, 0.9996412287F, 0.9996453886F, - 0.9996495125F, 0.9996536004F, 0.9996576527F, 0.9996616696F, - 0.9996656512F, 0.9996695977F, 0.9996735094F, 0.9996773865F, - 0.9996812291F, 0.9996850374F, 0.9996888118F, 0.9996925523F, - 0.9996962591F, 0.9996999325F, 0.9997035727F, 0.9997071798F, - 0.9997107541F, 0.9997142957F, 0.9997178049F, 0.9997212818F, - 0.9997247266F, 0.9997281396F, 0.9997315209F, 0.9997348708F, - 0.9997381893F, 0.9997414767F, 0.9997447333F, 0.9997479591F, - 0.9997511544F, 0.9997543194F, 0.9997574542F, 0.9997605591F, - 0.9997636342F, 0.9997666797F, 0.9997696958F, 0.9997726828F, - 0.9997756407F, 0.9997785698F, 0.9997814703F, 0.9997843423F, - 0.9997871860F, 0.9997900016F, 0.9997927894F, 0.9997955494F, - 0.9997982818F, 0.9998009869F, 0.9998036648F, 0.9998063157F, - 0.9998089398F, 0.9998115373F, 0.9998141082F, 0.9998166529F, - 0.9998191715F, 0.9998216642F, 0.9998241311F, 0.9998265724F, - 0.9998289884F, 0.9998313790F, 0.9998337447F, 0.9998360854F, - 0.9998384015F, 0.9998406930F, 0.9998429602F, 0.9998452031F, - 0.9998474221F, 0.9998496171F, 0.9998517885F, 0.9998539364F, - 0.9998560610F, 0.9998581624F, 0.9998602407F, 0.9998622962F, - 0.9998643291F, 0.9998663394F, 0.9998683274F, 0.9998702932F, - 0.9998722370F, 0.9998741589F, 0.9998760591F, 0.9998779378F, - 0.9998797952F, 0.9998816313F, 0.9998834464F, 0.9998852406F, - 0.9998870141F, 0.9998887670F, 0.9998904995F, 0.9998922117F, - 0.9998939039F, 0.9998955761F, 0.9998972285F, 0.9998988613F, - 0.9999004746F, 0.9999020686F, 0.9999036434F, 0.9999051992F, - 0.9999067362F, 0.9999082544F, 0.9999097541F, 0.9999112354F, - 0.9999126984F, 0.9999141433F, 0.9999155703F, 0.9999169794F, - 0.9999183709F, 0.9999197449F, 0.9999211014F, 0.9999224408F, - 0.9999237631F, 0.9999250684F, 0.9999263570F, 0.9999276289F, - 0.9999288843F, 0.9999301233F, 0.9999313461F, 0.9999325529F, - 0.9999337437F, 0.9999349187F, 0.9999360780F, 0.9999372218F, - 0.9999383503F, 0.9999394635F, 0.9999405616F, 0.9999416447F, - 0.9999427129F, 0.9999437665F, 0.9999448055F, 0.9999458301F, - 0.9999468404F, 0.9999478365F, 0.9999488185F, 0.9999497867F, - 0.9999507411F, 0.9999516819F, 0.9999526091F, 0.9999535230F, - 0.9999544236F, 0.9999553111F, 0.9999561856F, 0.9999570472F, - 0.9999578960F, 0.9999587323F, 0.9999595560F, 0.9999603674F, - 0.9999611666F, 0.9999619536F, 0.9999627286F, 0.9999634917F, - 0.9999642431F, 0.9999649828F, 0.9999657110F, 0.9999664278F, - 0.9999671334F, 0.9999678278F, 0.9999685111F, 0.9999691835F, - 0.9999698451F, 0.9999704960F, 0.9999711364F, 0.9999717662F, - 0.9999723858F, 0.9999729950F, 0.9999735942F, 0.9999741834F, - 0.9999747626F, 0.9999753321F, 0.9999758919F, 0.9999764421F, - 0.9999769828F, 0.9999775143F, 0.9999780364F, 0.9999785495F, - 0.9999790535F, 0.9999795485F, 0.9999800348F, 0.9999805124F, - 0.9999809813F, 0.9999814417F, 0.9999818938F, 0.9999823375F, - 0.9999827731F, 0.9999832005F, 0.9999836200F, 0.9999840316F, - 0.9999844353F, 0.9999848314F, 0.9999852199F, 0.9999856008F, - 0.9999859744F, 0.9999863407F, 0.9999866997F, 0.9999870516F, - 0.9999873965F, 0.9999877345F, 0.9999880656F, 0.9999883900F, - 0.9999887078F, 0.9999890190F, 0.9999893237F, 0.9999896220F, - 0.9999899140F, 0.9999901999F, 0.9999904796F, 0.9999907533F, - 0.9999910211F, 0.9999912830F, 0.9999915391F, 0.9999917896F, - 0.9999920345F, 0.9999922738F, 0.9999925077F, 0.9999927363F, - 0.9999929596F, 0.9999931777F, 0.9999933907F, 0.9999935987F, - 0.9999938018F, 0.9999940000F, 0.9999941934F, 0.9999943820F, - 0.9999945661F, 0.9999947456F, 0.9999949206F, 0.9999950912F, - 0.9999952575F, 0.9999954195F, 0.9999955773F, 0.9999957311F, - 0.9999958807F, 0.9999960265F, 0.9999961683F, 0.9999963063F, - 0.9999964405F, 0.9999965710F, 0.9999966979F, 0.9999968213F, - 0.9999969412F, 0.9999970576F, 0.9999971707F, 0.9999972805F, - 0.9999973871F, 0.9999974905F, 0.9999975909F, 0.9999976881F, - 0.9999977824F, 0.9999978738F, 0.9999979624F, 0.9999980481F, - 0.9999981311F, 0.9999982115F, 0.9999982892F, 0.9999983644F, - 0.9999984370F, 0.9999985072F, 0.9999985750F, 0.9999986405F, - 0.9999987037F, 0.9999987647F, 0.9999988235F, 0.9999988802F, - 0.9999989348F, 0.9999989873F, 0.9999990379F, 0.9999990866F, - 0.9999991334F, 0.9999991784F, 0.9999992217F, 0.9999992632F, - 0.9999993030F, 0.9999993411F, 0.9999993777F, 0.9999994128F, - 0.9999994463F, 0.9999994784F, 0.9999995091F, 0.9999995384F, - 0.9999995663F, 0.9999995930F, 0.9999996184F, 0.9999996426F, - 0.9999996657F, 0.9999996876F, 0.9999997084F, 0.9999997282F, - 0.9999997469F, 0.9999997647F, 0.9999997815F, 0.9999997973F, - 0.9999998123F, 0.9999998265F, 0.9999998398F, 0.9999998524F, - 0.9999998642F, 0.9999998753F, 0.9999998857F, 0.9999998954F, - 0.9999999045F, 0.9999999130F, 0.9999999209F, 0.9999999282F, - 0.9999999351F, 0.9999999414F, 0.9999999472F, 0.9999999526F, - 0.9999999576F, 0.9999999622F, 0.9999999664F, 0.9999999702F, - 0.9999999737F, 0.9999999769F, 0.9999999798F, 0.9999999824F, - 0.9999999847F, 0.9999999868F, 0.9999999887F, 0.9999999904F, - 0.9999999919F, 0.9999999932F, 0.9999999943F, 0.9999999953F, - 0.9999999961F, 0.9999999969F, 0.9999999975F, 0.9999999980F, - 0.9999999985F, 0.9999999988F, 0.9999999991F, 0.9999999993F, - 0.9999999995F, 0.9999999997F, 0.9999999998F, 0.9999999999F, - 0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F, - 1.0000000000F, 1.0000000000F, 1.0000000000F, 1.0000000000F, -}; - -static float *vwin[8] = { - vwin64, - vwin128, - vwin256, - vwin512, - vwin1024, - vwin2048, - vwin4096, - vwin8192, -}; - -float *_vorbis_window_get(int n){ - return vwin[n]; -} - -void _vorbis_apply_window(float *d,int *winno,long *blocksizes, - int lW,int W,int nW){ - lW=(W?lW:0); - nW=(W?nW:0); - - { - float *windowLW=vwin[winno[lW]]; - float *windowNW=vwin[winno[nW]]; - - long n=blocksizes[W]; - long ln=blocksizes[lW]; - long rn=blocksizes[nW]; - - long leftbegin=n/4-ln/4; - long leftend=leftbegin+ln/2; - - long rightbegin=n/2+n/4-rn/4; - long rightend=rightbegin+rn/2; - - int i,p; - - for(i=0;i>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL); - x= ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL); - x= ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL); - x= ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL); - return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL); -} - - -/* ogg_stream_state contains the current encode/decode state of a logical - Ogg bitstream **********************************************************/ - -typedef struct { - unsigned char *body_data; /* bytes from packet bodies */ - long body_storage; /* storage elements allocated */ - long body_fill; /* elements stored; fill mark */ - long body_returned; /* elements of fill returned */ - - - int *lacing_vals; /* The values that will go to the segment table */ - ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact - this way, but it is simple coupled to the - lacing fifo */ - long lacing_storage; - long lacing_fill; - long lacing_packet; - long lacing_returned; - - unsigned char header[282]; /* working space for header encode */ - int header_fill; - - int e_o_s; /* set when we have buffered the last packet in the - logical bitstream */ - int b_o_s; /* set after we've written the initial page - of a logical bitstream */ - long serialno; - long pageno; - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ - ogg_int64_t granulepos; - -} ogg_stream_state; - -/* ogg_packet is used to encapsulate the data and metadata belonging - to a single raw Ogg/Vorbis packet *************************************/ - -typedef struct { - unsigned char *packet; - long bytes; - long b_o_s; - long e_o_s; - - ogg_int64_t granulepos; - - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ -} ogg_packet; - -typedef struct { - unsigned char *data; - int storage; - int fill; - int returned; - - int unsynced; - int headerbytes; - int bodybytes; -} ogg_sync_state; - -/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ - -extern void oggpack_writeinit(oggpack_buffer *b); -extern void oggpack_writetrunc(oggpack_buffer *b,long bits); -extern void oggpack_writealign(oggpack_buffer *b); -extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpack_reset(oggpack_buffer *b); -extern void oggpack_writeclear(oggpack_buffer *b); -extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpack_look(oggpack_buffer *b,int bits); -extern long oggpack_look1(oggpack_buffer *b); -extern void oggpack_adv(oggpack_buffer *b,int bits); -extern void oggpack_adv1(oggpack_buffer *b); -extern long oggpack_read(oggpack_buffer *b,int bits); -extern long oggpack_read1(oggpack_buffer *b); -extern long oggpack_bytes(oggpack_buffer *b); -extern long oggpack_bits(oggpack_buffer *b); -extern unsigned char *oggpack_get_buffer(oggpack_buffer *b); - -extern void oggpackB_writeinit(oggpack_buffer *b); -extern void oggpackB_writetrunc(oggpack_buffer *b,long bits); -extern void oggpackB_writealign(oggpack_buffer *b); -extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpackB_reset(oggpack_buffer *b); -extern void oggpackB_writeclear(oggpack_buffer *b); -extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpackB_look(oggpack_buffer *b,int bits); -extern long oggpackB_look1(oggpack_buffer *b); -extern void oggpackB_adv(oggpack_buffer *b,int bits); -extern void oggpackB_adv1(oggpack_buffer *b); -extern long oggpackB_read(oggpack_buffer *b,int bits); -extern long oggpackB_read1(oggpack_buffer *b); -extern long oggpackB_bytes(oggpack_buffer *b); -extern long oggpackB_bits(oggpack_buffer *b); -extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b); - -/* Ogg BITSTREAM PRIMITIVES: encoding **************************/ - -extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); -extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og); - -/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ - -extern int ogg_sync_init(ogg_sync_state *oy); -extern int ogg_sync_clear(ogg_sync_state *oy); -extern int ogg_sync_reset(ogg_sync_state *oy); -extern int ogg_sync_destroy(ogg_sync_state *oy); - -extern char *ogg_sync_buffer(ogg_sync_state *oy, long size); -extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); -extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); -extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); -extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); -extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); - -/* Ogg BITSTREAM PRIMITIVES: general ***************************/ - -extern int ogg_stream_init(ogg_stream_state *os,int serialno); -extern int ogg_stream_clear(ogg_stream_state *os); -extern int ogg_stream_reset(ogg_stream_state *os); -extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); -extern int ogg_stream_destroy(ogg_stream_state *os); -extern int ogg_stream_eos(ogg_stream_state *os); - -extern void ogg_page_checksum_set(ogg_page *og); - -extern int ogg_page_version(ogg_page *og); -extern int ogg_page_continued(ogg_page *og); -extern int ogg_page_bos(ogg_page *og); -extern int ogg_page_eos(ogg_page *og); -extern ogg_int64_t ogg_page_granulepos(ogg_page *og); -extern int ogg_page_serialno(ogg_page *og); -extern long ogg_page_pageno(ogg_page *og); -extern int ogg_page_packets(ogg_page *og); - -extern void ogg_packet_clear(ogg_packet *op); - - -#ifdef __cplusplus -} -#endif - -#endif /* _OGG_H */ diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/os_types.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/os_types.h deleted file mode 100644 index fa7b49f50e..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/os_types.h +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h,v 1.1 2007/06/07 17:48:18 jules_rms Exp $ - - ********************************************************************/ -#ifndef _OS_TYPES_H -#define _OS_TYPES_H - -/* make it easy on the folks that want to compile the libs with a - different malloc than stdlib */ -#define _ogg_malloc malloc -#define _ogg_calloc calloc -#define _ogg_realloc realloc -#define _ogg_free free - -#if defined(_WIN32) - -# if defined(__CYGWIN__) -# include <_G_config.h> - typedef _G_int64_t ogg_int64_t; - typedef _G_int32_t ogg_int32_t; - typedef _G_uint32_t ogg_uint32_t; - typedef _G_int16_t ogg_int16_t; - typedef _G_uint16_t ogg_uint16_t; -# elif defined(__MINGW32__) - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - typedef unsigned long long ogg_uint64_t; -# elif defined(__MWERKS__) - typedef long long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; -# else - /* MSVC/Borland */ - typedef __int64 ogg_int64_t; - typedef __int32 ogg_int32_t; - typedef unsigned __int32 ogg_uint32_t; - typedef __int16 ogg_int16_t; - typedef unsigned __int16 ogg_uint16_t; -# endif - -#elif defined(__MACOS__) - -# include - typedef SInt16 ogg_int16_t; - typedef UInt16 ogg_uint16_t; - typedef SInt32 ogg_int32_t; - typedef UInt32 ogg_uint32_t; - typedef SInt64 ogg_int64_t; - -#elif defined(__MACOSX__) /* MacOS X Framework build */ - -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined(__BEOS__) - - /* Be */ -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined (__EMX__) - - /* OS/2 GCC */ - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined (DJGPP) - - /* DJGPP */ - typedef short ogg_int16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(R5900) - - /* PS2 EE */ - typedef long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned ogg_uint32_t; - typedef short ogg_int16_t; - -#elif defined(__SYMBIAN32__) - - /* Symbian GCC */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#else - -# include -# include "config_types.h" - -#endif - -#endif /* _OS_TYPES_H */ diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/vorbisenc.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/vorbisenc.h deleted file mode 100644 index dc33455411..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/vorbisenc.h +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: vorbis encode-engine setup - last mod: $Id: vorbisenc.h,v 1.1 2007/06/07 17:48:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _OV_ENC_H_ -#define _OV_ENC_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include "codec.h" - -extern int vorbis_encode_init(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern int vorbis_encode_setup_managed(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern int vorbis_encode_setup_vbr(vorbis_info *vi, - long channels, - long rate, - - float quality /* quality level from 0. (lo) to 1. (hi) */ - ); - -extern int vorbis_encode_init_vbr(vorbis_info *vi, - long channels, - long rate, - - float base_quality /* quality level from 0. (lo) to 1. (hi) */ - ); - -extern int vorbis_encode_setup_init(vorbis_info *vi); - -extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg); - - /* deprecated rate management supported only for compatability */ -#define OV_ECTL_RATEMANAGE_GET 0x10 -#define OV_ECTL_RATEMANAGE_SET 0x11 -#define OV_ECTL_RATEMANAGE_AVG 0x12 -#define OV_ECTL_RATEMANAGE_HARD 0x13 - -struct ovectl_ratemanage_arg { - int management_active; - - long bitrate_hard_min; - long bitrate_hard_max; - double bitrate_hard_window; - - long bitrate_av_lo; - long bitrate_av_hi; - double bitrate_av_window; - double bitrate_av_window_center; -}; - - - /* new rate setup */ -#define OV_ECTL_RATEMANAGE2_GET 0x14 -#define OV_ECTL_RATEMANAGE2_SET 0x15 - -struct ovectl_ratemanage2_arg { - int management_active; - - long bitrate_limit_min_kbps; - long bitrate_limit_max_kbps; - long bitrate_limit_reservoir_bits; - double bitrate_limit_reservoir_bias; - - long bitrate_average_kbps; - double bitrate_average_damping; -}; - - - -#define OV_ECTL_LOWPASS_GET 0x20 -#define OV_ECTL_LOWPASS_SET 0x21 - -#define OV_ECTL_IBLOCK_GET 0x30 -#define OV_ECTL_IBLOCK_SET 0x31 - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/src/juce_appframework/audio/audio_file_formats/oggvorbis/vorbisfile.h b/src/juce_appframework/audio/audio_file_formats/oggvorbis/vorbisfile.h deleted file mode 100644 index 1d603314b9..0000000000 --- a/src/juce_appframework/audio/audio_file_formats/oggvorbis/vorbisfile.h +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: stdio-based convenience library for opening/seeking/decoding - last mod: $Id: vorbisfile.h,v 1.1 2007/06/07 17:48:18 jules_rms Exp $ - - ********************************************************************/ - -#ifndef _OV_FILE_H_ -#define _OV_FILE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include -#include "codec.h" - -/* The function prototypes for the callbacks are basically the same as for - * the stdio functions fread, fseek, fclose, ftell. - * The one difference is that the FILE * arguments have been replaced with - * a void * - this is to be used as a pointer to whatever internal data these - * functions might need. In the stdio case, it's just a FILE * cast to a void * - * - * If you use other functions, check the docs for these functions and return - * the right values. For seek_func(), you *MUST* return -1 if the stream is - * unseekable - */ -typedef struct { - size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); - int (*seek_func) (void *datasource, ogg_int64_t offset, int whence); - int (*close_func) (void *datasource); - long (*tell_func) (void *datasource); -} ov_callbacks; - -#define NOTOPEN 0 -#define PARTOPEN 1 -#define OPENED 2 -#define STREAMSET 3 -#define INITSET 4 - -typedef struct OggVorbis_File { - void *datasource; /* Pointer to a FILE *, etc. */ - int seekable; - ogg_int64_t offset; - ogg_int64_t end; - ogg_sync_state oy; - - /* If the FILE handle isn't seekable (eg, a pipe), only the current - stream appears */ - int links; - ogg_int64_t *offsets; - ogg_int64_t *dataoffsets; - long *serialnos; - ogg_int64_t *pcmlengths; /* overloaded to maintain binary - compatability; x2 size, stores both - beginning and end values */ - vorbis_info *vi; - vorbis_comment *vc; - - /* Decoding working state local storage */ - ogg_int64_t pcm_offset; - int ready_state; - long current_serialno; - int current_link; - - double bittrack; - double samptrack; - - ogg_stream_state os; /* take physical pages, weld into a logical - stream of packets */ - vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ - vorbis_block vb; /* local working space for packet->PCM decode */ - - ov_callbacks callbacks; - -} OggVorbis_File; - -extern int ov_clear(OggVorbis_File *vf); -extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); - -extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); -extern int ov_test_open(OggVorbis_File *vf); - -extern long ov_bitrate(OggVorbis_File *vf,int i); -extern long ov_bitrate_instant(OggVorbis_File *vf); -extern long ov_streams(OggVorbis_File *vf); -extern long ov_seekable(OggVorbis_File *vf); -extern long ov_serialnumber(OggVorbis_File *vf,int i); - -extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i); -extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i); -extern double ov_time_total(OggVorbis_File *vf,int i); - -extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page(OggVorbis_File *vf,double pos); - -extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek_lap(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos); - -extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf); -extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf); -extern double ov_time_tell(OggVorbis_File *vf); - -extern vorbis_info *ov_info(OggVorbis_File *vf,int link); -extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link); - -extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples, - int *bitstream); -extern long ov_read(OggVorbis_File *vf,char *buffer,int length, - int bigendianp,int word,int sgned,int *bitstream); -extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2); - -extern int ov_halfrate(OggVorbis_File *vf,int flag); -extern int ov_halfrate_p(OggVorbis_File *vf); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.cpp b/src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.cpp deleted file mode 100644 index 703637dd85..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioFormatReaderSource.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -AudioFormatReaderSource::AudioFormatReaderSource (AudioFormatReader* const reader_, - const bool deleteReaderWhenThisIsDeleted) - : reader (reader_), - deleteReader (deleteReaderWhenThisIsDeleted), - nextPlayPos (0), - looping (false) -{ - jassert (reader != 0); -} - -AudioFormatReaderSource::~AudioFormatReaderSource() -{ - releaseResources(); - - if (deleteReader) - delete reader; -} - -void AudioFormatReaderSource::setNextReadPosition (int newPosition) -{ - nextPlayPos = newPosition; -} - -void AudioFormatReaderSource::setLooping (const bool shouldLoop) throw() -{ - looping = shouldLoop; -} - -int AudioFormatReaderSource::getNextReadPosition() const -{ - return (looping) ? (nextPlayPos % (int) reader->lengthInSamples) - : nextPlayPos; -} - -int AudioFormatReaderSource::getTotalLength() const -{ - return (int) reader->lengthInSamples; -} - -void AudioFormatReaderSource::prepareToPlay (int /*samplesPerBlockExpected*/, - double /*sampleRate*/) -{ -} - -void AudioFormatReaderSource::releaseResources() -{ -} - -void AudioFormatReaderSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - if (info.numSamples > 0) - { - const int start = nextPlayPos; - - if (looping) - { - const int newStart = start % (int) reader->lengthInSamples; - const int newEnd = (start + info.numSamples) % (int) reader->lengthInSamples; - - if (newEnd > newStart) - { - info.buffer->readFromAudioReader (reader, - info.startSample, - newEnd - newStart, - newStart, - true, true); - } - else - { - const int endSamps = (int) reader->lengthInSamples - newStart; - - info.buffer->readFromAudioReader (reader, - info.startSample, - endSamps, - newStart, - true, true); - - info.buffer->readFromAudioReader (reader, - info.startSample + endSamps, - newEnd, - 0, - true, true); - } - - nextPlayPos = newEnd; - } - else - { - info.buffer->readFromAudioReader (reader, - info.startSample, - info.numSamples, - start, - true, true); - - nextPlayPos += info.numSamples; - } - } -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.h b/src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.h deleted file mode 100644 index aaf4bd1807..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioFormatReaderSource.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOFORMATREADERSOURCE_JUCEHEADER__ -#define __JUCE_AUDIOFORMATREADERSOURCE_JUCEHEADER__ - -#include "juce_PositionableAudioSource.h" -#include "../../../juce_core/threads/juce_Thread.h" -#include "../audio_file_formats/juce_AudioFormatReader.h" -#include "../dsp/juce_AudioSampleBuffer.h" - - -//============================================================================== -/** - A type of AudioSource that will read from an AudioFormatReader. - - @see PositionableAudioSource, AudioTransportSource, BufferingAudioSource -*/ -class JUCE_API AudioFormatReaderSource : public PositionableAudioSource -{ -public: - //============================================================================== - /** Creates an AudioFormatReaderSource for a given reader. - - @param sourceReader the reader to use as the data source - @param deleteReaderWhenThisIsDeleted if true, the reader passed-in will be deleted - when this object is deleted; if false it will be - left up to the caller to manage its lifetime - */ - AudioFormatReaderSource (AudioFormatReader* const sourceReader, - const bool deleteReaderWhenThisIsDeleted); - - /** Destructor. */ - ~AudioFormatReaderSource(); - - //============================================================================== - /** Toggles loop-mode. - - If set to true, it will continuously loop the input source. If false, - it will just emit silence after the source has finished. - - @see isLooping - */ - void setLooping (const bool shouldLoop) throw(); - - /** Returns whether loop-mode is turned on or not. */ - bool isLooping() const { return looping; } - - /** Returns the reader that's being used. */ - AudioFormatReader* getAudioFormatReader() const throw() { return reader; } - - //============================================================================== - /** Implementation of the AudioSource method. */ - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - - /** Implementation of the AudioSource method. */ - void releaseResources(); - - /** Implementation of the AudioSource method. */ - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - //============================================================================== - /** Implements the PositionableAudioSource method. */ - void setNextReadPosition (int newPosition); - - /** Implements the PositionableAudioSource method. */ - int getNextReadPosition() const; - - /** Implements the PositionableAudioSource method. */ - int getTotalLength() const; - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioFormatReader* reader; - bool deleteReader; - - int volatile nextPlayPos; - bool volatile looping; - - void readBufferSection (int start, int length, AudioSampleBuffer& buffer, int startSample); - - AudioFormatReaderSource (const AudioFormatReaderSource&); - const AudioFormatReaderSource& operator= (const AudioFormatReaderSource&); -}; - - - - -#endif // __JUCE_AUDIOFORMATREADERSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioSource.h b/src/juce_appframework/audio/audio_sources/juce_AudioSource.h deleted file mode 100644 index 508fccf1ef..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioSource.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOSOURCE_JUCEHEADER__ -#define __JUCE_AUDIOSOURCE_JUCEHEADER__ - -#include "../dsp/juce_AudioSampleBuffer.h" - - -//============================================================================== -/** - Used by AudioSource::getNextAudioBlock(). -*/ -struct JUCE_API AudioSourceChannelInfo -{ - /** The destination buffer to fill with audio data. - - When the AudioSource::getNextAudioBlock() method is called, the active section - of this buffer should be filled with whatever output the source produces. - - Only the samples specified by the startSample and numSamples members of this structure - should be affected by the call. - - The contents of the buffer when it is passed to the the AudioSource::getNextAudioBlock() - method can be treated as the input if the source is performing some kind of filter operation, - but should be cleared if this is not the case - the clearActiveBufferRegion() is - a handy way of doing this. - - The number of channels in the buffer could be anything, so the AudioSource - must cope with this in whatever way is appropriate for its function. - */ - AudioSampleBuffer* buffer; - - /** The first sample in the buffer from which the callback is expected - to write data. */ - int startSample; - - /** The number of samples in the buffer which the callback is expected to - fill with data. */ - int numSamples; - - /** Convenient method to clear the buffer if the source is not producing any data. */ - void clearActiveBufferRegion() const - { - if (buffer != 0) - buffer->clear (startSample, numSamples); - } -}; - - -//============================================================================== -/** - Base class for objects that can produce a continuous stream of audio. - - @see AudioFormatReaderSource, ResamplingAudioSource -*/ -class JUCE_API AudioSource -{ -protected: - //============================================================================== - /** Creates an AudioSource. */ - AudioSource() throw() {} - -public: - /** Destructor. */ - virtual ~AudioSource() {} - - //============================================================================== - /** Tells the source to prepare for playing. - - The source can use this opportunity to initialise anything it needs to. - - Note that this method could be called more than once in succession without - a matching call to releaseResources(), so make sure your code is robust and - can handle that kind of situation. - - @param samplesPerBlockExpected the number of samples that the source - will be expected to supply each time its - getNextAudioBlock() method is called. This - number may vary slightly, because it will be dependent - on audio hardware callbacks, and these aren't - guaranteed to always use a constant block size, so - the source should be able to cope with small variations. - @param sampleRate the sample rate that the output will be used at - this - is needed by sources such as tone generators. - @see releaseResources, getNextAudioBlock - */ - virtual void prepareToPlay (int samplesPerBlockExpected, - double sampleRate) = 0; - - /** Allows the source to release anything it no longer needs after playback has stopped. - - This will be called when the source is no longer going to have its getNextAudioBlock() - method called, so it should release any spare memory, etc. that it might have - allocated during the prepareToPlay() call. - - Note that there's no guarantee that prepareToPlay() will actually have been called before - releaseResources(), and it may be called more than once in succession, so make sure your - code is robust and doesn't make any assumptions about when it will be called. - - @see prepareToPlay, getNextAudioBlock - */ - virtual void releaseResources() = 0; - - /** Called repeatedly to fetch subsequent blocks of audio data. - - After calling the prepareToPlay() method, this callback will be made each - time the audio playback hardware (or whatever other destination the audio - data is going to) needs another block of data. - - It will generally be called on a high-priority system thread, or possibly even - an interrupt, so be careful not to do too much work here, as that will cause - audio glitches! - - @see AudioSourceChannelInfo, prepareToPlay, releaseResources - */ - virtual void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) = 0; -}; - - -#endif // __JUCE_AUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp b/src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp deleted file mode 100644 index 559f106c4a..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioSourcePlayer.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -AudioSourcePlayer::AudioSourcePlayer() - : source (0), - sampleRate (0), - bufferSize (0), - tempBuffer (2, 8), - lastGain (1.0f), - gain (1.0f) -{ -} - -AudioSourcePlayer::~AudioSourcePlayer() -{ - setSource (0); -} - -void AudioSourcePlayer::setSource (AudioSource* newSource) -{ - if (source != newSource) - { - AudioSource* const oldSource = source; - - if (newSource != 0 && bufferSize > 0 && sampleRate > 0) - newSource->prepareToPlay (bufferSize, sampleRate); - - { - const ScopedLock sl (readLock); - source = newSource; - } - - if (oldSource != 0) - oldSource->releaseResources(); - } -} - -void AudioSourcePlayer::setGain (const float newGain) throw() -{ - gain = newGain; -} - -void AudioSourcePlayer::audioDeviceIOCallback (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples) -{ - // these should have been prepared by audioDeviceAboutToStart()... - jassert (sampleRate > 0 && bufferSize > 0); - - const ScopedLock sl (readLock); - - if (source != 0) - { - AudioSourceChannelInfo info; - int i, numActiveChans = 0, numInputs = 0, numOutputs = 0; - - // messy stuff needed to compact the channels down into an array - // of non-zero pointers.. - for (i = 0; i < totalNumInputChannels; ++i) - { - if (inputChannelData[i] != 0) - { - inputChans [numInputs++] = inputChannelData[i]; - if (numInputs >= numElementsInArray (inputChans)) - break; - } - } - - for (i = 0; i < totalNumOutputChannels; ++i) - { - if (outputChannelData[i] != 0) - { - outputChans [numOutputs++] = outputChannelData[i]; - if (numOutputs >= numElementsInArray (outputChans)) - break; - } - } - - if (numInputs > numOutputs) - { - // if there aren't enough output channels for the number of - // inputs, we need to create some temporary extra ones (can't - // use the input data in case it gets written to) - tempBuffer.setSize (numInputs - numOutputs, numSamples, - false, false, true); - - for (i = 0; i < numOutputs; ++i) - { - channels[numActiveChans] = outputChans[i]; - memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples); - ++numActiveChans; - } - - for (i = numOutputs; i < numInputs; ++i) - { - channels[numActiveChans] = tempBuffer.getSampleData (i - numOutputs, 0); - memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples); - ++numActiveChans; - } - } - else - { - for (i = 0; i < numInputs; ++i) - { - channels[numActiveChans] = outputChans[i]; - memcpy (channels[numActiveChans], inputChans[i], sizeof (float) * numSamples); - ++numActiveChans; - } - - for (i = numInputs; i < numOutputs; ++i) - { - channels[numActiveChans] = outputChans[i]; - zeromem (channels[numActiveChans], sizeof (float) * numSamples); - ++numActiveChans; - } - } - - AudioSampleBuffer buffer (channels, numActiveChans, numSamples); - - info.buffer = &buffer; - info.startSample = 0; - info.numSamples = numSamples; - - source->getNextAudioBlock (info); - - for (i = info.buffer->getNumChannels(); --i >= 0;) - info.buffer->applyGainRamp (i, info.startSample, info.numSamples, lastGain, gain); - - lastGain = gain; - } - else - { - for (int i = 0; i < totalNumOutputChannels; ++i) - if (outputChannelData[i] != 0) - zeromem (outputChannelData[i], sizeof (float) * numSamples); - } -} - -void AudioSourcePlayer::audioDeviceAboutToStart (AudioIODevice* device) -{ - sampleRate = device->getCurrentSampleRate(); - bufferSize = device->getCurrentBufferSizeSamples(); - zeromem (channels, sizeof (channels)); - - if (source != 0) - source->prepareToPlay (bufferSize, sampleRate); -} - -void AudioSourcePlayer::audioDeviceStopped() -{ - if (source != 0) - source->releaseResources(); - - sampleRate = 0.0; - bufferSize = 0; - - tempBuffer.setSize (2, 8); -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.h b/src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.h deleted file mode 100644 index 81bca29a6c..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioSourcePlayer.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOSOURCEPLAYER_JUCEHEADER__ -#define __JUCE_AUDIOSOURCEPLAYER_JUCEHEADER__ - -#include "juce_AudioSource.h" -#include "../devices/juce_AudioIODevice.h" - - -//============================================================================== -/** - Wrapper class to continuously stream audio from an audio source to an - AudioIODevice. - - This object acts as an AudioIODeviceCallback, so can be attached to an - output device, and will stream audio from an AudioSource. -*/ -class JUCE_API AudioSourcePlayer : public AudioIODeviceCallback -{ -public: - //============================================================================== - /** Creates an empty AudioSourcePlayer. */ - AudioSourcePlayer(); - - /** Destructor. - - Make sure this object isn't still being used by an AudioIODevice before - deleting it! - */ - virtual ~AudioSourcePlayer(); - - //============================================================================== - /** Changes the current audio source to play from. - - If the source passed in is already being used, this method will do nothing. - If the source is not null, its prepareToPlay() method will be called - before it starts being used for playback. - - If there's another source currently playing, its releaseResources() method - will be called after it has been swapped for the new one. - - @param newSource the new source to use - this will NOT be deleted - by this object when no longer needed, so it's the - caller's responsibility to manage it. - */ - void setSource (AudioSource* newSource); - - /** Returns the source that's playing. - - May return 0 if there's no source. - */ - AudioSource* getCurrentSource() const throw() { return source; } - - /** Sets a gain to apply to the audio data. */ - void setGain (const float newGain) throw(); - - //============================================================================== - /** Implementation of the AudioIODeviceCallback method. */ - void audioDeviceIOCallback (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples); - - /** Implementation of the AudioIODeviceCallback method. */ - void audioDeviceAboutToStart (AudioIODevice* device); - - /** Implementation of the AudioIODeviceCallback method. */ - void audioDeviceStopped(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - CriticalSection readLock; - AudioSource* source; - double sampleRate; - int bufferSize; - float* channels [128]; - float* outputChans [128]; - const float* inputChans [128]; - AudioSampleBuffer tempBuffer; - float lastGain, gain; - - AudioSourcePlayer (const AudioSourcePlayer&); - const AudioSourcePlayer& operator= (const AudioSourcePlayer&); -}; - - -#endif // __JUCE_AUDIOSOURCEPLAYER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.cpp b/src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.cpp deleted file mode 100644 index 74981afd6d..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.cpp +++ /dev/null @@ -1,295 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioTransportSource.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -AudioTransportSource::AudioTransportSource() - : source (0), - resamplerSource (0), - bufferingSource (0), - positionableSource (0), - masterSource (0), - gain (1.0f), - lastGain (1.0f), - playing (false), - stopped (true), - sampleRate (44100.0), - sourceSampleRate (0.0), - blockSize (128), - readAheadBufferSize (0), - isPrepared (false), - inputStreamEOF (false) -{ -} - -AudioTransportSource::~AudioTransportSource() -{ - setSource (0); - - releaseResources(); -} - -void AudioTransportSource::setSource (PositionableAudioSource* const newSource, - int readAheadBufferSize_, - double sourceSampleRateToCorrectFor) -{ - if (source == newSource) - { - if (source == 0) - return; - - setSource (0, 0, 0); // deselect and reselect to avoid releasing resources wrongly - } - - readAheadBufferSize = readAheadBufferSize_; - sourceSampleRate = sourceSampleRateToCorrectFor; - - ResamplingAudioSource* newResamplerSource = 0; - BufferingAudioSource* newBufferingSource = 0; - PositionableAudioSource* newPositionableSource = 0; - AudioSource* newMasterSource = 0; - - ResamplingAudioSource* oldResamplerSource = resamplerSource; - BufferingAudioSource* oldBufferingSource = bufferingSource; - AudioSource* oldMasterSource = masterSource; - - if (newSource != 0) - { - newPositionableSource = newSource; - - if (readAheadBufferSize_ > 0) - newPositionableSource = newBufferingSource - = new BufferingAudioSource (newPositionableSource, false, readAheadBufferSize_); - - newPositionableSource->setNextReadPosition (0); - - if (sourceSampleRateToCorrectFor != 0) - newMasterSource = newResamplerSource - = new ResamplingAudioSource (newPositionableSource, false); - else - newMasterSource = newPositionableSource; - - if (isPrepared) - { - if (newResamplerSource != 0 && sourceSampleRate > 0 && sampleRate > 0) - newResamplerSource->setResamplingRatio (sourceSampleRate / sampleRate); - - newMasterSource->prepareToPlay (blockSize, sampleRate); - } - } - - { - const ScopedLock sl (callbackLock); - - source = newSource; - resamplerSource = newResamplerSource; - bufferingSource = newBufferingSource; - masterSource = newMasterSource; - positionableSource = newPositionableSource; - - playing = false; - } - - if (oldMasterSource != 0) - oldMasterSource->releaseResources(); - - delete oldResamplerSource; - delete oldBufferingSource; -} - -void AudioTransportSource::start() -{ - if ((! playing) && masterSource != 0) - { - callbackLock.enter(); - playing = true; - stopped = false; - inputStreamEOF = false; - callbackLock.exit(); - - sendChangeMessage (this); - } -} - -void AudioTransportSource::stop() -{ - if (playing) - { - callbackLock.enter(); - playing = false; - callbackLock.exit(); - - int n = 500; - while (--n >= 0 && ! stopped) - Thread::sleep (2); - - sendChangeMessage (this); - } -} - -void AudioTransportSource::setPosition (double newPosition) -{ - if (sampleRate > 0.0) - setNextReadPosition (roundDoubleToInt (newPosition * sampleRate)); -} - -double AudioTransportSource::getCurrentPosition() const -{ - if (sampleRate > 0.0) - return getNextReadPosition() / sampleRate; - else - return 0.0; -} - -void AudioTransportSource::setNextReadPosition (int newPosition) -{ - if (positionableSource != 0) - { - if (sampleRate > 0 && sourceSampleRate > 0) - newPosition = roundDoubleToInt (newPosition * sourceSampleRate / sampleRate); - - positionableSource->setNextReadPosition (newPosition); - } -} - -int AudioTransportSource::getNextReadPosition() const -{ - if (positionableSource != 0) - { - const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0; - - return roundDoubleToInt (positionableSource->getNextReadPosition() * ratio); - } - - return 0; -} - -int AudioTransportSource::getTotalLength() const -{ - const ScopedLock sl (callbackLock); - - if (positionableSource != 0) - { - const double ratio = (sampleRate > 0 && sourceSampleRate > 0) ? sampleRate / sourceSampleRate : 1.0; - - return roundDoubleToInt (positionableSource->getTotalLength() * ratio); - } - - return 0; -} - -bool AudioTransportSource::isLooping() const -{ - const ScopedLock sl (callbackLock); - - return positionableSource != 0 - && positionableSource->isLooping(); -} - -void AudioTransportSource::setGain (const float newGain) throw() -{ - gain = newGain; -} - -void AudioTransportSource::prepareToPlay (int samplesPerBlockExpected, - double sampleRate_) -{ - const ScopedLock sl (callbackLock); - - sampleRate = sampleRate_; - blockSize = samplesPerBlockExpected; - - if (masterSource != 0) - masterSource->prepareToPlay (samplesPerBlockExpected, sampleRate); - - if (resamplerSource != 0 && sourceSampleRate != 0) - resamplerSource->setResamplingRatio (sourceSampleRate / sampleRate); - - isPrepared = true; -} - -void AudioTransportSource::releaseResources() -{ - const ScopedLock sl (callbackLock); - - if (masterSource != 0) - masterSource->releaseResources(); - - isPrepared = false; -} - -void AudioTransportSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (callbackLock); - - inputStreamEOF = false; - - if (masterSource != 0 && ! stopped) - { - masterSource->getNextAudioBlock (info); - - if (! playing) - { - // just stopped playing, so fade out the last block.. - for (int i = info.buffer->getNumChannels(); --i >= 0;) - info.buffer->applyGainRamp (i, info.startSample, jmin (256, info.numSamples), 1.0f, 0.0f); - - if (info.numSamples > 256) - info.buffer->clear (info.startSample + 256, info.numSamples - 256); - } - - if (positionableSource->getNextReadPosition() > positionableSource->getTotalLength() + 1 - && ! positionableSource->isLooping()) - { - playing = false; - inputStreamEOF = true; - sendChangeMessage (this); - } - - stopped = ! playing; - - for (int i = info.buffer->getNumChannels(); --i >= 0;) - { - info.buffer->applyGainRamp (i, info.startSample, info.numSamples, - lastGain, gain); - } - } - else - { - info.clearActiveBufferRegion(); - stopped = true; - } - - lastGain = gain; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.h b/src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.h deleted file mode 100644 index 21c91f32f7..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_AudioTransportSource.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOTRANSPORTSOURCE_JUCEHEADER__ -#define __JUCE_AUDIOTRANSPORTSOURCE_JUCEHEADER__ - -#include "juce_BufferingAudioSource.h" -#include "juce_ResamplingAudioSource.h" -#include "../../events/juce_ChangeBroadcaster.h" - - -//============================================================================== -/** - An AudioSource that takes a PositionableAudioSource and allows it to be - played, stopped, started, etc. - - This can also be told use a buffer and background thread to read ahead, and - if can correct for different sample-rates. - - You may want to use one of these along with an AudioSourcePlayer and AudioIODevice - to control playback of an audio file. - - @see AudioSource, AudioSourcePlayer -*/ -class JUCE_API AudioTransportSource : public PositionableAudioSource, - public ChangeBroadcaster -{ -public: - //============================================================================== - /** Creates an AudioTransportSource. - - After creating one of these, use the setSource() method to select an input source. - */ - AudioTransportSource(); - - /** Destructor. */ - ~AudioTransportSource(); - - //============================================================================== - /** Sets the reader that is being used as the input source. - - This will stop playback, reset the position to 0 and change to the new reader. - - The source passed in will not be deleted by this object, so must be managed by - the caller. - - @param newSource the new input source to use. This may be zero - @param readAheadBufferSize a size of buffer to use for reading ahead. If this - is zero, no reading ahead will be done; if it's - greater than zero, a BufferingAudioSource will be used - to do the reading-ahead - @param sourceSampleRateToCorrectFor if this is non-zero, it specifies the sample - rate of the source, and playback will be sample-rate - adjusted to maintain playback at the correct pitch. If - this is 0, no sample-rate adjustment will be performed - */ - void setSource (PositionableAudioSource* const newSource, - int readAheadBufferSize = 0, - double sourceSampleRateToCorrectFor = 0.0); - - //============================================================================== - /** Changes the current playback position in the source stream. - - The next time the getNextAudioBlock() method is called, this - is the time from which it'll read data. - - @see getPosition - */ - void setPosition (double newPosition); - - /** Returns the position that the next data block will be read from - - This is a time in seconds. - */ - double getCurrentPosition() const; - - /** Returns true if the player has stopped because its input stream ran out of data. - */ - bool hasStreamFinished() const throw() { return inputStreamEOF; } - - //============================================================================== - /** Starts playing (if a source has been selected). - - If it starts playing, this will send a message to any ChangeListeners - that are registered with this object. - */ - void start(); - - /** Stops playing. - - If it's actually playing, this will send a message to any ChangeListeners - that are registered with this object. - */ - void stop(); - - /** Returns true if it's currently playing. */ - bool isPlaying() const throw() { return playing; } - - //============================================================================== - /** Changes the gain to apply to the output. - - @param newGain a factor by which to multiply the outgoing samples, - so 1.0 = 0dB, 0.5 = -6dB, 2.0 = 6dB, etc. - */ - void setGain (const float newGain) throw(); - - /** Returns the current gain setting. - - @see setGain - */ - float getGain() const throw() { return gain; } - - - //============================================================================== - /** Implementation of the AudioSource method. */ - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - - /** Implementation of the AudioSource method. */ - void releaseResources(); - - /** Implementation of the AudioSource method. */ - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - //============================================================================== - /** Implements the PositionableAudioSource method. */ - void setNextReadPosition (int newPosition); - - /** Implements the PositionableAudioSource method. */ - int getNextReadPosition() const; - - /** Implements the PositionableAudioSource method. */ - int getTotalLength() const; - - /** Implements the PositionableAudioSource method. */ - bool isLooping() const; - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - PositionableAudioSource* source; - ResamplingAudioSource* resamplerSource; - BufferingAudioSource* bufferingSource; - PositionableAudioSource* positionableSource; - AudioSource* masterSource; - - CriticalSection callbackLock; - float volatile gain, lastGain; - bool volatile playing, stopped; - double sampleRate, sourceSampleRate; - int blockSize, readAheadBufferSize; - bool isPrepared, inputStreamEOF; - - AudioTransportSource (const AudioTransportSource&); - const AudioTransportSource& operator= (const AudioTransportSource&); -}; - - -#endif // __JUCE_AUDIOTRANSPORTSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.cpp b/src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.cpp deleted file mode 100644 index 9a748ba911..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.cpp +++ /dev/null @@ -1,363 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_BufferingAudioSource.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../juce_core/basics/juce_Singleton.h" -#include "../../../juce_core/containers/juce_VoidArray.h" -#include "../../application/juce_DeletedAtShutdown.h" -#include "../../events/juce_Timer.h" - - -//============================================================================== -class SharedBufferingAudioSourceThread : public DeletedAtShutdown, - public Thread, - private Timer -{ -public: - SharedBufferingAudioSourceThread() - : Thread ("Audio Buffer"), - sources (8) - { - } - - ~SharedBufferingAudioSourceThread() - { - stopThread (10000); - clearSingletonInstance(); - } - - juce_DeclareSingleton (SharedBufferingAudioSourceThread, false) - - void addSource (BufferingAudioSource* source) - { - const ScopedLock sl (lock); - - if (! sources.contains ((void*) source)) - { - sources.add ((void*) source); - startThread(); - - stopTimer(); - } - - notify(); - } - - void removeSource (BufferingAudioSource* source) - { - const ScopedLock sl (lock); - sources.removeValue ((void*) source); - - if (sources.size() == 0) - startTimer (5000); - } - -private: - VoidArray sources; - CriticalSection lock; - - void run() - { - while (! threadShouldExit()) - { - bool busy = false; - - for (int i = sources.size(); --i >= 0;) - { - if (threadShouldExit()) - return; - - const ScopedLock sl (lock); - - BufferingAudioSource* const b = (BufferingAudioSource*) sources[i]; - - if (b != 0 && b->readNextBufferChunk()) - busy = true; - } - - if (! busy) - wait (500); - } - } - - void timerCallback() - { - stopTimer(); - - if (sources.size() == 0) - deleteInstance(); - } - - SharedBufferingAudioSourceThread (const SharedBufferingAudioSourceThread&); - const SharedBufferingAudioSourceThread& operator= (const SharedBufferingAudioSourceThread&); -}; - -juce_ImplementSingleton (SharedBufferingAudioSourceThread) - -//============================================================================== -BufferingAudioSource::BufferingAudioSource (PositionableAudioSource* source_, - const bool deleteSourceWhenDeleted_, - int numberOfSamplesToBuffer_) - : source (source_), - deleteSourceWhenDeleted (deleteSourceWhenDeleted_), - numberOfSamplesToBuffer (jmax (1024, numberOfSamplesToBuffer_)), - buffer (2, 0), - bufferValidStart (0), - bufferValidEnd (0), - nextPlayPos (0), - wasSourceLooping (false) -{ - jassert (source_ != 0); - - jassert (numberOfSamplesToBuffer_ > 1024); // not much point using this class if you're - // not using a larger buffer.. -} - -BufferingAudioSource::~BufferingAudioSource() -{ - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != 0) - thread->removeSource (this); - - if (deleteSourceWhenDeleted) - delete source; -} - -//============================================================================== -void BufferingAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate_) -{ - source->prepareToPlay (samplesPerBlockExpected, sampleRate_); - - sampleRate = sampleRate_; - - buffer.setSize (2, jmax (samplesPerBlockExpected * 2, numberOfSamplesToBuffer)); - buffer.clear(); - - bufferValidStart = 0; - bufferValidEnd = 0; - - SharedBufferingAudioSourceThread::getInstance()->addSource (this); - - while (bufferValidEnd - bufferValidStart < jmin (((int) sampleRate_) / 4, - buffer.getNumSamples() / 2)) - { - SharedBufferingAudioSourceThread::getInstance()->notify(); - Thread::sleep (5); - } -} - -void BufferingAudioSource::releaseResources() -{ - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != 0) - thread->removeSource (this); - - buffer.setSize (2, 0); - source->releaseResources(); -} - -void BufferingAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (bufferStartPosLock); - - const int validStart = jlimit (bufferValidStart, bufferValidEnd, nextPlayPos) - nextPlayPos; - const int validEnd = jlimit (bufferValidStart, bufferValidEnd, nextPlayPos + info.numSamples) - nextPlayPos; - - if (validStart == validEnd) - { - // total cache miss - info.clearActiveBufferRegion(); - } - else - { - if (validStart > 0) - info.buffer->clear (info.startSample, validStart); // partial cache miss at start - - if (validEnd < info.numSamples) - info.buffer->clear (info.startSample + validEnd, - info.numSamples - validEnd); // partial cache miss at end - - if (validStart < validEnd) - { - for (int chan = jmin (2, info.buffer->getNumChannels()); --chan >= 0;) - { - const int startBufferIndex = (validStart + nextPlayPos) % buffer.getNumSamples(); - const int endBufferIndex = (validEnd + nextPlayPos) % buffer.getNumSamples(); - - if (startBufferIndex < endBufferIndex) - { - info.buffer->copyFrom (chan, info.startSample + validStart, - buffer, - chan, startBufferIndex, - validEnd - validStart); - } - else - { - const int initialSize = buffer.getNumSamples() - startBufferIndex; - - info.buffer->copyFrom (chan, info.startSample + validStart, - buffer, - chan, startBufferIndex, - initialSize); - - info.buffer->copyFrom (chan, info.startSample + validStart + initialSize, - buffer, - chan, 0, - (validEnd - validStart) - initialSize); - } - } - } - - nextPlayPos += info.numSamples; - - if (source->isLooping() && nextPlayPos > 0) - nextPlayPos %= source->getTotalLength(); - } - - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != 0) - thread->notify(); -} - -int BufferingAudioSource::getNextReadPosition() const -{ - return (source->isLooping() && nextPlayPos > 0) - ? nextPlayPos % source->getTotalLength() - : nextPlayPos; -} - -void BufferingAudioSource::setNextReadPosition (int newPosition) -{ - const ScopedLock sl (bufferStartPosLock); - - nextPlayPos = newPosition; - - SharedBufferingAudioSourceThread* const thread = SharedBufferingAudioSourceThread::getInstanceWithoutCreating(); - - if (thread != 0) - thread->notify(); -} - -bool BufferingAudioSource::readNextBufferChunk() -{ - bufferStartPosLock.enter(); - - if (wasSourceLooping != isLooping()) - { - wasSourceLooping = isLooping(); - bufferValidStart = 0; - bufferValidEnd = 0; - } - - int newBVS = jmax (0, nextPlayPos); - int newBVE = newBVS + buffer.getNumSamples() - 4; - int sectionToReadStart = 0; - int sectionToReadEnd = 0; - - const int maxChunkSize = 2048; - - if (newBVS < bufferValidStart || newBVS >= bufferValidEnd) - { - newBVE = jmin (newBVE, newBVS + maxChunkSize); - - sectionToReadStart = newBVS; - sectionToReadEnd = newBVE; - - bufferValidStart = 0; - bufferValidEnd = 0; - } - else if (abs (newBVS - bufferValidStart) > 512 - || abs (newBVE - bufferValidEnd) > 512) - { - newBVE = jmin (newBVE, bufferValidEnd + maxChunkSize); - - sectionToReadStart = bufferValidEnd; - sectionToReadEnd = newBVE; - - bufferValidStart = newBVS; - bufferValidEnd = jmin (bufferValidEnd, newBVE); - } - - bufferStartPosLock.exit(); - - if (sectionToReadStart != sectionToReadEnd) - { - const int bufferIndexStart = sectionToReadStart % buffer.getNumSamples(); - const int bufferIndexEnd = sectionToReadEnd % buffer.getNumSamples(); - - if (bufferIndexStart < bufferIndexEnd) - { - readBufferSection (sectionToReadStart, - sectionToReadEnd - sectionToReadStart, - bufferIndexStart); - } - else - { - const int initialSize = buffer.getNumSamples() - bufferIndexStart; - - readBufferSection (sectionToReadStart, - initialSize, - bufferIndexStart); - - readBufferSection (sectionToReadStart + initialSize, - (sectionToReadEnd - sectionToReadStart) - initialSize, - 0); - } - - const ScopedLock sl2 (bufferStartPosLock); - - bufferValidStart = newBVS; - bufferValidEnd = newBVE; - - return true; - } - else - { - return false; - } -} - -void BufferingAudioSource::readBufferSection (int start, int length, int bufferOffset) -{ - if (source->getNextReadPosition() != start) - source->setNextReadPosition (start); - - AudioSourceChannelInfo info; - info.buffer = &buffer; - info.startSample = bufferOffset; - info.numSamples = length; - - source->getNextAudioBlock (info); -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.h deleted file mode 100644 index 913b2dfd2a..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_BufferingAudioSource.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_BUFFERINGAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_BUFFERINGAUDIOSOURCE_JUCEHEADER__ - -#include "juce_PositionableAudioSource.h" -#include "../../../juce_core/threads/juce_Thread.h" -#include "../dsp/juce_AudioSampleBuffer.h" - - -//============================================================================== -/** - An AudioSource which takes another source as input, and buffers it using a thread. - - Create this as a wrapper around another thread, and it will read-ahead with - a background thread to smooth out playback. You can either create one of these - directly, or use it indirectly using an AudioTransportSource. - - @see PositionableAudioSource, AudioTransportSource -*/ -class JUCE_API BufferingAudioSource : public PositionableAudioSource -{ -public: - //============================================================================== - /** Creates a BufferingAudioSource. - - @param source the input source to read from - @param deleteSourceWhenDeleted if true, then the input source object will - be deleted when this object is deleted - @param numberOfSamplesToBuffer the size of buffer to use for reading ahead - */ - BufferingAudioSource (PositionableAudioSource* source, - const bool deleteSourceWhenDeleted, - int numberOfSamplesToBuffer); - - /** Destructor. - - The input source may be deleted depending on whether the deleteSourceWhenDeleted - flag was set in the constructor. - */ - ~BufferingAudioSource(); - - //============================================================================== - /** Implementation of the AudioSource method. */ - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - - /** Implementation of the AudioSource method. */ - void releaseResources(); - - /** Implementation of the AudioSource method. */ - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - //============================================================================== - /** Implements the PositionableAudioSource method. */ - void setNextReadPosition (int newPosition); - - /** Implements the PositionableAudioSource method. */ - int getNextReadPosition() const; - - /** Implements the PositionableAudioSource method. */ - int getTotalLength() const { return source->getTotalLength(); } - - /** Implements the PositionableAudioSource method. */ - bool isLooping() const { return source->isLooping(); } - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - PositionableAudioSource* source; - bool deleteSourceWhenDeleted; - int numberOfSamplesToBuffer; - AudioSampleBuffer buffer; - CriticalSection bufferStartPosLock; - int volatile bufferValidStart, bufferValidEnd, nextPlayPos; - bool wasSourceLooping; - double volatile sampleRate; - - friend class SharedBufferingAudioSourceThread; - bool readNextBufferChunk(); - void readBufferSection (int start, int length, int bufferOffset); - - BufferingAudioSource (const BufferingAudioSource&); - const BufferingAudioSource& operator= (const BufferingAudioSource&); -}; - - -#endif // __JUCE_BUFFERINGAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp b/src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp deleted file mode 100644 index 3cfdcbc271..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_ChannelRemappingAudioSource.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -ChannelRemappingAudioSource::ChannelRemappingAudioSource (AudioSource* const source_, - const bool deleteSourceWhenDeleted_) - : requiredNumberOfChannels (2), - source (source_), - deleteSourceWhenDeleted (deleteSourceWhenDeleted_), - buffer (2, 16) -{ - remappedInfo.buffer = &buffer; - remappedInfo.startSample = 0; -} - -ChannelRemappingAudioSource::~ChannelRemappingAudioSource() -{ - if (deleteSourceWhenDeleted) - delete source; -} - -//============================================================================== -void ChannelRemappingAudioSource::setNumberOfChannelsToProduce (const int requiredNumberOfChannels_) throw() -{ - const ScopedLock sl (lock); - requiredNumberOfChannels = requiredNumberOfChannels_; -} - -void ChannelRemappingAudioSource::clearAllMappings() throw() -{ - const ScopedLock sl (lock); - - remappedInputs.clear(); - remappedOutputs.clear(); -} - -void ChannelRemappingAudioSource::setInputChannelMapping (const int destIndex, const int sourceIndex) throw() -{ - const ScopedLock sl (lock); - - while (remappedInputs.size() < destIndex) - remappedInputs.add (-1); - - remappedInputs.set (destIndex, sourceIndex); -} - -void ChannelRemappingAudioSource::setOutputChannelMapping (const int sourceIndex, const int destIndex) throw() -{ - const ScopedLock sl (lock); - - while (remappedOutputs.size() < sourceIndex) - remappedOutputs.add (-1); - - remappedOutputs.set (sourceIndex, destIndex); -} - -int ChannelRemappingAudioSource::getRemappedInputChannel (const int inputChannelIndex) const throw() -{ - const ScopedLock sl (lock); - - if (inputChannelIndex >= 0 && inputChannelIndex < remappedInputs.size()) - return remappedInputs.getUnchecked (inputChannelIndex); - - return -1; -} - -int ChannelRemappingAudioSource::getRemappedOutputChannel (const int outputChannelIndex) const throw() -{ - const ScopedLock sl (lock); - - if (outputChannelIndex >= 0 && outputChannelIndex < remappedOutputs.size()) - return remappedOutputs .getUnchecked (outputChannelIndex); - - return -1; -} - -//============================================================================== -void ChannelRemappingAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - source->prepareToPlay (samplesPerBlockExpected, sampleRate); -} - -void ChannelRemappingAudioSource::releaseResources() -{ - source->releaseResources(); -} - -void ChannelRemappingAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) -{ - const ScopedLock sl (lock); - - buffer.setSize (requiredNumberOfChannels, bufferToFill.numSamples, false, false, true); - - const int numChans = bufferToFill.buffer->getNumChannels(); - - int i; - for (i = 0; i < buffer.getNumChannels(); ++i) - { - const int remappedChan = getRemappedInputChannel (i); - - if (remappedChan >= 0 && remappedChan < numChans) - { - buffer.copyFrom (i, 0, *bufferToFill.buffer, - remappedChan, - bufferToFill.startSample, - bufferToFill.numSamples); - } - else - { - buffer.clear (i, 0, bufferToFill.numSamples); - } - } - - remappedInfo.numSamples = bufferToFill.numSamples; - - source->getNextAudioBlock (remappedInfo); - - bufferToFill.clearActiveBufferRegion(); - - for (i = 0; i < requiredNumberOfChannels; ++i) - { - const int remappedChan = getRemappedOutputChannel (i); - - if (remappedChan >= 0 && remappedChan < numChans) - { - bufferToFill.buffer->addFrom (remappedChan, bufferToFill.startSample, - buffer, i, 0, bufferToFill.numSamples); - - } - } -} - -//============================================================================== -XmlElement* ChannelRemappingAudioSource::createXml() const throw() -{ - XmlElement* e = new XmlElement (T("MAPPINGS")); - - String ins, outs; - int i; - - const ScopedLock sl (lock); - - for (i = 0; i < remappedInputs.size(); ++i) - ins << remappedInputs.getUnchecked(i) << T(' '); - - for (i = 0; i < remappedOutputs.size(); ++i) - outs << remappedOutputs.getUnchecked(i) << T(' '); - - e->setAttribute (T("inputs"), ins.trimEnd()); - e->setAttribute (T("outputs"), outs.trimEnd()); - - return e; -} - -void ChannelRemappingAudioSource::restoreFromXml (const XmlElement& e) throw() -{ - if (e.hasTagName (T("MAPPINGS"))) - { - const ScopedLock sl (lock); - - clearAllMappings(); - - StringArray ins, outs; - ins.addTokens (e.getStringAttribute (T("inputs")), false); - outs.addTokens (e.getStringAttribute (T("outputs")), false); - - int i; - for (i = 0; i < ins.size(); ++i) - remappedInputs.add (ins[i].getIntValue()); - - for (i = 0; i < outs.size(); ++i) - remappedOutputs.add (outs[i].getIntValue()); - } -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.h deleted file mode 100644 index 11935576ac..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_ChannelRemappingAudioSource.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_CHANNELREMAPPINGAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_CHANNELREMAPPINGAUDIOSOURCE_JUCEHEADER__ - -#include "juce_AudioSource.h" -#include "../../../juce_core/text/juce_XmlElement.h" - - -//============================================================================== -/** - An AudioSource that takes the audio from another source, and re-maps its - input and output channels to a different arrangement. - - You can use this to increase or decrease the number of channels that an - audio source uses, or to re-order those channels. - - Call the reset() method before using it to set up a default mapping, and then - the setInputChannelMapping() and setOutputChannelMapping() methods to - create an appropriate mapping, otherwise no channels will be connected and - it'll produce silence. - - @see AudioSource -*/ -class ChannelRemappingAudioSource : public AudioSource -{ -public: - //============================================================================== - /** Creates a remapping source that will pass on audio from the given input. - - @param source the input source to use. Make sure that this doesn't - get deleted before the ChannelRemappingAudioSource object - @param deleteSourceWhenDeleted if true, the input source will be deleted - when this object is deleted, if false, the caller is - responsible for its deletion - */ - ChannelRemappingAudioSource (AudioSource* const source, - const bool deleteSourceWhenDeleted); - - /** Destructor. */ - ~ChannelRemappingAudioSource(); - - //============================================================================== - /** Specifies a number of channels that this audio source must produce from its - getNextAudioBlock() callback. - */ - void setNumberOfChannelsToProduce (const int requiredNumberOfChannels) throw(); - - /** Clears any mapped channels. - - After this, no channels are mapped, so this object will produce silence. Create - some mappings with setInputChannelMapping() and setOutputChannelMapping(). - */ - void clearAllMappings() throw(); - - /** Creates an input channel mapping. - - When the getNextAudioBlock() method is called, the data in channel sourceChannelIndex of the incoming - data will be sent to destChannelIndex of our input source. - - @param destChannelIndex the index of an input channel in our input audio source (i.e. the - source specified when this object was created). - @param sourceChannelIndex the index of the input channel in the incoming audio data buffer - during our getNextAudioBlock() callback - */ - void setInputChannelMapping (const int destChannelIndex, - const int sourceChannelIndex) throw(); - - /** Creates an output channel mapping. - - When the getNextAudioBlock() method is called, the data returned in channel sourceChannelIndex by - our input audio source will be copied to channel destChannelIndex of the final buffer. - - @param sourceChannelIndex the index of an output channel coming from our input audio source - (i.e. the source specified when this object was created). - @param destChannelIndex the index of the output channel in the incoming audio data buffer - during our getNextAudioBlock() callback - */ - void setOutputChannelMapping (const int sourceChannelIndex, - const int destChannelIndex) throw(); - - /** Returns the channel from our input that will be sent to channel inputChannelIndex of - our input audio source. - */ - int getRemappedInputChannel (const int inputChannelIndex) const throw(); - - /** Returns the output channel to which channel outputChannelIndex of our input audio - source will be sent to. - */ - int getRemappedOutputChannel (const int outputChannelIndex) const throw(); - - - //============================================================================== - /** Returns an XML object to encapsulate the state of the mappings. - - @see restoreFromXml - */ - XmlElement* createXml() const throw(); - - /** Restores the mappings from an XML object created by createXML(). - - @see createXml - */ - void restoreFromXml (const XmlElement& e) throw(); - - //============================================================================== - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - void releaseResources(); - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - int requiredNumberOfChannels; - Array remappedInputs, remappedOutputs; - - AudioSource* const source; - const bool deleteSourceWhenDeleted; - - AudioSampleBuffer buffer; - AudioSourceChannelInfo remappedInfo; - - CriticalSection lock; - - ChannelRemappingAudioSource (const ChannelRemappingAudioSource&); - const ChannelRemappingAudioSource& operator= (const ChannelRemappingAudioSource&); -}; - - -#endif // __JUCE_CHANNELREMAPPINGAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp b/src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp deleted file mode 100644 index 0778503a77..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_IIRFilterAudioSource.h" - -//============================================================================== -IIRFilterAudioSource::IIRFilterAudioSource (AudioSource* const inputSource, - const bool deleteInputWhenDeleted_) - : input (inputSource), - deleteInputWhenDeleted (deleteInputWhenDeleted_) -{ - jassert (inputSource != 0); - - for (int i = 2; --i >= 0;) - iirFilters.add (new IIRFilter()); -} - -IIRFilterAudioSource::~IIRFilterAudioSource() -{ - if (deleteInputWhenDeleted) - delete input; -} - -//============================================================================== -void IIRFilterAudioSource::setFilterParameters (const IIRFilter& newSettings) -{ - for (int i = iirFilters.size(); --i >= 0;) - iirFilters.getUnchecked(i)->copyCoefficientsFrom (newSettings); -} - -//============================================================================== -void IIRFilterAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - input->prepareToPlay (samplesPerBlockExpected, sampleRate); - - for (int i = iirFilters.size(); --i >= 0;) - iirFilters.getUnchecked(i)->reset(); -} - -void IIRFilterAudioSource::releaseResources() -{ - input->releaseResources(); -} - -void IIRFilterAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) -{ - input->getNextAudioBlock (bufferToFill); - - const int numChannels = bufferToFill.buffer->getNumChannels(); - - while (numChannels > iirFilters.size()) - iirFilters.add (new IIRFilter (*iirFilters.getUnchecked (0))); - - for (int i = 0; i < numChannels; ++i) - iirFilters.getUnchecked(i) - ->processSamples (bufferToFill.buffer->getSampleData (i, bufferToFill.startSample), - bufferToFill.numSamples); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h deleted file mode 100644 index f94746bf3b..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_IIRFILTERAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_IIRFILTERAUDIOSOURCE_JUCEHEADER__ - -#include "juce_AudioSource.h" -#include "../dsp/juce_IIRFilter.h" -#include "../../../juce_core/containers/juce_OwnedArray.h" - - -//============================================================================== -/** - An AudioSource that performs an IIR filter on another source. -*/ -class JUCE_API IIRFilterAudioSource : public AudioSource -{ -public: - //============================================================================== - /** Creates a IIRFilterAudioSource for a given input source. - - @param inputSource the input source to read from - @param deleteInputWhenDeleted if true, the input source will be deleted when - this object is deleted - */ - IIRFilterAudioSource (AudioSource* const inputSource, - const bool deleteInputWhenDeleted); - - /** Destructor. */ - ~IIRFilterAudioSource(); - - //============================================================================== - /** Changes the filter to use the same parameters as the one being passed in. - */ - void setFilterParameters (const IIRFilter& newSettings); - - //============================================================================== - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - void releaseResources(); - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - AudioSource* const input; - const bool deleteInputWhenDeleted; - OwnedArray iirFilters; - - IIRFilterAudioSource (const IIRFilterAudioSource&); - const IIRFilterAudioSource& operator= (const IIRFilterAudioSource&); -}; - - -#endif // __JUCE_IIRFILTERAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.cpp b/src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.cpp deleted file mode 100644 index c87b3c22bd..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MixerAudioSource.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -MixerAudioSource::MixerAudioSource() - : tempBuffer (2, 0), - currentSampleRate (0.0), - bufferSizeExpected (0) -{ -} - -MixerAudioSource::~MixerAudioSource() -{ - removeAllInputs(); -} - -//============================================================================== -void MixerAudioSource::addInputSource (AudioSource* input, const bool deleteWhenRemoved) -{ - if (input != 0 && ! inputs.contains (input)) - { - lock.enter(); - double localRate = currentSampleRate; - int localBufferSize = bufferSizeExpected; - lock.exit(); - - if (localRate != 0.0) - input->prepareToPlay (localBufferSize, localRate); - - const ScopedLock sl (lock); - - inputsToDelete.setBit (inputs.size(), deleteWhenRemoved); - inputs.add (input); - } -} - -void MixerAudioSource::removeInputSource (AudioSource* input, const bool deleteInput) -{ - if (input != 0) - { - lock.enter(); - const int index = inputs.indexOf ((void*) input); - - if (index >= 0) - { - inputsToDelete.shiftBits (index, 1); - inputs.remove (index); - } - - lock.exit(); - - if (index >= 0) - { - input->releaseResources(); - - if (deleteInput) - delete input; - } - } -} - -void MixerAudioSource::removeAllInputs() -{ - lock.enter(); - VoidArray inputsCopy (inputs); - BitArray inputsToDeleteCopy (inputsToDelete); - inputs.clear(); - lock.exit(); - - for (int i = inputsCopy.size(); --i >= 0;) - if (inputsToDeleteCopy[i]) - delete (AudioSource*) inputsCopy[i]; -} - -void MixerAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) -{ - tempBuffer.setSize (2, samplesPerBlockExpected); - - const ScopedLock sl (lock); - - currentSampleRate = sampleRate; - bufferSizeExpected = samplesPerBlockExpected; - - for (int i = inputs.size(); --i >= 0;) - ((AudioSource*) inputs.getUnchecked(i))->prepareToPlay (samplesPerBlockExpected, - sampleRate); -} - -void MixerAudioSource::releaseResources() -{ - const ScopedLock sl (lock); - - for (int i = inputs.size(); --i >= 0;) - ((AudioSource*) inputs.getUnchecked(i))->releaseResources(); - - tempBuffer.setSize (2, 0); - - currentSampleRate = 0; - bufferSizeExpected = 0; -} - -void MixerAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (lock); - - if (inputs.size() > 0) - { - ((AudioSource*) inputs.getUnchecked(0))->getNextAudioBlock (info); - - if (inputs.size() > 1) - { - tempBuffer.setSize (jmax (1, info.buffer->getNumChannels()), - info.buffer->getNumSamples()); - - AudioSourceChannelInfo info2; - info2.buffer = &tempBuffer; - info2.numSamples = info.numSamples; - info2.startSample = 0; - - for (int i = 1; i < inputs.size(); ++i) - { - ((AudioSource*) inputs.getUnchecked(i))->getNextAudioBlock (info2); - - for (int chan = 0; chan < info.buffer->getNumChannels(); ++chan) - info.buffer->addFrom (chan, info.startSample, tempBuffer, chan, 0, info.numSamples); - } - } - } - else - { - info.clearActiveBufferRegion(); - } -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.h deleted file mode 100644 index 2fa91fac0d..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_MixerAudioSource.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIXERAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_MIXERAUDIOSOURCE_JUCEHEADER__ - -#include "juce_AudioSource.h" -#include "../../../juce_core/threads/juce_CriticalSection.h" -#include "../../../juce_core/containers/juce_VoidArray.h" -#include "../../../juce_core/containers/juce_BitArray.h" - - -//============================================================================== -/** - An AudioSource that mixes together the output of a set of other AudioSources. - - Input sources can be added and removed while the mixer is running as long as their - prepareToPlay() and releaseResources() methods are called before and after adding - them to the mixer. -*/ -class JUCE_API MixerAudioSource : public AudioSource -{ -public: - //============================================================================== - /** Creates a MixerAudioSource. - */ - MixerAudioSource(); - - /** Destructor. */ - ~MixerAudioSource(); - - //============================================================================== - /** Adds an input source to the mixer. - - If the mixer is running you'll need to make sure that the input source - is ready to play by calling its prepareToPlay() method before adding it. - If the mixer is stopped, then its input sources will be automatically - prepared when the mixer's prepareToPlay() method is called. - - @param newInput the source to add to the mixer - @param deleteWhenRemoved if true, then this source will be deleted when - the mixer is deleted or when removeAllInputs() is - called (unless the source is previously removed - with the removeInputSource method) - */ - void addInputSource (AudioSource* newInput, - const bool deleteWhenRemoved); - - /** Removes an input source. - - If the mixer is running, this will remove the source but not call its - releaseResources() method, so the caller might want to do this manually. - - @param input the source to remove - @param deleteSource whether to delete this source after it's been removed - */ - void removeInputSource (AudioSource* input, - const bool deleteSource); - - /** Removes all the input sources. - - If the mixer is running, this will remove the sources but not call their - releaseResources() method, so the caller might want to do this manually. - - Any sources which were added with the deleteWhenRemoved flag set will be - deleted by this method. - */ - void removeAllInputs(); - - //============================================================================== - /** Implementation of the AudioSource method. - - This will call prepareToPlay() on all its input sources. - */ - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - - /** Implementation of the AudioSource method. - - This will call releaseResources() on all its input sources. - */ - void releaseResources(); - - /** Implementation of the AudioSource method. */ - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - VoidArray inputs; - BitArray inputsToDelete; - CriticalSection lock; - AudioSampleBuffer tempBuffer; - double currentSampleRate; - int bufferSizeExpected; - - MixerAudioSource (const MixerAudioSource&); - const MixerAudioSource& operator= (const MixerAudioSource&); -}; - - -#endif // __JUCE_MIXERAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_PositionableAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_PositionableAudioSource.h deleted file mode 100644 index 2dbbb07734..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_PositionableAudioSource.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_POSITIONABLEAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_POSITIONABLEAUDIOSOURCE_JUCEHEADER__ - -#include "juce_AudioSource.h" - - -//============================================================================== -/** - A type of AudioSource which can be repositioned. - - The basic AudioSource just streams continuously with no idea of a current - time or length, so the PositionableAudioSource is used for a finite stream - that has a current read position. - - @see AudioSource, AudioTransportSource -*/ -class JUCE_API PositionableAudioSource : public AudioSource -{ -protected: - //============================================================================== - /** Creates the PositionableAudioSource. */ - PositionableAudioSource() throw() {} - -public: - /** Destructor */ - ~PositionableAudioSource() {} - - //============================================================================== - /** Tells the stream to move to a new position. - - Calling this indicates that the next call to AudioSource::getNextAudioBlock() - should return samples from this position. - - Note that this may be called on a different thread to getNextAudioBlock(), - so the subclass should make sure it's synchronised. - */ - virtual void setNextReadPosition (int newPosition) = 0; - - /** Returns the position from which the next block will be returned. - - @see setNextReadPosition - */ - virtual int getNextReadPosition() const = 0; - - /** Returns the total length of the stream (in samples). */ - virtual int getTotalLength() const = 0; - - /** Returns true if this source is actually playing in a loop. */ - virtual bool isLooping() const = 0; -}; - - -#endif // __JUCE_POSITIONABLEAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.cpp b/src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.cpp deleted file mode 100644 index e6036b1121..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.cpp +++ /dev/null @@ -1,267 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_ResamplingAudioSource.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -ResamplingAudioSource::ResamplingAudioSource (AudioSource* const inputSource, - const bool deleteInputWhenDeleted_) - : input (inputSource), - deleteInputWhenDeleted (deleteInputWhenDeleted_), - ratio (1.0), - lastRatio (1.0), - buffer (2, 0), - sampsInBuffer (0) -{ - jassert (input != 0); -} - -ResamplingAudioSource::~ResamplingAudioSource() -{ - if (deleteInputWhenDeleted) - delete input; -} - -void ResamplingAudioSource::setResamplingRatio (const double samplesInPerOutputSample) -{ - jassert (samplesInPerOutputSample > 0); - - const ScopedLock sl (ratioLock); - ratio = jmax (0.0, samplesInPerOutputSample); -} - -void ResamplingAudioSource::prepareToPlay (int samplesPerBlockExpected, - double sampleRate) -{ - const ScopedLock sl (ratioLock); - - input->prepareToPlay (samplesPerBlockExpected, sampleRate); - - buffer.setSize (2, roundDoubleToInt (samplesPerBlockExpected * ratio) + 32); - buffer.clear(); - sampsInBuffer = 0; - bufferPos = 0; - subSampleOffset = 0.0; - - createLowPass (ratio); - resetFilters(); -} - -void ResamplingAudioSource::releaseResources() -{ - input->releaseResources(); - buffer.setSize (2, 0); -} - -void ResamplingAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - const ScopedLock sl (ratioLock); - - if (lastRatio != ratio) - { - createLowPass (ratio); - lastRatio = ratio; - } - - const int sampsNeeded = roundDoubleToInt (info.numSamples * ratio) + 2; - - int bufferSize = buffer.getNumSamples(); - - if (bufferSize < sampsNeeded + 8) - { - bufferPos %= bufferSize; - bufferSize = sampsNeeded + 32; - buffer.setSize (buffer.getNumChannels(), bufferSize, true, true); - } - - bufferPos %= bufferSize; - - int endOfBufferPos = bufferPos + sampsInBuffer; - - while (sampsNeeded > sampsInBuffer) - { - endOfBufferPos %= bufferSize; - - int numToDo = jmin (sampsNeeded - sampsInBuffer, - bufferSize - endOfBufferPos); - - AudioSourceChannelInfo readInfo; - readInfo.buffer = &buffer; - readInfo.numSamples = numToDo; - readInfo.startSample = endOfBufferPos; - - input->getNextAudioBlock (readInfo); - - if (ratio > 1.0001) - { - // for down-sampling, pre-apply the filter.. - - for (int i = jmin (2, info.buffer->getNumChannels()); --i >= 0;) - applyFilter (buffer.getSampleData (i, endOfBufferPos), numToDo, filterStates[i]); - } - - sampsInBuffer += numToDo; - endOfBufferPos += numToDo; - } - - float* dl = info.buffer->getSampleData (0, info.startSample); - float* dr = (info.buffer->getNumChannels() > 1) ? info.buffer->getSampleData (1, info.startSample) : 0; - - const float* const bl = buffer.getSampleData (0, 0); - const float* const br = buffer.getSampleData (1, 0); - - int nextPos = (bufferPos + 1) % bufferSize; - - for (int m = info.numSamples; --m >= 0;) - { - const float alpha = (float) subSampleOffset; - const float invAlpha = 1.0f - alpha; - - *dl++ = bl [bufferPos] * invAlpha + bl [nextPos] * alpha; - - if (dr != 0) - *dr++ = br [bufferPos] * invAlpha + br [nextPos] * alpha; - - subSampleOffset += ratio; - - jassert (sampsInBuffer > 0); - - while (subSampleOffset >= 1.0) - { - if (++bufferPos >= bufferSize) - bufferPos = 0; - - --sampsInBuffer; - - nextPos = (bufferPos + 1) % bufferSize; - subSampleOffset -= 1.0; - } - } - - if (ratio < 0.9999) - { - // for up-sampling, apply the filter after transposing.. - - for (int i = jmin (2, info.buffer->getNumChannels()); --i >= 0;) - applyFilter (info.buffer->getSampleData (i, info.startSample), info.numSamples, filterStates[i]); - } - else if (ratio <= 1.0001) - { - // if the filter's not currently being applied, keep it stoked with the last couple of samples to avoid discontinuities - for (int i = jmin (2, info.buffer->getNumChannels()); --i >= 0;) - { - const float* const endOfBuffer = info.buffer->getSampleData (i, info.startSample + info.numSamples - 1); - FilterState& fs = filterStates[i]; - - if (info.numSamples > 1) - { - fs.y2 = fs.x2 = *(endOfBuffer - 1); - } - else - { - fs.y2 = fs.y1; - fs.x2 = fs.x1; - } - - fs.y1 = fs.x1 = *endOfBuffer; - } - } - - jassert (sampsInBuffer >= 0); -} - -void ResamplingAudioSource::createLowPass (const double ratio) -{ - const double proportionalRate = (ratio > 1.0) ? 0.5 / ratio - : 0.5 * ratio; - - const double n = 1.0 / tan (double_Pi * jmax (0.001, proportionalRate)); - const double nSquared = n * n; - const double c1 = 1.0 / (1.0 + sqrt (2.0) * n + nSquared); - - setFilterCoefficients (c1, - c1 * 2.0f, - c1, - 1.0, - c1 * 2.0 * (1.0 - nSquared), - c1 * (1.0 - sqrt (2.0) * n + nSquared)); -} - -void ResamplingAudioSource::setFilterCoefficients (double c1, double c2, double c3, double c4, double c5, double c6) -{ - const double a = 1.0 / c4; - - c1 *= a; - c2 *= a; - c3 *= a; - c5 *= a; - c6 *= a; - - coefficients[0] = c1; - coefficients[1] = c2; - coefficients[2] = c3; - coefficients[3] = c4; - coefficients[4] = c5; - coefficients[5] = c6; -} - -void ResamplingAudioSource::resetFilters() -{ - zeromem (filterStates, sizeof (filterStates)); -} - -void ResamplingAudioSource::applyFilter (float* samples, int num, FilterState& fs) -{ - while (--num >= 0) - { - const double in = *samples; - - double out = coefficients[0] * in - + coefficients[1] * fs.x1 - + coefficients[2] * fs.x2 - - coefficients[4] * fs.y1 - - coefficients[5] * fs.y2; - -#if JUCE_INTEL - if (! (out < -1.0e-8 || out > 1.0e-8)) - out = 0; -#endif - - fs.x2 = fs.x1; - fs.x1 = in; - fs.y2 = fs.y1; - fs.y1 = out; - - *samples++ = (float) out; - } -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.h deleted file mode 100644 index d2def9b606..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_ResamplingAudioSource.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_RESAMPLINGAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_RESAMPLINGAUDIOSOURCE_JUCEHEADER__ - -#include "juce_AudioSource.h" -#include "../../../juce_core/threads/juce_CriticalSection.h" - -//============================================================================== -/** - A type of AudioSource that takes an input source and changes its sample rate. - - @see AudioSource -*/ -class JUCE_API ResamplingAudioSource : public AudioSource -{ -public: - //============================================================================== - /** Creates a ResamplingAudioSource for a given input source. - - @param inputSource the input source to read from - @param deleteInputWhenDeleted if true, the input source will be deleted when - this object is deleted - */ - ResamplingAudioSource (AudioSource* const inputSource, - const bool deleteInputWhenDeleted); - - /** Destructor. */ - ~ResamplingAudioSource(); - - /** Changes the resampling ratio. - - (This value can be changed at any time, even while the source is running). - - @param samplesInPerOutputSample if set to 1.0, the input is passed through; higher - values will speed it up; lower values will slow it - down. The ratio must be greater than 0 - */ - void setResamplingRatio (const double samplesInPerOutputSample); - - /** Returns the current resampling ratio. - - This is the value that was set by setResamplingRatio(). - */ - double getResamplingRatio() const throw() { return ratio; } - - //============================================================================== - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - void releaseResources(); - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioSource* const input; - const bool deleteInputWhenDeleted; - double ratio, lastRatio; - AudioSampleBuffer buffer; - int bufferPos, sampsInBuffer; - double subSampleOffset; - double coefficients[6]; - CriticalSection ratioLock; - - void setFilterCoefficients (double c1, double c2, double c3, double c4, double c5, double c6); - void createLowPass (const double proportionalRate); - - struct FilterState - { - double x1, x2, y1, y2; - }; - - FilterState filterStates[2]; - void resetFilters(); - - void applyFilter (float* samples, int num, FilterState& fs); - - ResamplingAudioSource (const ResamplingAudioSource&); - const ResamplingAudioSource& operator= (const ResamplingAudioSource&); -}; - - -#endif // __JUCE_RESAMPLINGAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp b/src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp deleted file mode 100644 index a7728cd7cb..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_ToneGeneratorAudioSource.h" - - -//============================================================================== -ToneGeneratorAudioSource::ToneGeneratorAudioSource() - : frequency (1000.0), - sampleRate (44100.0), - currentPhase (0.0), - phasePerSample (0.0), - amplitude (0.5f) -{ -} - -ToneGeneratorAudioSource::~ToneGeneratorAudioSource() -{ -} - -//============================================================================== -void ToneGeneratorAudioSource::setAmplitude (const float newAmplitude) -{ - amplitude = newAmplitude; -} - -void ToneGeneratorAudioSource::setFrequency (const double newFrequencyHz) -{ - frequency = newFrequencyHz; - phasePerSample = 0.0; -} - -//============================================================================== -void ToneGeneratorAudioSource::prepareToPlay (int /*samplesPerBlockExpected*/, - double sampleRate_) -{ - currentPhase = 0.0; - phasePerSample = 0.0; - sampleRate = sampleRate_; -} - -void ToneGeneratorAudioSource::releaseResources() -{ -} - -void ToneGeneratorAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& info) -{ - if (phasePerSample == 0.0) - phasePerSample = double_Pi * 2.0 / (sampleRate / frequency); - - for (int i = 0; i < info.numSamples; ++i) - { - const float sample = amplitude * (float) sin (currentPhase); - currentPhase += phasePerSample; - - for (int j = info.buffer->getNumChannels(); --j >= 0;) - *info.buffer->getSampleData (j, info.startSample + i) = sample; - } -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.h b/src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.h deleted file mode 100644 index 94c45dfbc0..0000000000 --- a/src/juce_appframework/audio/audio_sources/juce_ToneGeneratorAudioSource.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_TONEGENERATORAUDIOSOURCE_JUCEHEADER__ -#define __JUCE_TONEGENERATORAUDIOSOURCE_JUCEHEADER__ - -#include "juce_AudioSource.h" - - -//============================================================================== -/** - A simple AudioSource that generates a sine wave. - -*/ -class JUCE_API ToneGeneratorAudioSource : public AudioSource -{ -public: - //============================================================================== - /** Creates a ToneGeneratorAudioSource. */ - ToneGeneratorAudioSource(); - - /** Destructor. */ - ~ToneGeneratorAudioSource(); - - //============================================================================== - /** Sets the signal's amplitude. */ - void setAmplitude (const float newAmplitude); - - /** Sets the signal's frequency. */ - void setFrequency (const double newFrequencyHz); - - - //============================================================================== - /** Implementation of the AudioSource method. */ - void prepareToPlay (int samplesPerBlockExpected, double sampleRate); - - /** Implementation of the AudioSource method. */ - void releaseResources(); - - /** Implementation of the AudioSource method. */ - void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - double frequency, sampleRate; - double currentPhase, phasePerSample; - float amplitude; - - ToneGeneratorAudioSource (const ToneGeneratorAudioSource&); - const ToneGeneratorAudioSource& operator= (const ToneGeneratorAudioSource&); -}; - - -#endif // __JUCE_TONEGENERATORAUDIOSOURCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp b/src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp deleted file mode 100644 index 0dd29d26b1..0000000000 --- a/src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp +++ /dev/null @@ -1,971 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioDeviceManager.h" -#include "../../gui/components/juce_Desktop.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" -#include "../dsp/juce_AudioSampleBuffer.h" - - -//============================================================================== -AudioDeviceManager::AudioDeviceSetup::AudioDeviceSetup() - : sampleRate (0), - bufferSize (0), - useDefaultInputChannels (true), - useDefaultOutputChannels (true) -{ -} - -bool AudioDeviceManager::AudioDeviceSetup::operator== (const AudioDeviceManager::AudioDeviceSetup& other) const -{ - return outputDeviceName == other.outputDeviceName - && inputDeviceName == other.inputDeviceName - && sampleRate == other.sampleRate - && bufferSize == other.bufferSize - && inputChannels == other.inputChannels - && useDefaultInputChannels == other.useDefaultInputChannels - && outputChannels == other.outputChannels - && useDefaultOutputChannels == other.useDefaultOutputChannels; -} - -//============================================================================== -AudioDeviceManager::AudioDeviceManager() - : currentAudioDevice (0), - numInputChansNeeded (0), - numOutputChansNeeded (2), - lastExplicitSettings (0), - listNeedsScanning (true), - useInputNames (false), - inputLevelMeasurementEnabledCount (0), - inputLevel (0), - testSound (0), - tempBuffer (2, 2), - enabledMidiInputs (4), - midiCallbacks (4), - midiCallbackDevices (4), - defaultMidiOutput (0), - cpuUsageMs (0), - timeToCpuScale (0) -{ - callbackHandler.owner = this; -} - -AudioDeviceManager::~AudioDeviceManager() -{ - deleteAndZero (currentAudioDevice); - deleteAndZero (defaultMidiOutput); - delete lastExplicitSettings; - delete testSound; -} - - -//============================================================================== -void AudioDeviceManager::createDeviceTypesIfNeeded() -{ - if (availableDeviceTypes.size() == 0) - { - createAudioDeviceTypes (availableDeviceTypes); - - while (lastDeviceTypeConfigs.size() < availableDeviceTypes.size()) - lastDeviceTypeConfigs.add (new AudioDeviceSetup()); - - if (availableDeviceTypes.size() > 0) - currentDeviceType = availableDeviceTypes.getUnchecked(0)->getTypeName(); - } -} - -const OwnedArray & AudioDeviceManager::getAvailableDeviceTypes() -{ - scanDevicesIfNeeded(); - return availableDeviceTypes; -} - -//============================================================================== -extern AudioIODeviceType* juce_createDefaultAudioIODeviceType(); - -#if JUCE_WIN32 && JUCE_ASIO - extern AudioIODeviceType* juce_createASIOAudioIODeviceType(); -#endif - -#if JUCE_WIN32 && JUCE_WDM_AUDIO - extern AudioIODeviceType* juce_createWDMAudioIODeviceType(); -#endif - -void AudioDeviceManager::createAudioDeviceTypes (OwnedArray & list) -{ - AudioIODeviceType* const defaultDeviceType = juce_createDefaultAudioIODeviceType(); - - if (defaultDeviceType != 0) - list.add (defaultDeviceType); - -#if JUCE_WIN32 && JUCE_ASIO - list.add (juce_createASIOAudioIODeviceType()); -#endif - -#if JUCE_WIN32 && JUCE_WDM_AUDIO - list.add (juce_createWDMAudioIODeviceType()); -#endif -} - -//============================================================================== -const String AudioDeviceManager::initialise (const int numInputChannelsNeeded, - const int numOutputChannelsNeeded, - const XmlElement* const e, - const bool selectDefaultDeviceOnFailure, - const String& preferredDefaultDeviceName, - const AudioDeviceSetup* preferredSetupOptions) -{ - scanDevicesIfNeeded(); - - numInputChansNeeded = numInputChannelsNeeded; - numOutputChansNeeded = numOutputChannelsNeeded; - - if (e != 0 && e->hasTagName (T("DEVICESETUP"))) - { - delete lastExplicitSettings; - lastExplicitSettings = new XmlElement (*e); - - String error; - AudioDeviceSetup setup; - - if (preferredSetupOptions != 0) - setup = *preferredSetupOptions; - - if (e->getStringAttribute (T("audioDeviceName")).isNotEmpty()) - { - setup.inputDeviceName = setup.outputDeviceName - = e->getStringAttribute (T("audioDeviceName")); - } - else - { - setup.inputDeviceName = e->getStringAttribute (T("audioInputDeviceName")); - setup.outputDeviceName = e->getStringAttribute (T("audioOutputDeviceName")); - } - - currentDeviceType = e->getStringAttribute (T("deviceType")); - if (currentDeviceType.isEmpty()) - { - AudioIODeviceType* const type = findType (setup.inputDeviceName, setup.outputDeviceName); - - if (type != 0) - currentDeviceType = type->getTypeName(); - else if (availableDeviceTypes.size() > 0) - currentDeviceType = availableDeviceTypes[0]->getTypeName(); - } - - setup.bufferSize = e->getIntAttribute (T("audioDeviceBufferSize")); - setup.sampleRate = e->getDoubleAttribute (T("audioDeviceRate")); - - setup.inputChannels.parseString (e->getStringAttribute (T("audioDeviceInChans"), T("11")), 2); - setup.outputChannels.parseString (e->getStringAttribute (T("audioDeviceOutChans"), T("11")), 2); - - setup.useDefaultInputChannels = ! e->hasAttribute (T("audioDeviceInChans")); - setup.useDefaultOutputChannels = ! e->hasAttribute (T("audioDeviceOutChans")); - - error = setAudioDeviceSetup (setup, true); - - midiInsFromXml.clear(); - forEachXmlChildElementWithTagName (*e, c, T("MIDIINPUT")) - midiInsFromXml.add (c->getStringAttribute (T("name"))); - - const StringArray allMidiIns (MidiInput::getDevices()); - - for (int i = allMidiIns.size(); --i >= 0;) - setMidiInputEnabled (allMidiIns[i], midiInsFromXml.contains (allMidiIns[i])); - - if (error.isNotEmpty() && selectDefaultDeviceOnFailure) - error = initialise (numInputChannelsNeeded, numOutputChannelsNeeded, 0, - false, preferredDefaultDeviceName); - - setDefaultMidiOutput (e->getStringAttribute (T("defaultMidiOutput"))); - - return error; - } - else - { - AudioDeviceSetup setup; - - if (preferredSetupOptions != 0) - { - setup = *preferredSetupOptions; - } - else if (preferredDefaultDeviceName.isNotEmpty()) - { - for (int j = availableDeviceTypes.size(); --j >= 0;) - { - AudioIODeviceType* const type = availableDeviceTypes.getUnchecked(j); - - StringArray outs (type->getDeviceNames (false)); - - int i; - for (i = 0; i < outs.size(); ++i) - { - if (outs[i].matchesWildcard (preferredDefaultDeviceName, true)) - { - setup.outputDeviceName = outs[i]; - break; - } - } - - StringArray ins (type->getDeviceNames (true)); - - for (i = 0; i < ins.size(); ++i) - { - if (ins[i].matchesWildcard (preferredDefaultDeviceName, true)) - { - setup.inputDeviceName = ins[i]; - break; - } - } - } - } - - insertDefaultDeviceNames (setup); - return setAudioDeviceSetup (setup, false); - } -} - -void AudioDeviceManager::insertDefaultDeviceNames (AudioDeviceSetup& setup) const -{ - AudioIODeviceType* type = getCurrentDeviceTypeObject(); - if (type != 0) - { - if (setup.outputDeviceName.isEmpty()) - setup.outputDeviceName = type->getDeviceNames (false) [type->getDefaultDeviceIndex (false)]; - - if (setup.inputDeviceName.isEmpty()) - setup.inputDeviceName = type->getDeviceNames (true) [type->getDefaultDeviceIndex (true)]; - } -} - -XmlElement* AudioDeviceManager::createStateXml() const -{ - return lastExplicitSettings != 0 ? new XmlElement (*lastExplicitSettings) : 0; -} - -//============================================================================== -void AudioDeviceManager::scanDevicesIfNeeded() -{ - if (listNeedsScanning) - { - listNeedsScanning = false; - - createDeviceTypesIfNeeded(); - - for (int i = availableDeviceTypes.size(); --i >= 0;) - availableDeviceTypes.getUnchecked(i)->scanForDevices(); - } -} - -AudioIODeviceType* AudioDeviceManager::findType (const String& inputName, const String& outputName) -{ - scanDevicesIfNeeded(); - - for (int i = availableDeviceTypes.size(); --i >= 0;) - { - AudioIODeviceType* const type = availableDeviceTypes.getUnchecked(i); - - if ((inputName.isNotEmpty() && type->getDeviceNames (true).contains (inputName, true)) - || (outputName.isNotEmpty() && type->getDeviceNames (false).contains (outputName, true))) - { - return type; - } - } - - return 0; -} - -void AudioDeviceManager::getAudioDeviceSetup (AudioDeviceSetup& setup) -{ - setup = currentSetup; -} - -void AudioDeviceManager::deleteCurrentDevice() -{ - deleteAndZero (currentAudioDevice); - currentSetup.inputDeviceName = String::empty; - currentSetup.outputDeviceName = String::empty; -} - -void AudioDeviceManager::setCurrentAudioDeviceType (const String& type, - const bool treatAsChosenDevice) -{ - for (int i = 0; i < availableDeviceTypes.size(); ++i) - { - if (availableDeviceTypes.getUnchecked(i)->getTypeName() == type - && currentDeviceType != type) - { - currentDeviceType = type; - - AudioDeviceSetup s (*lastDeviceTypeConfigs.getUnchecked(i)); - insertDefaultDeviceNames (s); - - setAudioDeviceSetup (s, treatAsChosenDevice); - - sendChangeMessage (this); - break; - } - } -} - -AudioIODeviceType* AudioDeviceManager::getCurrentDeviceTypeObject() const -{ - for (int i = 0; i < availableDeviceTypes.size(); ++i) - if (availableDeviceTypes[i]->getTypeName() == currentDeviceType) - return availableDeviceTypes[i]; - - return availableDeviceTypes[0]; -} - -const String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup, - const bool treatAsChosenDevice) -{ - jassert (&newSetup != ¤tSetup); // this will have no effect - - if (newSetup == currentSetup && currentAudioDevice != 0) - return String::empty; - - if (! (newSetup == currentSetup)) - sendChangeMessage (this); - - stopDevice(); - String error; - AudioIODeviceType* type = getCurrentDeviceTypeObject(); - - if (type == 0 || (newSetup.inputDeviceName.isEmpty() - && newSetup.outputDeviceName.isEmpty())) - { - deleteCurrentDevice(); - - if (treatAsChosenDevice) - updateXml(); - - return String::empty; - } - - const String newInputDeviceName (numInputChansNeeded == 0 ? String::empty : newSetup.inputDeviceName); - const String newOutputDeviceName (numOutputChansNeeded == 0 ? String::empty : newSetup.outputDeviceName); - - if (currentSetup.inputDeviceName != newInputDeviceName - || currentSetup.outputDeviceName != newOutputDeviceName - || currentAudioDevice == 0) - { - deleteCurrentDevice(); - scanDevicesIfNeeded(); - - if (newOutputDeviceName.isNotEmpty() - && ! type->getDeviceNames (false).contains (newOutputDeviceName)) - { - return "No such device: " + newOutputDeviceName; - } - - if (newInputDeviceName.isNotEmpty() - && ! type->getDeviceNames (true).contains (newInputDeviceName)) - { - return "No such device: " + newInputDeviceName; - } - - currentAudioDevice = type->createDevice (newOutputDeviceName, newInputDeviceName); - - if (currentAudioDevice == 0) - error = "Can't open the audio device!\n\nThis may be because another application is currently using the same device - if so, you should close any other applications and try again!"; - else - error = currentAudioDevice->getLastError(); - - if (error.isNotEmpty()) - { - deleteCurrentDevice(); - return error; - } - - if (newSetup.useDefaultInputChannels) - { - inputChannels.clear(); - inputChannels.setRange (0, numInputChansNeeded, true); - } - - if (newSetup.useDefaultOutputChannels) - { - outputChannels.clear(); - outputChannels.setRange (0, numOutputChansNeeded, true); - } - - if (newInputDeviceName.isEmpty()) - inputChannels.clear(); - - if (newOutputDeviceName.isEmpty()) - outputChannels.clear(); - } - - if (! newSetup.useDefaultInputChannels) - inputChannels = newSetup.inputChannels; - - if (! newSetup.useDefaultOutputChannels) - outputChannels = newSetup.outputChannels; - - currentSetup = newSetup; - - currentSetup.sampleRate = chooseBestSampleRate (newSetup.sampleRate); - - error = currentAudioDevice->open (inputChannels, - outputChannels, - currentSetup.sampleRate, - currentSetup.bufferSize); - - if (error.isEmpty()) - { - currentDeviceType = currentAudioDevice->getTypeName(); - - currentAudioDevice->start (&callbackHandler); - - currentSetup.sampleRate = currentAudioDevice->getCurrentSampleRate(); - currentSetup.bufferSize = currentAudioDevice->getCurrentBufferSizeSamples(); - currentSetup.inputChannels = currentAudioDevice->getActiveInputChannels(); - currentSetup.outputChannels = currentAudioDevice->getActiveOutputChannels(); - - for (int i = 0; i < availableDeviceTypes.size(); ++i) - if (availableDeviceTypes.getUnchecked (i)->getTypeName() == currentDeviceType) - *(lastDeviceTypeConfigs.getUnchecked (i)) = currentSetup; - - if (treatAsChosenDevice) - updateXml(); - } - else - { - deleteCurrentDevice(); - } - - return error; -} - -double AudioDeviceManager::chooseBestSampleRate (double rate) const -{ - jassert (currentAudioDevice != 0); - - if (rate > 0) - { - bool ok = false; - - for (int i = currentAudioDevice->getNumSampleRates(); --i >= 0;) - { - const double sr = currentAudioDevice->getSampleRate (i); - - if (sr == rate) - ok = true; - } - - if (! ok) - rate = 0; - } - - if (rate == 0) - { - double lowestAbove44 = 0.0; - - for (int i = currentAudioDevice->getNumSampleRates(); --i >= 0;) - { - const double sr = currentAudioDevice->getSampleRate (i); - - if (sr >= 44100.0 && (lowestAbove44 == 0 || sr < lowestAbove44)) - lowestAbove44 = sr; - } - - if (lowestAbove44 == 0.0) - rate = currentAudioDevice->getSampleRate (0); - else - rate = lowestAbove44; - } - - return rate; -} - -void AudioDeviceManager::stopDevice() -{ - if (currentAudioDevice != 0) - currentAudioDevice->stop(); -} - -void AudioDeviceManager::closeAudioDevice() -{ - stopDevice(); - deleteAndZero (currentAudioDevice); -} - -void AudioDeviceManager::restartLastAudioDevice() -{ - if (currentAudioDevice == 0) - { - if (currentSetup.inputDeviceName.isEmpty() - && currentSetup.outputDeviceName.isEmpty()) - { - // This method will only reload the last device that was running - // before closeAudioDevice() was called - you need to actually open - // one first, with setAudioDevice(). - jassertfalse - return; - } - - AudioDeviceSetup s (currentSetup); - setAudioDeviceSetup (s, false); - } -} - -void AudioDeviceManager::updateXml() -{ - delete lastExplicitSettings; - lastExplicitSettings = new XmlElement (T("DEVICESETUP")); - - lastExplicitSettings->setAttribute (T("deviceType"), currentDeviceType); - lastExplicitSettings->setAttribute (T("audioOutputDeviceName"), currentSetup.outputDeviceName); - lastExplicitSettings->setAttribute (T("audioInputDeviceName"), currentSetup.inputDeviceName); - - if (currentAudioDevice != 0) - { - lastExplicitSettings->setAttribute (T("audioDeviceRate"), currentAudioDevice->getCurrentSampleRate()); - - if (currentAudioDevice->getDefaultBufferSize() != currentAudioDevice->getCurrentBufferSizeSamples()) - lastExplicitSettings->setAttribute (T("audioDeviceBufferSize"), currentAudioDevice->getCurrentBufferSizeSamples()); - - if (! currentSetup.useDefaultInputChannels) - lastExplicitSettings->setAttribute (T("audioDeviceInChans"), currentSetup.inputChannels.toString (2)); - - if (! currentSetup.useDefaultOutputChannels) - lastExplicitSettings->setAttribute (T("audioDeviceOutChans"), currentSetup.outputChannels.toString (2)); - } - - for (int i = 0; i < enabledMidiInputs.size(); ++i) - { - XmlElement* const m = new XmlElement (T("MIDIINPUT")); - m->setAttribute (T("name"), enabledMidiInputs[i]->getName()); - - lastExplicitSettings->addChildElement (m); - } - - if (midiInsFromXml.size() > 0) - { - // Add any midi devices that have been enabled before, but which aren't currently - // open because the device has been disconnected. - const StringArray availableMidiDevices (MidiInput::getDevices()); - - for (int i = 0; i < midiInsFromXml.size(); ++i) - { - if (! availableMidiDevices.contains (midiInsFromXml[i], true)) - { - XmlElement* const m = new XmlElement (T("MIDIINPUT")); - m->setAttribute (T("name"), midiInsFromXml[i]); - - lastExplicitSettings->addChildElement (m); - } - } - } - - if (defaultMidiOutputName.isNotEmpty()) - lastExplicitSettings->setAttribute (T("defaultMidiOutput"), defaultMidiOutputName); -} - -//============================================================================== -void AudioDeviceManager::addAudioCallback (AudioIODeviceCallback* newCallback) -{ - { - const ScopedLock sl (audioCallbackLock); - if (callbacks.contains (newCallback)) - return; - } - - if (currentAudioDevice != 0 && newCallback != 0) - newCallback->audioDeviceAboutToStart (currentAudioDevice); - - const ScopedLock sl (audioCallbackLock); - callbacks.add (newCallback); -} - -void AudioDeviceManager::removeAudioCallback (AudioIODeviceCallback* callback) -{ - if (callback != 0) - { - bool needsDeinitialising = currentAudioDevice != 0; - - { - const ScopedLock sl (audioCallbackLock); - - needsDeinitialising = needsDeinitialising && callbacks.contains (callback); - callbacks.removeValue (callback); - } - - if (needsDeinitialising) - callback->audioDeviceStopped(); - } -} - -void AudioDeviceManager::audioDeviceIOCallbackInt (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) -{ - const ScopedLock sl (audioCallbackLock); - - if (inputLevelMeasurementEnabledCount > 0) - { - for (int j = 0; j < numSamples; ++j) - { - float s = 0; - - for (int i = 0; i < numInputChannels; ++i) - s += fabsf (inputChannelData[i][j]); - - s /= numInputChannels; - - const double decayFactor = 0.99992; - - if (s > inputLevel) - inputLevel = s; - else if (inputLevel > 0.001f) - inputLevel *= decayFactor; - else - inputLevel = 0; - } - } - - if (callbacks.size() > 0) - { - const double callbackStartTime = Time::getMillisecondCounterHiRes(); - - tempBuffer.setSize (jmax (1, numOutputChannels), jmax (1, numSamples), false, false, true); - - callbacks.getUnchecked(0)->audioDeviceIOCallback (inputChannelData, numInputChannels, - outputChannelData, numOutputChannels, numSamples); - - float** const tempChans = tempBuffer.getArrayOfChannels(); - - for (int i = callbacks.size(); --i > 0;) - { - callbacks.getUnchecked(i)->audioDeviceIOCallback (inputChannelData, numInputChannels, - tempChans, numOutputChannels, numSamples); - - for (int chan = 0; chan < numOutputChannels; ++chan) - { - const float* const src = tempChans [chan]; - float* const dst = outputChannelData [chan]; - - if (src != 0 && dst != 0) - for (int j = 0; j < numSamples; ++j) - dst[j] += src[j]; - } - } - - const double msTaken = Time::getMillisecondCounterHiRes() - callbackStartTime; - const double filterAmount = 0.2; - cpuUsageMs += filterAmount * (msTaken - cpuUsageMs); - } - else - { - for (int i = 0; i < numOutputChannels; ++i) - zeromem (outputChannelData[i], sizeof (float) * numSamples); - } - - if (testSound != 0) - { - const int numSamps = jmin (numSamples, testSound->getNumSamples() - testSoundPosition); - const float* const src = testSound->getSampleData (0, testSoundPosition); - - for (int i = 0; i < numOutputChannels; ++i) - for (int j = 0; j < numSamps; ++j) - outputChannelData [i][j] += src[j]; - - testSoundPosition += numSamps; - if (testSoundPosition >= testSound->getNumSamples()) - { - delete testSound; - testSound = 0; - } - } -} - -void AudioDeviceManager::audioDeviceAboutToStartInt (AudioIODevice* const device) -{ - cpuUsageMs = 0; - - const double sampleRate = device->getCurrentSampleRate(); - const int blockSize = device->getCurrentBufferSizeSamples(); - - if (sampleRate > 0.0 && blockSize > 0) - { - const double msPerBlock = 1000.0 * blockSize / sampleRate; - timeToCpuScale = (msPerBlock > 0.0) ? (1.0 / msPerBlock) : 0.0; - } - - { - const ScopedLock sl (audioCallbackLock); - for (int i = callbacks.size(); --i >= 0;) - callbacks.getUnchecked(i)->audioDeviceAboutToStart (device); - } - - sendChangeMessage (this); -} - -void AudioDeviceManager::audioDeviceStoppedInt() -{ - cpuUsageMs = 0; - timeToCpuScale = 0; - sendChangeMessage (this); - - const ScopedLock sl (audioCallbackLock); - for (int i = callbacks.size(); --i >= 0;) - callbacks.getUnchecked(i)->audioDeviceStopped(); -} - -double AudioDeviceManager::getCpuUsage() const -{ - return jlimit (0.0, 1.0, timeToCpuScale * cpuUsageMs); -} - -//============================================================================== -void AudioDeviceManager::setMidiInputEnabled (const String& name, - const bool enabled) -{ - if (enabled != isMidiInputEnabled (name)) - { - if (enabled) - { - const int index = MidiInput::getDevices().indexOf (name); - - if (index >= 0) - { - MidiInput* const min = MidiInput::openDevice (index, &callbackHandler); - - if (min != 0) - { - enabledMidiInputs.add (min); - min->start(); - } - } - } - else - { - for (int i = enabledMidiInputs.size(); --i >= 0;) - if (enabledMidiInputs[i]->getName() == name) - enabledMidiInputs.remove (i); - } - - updateXml(); - sendChangeMessage (this); - } -} - -bool AudioDeviceManager::isMidiInputEnabled (const String& name) const -{ - for (int i = enabledMidiInputs.size(); --i >= 0;) - if (enabledMidiInputs[i]->getName() == name) - return true; - - return false; -} - -void AudioDeviceManager::addMidiInputCallback (const String& name, - MidiInputCallback* callback) -{ - removeMidiInputCallback (name, callback); - - if (name.isEmpty()) - { - midiCallbacks.add (callback); - midiCallbackDevices.add (0); - } - else - { - for (int i = enabledMidiInputs.size(); --i >= 0;) - { - if (enabledMidiInputs[i]->getName() == name) - { - const ScopedLock sl (midiCallbackLock); - midiCallbacks.add (callback); - midiCallbackDevices.add (enabledMidiInputs[i]); - break; - } - } - } -} - -void AudioDeviceManager::removeMidiInputCallback (const String& name, - MidiInputCallback* /*callback*/) -{ - const ScopedLock sl (midiCallbackLock); - - for (int i = midiCallbacks.size(); --i >= 0;) - { - String devName; - - if (midiCallbackDevices.getUnchecked(i) != 0) - devName = midiCallbackDevices.getUnchecked(i)->getName(); - - if (devName == name) - { - midiCallbacks.remove (i); - midiCallbackDevices.remove (i); - } - } -} - -void AudioDeviceManager::handleIncomingMidiMessageInt (MidiInput* source, - const MidiMessage& message) -{ - if (! message.isActiveSense()) - { - const bool isDefaultSource = (source == 0 || source == enabledMidiInputs.getFirst()); - - const ScopedLock sl (midiCallbackLock); - - for (int i = midiCallbackDevices.size(); --i >= 0;) - { - MidiInput* const md = midiCallbackDevices.getUnchecked(i); - - if (md == source || (md == 0 && isDefaultSource)) - midiCallbacks.getUnchecked(i)->handleIncomingMidiMessage (source, message); - } - } -} - -//============================================================================== -void AudioDeviceManager::setDefaultMidiOutput (const String& deviceName) -{ - if (defaultMidiOutputName != deviceName) - { - SortedSet oldCallbacks; - - { - const ScopedLock sl (audioCallbackLock); - oldCallbacks = callbacks; - callbacks.clear(); - } - - if (currentAudioDevice != 0) - for (int i = oldCallbacks.size(); --i >= 0;) - oldCallbacks.getUnchecked(i)->audioDeviceStopped(); - - deleteAndZero (defaultMidiOutput); - defaultMidiOutputName = deviceName; - - if (deviceName.isNotEmpty()) - defaultMidiOutput = MidiOutput::openDevice (MidiOutput::getDevices().indexOf (deviceName)); - - if (currentAudioDevice != 0) - for (int i = oldCallbacks.size(); --i >= 0;) - oldCallbacks.getUnchecked(i)->audioDeviceAboutToStart (currentAudioDevice); - - { - const ScopedLock sl (audioCallbackLock); - callbacks = oldCallbacks; - } - - updateXml(); - sendChangeMessage (this); - } -} - -//============================================================================== -void AudioDeviceManager::CallbackHandler::audioDeviceIOCallback (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) -{ - owner->audioDeviceIOCallbackInt (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numSamples); -} - -void AudioDeviceManager::CallbackHandler::audioDeviceAboutToStart (AudioIODevice* device) -{ - owner->audioDeviceAboutToStartInt (device); -} - -void AudioDeviceManager::CallbackHandler::audioDeviceStopped() -{ - owner->audioDeviceStoppedInt(); -} - -void AudioDeviceManager::CallbackHandler::handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message) -{ - owner->handleIncomingMidiMessageInt (source, message); -} - -//============================================================================== -void AudioDeviceManager::playTestSound() -{ - audioCallbackLock.enter(); - AudioSampleBuffer* oldSound = testSound; - testSound = 0; - audioCallbackLock.exit(); - delete oldSound; - - testSoundPosition = 0; - - if (currentAudioDevice != 0) - { - const double sampleRate = currentAudioDevice->getCurrentSampleRate(); - const int soundLength = (int) sampleRate; - - AudioSampleBuffer* const newSound = new AudioSampleBuffer (1, soundLength); - float* samples = newSound->getSampleData (0); - - const double frequency = MidiMessage::getMidiNoteInHertz (80); - const float amplitude = 0.5f; - - const double phasePerSample = double_Pi * 2.0 / (sampleRate / frequency); - - for (int i = 0; i < soundLength; ++i) - samples[i] = amplitude * (float) sin (i * phasePerSample); - - newSound->applyGainRamp (0, 0, soundLength / 10, 0.0f, 1.0f); - newSound->applyGainRamp (0, soundLength - soundLength / 4, soundLength / 4, 1.0f, 0.0f); - - const ScopedLock sl (audioCallbackLock); - testSound = newSound; - } -} - -void AudioDeviceManager::enableInputLevelMeasurement (const bool enableMeasurement) -{ - const ScopedLock sl (audioCallbackLock); - - if (enableMeasurement) - ++inputLevelMeasurementEnabledCount; - else - --inputLevelMeasurementEnabledCount; - - inputLevel = 0; -} - -double AudioDeviceManager::getCurrentInputLevel() const -{ - jassert (inputLevelMeasurementEnabledCount > 0); // you need to call enableInputLevelMeasurement() before using this! - return inputLevel; -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/devices/juce_AudioDeviceManager.h b/src/juce_appframework/audio/devices/juce_AudioDeviceManager.h deleted file mode 100644 index 550d0873fe..0000000000 --- a/src/juce_appframework/audio/devices/juce_AudioDeviceManager.h +++ /dev/null @@ -1,492 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIODEVICEMANAGER_JUCEHEADER__ -#define __JUCE_AUDIODEVICEMANAGER_JUCEHEADER__ - -#include "juce_AudioIODeviceType.h" -#include "juce_MidiInput.h" -#include "juce_MidiOutput.h" -#include "../../../juce_core/text/juce_XmlElement.h" -#include "../../gui/components/controls/juce_ComboBox.h" -#include "../dsp/juce_AudioSampleBuffer.h" - - -//============================================================================== -/** - Manages the state of some audio and midi i/o devices. - - This class keeps tracks of a currently-selected audio device, through - with which it continuously streams data from an audio callback, as well as - one or more midi inputs. - - The idea is that your application will create one global instance of this object, - and let it take care of creating and deleting specific types of audio devices - internally. So when the device is changed, your callbacks will just keep running - without having to worry about this. - - The manager can save and reload all of its device settings as XML, which - makes it very easy for you to save and reload the audio setup of your - application. - - And to make it easy to let the user change its settings, there's a component - to do just that - the AudioDeviceSelectorComponent class, which contains a set of - device selection/sample-rate/latency controls. - - To use an AudioDeviceManager, create one, and use initialise() to set it up. Then - call addAudioCallback() to register your audio callback with it, and use that to process - your audio data. - - The manager also acts as a handy hub for incoming midi messages, allowing a - listener to register for messages from either a specific midi device, or from whatever - the current default midi input device is. The listener then doesn't have to worry about - re-registering with different midi devices if they are changed or deleted. - - And yet another neat trick is that amount of CPU time being used is measured and - available with the getCpuUsage() method. - - The AudioDeviceManager is a ChangeBroadcaster, and will send a change message to - listeners whenever one of its settings is changed. - - @see AudioDeviceSelectorComponent, AudioIODevice, AudioIODeviceType -*/ -class JUCE_API AudioDeviceManager : public ChangeBroadcaster -{ -public: - //============================================================================== - /** Creates a default AudioDeviceManager. - - Initially no audio device will be selected. You should call the initialise() method - and register an audio callback with setAudioCallback() before it'll be able to - actually make any noise. - */ - AudioDeviceManager(); - - /** Destructor. */ - ~AudioDeviceManager(); - - //============================================================================== - /** - This structure holds a set of properties describing the current audio setup. - - @see AudioDeviceManager::setAudioDeviceSetup() - */ - struct JUCE_API AudioDeviceSetup - { - AudioDeviceSetup(); - bool operator== (const AudioDeviceSetup& other) const; - - /** The name of the audio device used for output. - This may be the same as the input device. - */ - String outputDeviceName; - - /** The name of the audio device used for input. - This may be the same as the output device. - */ - String inputDeviceName; - - /** The current sample rate. - This rate is used for both the input and output devices. - */ - double sampleRate; - - /** The buffer size, in samples. - This buffer size is used for both the input and output devices. - */ - int bufferSize; - - /** The set of active input channels. - The bits that are set in this array indicate the channels of the - input device that are active. - */ - BitArray inputChannels; - - /** If this is true, it indicates that the inputChannels array - should be ignored, and instead, the device's default channels - should be used. - */ - bool useDefaultInputChannels; - - /** The set of active output channels. - The bits that are set in this array indicate the channels of the - input device that are active. - */ - BitArray outputChannels; - - /** If this is true, it indicates that the outputChannels array - should be ignored, and instead, the device's default channels - should be used. - */ - bool useDefaultOutputChannels; - }; - - - //============================================================================== - /** Opens a set of audio devices ready for use. - - This will attempt to open either a default audio device, or one that was - previously saved as XML. - - @param numInputChannelsNeeded a minimum number of input channels needed - by your app. - @param numOutputChannelsNeeded a minimum number of output channels to open - @param savedState either a previously-saved state that was produced - by createStateXml(), or 0 if you want the manager - to choose the best device to open. - @param selectDefaultDeviceOnFailure if true, then if the device specified in the XML - fails to open, then a default device will be used - instead. If false, then on failure, no device is - opened. - @param preferredDefaultDeviceName if this is not empty, and there's a device with this - name, then that will be used as the default device - (assuming that there wasn't one specified in the XML). - The string can actually be a simple wildcard, containing "*" - and "?" characters - @param preferredSetupOptions if this is non-null, the structure will be used as the - set of preferred settings when opening the device. If you - use this parameter, the preferredDefaultDeviceName - field will be ignored - - @returns an error message if anything went wrong, or an empty string if it worked ok. - */ - const String initialise (const int numInputChannelsNeeded, - const int numOutputChannelsNeeded, - const XmlElement* const savedState, - const bool selectDefaultDeviceOnFailure, - const String& preferredDefaultDeviceName = String::empty, - const AudioDeviceSetup* preferredSetupOptions = 0); - - /** Returns some XML representing the current state of the manager. - - This stores the current device, its samplerate, block size, etc, and - can be restored later with initialise(). - */ - XmlElement* createStateXml() const; - - //============================================================================== - /** Returns the current device properties that are in use. - - @see setAudioDeviceSetup - */ - void getAudioDeviceSetup (AudioDeviceSetup& setup); - - /** Changes the current device or its settings. - - If you want to change a device property, like the current sample rate or - block size, you can call getAudioDeviceSetup() to retrieve the current - settings, then tweak the appropriate fields in the AudioDeviceSetup structure, - and pass it back into this method to apply the new settings. - - @param newSetup the settings that you'd like to use - @param treatAsChosenDevice if this is true and if the device opens correctly, these new - settings will be taken as having been explicitly chosen by the - user, and the next time createStateXml() is called, these settings - will be returned. If it's false, then the device is treated as a - temporary or default device, and a call to createStateXml() will - return either the last settings that were made with treatAsChosenDevice - as true, or the last XML settings that were passed into initialise(). - @returns an error message if anything went wrong, or an empty string if it worked ok. - - @see getAudioDeviceSetup - */ - const String setAudioDeviceSetup (const AudioDeviceSetup& newSetup, - const bool treatAsChosenDevice); - - - /** Returns the currently-active audio device. */ - AudioIODevice* getCurrentAudioDevice() const throw() { return currentAudioDevice; } - - /** Returns the type of audio device currently in use. - @see setCurrentAudioDeviceType - */ - const String getCurrentAudioDeviceType() const throw() { return currentDeviceType; } - - /** Changes the class of audio device being used. - - This switches between, e.g. ASIO and DirectSound. On the Mac you probably won't ever call - this because there's only one type: CoreAudio. - - For a list of types, see getAvailableDeviceTypes(). - */ - void setCurrentAudioDeviceType (const String& type, - const bool treatAsChosenDevice); - - /** Closes the currently-open device. - - You can call restartLastAudioDevice() later to reopen it in the same state - that it was just in. - */ - void closeAudioDevice(); - - /** Tries to reload the last audio device that was running. - - Note that this only reloads the last device that was running before - closeAudioDevice() was called - it doesn't reload any kind of saved-state, - and can only be called after a device has been opened with SetAudioDevice(). - - If a device is already open, this call will do nothing. - */ - void restartLastAudioDevice(); - - //============================================================================== - /** Registers an audio callback to be used. - - The manager will redirect callbacks from whatever audio device is currently - in use to all registered callback objects. If more than one callback is - active, they will all be given the same input data, and their outputs will - be summed. - - If necessary, this method will invoke audioDeviceAboutToStart() on the callback - object before returning. - - To remove a callback, use removeAudioCallback(). - */ - void addAudioCallback (AudioIODeviceCallback* newCallback); - - /** Deregisters a previously added callback. - - If necessary, this method will invoke audioDeviceStopped() on the callback - object before returning. - - @see addAudioCallback - */ - void removeAudioCallback (AudioIODeviceCallback* callback); - - //============================================================================== - /** Returns the average proportion of available CPU being spent inside the audio callbacks. - - Returns a value between 0 and 1.0 - */ - double getCpuUsage() const; - - //============================================================================== - /** Enables or disables a midi input device. - - The list of devices can be obtained with the MidiInput::getDevices() method. - - Any incoming messages from enabled input devices will be forwarded on to all the - listeners that have been registered with the addMidiInputCallback() method. They - can either register for messages from a particular device, or from just the - "default" midi input. - - Routing the midi input via an AudioDeviceManager means that when a listener - registers for the default midi input, this default device can be changed by the - manager without the listeners having to know about it or re-register. - - It also means that a listener can stay registered for a midi input that is disabled - or not present, so that when the input is re-enabled, the listener will start - receiving messages again. - - @see addMidiInputCallback, isMidiInputEnabled - */ - void setMidiInputEnabled (const String& midiInputDeviceName, - const bool enabled); - - /** Returns true if a given midi input device is being used. - - @see setMidiInputEnabled - */ - bool isMidiInputEnabled (const String& midiInputDeviceName) const; - - /** Registers a listener for callbacks when midi events arrive from a midi input. - - The device name can be empty to indicate that it wants events from whatever the - current "default" device is. Or it can be the name of one of the midi input devices - (see MidiInput::getDevices() for the names). - - Only devices which are enabled (see the setMidiInputEnabled() method) will have their - events forwarded on to listeners. - */ - void addMidiInputCallback (const String& midiInputDeviceName, - MidiInputCallback* callback); - - /** Removes a listener that was previously registered with addMidiInputCallback(). - */ - void removeMidiInputCallback (const String& midiInputDeviceName, - MidiInputCallback* callback); - - //============================================================================== - /** Sets a midi output device to use as the default. - - The list of devices can be obtained with the MidiOutput::getDevices() method. - - The specified device will be opened automatically and can be retrieved with the - getDefaultMidiOutput() method. - - Pass in an empty string to deselect all devices. For the default device, you - can use MidiOutput::getDevices() [MidiOutput::getDefaultDeviceIndex()]. - - @see getDefaultMidiOutput, getDefaultMidiOutputName - */ - void setDefaultMidiOutput (const String& deviceName); - - /** Returns the name of the default midi output. - - @see setDefaultMidiOutput, getDefaultMidiOutput - */ - const String getDefaultMidiOutputName() const throw() { return defaultMidiOutputName; } - - /** Returns the current default midi output device. - - If no device has been selected, or the device can't be opened, this will - return 0. - - @see getDefaultMidiOutputName - */ - MidiOutput* getDefaultMidiOutput() const throw() { return defaultMidiOutput; } - - /** Returns a list of the types of device supported. - */ - const OwnedArray & getAvailableDeviceTypes(); - - //============================================================================== - /** Creates a list of available types. - - This will add a set of new AudioIODeviceType objects to the specified list, to - represent each available types of device. - - You can override this if your app needs to do something specific, like avoid - using DirectSound devices, etc. - */ - virtual void createAudioDeviceTypes (OwnedArray & types); - - //============================================================================== - /** Plays a beep through the current audio device. - - This is here to allow the audio setup UI panels to easily include a "test" - button so that the user can check where the audio is coming from. - */ - void playTestSound(); - - /** Turns on level-measuring. - - When enabled, the device manager will measure the peak input level - across all channels, and you can get this level by calling getCurrentInputLevel(). - - This is mainly intended for audio setup UI panels to use to create a mic - level display, so that the user can check that they've selected the right - device. - - A simple filter is used to make the level decay smoothly, but this is - only intended for giving rough feedback, and not for any kind of accurate - measurement. - */ - void enableInputLevelMeasurement (const bool enableMeasurement); - - /** Returns the current input level. - - To use this, you must first enable it by calling enableInputLevelMeasurement(). - - See enableInputLevelMeasurement() for more info. - */ - double getCurrentInputLevel() const; - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - OwnedArray availableDeviceTypes; - OwnedArray lastDeviceTypeConfigs; - - AudioDeviceSetup currentSetup; - AudioIODevice* currentAudioDevice; - SortedSet callbacks; - int numInputChansNeeded, numOutputChansNeeded; - String currentDeviceType; - BitArray inputChannels, outputChannels; - XmlElement* lastExplicitSettings; - mutable bool listNeedsScanning; - bool useInputNames; - int inputLevelMeasurementEnabledCount; - double inputLevel; - AudioSampleBuffer* testSound; - int testSoundPosition; - AudioSampleBuffer tempBuffer; - - StringArray midiInsFromXml; - OwnedArray enabledMidiInputs; - Array midiCallbacks; - Array midiCallbackDevices; - String defaultMidiOutputName; - MidiOutput* defaultMidiOutput; - CriticalSection audioCallbackLock, midiCallbackLock; - - double cpuUsageMs, timeToCpuScale; - - //============================================================================== - class CallbackHandler : public AudioIODeviceCallback, - public MidiInputCallback - { - public: - AudioDeviceManager* owner; - - void audioDeviceIOCallback (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples); - - void audioDeviceAboutToStart (AudioIODevice*); - - void audioDeviceStopped(); - - void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message); - }; - - CallbackHandler callbackHandler; - friend class CallbackHandler; - - void audioDeviceIOCallbackInt (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples); - void audioDeviceAboutToStartInt (AudioIODevice* const device); - void audioDeviceStoppedInt(); - - void handleIncomingMidiMessageInt (MidiInput* source, const MidiMessage& message); - - const String restartDevice (int blockSizeToUse, double sampleRateToUse, - const BitArray& ins, const BitArray& outs); - void stopDevice(); - - void updateXml(); - - void createDeviceTypesIfNeeded(); - void scanDevicesIfNeeded(); - void deleteCurrentDevice(); - double chooseBestSampleRate (double preferred) const; - AudioIODeviceType* getCurrentDeviceTypeObject() const; - void insertDefaultDeviceNames (AudioDeviceSetup& setup) const; - - AudioIODeviceType* findType (const String& inputName, const String& outputName); - - AudioDeviceManager (const AudioDeviceManager&); - const AudioDeviceManager& operator= (const AudioDeviceManager&); -}; - -#endif // __JUCE_AUDIODEVICEMANAGER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/devices/juce_AudioIODevice.cpp b/src/juce_appframework/audio/devices/juce_AudioIODevice.cpp deleted file mode 100644 index d7b9bcdb1e..0000000000 --- a/src/juce_appframework/audio/devices/juce_AudioIODevice.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioIODevice.h" - - -//============================================================================== -AudioIODevice::AudioIODevice (const String& deviceName, const String& typeName_) - : name (deviceName), - typeName (typeName_) -{ -} - -AudioIODevice::~AudioIODevice() -{ -} - -bool AudioIODevice::hasControlPanel() const -{ - return false; -} - -bool AudioIODevice::showControlPanel() -{ - jassertfalse // this should only be called for devices which return true from - // their hasControlPanel() method. - return false; -} - - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/devices/juce_AudioIODevice.h b/src/juce_appframework/audio/devices/juce_AudioIODevice.h deleted file mode 100644 index 1e1e3c87aa..0000000000 --- a/src/juce_appframework/audio/devices/juce_AudioIODevice.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOIODEVICE_JUCEHEADER__ -#define __JUCE_AUDIOIODEVICE_JUCEHEADER__ - -#include "../../../juce_core/text/juce_StringArray.h" -#include "../../../juce_core/containers/juce_BitArray.h" -#include "../../../juce_core/containers/juce_OwnedArray.h" -class AudioIODevice; - - -//============================================================================== -/** - One of these is passed to an AudioIODevice object to stream the audio data - in and out. - - The AudioIODevice will repeatedly call this class's audioDeviceIOCallback() - method on its own high-priority audio thread, when it needs to send or receive - the next block of data. - - @see AudioIODevice, AudioDeviceManager -*/ -class JUCE_API AudioIODeviceCallback -{ -public: - /** Destructor. */ - virtual ~AudioIODeviceCallback() {} - - /** Processes a block of incoming and outgoing audio data. - - The subclass's implementation should use the incoming audio for whatever - purposes it needs to, and must fill all the output channels with the next - block of output data before returning. - - The channel data is arranged with the same array indices as the channel name - array returned by AudioIODevice::getOutputChannelNames(), but those channels - that aren't specified in AudioIODevice::open() will have a null pointer for their - associated channel, so remember to check for this. - - @param inputChannelData a set of arrays containing the audio data for each - incoming channel - this data is valid until the function - returns. There will be one channel of data for each input - channel that was enabled when the audio device was opened - (see AudioIODevice::open()) - @param numInputChannels the number of pointers to channel data in the - inputChannelData array. - @param outputChannelData a set of arrays which need to be filled with the data - that should be sent to each outgoing channel of the device. - There will be one channel of data for each output channel - that was enabled when the audio device was opened (see - AudioIODevice::open()) - The initial contents of the array is undefined, so the - callback function must fill all the channels with zeros if - its output is silence. Failing to do this could cause quite - an unpleasant noise! - @param numOutputChannels the number of pointers to channel data in the - outputChannelData array. - @param numSamples the number of samples in each channel of the input and - output arrays. The number of samples will depend on the - audio device's buffer size and will usually remain constant, - although this isn't guaranteed, so make sure your code can - cope with reasonable changes in the buffer size from one - callback to the next. - */ - virtual void audioDeviceIOCallback (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) = 0; - - /** Called to indicate that the device is about to start calling back. - - This will be called just before the audio callbacks begin, either when this - callback has just been added to an audio device, or after the device has been - restarted because of a sample-rate or block-size change. - - You can use this opportunity to find out the sample rate and block size - that the device is going to use by calling the AudioIODevice::getCurrentSampleRate() - and AudioIODevice::getCurrentBufferSizeSamples() on the supplied pointer. - - @param device the audio IO device that will be used to drive the callback. - Note that if you're going to store this this pointer, it is - only valid until the next time that audioDeviceStopped is called. - */ - virtual void audioDeviceAboutToStart (AudioIODevice* device) = 0; - - /** Called to indicate that the device has stopped. - */ - virtual void audioDeviceStopped() = 0; -}; - - -//============================================================================== -/** - Base class for an audio device with synchronised input and output channels. - - Subclasses of this are used to implement different protocols such as DirectSound, - ASIO, CoreAudio, etc. - - To create one of these, you'll need to use the AudioIODeviceType class - see the - documentation for that class for more info. - - For an easier way of managing audio devices and their settings, have a look at the - AudioDeviceManager class. - - @see AudioIODeviceType, AudioDeviceManager -*/ -class JUCE_API AudioIODevice -{ -public: - /** Destructor. */ - virtual ~AudioIODevice(); - - //============================================================================== - /** Returns the device's name, (as set in the constructor). */ - const String& getName() const throw() { return name; } - - /** Returns the type of the device. - - E.g. "CoreAudio", "ASIO", etc. - this comes from the AudioIODeviceType that created it. - */ - const String& getTypeName() const throw() { return typeName; } - - //============================================================================== - /** Returns the names of all the available output channels on this device. - To find out which of these are currently in use, call getActiveOutputChannels(). - */ - virtual const StringArray getOutputChannelNames() = 0; - - /** Returns the names of all the available input channels on this device. - To find out which of these are currently in use, call getActiveInputChannels(). - */ - virtual const StringArray getInputChannelNames() = 0; - - //============================================================================== - /** Returns the number of sample-rates this device supports. - - To find out which rates are available on this device, use this method to - find out how many there are, and getSampleRate() to get the rates. - - @see getSampleRate - */ - virtual int getNumSampleRates() = 0; - - /** Returns one of the sample-rates this device supports. - - To find out which rates are available on this device, use getNumSampleRates() to - find out how many there are, and getSampleRate() to get the individual rates. - - The sample rate is set by the open() method. - - (Note that for DirectSound some rates might not work, depending on combinations - of i/o channels that are being opened). - - @see getNumSampleRates - */ - virtual double getSampleRate (int index) = 0; - - /** Returns the number of sizes of buffer that are available. - - @see getBufferSizeSamples, getDefaultBufferSize - */ - virtual int getNumBufferSizesAvailable() = 0; - - /** Returns one of the possible buffer-sizes. - - @param index the index of the buffer-size to use, from 0 to getNumBufferSizesAvailable() - 1 - @returns a number of samples - @see getNumBufferSizesAvailable, getDefaultBufferSize - */ - virtual int getBufferSizeSamples (int index) = 0; - - /** Returns the default buffer-size to use. - - @returns a number of samples - @see getNumBufferSizesAvailable, getBufferSizeSamples - */ - virtual int getDefaultBufferSize() = 0; - - //============================================================================== - /** Tries to open the device ready to play. - - @param inputChannels a BitArray in which a set bit indicates that the corresponding - input channel should be enabled - @param outputChannels a BitArray in which a set bit indicates that the corresponding - output channel should be enabled - @param sampleRate the sample rate to try to use - to find out which rates are - available, see getNumSampleRates() and getSampleRate() - @param bufferSizeSamples the size of i/o buffer to use - to find out the available buffer - sizes, see getNumBufferSizesAvailable() and getBufferSizeSamples() - @returns an error description if there's a problem, or an empty string if it succeeds in - opening the device - @see close - */ - virtual const String open (const BitArray& inputChannels, - const BitArray& outputChannels, - double sampleRate, - int bufferSizeSamples) = 0; - - /** Closes and releases the device if it's open. */ - virtual void close() = 0; - - /** Returns true if the device is still open. - - A device might spontaneously close itself if something goes wrong, so this checks if - it's still open. - */ - virtual bool isOpen() = 0; - - /** Starts the device actually playing. - - This must be called after the device has been opened. - - @param callback the callback to use for streaming the data. - @see AudioIODeviceCallback, open - */ - virtual void start (AudioIODeviceCallback* callback) = 0; - - /** Stops the device playing. - - Once a device has been started, this will stop it. Any pending calls to the - callback class will be flushed before this method returns. - */ - virtual void stop() = 0; - - /** Returns true if the device is still calling back. - - The device might mysteriously stop, so this checks whether it's - still playing. - */ - virtual bool isPlaying() = 0; - - /** Returns the last error that happened if anything went wrong. */ - virtual const String getLastError() = 0; - - //============================================================================== - /** Returns the buffer size that the device is currently using. - - If the device isn't actually open, this value doesn't really mean much. - */ - virtual int getCurrentBufferSizeSamples() = 0; - - /** Returns the sample rate that the device is currently using. - - If the device isn't actually open, this value doesn't really mean much. - */ - virtual double getCurrentSampleRate() = 0; - - /** Returns the device's current physical bit-depth. - - If the device isn't actually open, this value doesn't really mean much. - */ - virtual int getCurrentBitDepth() = 0; - - /** Returns a mask showing which of the available output channels are currently - enabled. - @see getOutputChannelNames - */ - virtual const BitArray getActiveOutputChannels() const = 0; - - /** Returns a mask showing which of the available input channels are currently - enabled. - @see getInputChannelNames - */ - virtual const BitArray getActiveInputChannels() const = 0; - - /** Returns the device's output latency. - - This is the delay in samples between a callback getting a block of data, and - that data actually getting played. - */ - virtual int getOutputLatencyInSamples() = 0; - - /** Returns the device's input latency. - - This is the delay in samples between some audio actually arriving at the soundcard, - and the callback getting passed this block of data. - */ - virtual int getInputLatencyInSamples() = 0; - - - //============================================================================== - /** True if this device can show a pop-up control panel for editing its settings. - - This is generally just true of ASIO devices. If true, you can call showControlPanel() - to display it. - */ - virtual bool hasControlPanel() const; - - /** Shows a device-specific control panel if there is one. - - This should only be called for devices which return true from hasControlPanel(). - */ - virtual bool showControlPanel(); - - - //============================================================================== -protected: - /** Creates a device, setting its name and type member variables. */ - AudioIODevice (const String& deviceName, - const String& typeName); - - /** @internal */ - String name, typeName; -}; - - -#endif // __JUCE_AUDIOIODEVICE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/devices/juce_AudioIODeviceType.cpp b/src/juce_appframework/audio/devices/juce_AudioIODeviceType.cpp deleted file mode 100644 index 33953cd2b6..0000000000 --- a/src/juce_appframework/audio/devices/juce_AudioIODeviceType.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioIODeviceType.h" - - -//============================================================================== -AudioIODeviceType::AudioIODeviceType (const tchar* const name) - : typeName (name) -{ -} - -AudioIODeviceType::~AudioIODeviceType() -{ -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/devices/juce_AudioIODeviceType.h b/src/juce_appframework/audio/devices/juce_AudioIODeviceType.h deleted file mode 100644 index c518eecae3..0000000000 --- a/src/juce_appframework/audio/devices/juce_AudioIODeviceType.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOIODEVICETYPE_JUCEHEADER__ -#define __JUCE_AUDIOIODEVICETYPE_JUCEHEADER__ - -#include "juce_AudioIODevice.h" -class AudioDeviceManager; -class Component; - -//============================================================================== -/** - Represents a type of audio driver, such as DirectSound, ASIO, CoreAudio, etc. - - To get a list of available audio driver types, use the createDeviceTypes() - method. Each of the objects returned can then be used to list the available - devices of that type. E.g. - @code - OwnedArray types; - AudioIODeviceType::createDeviceTypes (types); - - for (int i = 0; i < types.size(); ++i) - { - String typeName (types[i]->getTypeName()); // This will be things like "DirectSound", "CoreAudio", etc. - - types[i]->scanForDevices(); // This must be called before getting the list of devices - - StringArray deviceNames (types[i]->getDeviceNames()); // This will now return a list of available devices of this type - - for (int j = 0; j < deviceNames.size(); ++j) - { - AudioIODevice* device = types[i]->createDevice (deviceNames [j]); - - ... - } - } - @endcode - - For an easier way of managing audio devices and their settings, have a look at the - AudioDeviceManager class. - - @see AudioIODevice, AudioDeviceManager -*/ -class JUCE_API AudioIODeviceType -{ -public: - //============================================================================== - /** Returns the name of this type of driver that this object manages. - - This will be something like "DirectSound", "ASIO", "CoreAudio", "ALSA", etc. - */ - const String& getTypeName() const throw() { return typeName; } - - //============================================================================== - /** Refreshes the object's cached list of known devices. - - This must be called at least once before calling getDeviceNames() or any of - the other device creation methods. - */ - virtual void scanForDevices() = 0; - - /** Returns the list of available devices of this type. - - The scanForDevices() method must have been called to create this list. - - @param wantInputNames only really used by DirectSound where devices are split up - into inputs and outputs, this indicates whether to use - the input or output name to refer to a pair of devices. - */ - virtual const StringArray getDeviceNames (const bool wantInputNames = false) const = 0; - - /** Returns the name of the default device. - - This will be one of the names from the getDeviceNames() list. - - @param forInput if true, this means that a default input device should be - returned; if false, it should return the default output - */ - virtual int getDefaultDeviceIndex (const bool forInput) const = 0; - - /** Returns the index of a given device in the list of device names. - If asInput is true, it shows the index in the inputs list, otherwise it - looks for it in the outputs list. - */ - virtual int getIndexOfDevice (AudioIODevice* device, const bool asInput) const = 0; - - /** Returns true if two different devices can be used for the input and output. - */ - virtual bool hasSeparateInputsAndOutputs() const = 0; - - /** Creates one of the devices of this type. - - The deviceName must be one of the strings returned by getDeviceNames(), and - scanForDevices() must have been called before this method is used. - */ - virtual AudioIODevice* createDevice (const String& outputDeviceName, - const String& inputDeviceName) = 0; - - //============================================================================== - struct DeviceSetupDetails - { - AudioDeviceManager* manager; - int minNumInputChannels, maxNumInputChannels; - int minNumOutputChannels, maxNumOutputChannels; - bool useStereoPairs; - }; - - //============================================================================== - /** Destructor. */ - virtual ~AudioIODeviceType(); - -protected: - AudioIODeviceType (const tchar* const typeName); - -private: - String typeName; - - AudioIODeviceType (const AudioIODeviceType&); - const AudioIODeviceType& operator= (const AudioIODeviceType&); -}; - - -#endif // __JUCE_AUDIOIODEVICETYPE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/devices/juce_MidiInput.h b/src/juce_appframework/audio/devices/juce_MidiInput.h deleted file mode 100644 index e6bdd0f4fc..0000000000 --- a/src/juce_appframework/audio/devices/juce_MidiInput.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIINPUT_JUCEHEADER__ -#define __JUCE_MIDIINPUT_JUCEHEADER__ - -#include "../midi/juce_MidiMessage.h" -#include "../../../juce_core/text/juce_StringArray.h" -class MidiInput; - - -//============================================================================== -/** - Receives midi messages from a midi input device. - - This class is overridden to handle incoming midi messages. See the MidiInput - class for more details. - - @see MidiInput -*/ -class JUCE_API MidiInputCallback -{ -public: - /** Destructor. */ - virtual ~MidiInputCallback() {} - - - /** Receives an incoming message. - - A MidiInput object will call this method when a midi event arrives. It'll be - called on a high-priority system thread, so avoid doing anything time-consuming - in here, and avoid making any UI calls. You might find the MidiBuffer class helpful - for queueing incoming messages for use later. - - @param source the MidiInput object that generated the message - @param message the incoming message. The message's timestamp is set to a value - equivalent to (Time::getMillisecondCounter() / 1000.0) to specify the - time when the message arrived. - */ - virtual void handleIncomingMidiMessage (MidiInput* source, - const MidiMessage& message) = 0; - - /** Notification sent each time a packet of a multi-packet sysex message arrives. - - If a long sysex message is broken up into multiple packets, this callback is made - for each packet that arrives until the message is finished, at which point - the normal handleIncomingMidiMessage() callback will be made with the entire - message. - - The message passed in will contain the start of a sysex, but won't be finished - with the terminating 0xf7 byte. - */ - virtual void handlePartialSysexMessage (MidiInput* source, - const uint8* messageData, - const int numBytesSoFar, - const double timestamp) - { - // (this bit is just to avoid compiler warnings about unused variables) - (void) source; (void) messageData; (void) numBytesSoFar; (void) timestamp; - } -}; - -//============================================================================== -/** - Represents a midi input device. - - To create one of these, use the static getDevices() method to find out what inputs are - available, and then use the openDevice() method to try to open one. - - @see MidiOutput -*/ -class JUCE_API MidiInput -{ -public: - //============================================================================== - /** Returns a list of the available midi input devices. - - You can open one of the devices by passing its index into the - openDevice() method. - - @see getDefaultDeviceIndex, openDevice - */ - static const StringArray getDevices(); - - /** Returns the index of the default midi input device to use. - - This refers to the index in the list returned by getDevices(). - */ - static int getDefaultDeviceIndex(); - - /** Tries to open one of the midi input devices. - - This will return a MidiInput object if it manages to open it. You can then - call start() and stop() on this device, and delete it when no longer needed. - - If the device can't be opened, this will return a null pointer. - - @param deviceIndex the index of a device from the list returned by getDevices() - @param callback the object that will receive the midi messages from this device. - - @see MidiInputCallback, getDevices - */ - static MidiInput* openDevice (int deviceIndex, - MidiInputCallback* callback); - -#if JUCE_LINUX || DOXYGEN - /** LINUX ONLY - This will try to create a new midi input device. - - This will attempt to create a new midi input device with the specified name, - for other apps to connect to. - - Returns 0 if a device can't be created. - - @param deviceName the name to use for the new device - @param callback the object that will receive the midi messages from this device. - */ - static MidiInput* createNewDevice (const String& deviceName, - MidiInputCallback* callback); -#endif - - //============================================================================== - /** Destructor. */ - virtual ~MidiInput(); - - /** Returns the name of this device. - */ - virtual const String getName() const throw() { return name; } - - /** Allows you to set a custom name for the device, in case you don't like the name - it was given when created. - */ - virtual void setName (const String& newName) throw() { name = newName; } - - //============================================================================== - /** Starts the device running. - - After calling this, the device will start sending midi messages to the - MidiInputCallback object that was specified when the openDevice() method - was called. - - @see stop - */ - virtual void start(); - - /** Stops the device running. - - @see start - */ - virtual void stop(); - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - String name; - void* internal; - - MidiInput (const String& name); - MidiInput (const MidiInput&); -}; - - -#endif // __JUCE_MIDIINPUT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/devices/juce_MidiOutput.cpp b/src/juce_appframework/audio/devices/juce_MidiOutput.cpp deleted file mode 100644 index c2538e690c..0000000000 --- a/src/juce_appframework/audio/devices/juce_MidiOutput.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiOutput.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../juce_core/basics/juce_Time.h" - - -//============================================================================== -MidiOutput::MidiOutput() throw() - : Thread ("midi out"), - internal (0), - firstMessage (0) -{ -} - -MidiOutput::PendingMessage::PendingMessage (const uint8* const data, - const int len, - const double sampleNumber) throw() - : message (data, len, sampleNumber) -{ -} - -void MidiOutput::sendBlockOfMessages (const MidiBuffer& buffer, - const double millisecondCounterToStartAt, - double samplesPerSecondForBuffer) throw() -{ - // You've got to call startBackgroundThread() for this to actually work.. - jassert (isThreadRunning()); - - // this needs to be a value in the future - RTFM for this method! - jassert (millisecondCounterToStartAt > 0); - - const double timeScaleFactor = 1000.0 / samplesPerSecondForBuffer; - - MidiBuffer::Iterator i (buffer); - - const uint8* data; - int len, time; - - while (i.getNextEvent (data, len, time)) - { - const double eventTime = millisecondCounterToStartAt + timeScaleFactor * time; - - PendingMessage* const m - = new PendingMessage (data, len, eventTime); - - const ScopedLock sl (lock); - - if (firstMessage == 0 || firstMessage->message.getTimeStamp() > eventTime) - { - m->next = firstMessage; - firstMessage = m; - } - else - { - PendingMessage* mm = firstMessage; - - while (mm->next != 0 && mm->next->message.getTimeStamp() <= eventTime) - mm = mm->next; - - m->next = mm->next; - mm->next = m; - } - } - - notify(); -} - -void MidiOutput::clearAllPendingMessages() throw() -{ - const ScopedLock sl (lock); - - while (firstMessage != 0) - { - PendingMessage* const m = firstMessage; - firstMessage = firstMessage->next; - delete m; - } -} - -void MidiOutput::startBackgroundThread() throw() -{ - startThread (9); -} - -void MidiOutput::stopBackgroundThread() throw() -{ - stopThread (5000); -} - -void MidiOutput::run() -{ - while (! threadShouldExit()) - { - uint32 now = Time::getMillisecondCounter(); - uint32 eventTime = 0; - uint32 timeToWait = 500; - - lock.enter(); - PendingMessage* message = firstMessage; - - if (message != 0) - { - eventTime = roundDoubleToInt (message->message.getTimeStamp()); - - if (eventTime > now + 20) - { - timeToWait = jmax (10, eventTime - now - 100); - message = 0; - } - else - { - firstMessage = message->next; - } - } - - lock.exit(); - - if (message != 0) - { - if (eventTime > now) - { - Time::waitForMillisecondCounter (eventTime); - - if (threadShouldExit()) - break; - } - - if (eventTime > now - 200) - sendMessageNow (message->message); - - delete message; - } - else - { - jassert (timeToWait < 1000 * 30); - wait (timeToWait); - } - } - - clearAllPendingMessages(); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/devices/juce_MidiOutput.h b/src/juce_appframework/audio/devices/juce_MidiOutput.h deleted file mode 100644 index 76a78a9d12..0000000000 --- a/src/juce_appframework/audio/devices/juce_MidiOutput.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIOUTPUT_JUCEHEADER__ -#define __JUCE_MIDIOUTPUT_JUCEHEADER__ - -#include "../../../juce_core/text/juce_StringArray.h" -#include "../../../juce_core/threads/juce_Thread.h" -#include "../midi/juce_MidiMessage.h" -#include "../midi/juce_MidiBuffer.h" - - -//============================================================================== -/** - Represents a midi output device. - - To create one of these, use the static getDevices() method to find out what - outputs are available, then use the openDevice() method to try to open one. - - @see MidiInput -*/ -class JUCE_API MidiOutput : private Thread -{ -public: - //============================================================================== - /** Returns a list of the available midi output devices. - - You can open one of the devices by passing its index into the - openDevice() method. - - @see getDefaultDeviceIndex, openDevice - */ - static const StringArray getDevices(); - - /** Returns the index of the default midi output device to use. - - This refers to the index in the list returned by getDevices(). - */ - static int getDefaultDeviceIndex(); - - /** Tries to open one of the midi output devices. - - This will return a MidiOutput object if it manages to open it. You can then - send messages to this device, and delete it when no longer needed. - - If the device can't be opened, this will return a null pointer. - - @param deviceIndex the index of a device from the list returned by getDevices() - @see getDevices - */ - static MidiOutput* openDevice (int deviceIndex); - - -#if JUCE_LINUX || DOXYGEN - /** LINUX ONLY - This will try to create a new midi output device. - - This will attempt to create a new midi output device that other apps can connect - to and use as their midi input. - - Returns 0 if a device can't be created. - - @param deviceName the name to use for the new device - */ - static MidiOutput* createNewDevice (const String& deviceName); -#endif - - //============================================================================== - /** Destructor. */ - virtual ~MidiOutput(); - - /** Makes this device output a midi message. - - @see MidiMessage - */ - virtual void sendMessageNow (const MidiMessage& message); - - /** Sends a midi reset to the device. */ - virtual void reset(); - - - //============================================================================== - /** Returns the current volume setting for this device. */ - virtual bool getVolume (float& leftVol, - float& rightVol); - - /** Changes the overall volume for this device. */ - virtual void setVolume (float leftVol, - float rightVol); - - //============================================================================== - /** This lets you supply a block of messages that will be sent out at some point - in the future. - - The MidiOutput class has an internal thread that can send out timestamped - messages - this appends a set of messages to its internal buffer, ready for - sending. - - This will only work if you've already started the thread with startBackgroundThread(). - - A time is supplied, at which the block of messages should be sent. This time uses - the same time base as Time::getMillisecondCounter(), and must be in the future. - - The samplesPerSecondForBuffer parameter indicates the number of samples per second - used by the MidiBuffer. Each event in a MidiBuffer has a sample position, and the - samplesPerSecondForBuffer value is needed to convert this sample position to a - real time. - */ - virtual void sendBlockOfMessages (const MidiBuffer& buffer, - const double millisecondCounterToStartAt, - double samplesPerSecondForBuffer) throw(); - - /** Gets rid of any midi messages that had been added by sendBlockOfMessages(). - */ - virtual void clearAllPendingMessages() throw(); - - /** Starts up a background thread so that the device can send blocks of data. - - Call this to get the device ready, before using sendBlockOfMessages(). - */ - virtual void startBackgroundThread() throw(); - - /** Stops the background thread, and clears any pending midi events. - - @see startBackgroundThread - */ - virtual void stopBackgroundThread() throw(); - - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - void* internal; - - struct PendingMessage - { - PendingMessage (const uint8* const data, const int len, const double sampleNumber) throw(); - - MidiMessage message; - PendingMessage* next; - - juce_UseDebuggingNewOperator - }; - - CriticalSection lock; - PendingMessage* firstMessage; - - MidiOutput() throw(); - MidiOutput (const MidiOutput&); - - void run(); -}; - - -#endif // __JUCE_MIDIOUTPUT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/dsp/juce_AudioDataConverters.cpp b/src/juce_appframework/audio/dsp/juce_AudioDataConverters.cpp deleted file mode 100644 index c725cfba65..0000000000 --- a/src/juce_appframework/audio/dsp/juce_AudioDataConverters.cpp +++ /dev/null @@ -1,535 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioDataConverters.h" - - -//============================================================================== -void AudioDataConverters::convertFloatToInt16LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fff; - char* intData = (char*) dest; - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint16*)intData = swapIfBigEndian ((uint16) (short) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint16*)intData = swapIfBigEndian ((uint16) (short) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToInt16BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fff; - char* intData = (char*) dest; - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint16*)intData = swapIfLittleEndian ((uint16) (short) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint16*)intData = swapIfLittleEndian ((uint16) (short) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToInt24LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffff; - char* intData = (char*) dest; - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - littleEndian24BitToChars ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - littleEndian24BitToChars ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - } - } -} - -void AudioDataConverters::convertFloatToInt24BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffff; - char* intData = (char*) dest; - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - bigEndian24BitToChars ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - bigEndian24BitToChars ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i])), intData); - } - } -} - -void AudioDataConverters::convertFloatToInt32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffffff; - char* intData = (char*) dest; - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint32*)intData = swapIfBigEndian ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint32*)intData = swapIfBigEndian ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToInt32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - const double maxVal = (double) 0x7fffffff; - char* intData = (char*) dest; - - if (dest != (void*) source || destBytesPerSample <= 4) - { - for (int i = 0; i < numSamples; ++i) - { - *(uint32*)intData = swapIfLittleEndian ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - intData += destBytesPerSample; - } - } - else - { - intData += destBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= destBytesPerSample; - *(uint32*)intData = swapIfLittleEndian ((uint32) roundDoubleToInt (jlimit (-maxVal, maxVal, maxVal * source[i]))); - } - } -} - -void AudioDataConverters::convertFloatToFloat32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - jassert (dest != (void*) source || destBytesPerSample <= 4); // This op can't be performed on in-place data! - - char* d = (char*) dest; - - for (int i = 0; i < numSamples; ++i) - { - *(float*)d = source[i]; - -#if JUCE_BIG_ENDIAN - *(uint32*)d = swapByteOrder (*(uint32*)d); -#endif - - d += destBytesPerSample; - } -} - -void AudioDataConverters::convertFloatToFloat32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample) -{ - jassert (dest != (void*) source || destBytesPerSample <= 4); // This op can't be performed on in-place data! - - char* d = (char*) dest; - - for (int i = 0; i < numSamples; ++i) - { - *(float*)d = source[i]; - -#if JUCE_LITTLE_ENDIAN - *(uint32*)d = swapByteOrder (*(uint32*)d); -#endif - - d += destBytesPerSample; - } -} - -//============================================================================== -void AudioDataConverters::convertInt16LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fff; - const char* intData = (const char*) source; - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) swapIfBigEndian (*(uint16*)intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) swapIfBigEndian (*(uint16*)intData); - } - } -} - -void AudioDataConverters::convertInt16BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fff; - const char* intData = (const char*) source; - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) swapIfLittleEndian (*(uint16*)intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) swapIfLittleEndian (*(uint16*)intData); - } - } -} - -void AudioDataConverters::convertInt24LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffff; - const char* intData = (const char*) source; - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) littleEndian24Bit (intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) littleEndian24Bit (intData); - } - } -} - -void AudioDataConverters::convertInt24BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffff; - const char* intData = (const char*) source; - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (short) bigEndian24Bit (intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (short) bigEndian24Bit (intData); - } - } -} - -void AudioDataConverters::convertInt32LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffffff; - const char* intData = (const char*) source; - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (int) swapIfBigEndian (*(uint32*) intData); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (int) swapIfBigEndian (*(uint32*) intData); - } - } -} - -void AudioDataConverters::convertInt32BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const float scale = 1.0f / 0x7fffffff; - const char* intData = (const char*) source; - - if (source != (void*) dest || srcBytesPerSample >= 4) - { - for (int i = 0; i < numSamples; ++i) - { - dest[i] = scale * (int) (swapIfLittleEndian (*(uint32*) intData)); - intData += srcBytesPerSample; - } - } - else - { - intData += srcBytesPerSample * numSamples; - - for (int i = numSamples; --i >= 0;) - { - intData -= srcBytesPerSample; - dest[i] = scale * (int) (swapIfLittleEndian (*(uint32*) intData)); - } - } -} - -void AudioDataConverters::convertFloat32LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const char* s = (const char*) source; - - for (int i = 0; i < numSamples; ++i) - { - dest[i] = *(float*)s; - -#if JUCE_BIG_ENDIAN - uint32* const d = (uint32*) (dest + i); - *d = swapByteOrder (*d); -#endif - - s += srcBytesPerSample; - } -} - -void AudioDataConverters::convertFloat32BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample) -{ - const char* s = (const char*) source; - - for (int i = 0; i < numSamples; ++i) - { - dest[i] = *(float*)s; - -#if JUCE_LITTLE_ENDIAN - uint32* const d = (uint32*) (dest + i); - *d = swapByteOrder (*d); -#endif - - s += srcBytesPerSample; - } -} - - -//============================================================================== -void AudioDataConverters::convertFloatToFormat (const DataFormat destFormat, - const float* const source, - void* const dest, - const int numSamples) -{ - switch (destFormat) - { - case int16LE: - convertFloatToInt16LE (source, dest, numSamples); - break; - - case int16BE: - convertFloatToInt16BE (source, dest, numSamples); - break; - - case int24LE: - convertFloatToInt24LE (source, dest, numSamples); - break; - - case int24BE: - convertFloatToInt24BE (source, dest, numSamples); - break; - - case int32LE: - convertFloatToInt32LE (source, dest, numSamples); - break; - - case int32BE: - convertFloatToInt32BE (source, dest, numSamples); - break; - - case float32LE: - convertFloatToFloat32LE (source, dest, numSamples); - break; - - case float32BE: - convertFloatToFloat32BE (source, dest, numSamples); - break; - - default: - jassertfalse - break; - } -} - -void AudioDataConverters::convertFormatToFloat (const DataFormat sourceFormat, - const void* const source, - float* const dest, - const int numSamples) -{ - switch (sourceFormat) - { - case int16LE: - convertInt16LEToFloat (source, dest, numSamples); - break; - - case int16BE: - convertInt16BEToFloat (source, dest, numSamples); - break; - - case int24LE: - convertInt24LEToFloat (source, dest, numSamples); - break; - - case int24BE: - convertInt24BEToFloat (source, dest, numSamples); - break; - - case int32LE: - convertInt32LEToFloat (source, dest, numSamples); - break; - - case int32BE: - convertInt32BEToFloat (source, dest, numSamples); - break; - - case float32LE: - convertFloat32LEToFloat (source, dest, numSamples); - break; - - case float32BE: - convertFloat32BEToFloat (source, dest, numSamples); - break; - - default: - jassertfalse - break; - } -} - -//============================================================================== -void AudioDataConverters::interleaveSamples (const float** const source, - float* const dest, - const int numSamples, - const int numChannels) -{ - for (int chan = 0; chan < numChannels; ++chan) - { - int i = chan; - const float* src = source [chan]; - - for (int j = 0; j < numSamples; ++j) - { - dest [i] = src [j]; - i += numChannels; - } - } -} - -void AudioDataConverters::deinterleaveSamples (const float* const source, - float** const dest, - const int numSamples, - const int numChannels) -{ - for (int chan = 0; chan < numChannels; ++chan) - { - int i = chan; - float* dst = dest [chan]; - - for (int j = 0; j < numSamples; ++j) - { - dst [j] = source [i]; - i += numChannels; - } - } -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/dsp/juce_AudioDataConverters.h b/src/juce_appframework/audio/dsp/juce_AudioDataConverters.h deleted file mode 100644 index e5198eecf5..0000000000 --- a/src/juce_appframework/audio/dsp/juce_AudioDataConverters.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIODATACONVERTERS_JUCEHEADER__ -#define __JUCE_AUDIODATACONVERTERS_JUCEHEADER__ - - -//============================================================================== -/** - A set of routines to convert buffers of 32-bit floating point data to and from - various integer formats. - -*/ -class JUCE_API AudioDataConverters -{ -public: - //============================================================================== - static void convertFloatToInt16LE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 2); - static void convertFloatToInt16BE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 2); - - static void convertFloatToInt24LE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 3); - static void convertFloatToInt24BE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 3); - - static void convertFloatToInt32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 4); - static void convertFloatToInt32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 4); - - static void convertFloatToFloat32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 4); - static void convertFloatToFloat32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample = 4); - - //============================================================================== - static void convertInt16LEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 2); - static void convertInt16BEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 2); - - static void convertInt24LEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 3); - static void convertInt24BEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 3); - - static void convertInt32LEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 4); - static void convertInt32BEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 4); - - static void convertFloat32LEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 4); - static void convertFloat32BEToFloat (const void* source, float* dest, int numSamples, const int srcBytesPerSample = 4); - - //============================================================================== - enum DataFormat - { - int16LE, - int16BE, - int24LE, - int24BE, - int32LE, - int32BE, - float32LE, - float32BE, - }; - - static void convertFloatToFormat (const DataFormat destFormat, - const float* source, void* dest, int numSamples); - - static void convertFormatToFloat (const DataFormat sourceFormat, - const void* source, float* dest, int numSamples); - - //============================================================================== - static void interleaveSamples (const float** source, float* dest, - const int numSamples, const int numChannels); - - static void deinterleaveSamples (const float* source, float** dest, - const int numSamples, const int numChannels); -}; - - -#endif // __JUCE_AUDIODATACONVERTERS_JUCEHEADER__ diff --git a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp deleted file mode 100644 index 68126e62b8..0000000000 --- a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.cpp +++ /dev/null @@ -1,713 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioSampleBuffer.h" -#include "../audio_file_formats/juce_AudioFormatReader.h" -#include "../audio_file_formats/juce_AudioFormatWriter.h" - - -//============================================================================== -AudioSampleBuffer::AudioSampleBuffer (const int numChannels_, - const int numSamples) throw() - : numChannels (numChannels_), - size (numSamples) -{ - jassert (numSamples >= 0); - jassert (numChannels_ > 0); - - allocatedBytes = numChannels * numSamples * sizeof (float) + 32; - allocatedData = (float*) juce_malloc (allocatedBytes); - channels = (float**) juce_malloc ((numChannels_ + 1) * sizeof (float*)); - - float* chan = allocatedData; - for (int i = 0; i < numChannels_; ++i) - { - channels[i] = chan; - chan += numSamples; - } - - channels [numChannels_] = 0; -} - -AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo, - const int numChannels_, - const int numSamples) throw() - : numChannels (numChannels_), - size (numSamples), - allocatedBytes (0), - allocatedData (0) -{ - jassert (numChannels_ > 0); - - // (try to avoid doing a malloc here, as that'll blow up things like Pro-Tools) - if (numChannels_ < numElementsInArray (preallocatedChannelSpace)) - channels = (float**) preallocatedChannelSpace; - else - channels = (float**) juce_malloc ((numChannels_ + 1) * sizeof (float*)); - - for (int i = 0; i < numChannels_; ++i) - { - // you have to pass in the same number of valid pointers as numChannels - jassert (dataToReferTo[i] != 0); - - channels[i] = dataToReferTo[i]; - } - - channels [numChannels_] = 0; -} - -void AudioSampleBuffer::setDataToReferTo (float** dataToReferTo, - const int numChannels_, - const int numSamples) throw() -{ - jassert (numChannels_ > 0); - - juce_free (allocatedData); - allocatedData = 0; - allocatedBytes = 0; - - if (numChannels_ > numChannels) - channels = (float**) juce_realloc (channels, (numChannels_ + 1) * sizeof (float*)); - - numChannels = numChannels_; - size = numSamples; - - for (int i = 0; i < numChannels_; ++i) - { - // you have to pass in the same number of valid pointers as numChannels - jassert (dataToReferTo[i] != 0); - - channels[i] = dataToReferTo[i]; - } - - channels [numChannels_] = 0; -} - -AudioSampleBuffer::AudioSampleBuffer (const AudioSampleBuffer& other) throw() - : numChannels (other.numChannels), - size (other.size) -{ - channels = (float**) juce_malloc ((other.numChannels + 1) * sizeof (float*)); - - if (other.allocatedData != 0) - { - allocatedBytes = numChannels * size * sizeof (float) + 32; - allocatedData = (float*) juce_malloc (allocatedBytes); - - memcpy (allocatedData, other.allocatedData, allocatedBytes); - - float* chan = allocatedData; - for (int i = 0; i < numChannels; ++i) - { - channels[i] = chan; - chan += size; - } - - channels [numChannels] = 0; - } - else - { - allocatedData = 0; - allocatedBytes = 0; - - memcpy (channels, other.channels, sizeof (channels)); - } -} - -const AudioSampleBuffer& AudioSampleBuffer::operator= (const AudioSampleBuffer& other) throw() -{ - if (this != &other) - { - setSize (other.getNumChannels(), other.getNumSamples(), false, false, false); - - const int numBytes = size * sizeof (float); - - for (int i = 0; i < numChannels; ++i) - memcpy (channels[i], other.channels[i], numBytes); - } - - return *this; -} - -AudioSampleBuffer::~AudioSampleBuffer() throw() -{ - juce_free (allocatedData); - - if (channels != (float**) preallocatedChannelSpace) - juce_free (channels); -} - -void AudioSampleBuffer::setSize (const int newNumChannels, - const int newNumSamples, - const bool keepExistingContent, - const bool clearExtraSpace, - const bool avoidReallocating) throw() -{ - jassert (newNumChannels > 0); - - if (newNumSamples != size || newNumChannels != numChannels) - { - const int newTotalBytes = newNumChannels * newNumSamples * sizeof (float) + 32; - - if (keepExistingContent) - { - float* const newData = (clearExtraSpace) ? (float*) juce_calloc (newTotalBytes) - : (float*) juce_malloc (newTotalBytes); - - const int sizeToCopy = sizeof (float) * jmin (newNumSamples, size); - - for (int i = jmin (newNumChannels, numChannels); --i >= 0;) - { - memcpy (newData + i * newNumSamples, - channels[i], - sizeToCopy); - } - - juce_free (allocatedData); - - allocatedData = newData; - allocatedBytes = newTotalBytes; - } - else - { - if (avoidReallocating && allocatedBytes >= newTotalBytes) - { - if (clearExtraSpace) - zeromem (allocatedData, newTotalBytes); - } - else - { - juce_free (allocatedData); - - allocatedData = (clearExtraSpace) ? (float*) juce_calloc (newTotalBytes) - : (float*) juce_malloc (newTotalBytes); - allocatedBytes = newTotalBytes; - } - } - - size = newNumSamples; - - if (newNumChannels > numChannels) - channels = (float**) juce_realloc (channels, (newNumChannels + 1) * sizeof (float*)); - - numChannels = newNumChannels; - - float* chan = allocatedData; - for (int i = 0; i < newNumChannels; ++i) - { - channels[i] = chan; - chan += size; - } - - channels [newNumChannels] = 0; - } -} - -void AudioSampleBuffer::clear() throw() -{ - for (int i = 0; i < numChannels; ++i) - zeromem (channels[i], size * sizeof (float)); -} - -void AudioSampleBuffer::clear (const int startSample, - const int numSamples) throw() -{ - jassert (startSample >= 0 && startSample + numSamples <= size); - - for (int i = 0; i < numChannels; ++i) - zeromem (channels [i] + startSample, numSamples * sizeof (float)); -} - -void AudioSampleBuffer::clear (const int channel, - const int startSample, - const int numSamples) throw() -{ - jassert (((unsigned int) channel) < (unsigned int) numChannels); - jassert (startSample >= 0 && startSample + numSamples <= size); - - zeromem (channels [channel] + startSample, numSamples * sizeof (float)); -} - -void AudioSampleBuffer::applyGain (const int channel, - const int startSample, - int numSamples, - const float gain) throw() -{ - jassert (((unsigned int) channel) < (unsigned int) numChannels); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (gain != 1.0f) - { - float* d = channels [channel] + startSample; - - if (gain == 0.0f) - { - zeromem (d, sizeof (float) * numSamples); - } - else - { - while (--numSamples >= 0) - *d++ *= gain; - } - } -} - -void AudioSampleBuffer::applyGainRamp (const int channel, - const int startSample, - int numSamples, - float startGain, - float endGain) throw() -{ - if (startGain == endGain) - { - applyGain (channel, startSample, numSamples, startGain); - } - else - { - jassert (((unsigned int) channel) < (unsigned int) numChannels); - jassert (startSample >= 0 && startSample + numSamples <= size); - - const float increment = (endGain - startGain) / numSamples; - float* d = channels [channel] + startSample; - - while (--numSamples >= 0) - { - *d++ *= startGain; - startGain += increment; - } - } -} - -void AudioSampleBuffer::applyGain (const int startSample, - const int numSamples, - const float gain) throw() -{ - for (int i = 0; i < numChannels; ++i) - applyGain (i, startSample, numSamples, gain); -} - -void AudioSampleBuffer::addFrom (const int destChannel, - const int destStartSample, - const AudioSampleBuffer& source, - const int sourceChannel, - const int sourceStartSample, - int numSamples, - const float gain) throw() -{ - jassert (&source != this || sourceChannel != destChannel); - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (((unsigned int) sourceChannel) < (unsigned int) source.numChannels); - jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); - - if (gain != 0.0f && numSamples > 0) - { - float* d = channels [destChannel] + destStartSample; - const float* s = source.channels [sourceChannel] + sourceStartSample; - - if (gain != 1.0f) - { - while (--numSamples >= 0) - *d++ += gain * *s++; - } - else - { - while (--numSamples >= 0) - *d++ += *s++; - } - } -} - -void AudioSampleBuffer::addFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - const float gain) throw() -{ - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != 0); - - if (gain != 0.0f && numSamples > 0) - { - float* d = channels [destChannel] + destStartSample; - - if (gain != 1.0f) - { - while (--numSamples >= 0) - *d++ += gain * *source++; - } - else - { - while (--numSamples >= 0) - *d++ += *source++; - } - } -} - -void AudioSampleBuffer::addFromWithRamp (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - float startGain, - const float endGain) throw() -{ - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != 0); - - if (startGain == endGain) - { - addFrom (destChannel, - destStartSample, - source, - numSamples, - startGain); - } - else - { - if (numSamples > 0 && (startGain != 0.0f || endGain != 0.0f)) - { - const float increment = (endGain - startGain) / numSamples; - float* d = channels [destChannel] + destStartSample; - - while (--numSamples >= 0) - { - *d++ += startGain * *source++; - startGain += increment; - } - } - } -} - -void AudioSampleBuffer::copyFrom (const int destChannel, - const int destStartSample, - const AudioSampleBuffer& source, - const int sourceChannel, - const int sourceStartSample, - int numSamples) throw() -{ - jassert (&source != this || sourceChannel != destChannel); - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (((unsigned int) sourceChannel) < (unsigned int) source.numChannels); - jassert (sourceStartSample >= 0 && sourceStartSample + numSamples <= source.size); - - if (numSamples > 0) - { - memcpy (channels [destChannel] + destStartSample, - source.channels [sourceChannel] + sourceStartSample, - sizeof (float) * numSamples); - } -} - -void AudioSampleBuffer::copyFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples) throw() -{ - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != 0); - - if (numSamples > 0) - { - memcpy (channels [destChannel] + destStartSample, - source, - sizeof (float) * numSamples); - } -} - -void AudioSampleBuffer::copyFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - const float gain) throw() -{ - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != 0); - - if (numSamples > 0 && gain != 0) - { - float* d = channels [destChannel] + destStartSample; - - if (gain != 1.0f) - { - while (--numSamples >= 0) - *d++ = gain * *source++; - } - else - { - memcpy (d, source, sizeof (float) * numSamples); - } - } -} - -void AudioSampleBuffer::copyFromWithRamp (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - float startGain, - float endGain) throw() -{ - jassert (((unsigned int) destChannel) < (unsigned int) numChannels); - jassert (destStartSample >= 0 && destStartSample + numSamples <= size); - jassert (source != 0); - - if (startGain == endGain) - { - copyFrom (destChannel, - destStartSample, - source, - numSamples, - startGain); - } - else - { - if (numSamples > 0 && (startGain != 0.0f || endGain != 0.0f)) - { - const float increment = (endGain - startGain) / numSamples; - float* d = channels [destChannel] + destStartSample; - - while (--numSamples >= 0) - { - *d++ = startGain * *source++; - startGain += increment; - } - } - } -} - -void AudioSampleBuffer::findMinMax (const int channel, - const int startSample, - int numSamples, - float& minVal, - float& maxVal) const throw() -{ - jassert (((unsigned int) channel) < (unsigned int) numChannels); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (numSamples <= 0) - { - minVal = 0.0f; - maxVal = 0.0f; - } - else - { - const float* d = channels [channel] + startSample; - - float mn = *d++; - float mx = mn; - - while (--numSamples > 0) // (> 0 rather than >= 0 because we've already taken the first sample) - { - const float samp = *d++; - - if (samp > mx) - mx = samp; - - if (samp < mn) - mn = samp; - } - - maxVal = mx; - minVal = mn; - } -} - -float AudioSampleBuffer::getMagnitude (const int channel, - const int startSample, - const int numSamples) const throw() -{ - jassert (((unsigned int) channel) < (unsigned int) numChannels); - jassert (startSample >= 0 && startSample + numSamples <= size); - - float mn, mx; - findMinMax (channel, startSample, numSamples, mn, mx); - - return jmax (mn, -mn, mx, -mx); -} - -float AudioSampleBuffer::getMagnitude (const int startSample, - const int numSamples) const throw() -{ - float mag = 0.0f; - - for (int i = 0; i < numChannels; ++i) - mag = jmax (mag, getMagnitude (i, startSample, numSamples)); - - return mag; -} - -float AudioSampleBuffer::getRMSLevel (const int channel, - const int startSample, - const int numSamples) const throw() -{ - jassert (((unsigned int) channel) < (unsigned int) numChannels); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (numSamples <= 0 || channel < 0 || channel >= numChannels) - return 0.0f; - - const float* const data = channels [channel] + startSample; - double sum = 0.0; - - for (int i = 0; i < numSamples; ++i) - { - const float sample = data [i]; - sum += sample * sample; - } - - return (float) sqrt (sum / numSamples); -} - -void AudioSampleBuffer::readFromAudioReader (AudioFormatReader* reader, - const int startSample, - const int numSamples, - const int readerStartSample, - const bool useLeftChan, - const bool useRightChan) throw() -{ - jassert (reader != 0); - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (numSamples > 0) - { - int* chans[3]; - - if (useLeftChan == useRightChan) - { - chans[0] = (int*) getSampleData (0, startSample); - chans[1] = (reader->numChannels > 1 && getNumChannels() > 1) ? (int*) getSampleData (1, startSample) : 0; - } - else if (useLeftChan || (reader->numChannels == 1)) - { - chans[0] = (int*) getSampleData (0, startSample); - chans[1] = 0; - } - else if (useRightChan) - { - chans[0] = 0; - chans[1] = (int*) getSampleData (0, startSample); - } - - chans[2] = 0; - - reader->read (chans, 2, readerStartSample, numSamples, true); - - if (! reader->usesFloatingPointData) - { - for (int j = 0; j < 2; ++j) - { - float* const d = (float*) (chans[j]); - - if (d != 0) - { - const float multiplier = 1.0f / 0x7fffffff; - - for (int i = 0; i < numSamples; ++i) - d[i] = *(int*)(d + i) * multiplier; - } - } - } - - if (numChannels > 1 && (chans[0] == 0 || chans[1] == 0)) - { - // if this is a stereo buffer and the source was mono, dupe the first channel.. - memcpy (getSampleData (1, startSample), - getSampleData (0, startSample), - sizeof (float) * numSamples); - } - } -} - -void AudioSampleBuffer::writeToAudioWriter (AudioFormatWriter* writer, - const int startSample, - const int numSamples) const throw() -{ - jassert (startSample >= 0 && startSample + numSamples <= size); - - if (numSamples > 0) - { - int* chans [3]; - - if (writer->isFloatingPoint()) - { - chans[0] = (int*) getSampleData (0, startSample); - - if (numChannels > 1) - chans[1] = (int*) getSampleData (1, startSample); - else - chans[1] = 0; - - chans[2] = 0; - writer->write ((const int**) chans, numSamples); - } - else - { - chans[0] = (int*) juce_malloc (sizeof (int) * numSamples * 2); - - if (numChannels > 1) - chans[1] = chans[0] + numSamples; - else - chans[1] = 0; - - chans[2] = 0; - - for (int j = 0; j < 2; ++j) - { - int* const dest = chans[j]; - - if (dest != 0) - { - const float* const src = channels [j] + startSample; - - for (int i = 0; i < numSamples; ++i) - { - const double samp = src[i]; - - if (samp <= -1.0) - dest[i] = INT_MIN; - else if (samp >= 1.0) - dest[i] = INT_MAX; - else - dest[i] = roundDoubleToInt (INT_MAX * samp); - } - } - } - - writer->write ((const int**) chans, numSamples); - - juce_free (chans[0]); - } - } -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h b/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h deleted file mode 100644 index 2d3ab4627c..0000000000 --- a/src/juce_appframework/audio/dsp/juce_AudioSampleBuffer.h +++ /dev/null @@ -1,433 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOSAMPLEBUFFER_JUCEHEADER__ -#define __JUCE_AUDIOSAMPLEBUFFER_JUCEHEADER__ - -class AudioFormatReader; -class AudioFormatWriter; - - -//============================================================================== -/** - A multi-channel buffer of 32-bit floating point audio samples. - -*/ -class JUCE_API AudioSampleBuffer -{ -public: - //============================================================================== - /** Creates a buffer with a specified number of channels and samples. - - The contents of the buffer will initially be undefined, so use clear() to - set all the samples to zero. - - The buffer will allocate its memory internally, and this will be released - when the buffer is deleted. - */ - AudioSampleBuffer (const int numChannels, - const int numSamples) throw(); - - /** Creates a buffer using a pre-allocated block of memory. - - Note that if the buffer is resized or its number of channels is changed, it - will re-allocate memory internally and copy the existing data to this new area, - so it will then stop directly addressing this memory. - - @param dataToReferTo a pre-allocated array containing pointers to the data - for each channel that should be used by this buffer. The - buffer will only refer to this memory, it won't try to delete - it when the buffer is deleted or resized. - @param numChannels the number of channels to use - this must correspond to the - number of elements in the array passed in - @param numSamples the number of samples to use - this must correspond to the - size of the arrays passed in - */ - AudioSampleBuffer (float** dataToReferTo, - const int numChannels, - const int numSamples) throw(); - - /** Copies another buffer. - - This buffer will make its own copy of the other's data, unless the buffer was created - using an external data buffer, in which case boths buffers will just point to the same - shared block of data. - */ - AudioSampleBuffer (const AudioSampleBuffer& other) throw(); - - /** Copies another buffer onto this one. - - This buffer's size will be changed to that of the other buffer. - */ - const AudioSampleBuffer& operator= (const AudioSampleBuffer& other) throw(); - - /** Destructor. - - This will free any memory allocated by the buffer. - */ - virtual ~AudioSampleBuffer() throw(); - - //============================================================================== - /** Returns the number of channels of audio data that this buffer contains. - - @see getSampleData - */ - int getNumChannels() const throw() { return numChannels; } - - /** Returns the number of samples allocated in each of the buffer's channels. - - @see getSampleData - */ - int getNumSamples() const throw() { return size; } - - /** Returns a pointer one of the buffer's channels. - - For speed, this doesn't check whether the channel number is out of range, - so be careful when using it! - */ - float* getSampleData (const int channelNumber) const throw() - { - jassert (((unsigned int) channelNumber) < (unsigned int) numChannels); - return channels [channelNumber]; - } - - /** Returns a pointer to a sample in one of the buffer's channels. - - For speed, this doesn't check whether the channel and sample number - are out-of-range, so be careful when using it! - */ - float* getSampleData (const int channelNumber, - const int sampleOffset) const throw() - { - jassert (((unsigned int) channelNumber) < (unsigned int) numChannels); - jassert (((unsigned int) sampleOffset) < (unsigned int) size); - return channels [channelNumber] + sampleOffset; - } - - /** Returns an array of pointers to the channels in the buffer. - - Don't modify any of the pointers that are returned, and bear in mind that - these will become invalid if the buffer is resized. - */ - float** getArrayOfChannels() const throw() { return channels; } - - //============================================================================== - /** Chages the buffer's size or number of channels. - - This can expand or contract the buffer's length, and add or remove channels. - - If keepExistingContent is true, it will try to preserve as much of the - old data as it can in the new buffer. - - If clearExtraSpace is true, then any extra channels or space that is - allocated will be also be cleared. If false, then this space is left - uninitialised. - - If avoidReallocating is true, then changing the buffer's size won't reduce the - amount of memory that is currently allocated (but it will still increase it if - the new size is bigger than the amount it currently has). If this is false, then - a new allocation will be done so that the buffer uses takes up the minimum amount - of memory that it needs. - */ - void setSize (const int newNumChannels, - const int newNumSamples, - const bool keepExistingContent = false, - const bool clearExtraSpace = false, - const bool avoidReallocating = false) throw(); - - - /** Makes this buffer point to a pre-allocated set of channel data arrays. - - There's also a constructor that lets you specify arrays like this, but this - lets you change the channels dynamically. - - Note that if the buffer is resized or its number of channels is changed, it - will re-allocate memory internally and copy the existing data to this new area, - so it will then stop directly addressing this memory. - - @param dataToReferTo a pre-allocated array containing pointers to the data - for each channel that should be used by this buffer. The - buffer will only refer to this memory, it won't try to delete - it when the buffer is deleted or resized. - @param numChannels the number of channels to use - this must correspond to the - number of elements in the array passed in - @param numSamples the number of samples to use - this must correspond to the - size of the arrays passed in - */ - void setDataToReferTo (float** dataToReferTo, - const int numChannels, - const int numSamples) throw(); - - //============================================================================== - /** Clears all the samples in all channels. */ - void clear() throw(); - - /** Clears a specified region of all the channels. - - For speed, this doesn't check whether the channel and sample number - are in-range, so be careful! - */ - void clear (const int startSample, - const int numSamples) throw(); - - /** Clears a specified region of just one channel. - - For speed, this doesn't check whether the channel and sample number - are in-range, so be careful! - */ - void clear (const int channel, - const int startSample, - const int numSamples) throw(); - - /** Applies a gain multiple to a region of one channel. - - For speed, this doesn't check whether the channel and sample number - are in-range, so be careful! - */ - void applyGain (const int channel, - const int startSample, - int numSamples, - const float gain) throw(); - - /** Applies a gain multiple to a region of all the channels. - - For speed, this doesn't check whether the sample numbers - are in-range, so be careful! - */ - void applyGain (const int startSample, - const int numSamples, - const float gain) throw(); - - /** Applies a range of gains to a region of a channel. - - The gain that is applied to each sample will vary from - startGain on the first sample to endGain on the last Sample, - so it can be used to do basic fades. - - For speed, this doesn't check whether the sample numbers - are in-range, so be careful! - */ - void applyGainRamp (const int channel, - const int startSample, - int numSamples, - float startGain, - float endGain) throw(); - - /** Adds samples from another buffer to this one. - - @param destChannel the channel within this buffer to add the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source buffer to add from - @param sourceChannel the channel within the source buffer to read from - @param sourceStartSample the offset within the source buffer's channel to start reading samples from - @param numSamples the number of samples to process - @param gainToApplyToSource an optional gain to apply to the source samples before they are - added to this buffer's samples - - @see copyFrom - */ - void addFrom (const int destChannel, - const int destStartSample, - const AudioSampleBuffer& source, - const int sourceChannel, - const int sourceStartSample, - int numSamples, - const float gainToApplyToSource = 1.0f) throw(); - - /** Adds samples from an array of floats to one of the channels. - - @param destChannel the channel within this buffer to add the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source data to use - @param numSamples the number of samples to process - @param gainToApplyToSource an optional gain to apply to the source samples before they are - added to this buffer's samples - - @see copyFrom - */ - void addFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - const float gainToApplyToSource = 1.0f) throw(); - - /** Adds samples from an array of floats, applying a gain ramp to them. - - @param destChannel the channel within this buffer to add the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source data to use - @param numSamples the number of samples to process - @param startGain the gain to apply to the first sample (this is multiplied with - the source samples before they are added to this buffer) - @param endGain the gain to apply to the final sample. The gain is linearly - interpolated between the first and last samples. - */ - void addFromWithRamp (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - float startGain, - float endGain) throw(); - - /** Copies samples from another buffer to this one. - - @param destChannel the channel within this buffer to copy the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source buffer to read from - @param sourceChannel the channel within the source buffer to read from - @param sourceStartSample the offset within the source buffer's channel to start reading samples from - @param numSamples the number of samples to process - - @see addFrom - */ - void copyFrom (const int destChannel, - const int destStartSample, - const AudioSampleBuffer& source, - const int sourceChannel, - const int sourceStartSample, - int numSamples) throw(); - - /** Copies samples from an array of floats into one of the channels. - - @param destChannel the channel within this buffer to copy the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source buffer to read from - @param numSamples the number of samples to process - - @see addFrom - */ - void copyFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples) throw(); - - /** Copies samples from an array of floats into one of the channels, applying a gain to it. - - @param destChannel the channel within this buffer to copy the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source buffer to read from - @param numSamples the number of samples to process - @param gain the gain to apply - - @see addFrom - */ - void copyFrom (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - const float gain) throw(); - - /** Copies samples from an array of floats into one of the channels, applying a gain ramp. - - @param destChannel the channel within this buffer to copy the samples to - @param destStartSample the start sample within this buffer's channel - @param source the source buffer to read from - @param numSamples the number of samples to process - @param startGain the gain to apply to the first sample (this is multiplied with - the source samples before they are copied to this buffer) - @param endGain the gain to apply to the final sample. The gain is linearly - interpolated between the first and last samples. - - @see addFrom - */ - void copyFromWithRamp (const int destChannel, - const int destStartSample, - const float* source, - int numSamples, - float startGain, - float endGain) throw(); - - - /** Finds the highest and lowest sample values in a given range. - - @param channel the channel to read from - @param startSample the start sample within the channel - @param numSamples the number of samples to check - @param minVal on return, the lowest value that was found - @param maxVal on return, the highest value that was found - */ - void findMinMax (const int channel, - const int startSample, - int numSamples, - float& minVal, - float& maxVal) const throw(); - - /** Finds the highest absolute sample value within a region of a channel. - */ - float getMagnitude (const int channel, - const int startSample, - const int numSamples) const throw(); - - /** Finds the highest absolute sample value within a region on all channels. - */ - float getMagnitude (const int startSample, - const int numSamples) const throw(); - - /** Returns the root mean squared level for a region of a channel. - */ - float getRMSLevel (const int channel, - const int startSample, - const int numSamples) const throw(); - - //============================================================================== - /** Fills a section of the buffer using an AudioReader as its source. - - This will convert the reader's fixed- or floating-point data to - the buffer's floating-point format, and will try to intelligently - cope with mismatches between the number of channels in the reader - and the buffer. - - @see writeToAudioWriter - */ - void readFromAudioReader (AudioFormatReader* reader, - const int startSample, - const int numSamples, - const int readerStartSample, - const bool useReaderLeftChan, - const bool useReaderRightChan) throw(); - - /** Writes a section of this buffer to an audio writer. - - This saves you having to mess about with channels or floating/fixed - point conversion. - - @see readFromAudioReader - */ - void writeToAudioWriter (AudioFormatWriter* writer, - const int startSample, - const int numSamples) const throw(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - int numChannels, size, allocatedBytes; - float** channels; - float* allocatedData; - float* preallocatedChannelSpace [32]; -}; - - -#endif // __JUCE_AUDIOSAMPLEBUFFER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/dsp/juce_IIRFilter.cpp b/src/juce_appframework/audio/dsp/juce_IIRFilter.cpp deleted file mode 100644 index 9e47db0307..0000000000 --- a/src/juce_appframework/audio/dsp/juce_IIRFilter.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_IIRFilter.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -IIRFilter::IIRFilter() throw() - : active (false) -{ - reset(); -} - -IIRFilter::IIRFilter (const IIRFilter& other) throw() - : active (other.active) -{ - const ScopedLock sl (other.processLock); - memcpy (coefficients, other.coefficients, sizeof (coefficients)); - reset(); -} - -IIRFilter::~IIRFilter() throw() -{ -} - -//============================================================================== -void IIRFilter::reset() throw() -{ - const ScopedLock sl (processLock); - - x1 = 0; - x2 = 0; - y1 = 0; - y2 = 0; -} - -float IIRFilter::processSingleSampleRaw (const float in) throw() -{ - float out = coefficients[0] * in - + coefficients[1] * x1 - + coefficients[2] * x2 - - coefficients[4] * y1 - - coefficients[5] * y2; - -#if JUCE_INTEL - if (! (out < -1.0e-8 || out > 1.0e-8)) - out = 0; -#endif - - x2 = x1; - x1 = in; - y2 = y1; - y1 = out; - - return out; -} - -void IIRFilter::processSamples (float* const samples, - const int numSamples) throw() -{ - const ScopedLock sl (processLock); - - if (active) - { - for (int i = 0; i < numSamples; ++i) - { - const float in = samples[i]; - - float out = coefficients[0] * in - + coefficients[1] * x1 - + coefficients[2] * x2 - - coefficients[4] * y1 - - coefficients[5] * y2; - -#if JUCE_INTEL - if (! (out < -1.0e-8 || out > 1.0e-8)) - out = 0; -#endif - - x2 = x1; - x1 = in; - y2 = y1; - y1 = out; - - samples[i] = out; - } - } -} - -//============================================================================== -void IIRFilter::makeLowPass (const double sampleRate, - const double frequency) throw() -{ - jassert (sampleRate > 0); - - const double n = 1.0 / tan (double_Pi * frequency / sampleRate); - const double nSquared = n * n; - const double c1 = 1.0 / (1.0 + sqrt (2.0) * n + nSquared); - - setCoefficients (c1, - c1 * 2.0f, - c1, - 1.0, - c1 * 2.0 * (1.0 - nSquared), - c1 * (1.0 - sqrt (2.0) * n + nSquared)); -} - -void IIRFilter::makeHighPass (const double sampleRate, - const double frequency) throw() -{ - const double n = tan (double_Pi * frequency / sampleRate); - const double nSquared = n * n; - const double c1 = 1.0 / (1.0 + sqrt (2.0) * n + nSquared); - - setCoefficients (c1, - c1 * -2.0f, - c1, - 1.0, - c1 * 2.0 * (nSquared - 1.0), - c1 * (1.0 - sqrt (2.0) * n + nSquared)); -} - -void IIRFilter::makeLowShelf (const double sampleRate, - const double cutOffFrequency, - const double Q, - const float gainFactor) throw() -{ - jassert (sampleRate > 0); - jassert (Q > 0); - - const double A = jmax (0.0f, gainFactor); - const double aminus1 = A - 1.0; - const double aplus1 = A + 1.0; - const double omega = (double_Pi * 2.0 * jmax (cutOffFrequency, 2.0)) / sampleRate; - const double coso = cos (omega); - const double beta = sin (omega) * sqrt (A) / Q; - const double aminus1TimesCoso = aminus1 * coso; - - setCoefficients (A * (aplus1 - aminus1TimesCoso + beta), - A * 2.0 * (aminus1 - aplus1 * coso), - A * (aplus1 - aminus1TimesCoso - beta), - aplus1 + aminus1TimesCoso + beta, - -2.0 * (aminus1 + aplus1 * coso), - aplus1 + aminus1TimesCoso - beta); -} - -void IIRFilter::makeHighShelf (const double sampleRate, - const double cutOffFrequency, - const double Q, - const float gainFactor) throw() -{ - jassert (sampleRate > 0); - jassert (Q > 0); - - const double A = jmax (0.0f, gainFactor); - const double aminus1 = A - 1.0; - const double aplus1 = A + 1.0; - const double omega = (double_Pi * 2.0 * jmax (cutOffFrequency, 2.0)) / sampleRate; - const double coso = cos (omega); - const double beta = sin (omega) * sqrt (A) / Q; - const double aminus1TimesCoso = aminus1 * coso; - - setCoefficients (A * (aplus1 + aminus1TimesCoso + beta), - A * -2.0 * (aminus1 + aplus1 * coso), - A * (aplus1 + aminus1TimesCoso - beta), - aplus1 - aminus1TimesCoso + beta, - 2.0 * (aminus1 - aplus1 * coso), - aplus1 - aminus1TimesCoso - beta); -} - -void IIRFilter::makeBandPass (const double sampleRate, - const double centreFrequency, - const double Q, - const float gainFactor) throw() -{ - jassert (sampleRate > 0); - jassert (Q > 0); - - const double A = jmax (0.0f, gainFactor); - const double omega = (double_Pi * 2.0 * jmax (centreFrequency, 2.0)) / sampleRate; - const double alpha = 0.5 * sin (omega) / Q; - const double c2 = -2.0 * cos (omega); - const double alphaTimesA = alpha * A; - const double alphaOverA = alpha / A; - - setCoefficients (1.0 + alphaTimesA, - c2, - 1.0 - alphaTimesA, - 1.0 + alphaOverA, - c2, - 1.0 - alphaOverA); -} - -void IIRFilter::makeInactive() throw() -{ - const ScopedLock sl (processLock); - active = false; -} - -//============================================================================== -void IIRFilter::copyCoefficientsFrom (const IIRFilter& other) throw() -{ - const ScopedLock sl (processLock); - - memcpy (coefficients, other.coefficients, sizeof (coefficients)); - active = other.active; -} - -//============================================================================== -void IIRFilter::setCoefficients (double c1, - double c2, - double c3, - double c4, - double c5, - double c6) throw() -{ - const double a = 1.0 / c4; - - c1 *= a; - c2 *= a; - c3 *= a; - c5 *= a; - c6 *= a; - - const ScopedLock sl (processLock); - - coefficients[0] = (float) c1; - coefficients[1] = (float) c2; - coefficients[2] = (float) c3; - coefficients[3] = (float) c4; - coefficients[4] = (float) c5; - coefficients[5] = (float) c6; - - active = true; -} - - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/dsp/juce_IIRFilter.h b/src/juce_appframework/audio/dsp/juce_IIRFilter.h deleted file mode 100644 index 94e65017c2..0000000000 --- a/src/juce_appframework/audio/dsp/juce_IIRFilter.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_IIRFILTER_JUCEHEADER__ -#define __JUCE_IIRFILTER_JUCEHEADER__ - -#include "../../../juce_core/threads/juce_CriticalSection.h" - - -//============================================================================== -/** - An IIR filter that can perform low, high, or band-pass filtering on an - audio signal. - - @see IIRFilterAudioSource -*/ -class JUCE_API IIRFilter -{ -public: - //============================================================================== - /** Creates a filter. - - Initially the filter is inactive, so will have no effect on samples that - you process with it. Use the appropriate method to turn it into the type - of filter needed. - */ - IIRFilter() throw(); - - /** Creates a copy of another filter. */ - IIRFilter (const IIRFilter& other) throw(); - - /** Destructor. */ - ~IIRFilter() throw(); - - //============================================================================== - /** Resets the filter's processing pipeline, ready to start a new stream of data. - - Note that this clears the processing state, but the type of filter and - its coefficients aren't changed. To put a filter into an inactive state, use - the makeInactive() method. - */ - void reset() throw(); - - /** Performs the filter operation on the given set of samples. - */ - void processSamples (float* const samples, - const int numSamples) throw(); - - /** Processes a single sample, without any locking or checking. - - Use this if you need fast processing of a single value, but be aware that - this isn't thread-safe in the way that processSamples() is. - */ - float processSingleSampleRaw (const float sample) throw(); - - //============================================================================== - /** Sets the filter up to act as a low-pass filter. - */ - void makeLowPass (const double sampleRate, - const double frequency) throw(); - - /** Sets the filter up to act as a high-pass filter. - */ - void makeHighPass (const double sampleRate, - const double frequency) throw(); - - //============================================================================== - /** Sets the filter up to act as a low-pass shelf filter with variable Q and gain. - - The gain is a scale factor that the low frequencies are multiplied by, so values - greater than 1.0 will boost the low frequencies, values less than 1.0 will - attenuate them. - */ - void makeLowShelf (const double sampleRate, - const double cutOffFrequency, - const double Q, - const float gainFactor) throw(); - - /** Sets the filter up to act as a high-pass shelf filter with variable Q and gain. - - The gain is a scale factor that the high frequencies are multiplied by, so values - greater than 1.0 will boost the high frequencies, values less than 1.0 will - attenuate them. - */ - void makeHighShelf (const double sampleRate, - const double cutOffFrequency, - const double Q, - const float gainFactor) throw(); - - /** Sets the filter up to act as a band pass filter centred around a - frequency, with a variable Q and gain. - - The gain is a scale factor that the centre frequencies are multiplied by, so - values greater than 1.0 will boost the centre frequencies, values less than - 1.0 will attenuate them. - */ - void makeBandPass (const double sampleRate, - const double centreFrequency, - const double Q, - const float gainFactor) throw(); - - /** Clears the filter's coefficients so that it becomes inactive. - */ - void makeInactive() throw(); - - //============================================================================== - /** Makes this filter duplicate the set-up of another one. - */ - void copyCoefficientsFrom (const IIRFilter& other) throw(); - - - //============================================================================== - juce_UseDebuggingNewOperator - - -protected: - CriticalSection processLock; - - void setCoefficients (double c1, double c2, double c3, - double c4, double c5, double c6) throw(); - - bool active; - float coefficients[6]; - float x1, x2, y1, y2; - - // (use the copyCoefficientsFrom() method instead of this operator) - const IIRFilter& operator= (const IIRFilter&); -}; - - -#endif // __JUCE_IIRFILTER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/midi/juce_MidiBuffer.cpp b/src/juce_appframework/audio/midi/juce_MidiBuffer.cpp deleted file mode 100644 index 644218a956..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiBuffer.cpp +++ /dev/null @@ -1,302 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiBuffer.h" - - -//============================================================================== -MidiBuffer::MidiBuffer() throw() - : ArrayAllocationBase (32), - bytesUsed (0) -{ -} - -MidiBuffer::MidiBuffer (const MidiMessage& message) throw() - : ArrayAllocationBase (32), - bytesUsed (0) -{ - addEvent (message, 0); -} - -MidiBuffer::MidiBuffer (const MidiBuffer& other) throw() - : ArrayAllocationBase (32), - bytesUsed (other.bytesUsed) -{ - ensureAllocatedSize (bytesUsed); - memcpy (elements, other.elements, bytesUsed); -} - -const MidiBuffer& MidiBuffer::operator= (const MidiBuffer& other) throw() -{ - if (this != &other) - { - bytesUsed = other.bytesUsed; - ensureAllocatedSize (bytesUsed); - - if (bytesUsed > 0) - memcpy (elements, other.elements, bytesUsed); - } - - return *this; -} - -void MidiBuffer::swap (MidiBuffer& other) -{ - swapVariables (this->elements, other.elements); - swapVariables (this->numAllocated, other.numAllocated); - swapVariables (this->bytesUsed, other.bytesUsed); -} - -MidiBuffer::~MidiBuffer() throw() -{ -} - -void MidiBuffer::clear() throw() -{ - bytesUsed = 0; -} - -void MidiBuffer::clear (const int startSample, - const int numSamples) throw() -{ - uint8* const start = findEventAfter (elements, startSample - 1); - uint8* const end = findEventAfter (start, startSample + numSamples - 1); - - if (end > start) - { - const size_t bytesToMove = (size_t) (bytesUsed - (end - elements)); - - if (bytesToMove > 0) - memmove (start, end, bytesToMove); - - bytesUsed -= (int) (end - start); - } -} - -void MidiBuffer::addEvent (const MidiMessage& m, - const int sampleNumber) throw() -{ - addEvent (m.getRawData(), m.getRawDataSize(), sampleNumber); -} - -static int findActualEventLength (const uint8* const data, - const int maxBytes) throw() -{ - unsigned int byte = (unsigned int) *data; - - int size = 0; - - if (byte == 0xf0 || byte == 0xf7) - { - const uint8* d = data + 1; - - while (d < data + maxBytes) - if (*d++ == 0xf7) - break; - - size = (int) (d - data); - } - else if (byte == 0xff) - { - int n; - const int bytesLeft = MidiMessage::readVariableLengthVal (data + 1, n); - size = jmin (maxBytes, n + 2 + bytesLeft); - } - else if (byte >= 0x80) - { - size = jmin (maxBytes, MidiMessage::getMessageLengthFromFirstByte ((uint8) byte)); - } - - return size; -} - -void MidiBuffer::addEvent (const uint8* const newData, - const int maxBytes, - const int sampleNumber) throw() -{ - const int numBytes = findActualEventLength (newData, maxBytes); - - if (numBytes > 0) - { - ensureAllocatedSize (bytesUsed + numBytes + 6); - - uint8* d = findEventAfter (elements, sampleNumber); - const size_t bytesToMove = (size_t) (bytesUsed - (d - elements)); - - if (bytesToMove > 0) - memmove (d + numBytes + 6, - d, - bytesToMove); - - *(int*) d = sampleNumber; - d += 4; - *(uint16*) d = (uint16) numBytes; - d += 2; - - memcpy (d, newData, numBytes); - - bytesUsed += numBytes + 6; - } -} - -void MidiBuffer::addEvents (const MidiBuffer& otherBuffer, - const int startSample, - const int numSamples, - const int sampleDeltaToAdd) throw() -{ - Iterator i (otherBuffer); - i.setNextSamplePosition (startSample); - - const uint8* data; - int size, position; - - while (i.getNextEvent (data, size, position) - && (position < startSample + numSamples || numSamples < 0)) - { - addEvent (data, size, position + sampleDeltaToAdd); - } -} - -bool MidiBuffer::isEmpty() const throw() -{ - return bytesUsed == 0; -} - -int MidiBuffer::getNumEvents() const throw() -{ - int n = 0; - const uint8* d = elements; - const uint8* const end = elements + bytesUsed; - - while (d < end) - { - d += 4; - d += 2 + *(const uint16*) d; - ++n; - } - - return n; -} - -int MidiBuffer::getFirstEventTime() const throw() -{ - return (bytesUsed > 0) ? *(const int*) elements : 0; -} - -int MidiBuffer::getLastEventTime() const throw() -{ - if (bytesUsed == 0) - return 0; - - const uint8* d = elements; - const uint8* const endData = d + bytesUsed; - - for (;;) - { - const uint8* nextOne = d + 6 + * (const uint16*) (d + 4); - - if (nextOne >= endData) - return *(const int*) d; - - d = nextOne; - } -} - -uint8* MidiBuffer::findEventAfter (uint8* d, const int samplePosition) const throw() -{ - const uint8* const endData = elements + bytesUsed; - - while (d < endData && *(int*) d <= samplePosition) - { - d += 4; - d += 2 + *(uint16*) d; - } - - return d; -} - -//============================================================================== -MidiBuffer::Iterator::Iterator (const MidiBuffer& buffer) throw() - : buffer (buffer), - data (buffer.elements) -{ -} - -MidiBuffer::Iterator::~Iterator() throw() -{ -} - -//============================================================================== -void MidiBuffer::Iterator::setNextSamplePosition (const int samplePosition) throw() -{ - data = buffer.elements; - const uint8* dataEnd = buffer.elements + buffer.bytesUsed; - - while (data < dataEnd && *(int*) data < samplePosition) - { - data += 4; - data += 2 + *(uint16*) data; - } -} - -bool MidiBuffer::Iterator::getNextEvent (const uint8* &midiData, - int& numBytes, - int& samplePosition) throw() -{ - if (data >= buffer.elements + buffer.bytesUsed) - return false; - - samplePosition = *(int*) data; - data += 4; - numBytes = *(uint16*) data; - data += 2; - midiData = data; - data += numBytes; - - return true; -} - -bool MidiBuffer::Iterator::getNextEvent (MidiMessage& result, - int& samplePosition) throw() -{ - if (data >= buffer.elements + buffer.bytesUsed) - return false; - - samplePosition = *(int*) data; - data += 4; - const int numBytes = *(uint16*) data; - data += 2; - result = MidiMessage (data, numBytes, samplePosition); - data += numBytes; - - return true; -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/midi/juce_MidiBuffer.h b/src/juce_appframework/audio/midi/juce_MidiBuffer.h deleted file mode 100644 index 9a9d33c550..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiBuffer.h +++ /dev/null @@ -1,235 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIBUFFER_JUCEHEADER__ -#define __JUCE_MIDIBUFFER_JUCEHEADER__ - -#include "../../../juce_core/containers/juce_ArrayAllocationBase.h" -#include "juce_MidiMessage.h" - - -//============================================================================== -/** - Holds a sequence of time-stamped midi events. - - Analogous to the AudioSampleBuffer, this holds a set of midi events with - integer time-stamps. The buffer is kept sorted in order of the time-stamps. - - @see MidiMessage -*/ -class JUCE_API MidiBuffer : private ArrayAllocationBase -{ -public: - //============================================================================== - /** Creates an empty MidiBuffer. */ - MidiBuffer() throw(); - - /** Creates a MidiBuffer containing a single midi message. */ - MidiBuffer (const MidiMessage& message) throw(); - - /** Creates a copy of another MidiBuffer. */ - MidiBuffer (const MidiBuffer& other) throw(); - - /** Makes a copy of another MidiBuffer. */ - const MidiBuffer& operator= (const MidiBuffer& other) throw(); - - /** Destructor */ - ~MidiBuffer() throw(); - - //============================================================================== - /** Removes all events from the buffer. */ - void clear() throw(); - - /** Removes all events between two times from the buffer. - - All events for which (start <= event position < start + numSamples) will - be removed. - */ - void clear (const int start, - const int numSamples) throw(); - - /** Returns true if the buffer is empty. - - To actually retrieve the events, use a MidiBuffer::Iterator object - */ - bool isEmpty() const throw(); - - /** Counts the number of events in the buffer. - - This is actually quite a slow operation, as it has to iterate through all - the events, so you might prefer to call isEmpty() if that's all you need - to know. - */ - int getNumEvents() const throw(); - - /** Adds an event to the buffer. - - The sample number will be used to determine the position of the event in - the buffer, which is always kept sorted. The MidiMessage's timestamp is - ignored. - - If an event is added whose sample position is the same as one or more events - already in the buffer, the new event will be placed after the existing ones. - - To retrieve events, use a MidiBuffer::Iterator object - */ - void addEvent (const MidiMessage& midiMessage, - const int sampleNumber) throw(); - - /** Adds an event to the buffer from raw midi data. - - The sample number will be used to determine the position of the event in - the buffer, which is always kept sorted. - - If an event is added whose sample position is the same as one or more events - already in the buffer, the new event will be placed after the existing ones. - - The event data will be inspected to calculate the number of bytes in length that - the midi event really takes up, so maxBytesOfMidiData may be longer than the data - that actually gets stored. E.g. if you pass in a note-on and a length of 4 bytes, - it'll actually only store 3 bytes. If the midi data is invalid, it might not - add an event at all. - - To retrieve events, use a MidiBuffer::Iterator object - */ - void addEvent (const uint8* const rawMidiData, - const int maxBytesOfMidiData, - const int sampleNumber) throw(); - - /** Adds some events from another buffer to this one. - - @param otherBuffer the buffer containing the events you want to add - @param startSample the lowest sample number in the source buffer for which - events should be added. Any source events whose timestamp is - less than this will be ignored - @param numSamples the valid range of samples from the source buffer for which - events should be added - i.e. events in the source buffer whose - timestamp is greater than or equal to (startSample + numSamples) - will be ignored. If this value is less than 0, all events after - startSample will be taken. - @param sampleDeltaToAdd a value which will be added to the source timestamps of the events - that are added to this buffer - */ - void addEvents (const MidiBuffer& otherBuffer, - const int startSample, - const int numSamples, - const int sampleDeltaToAdd) throw(); - - /** Returns the sample number of the first event in the buffer. - - If the buffer's empty, this will just return 0. - */ - int getFirstEventTime() const throw(); - - /** Returns the sample number of the last event in the buffer. - - If the buffer's empty, this will just return 0. - */ - int getLastEventTime() const throw(); - - //============================================================================== - /** Exchanges the contents of this buffer with another one. - - This is a quick operation, because no memory allocating or copying is done, it - just swaps the internal state of the two buffers. - */ - void swap (MidiBuffer& other); - - //============================================================================== - /** - Used to iterate through the events in a MidiBuffer. - - Note that altering the buffer while an iterator is using it isn't a - safe operation. - - @see MidiBuffer - */ - class Iterator - { - public: - //============================================================================== - /** Creates an Iterator for this MidiBuffer. */ - Iterator (const MidiBuffer& buffer) throw(); - - /** Destructor. */ - ~Iterator() throw(); - - //============================================================================== - /** Repositions the iterator so that the next event retrieved will be the first - one whose sample position is at greater than or equal to the given position. - */ - void setNextSamplePosition (const int samplePosition) throw(); - - /** Retrieves a copy of the next event from the buffer. - - @param result on return, this will be the message (the MidiMessage's timestamp - is not set) - @param samplePosition on return, this will be the position of the event - @returns true if an event was found, or false if the iterator has reached - the end of the buffer - */ - bool getNextEvent (MidiMessage& result, - int& samplePosition) throw(); - - /** Retrieves the next event from the buffer. - - @param midiData on return, this pointer will be set to a block of data containing - the midi message. Note that to make it fast, this is a pointer - directly into the MidiBuffer's internal data, so is only valid - temporarily until the MidiBuffer is altered. - @param numBytesOfMidiData on return, this is the number of bytes of data used by the - midi message - @param samplePosition on return, this will be the position of the event - @returns true if an event was found, or false if the iterator has reached - the end of the buffer - */ - bool getNextEvent (const uint8* &midiData, - int& numBytesOfMidiData, - int& samplePosition) throw(); - - //============================================================================== - juce_UseDebuggingNewOperator - - private: - const MidiBuffer& buffer; - const uint8* data; - - Iterator (const Iterator&); - const Iterator& operator= (const Iterator&); - }; - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - friend class MidiBuffer::Iterator; - int bytesUsed; - - uint8* findEventAfter (uint8* d, const int samplePosition) const throw(); -}; - - -#endif // __JUCE_MIDIBUFFER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/midi/juce_MidiFile.cpp b/src/juce_appframework/audio/midi/juce_MidiFile.cpp deleted file mode 100644 index a82bac9ef8..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiFile.cpp +++ /dev/null @@ -1,470 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiFile.h" -#include "../../../juce_core/io/streams/juce_MemoryOutputStream.h" - - -//============================================================================== -struct TempoInfo -{ - double bpm, timestamp; -}; - -struct TimeSigInfo -{ - int numerator, denominator; - double timestamp; -}; - -MidiFile::MidiFile() throw() - : numTracks (0), - timeFormat ((short)(unsigned short)0xe728) -{ -} - -MidiFile::~MidiFile() throw() -{ - clear(); -} - -void MidiFile::clear() throw() -{ - while (numTracks > 0) - delete tracks [--numTracks]; -} - -//============================================================================== -int MidiFile::getNumTracks() const throw() -{ - return numTracks; -} - -const MidiMessageSequence* MidiFile::getTrack (const int index) const throw() -{ - return (((unsigned int) index) < (unsigned int) numTracks) ? tracks[index] : 0; -} - -void MidiFile::addTrack (const MidiMessageSequence& trackSequence) throw() -{ - jassert (numTracks < numElementsInArray (tracks)); - - if (numTracks < numElementsInArray (tracks)) - tracks [numTracks++] = new MidiMessageSequence (trackSequence); -} - -//============================================================================== -short MidiFile::getTimeFormat() const throw() -{ - return timeFormat; -} - -void MidiFile::setTicksPerQuarterNote (const int ticks) throw() -{ - timeFormat = (short)ticks; -} - -void MidiFile::setSmpteTimeFormat (const int framesPerSecond, - const int subframeResolution) throw() -{ - timeFormat = (short) (((-framesPerSecond) << 8) | subframeResolution); -} - -//============================================================================== -void MidiFile::findAllTempoEvents (MidiMessageSequence& tempoChangeEvents) const -{ - for (int i = numTracks; --i >= 0;) - { - const int numEvents = tracks[i]->getNumEvents(); - - for (int j = 0; j < numEvents; ++j) - { - const MidiMessage& m = tracks[i]->getEventPointer (j)->message; - - if (m.isTempoMetaEvent()) - tempoChangeEvents.addEvent (m); - } - } -} - -void MidiFile::findAllTimeSigEvents (MidiMessageSequence& timeSigEvents) const -{ - for (int i = numTracks; --i >= 0;) - { - const int numEvents = tracks[i]->getNumEvents(); - - for (int j = 0; j < numEvents; ++j) - { - const MidiMessage& m = tracks[i]->getEventPointer (j)->message; - - if (m.isTimeSignatureMetaEvent()) - timeSigEvents.addEvent (m); - } - } -} - -double MidiFile::getLastTimestamp() const -{ - double t = 0.0; - - for (int i = numTracks; --i >= 0;) - t = jmax (t, tracks[i]->getEndTime()); - - return t; -} - -//============================================================================== -static bool parseMidiHeader (const char* &data, - short& timeFormat, - short& fileType, - short& numberOfTracks) -{ - unsigned int ch = (int) bigEndianInt (data); - data += 4; - - if (ch != bigEndianInt ("MThd")) - { - bool ok = false; - - if (ch == bigEndianInt ("RIFF")) - { - for (int i = 0; i < 8; ++i) - { - ch = bigEndianInt (data); - data += 4; - - if (ch == bigEndianInt ("MThd")) - { - ok = true; - break; - } - } - } - - if (! ok) - return false; - } - - unsigned int bytesRemaining = bigEndianInt (data); - data += 4; - fileType = (short)bigEndianShort (data); - data += 2; - numberOfTracks = (short)bigEndianShort (data); - data += 2; - timeFormat = (short)bigEndianShort (data); - data += 2; - bytesRemaining -= 6; - data += bytesRemaining; - - return true; -} - -bool MidiFile::readFrom (InputStream& sourceStream) -{ - clear(); - MemoryBlock data; - - const int maxSensibleMidiFileSize = 2 * 1024 * 1024; - - // (put a sanity-check on the file size, as midi files are generally small) - if (sourceStream.readIntoMemoryBlock (data, maxSensibleMidiFileSize)) - { - int size = data.getSize(); - const char* d = (char*) data.getData(); - short fileType, expectedTracks; - - if (size > 16 && parseMidiHeader (d, timeFormat, fileType, expectedTracks)) - { - size -= (int) (d - (char*) data.getData()); - - int track = 0; - - while (size > 0 && track < expectedTracks) - { - const int chunkType = (int)bigEndianInt (d); - d += 4; - const int chunkSize = (int)bigEndianInt (d); - d += 4; - - if (chunkSize <= 0) - break; - - if (size < 0) - return false; - - if (chunkType == (int)bigEndianInt ("MTrk")) - { - readNextTrack (d, chunkSize); - } - - size -= chunkSize + 8; - d += chunkSize; - ++track; - } - - return true; - } - } - - return false; -} - -// a comparator that puts all the note-offs before note-ons that have the same time -int MidiFile::compareElements (const MidiMessageSequence::MidiEventHolder* const first, - const MidiMessageSequence::MidiEventHolder* const second) throw() -{ - const double diff = (first->message.getTimeStamp() - second->message.getTimeStamp()); - - if (diff == 0) - { - if (first->message.isNoteOff() && second->message.isNoteOn()) - return -1; - else if (first->message.isNoteOn() && second->message.isNoteOff()) - return 1; - else - return 0; - } - else - { - return (diff > 0) ? 1 : -1; - } -} - -void MidiFile::readNextTrack (const char* data, int size) -{ - double time = 0; - char lastStatusByte = 0; - - MidiMessageSequence result; - - while (size > 0) - { - int bytesUsed; - const int delay = MidiMessage::readVariableLengthVal ((const uint8*) data, bytesUsed); - data += bytesUsed; - size -= bytesUsed; - time += delay; - - int messSize = 0; - const MidiMessage mm ((const uint8*) data, size, messSize, lastStatusByte, time); - - if (messSize <= 0) - break; - - size -= messSize; - data += messSize; - - result.addEvent (mm); - - const char firstByte = *(mm.getRawData()); - if ((firstByte & 0xf0) != 0xf0) - lastStatusByte = firstByte; - } - - // use a sort that puts all the note-offs before note-ons that have the same time - result.list.sort (*this, true); - - result.updateMatchedPairs(); - - addTrack (result); -} - -//============================================================================== -static double convertTicksToSeconds (const double time, - const MidiMessageSequence& tempoEvents, - const int timeFormat) -{ - if (timeFormat > 0) - { - int numer = 4, denom = 4; - double tempoTime = 0.0, correctedTempoTime = 0.0; - const double tickLen = 1.0 / (timeFormat & 0x7fff); - double secsPerTick = 0.5 * tickLen; - const int numEvents = tempoEvents.getNumEvents(); - - for (int i = 0; i < numEvents; ++i) - { - const MidiMessage& m = tempoEvents.getEventPointer(i)->message; - - if (time <= m.getTimeStamp()) - break; - - if (timeFormat > 0) - { - correctedTempoTime = correctedTempoTime - + (m.getTimeStamp() - tempoTime) * secsPerTick; - } - else - { - correctedTempoTime = tickLen * m.getTimeStamp() / (((timeFormat & 0x7fff) >> 8) * (timeFormat & 0xff)); - } - - tempoTime = m.getTimeStamp(); - - if (m.isTempoMetaEvent()) - secsPerTick = tickLen * m.getTempoSecondsPerQuarterNote(); - else if (m.isTimeSignatureMetaEvent()) - m.getTimeSignatureInfo (numer, denom); - - while (i + 1 < numEvents) - { - const MidiMessage& m2 = tempoEvents.getEventPointer(i + 1)->message; - if (m2.getTimeStamp() == tempoTime) - { - ++i; - - if (m2.isTempoMetaEvent()) - secsPerTick = tickLen * m2.getTempoSecondsPerQuarterNote(); - else if (m2.isTimeSignatureMetaEvent()) - m2.getTimeSignatureInfo (numer, denom); - } - else - { - break; - } - } - - } - - return correctedTempoTime + (time - tempoTime) * secsPerTick; - } - else - { - return time / (((timeFormat & 0x7fff) >> 8) * (timeFormat & 0xff)); - } -} - -void MidiFile::convertTimestampTicksToSeconds() -{ - MidiMessageSequence tempoEvents; - findAllTempoEvents (tempoEvents); - findAllTimeSigEvents (tempoEvents); - - for (int i = 0; i < numTracks; ++i) - { - MidiMessageSequence& ms = *tracks[i]; - - for (int j = ms.getNumEvents(); --j >= 0;) - { - MidiMessage& m = ms.getEventPointer(j)->message; - - m.setTimeStamp (convertTicksToSeconds (m.getTimeStamp(), - tempoEvents, - timeFormat)); - } - } -} - -//============================================================================== -static void writeVariableLengthInt (OutputStream& out, unsigned int v) -{ - unsigned int buffer = v & 0x7F; - - while ((v >>= 7) != 0) - { - buffer <<= 8; - buffer |= ((v & 0x7F) | 0x80); - } - - for (;;) - { - out.writeByte ((char) buffer); - - if (buffer & 0x80) - buffer >>= 8; - else - break; - } -} - -bool MidiFile::writeTo (OutputStream& out) -{ - out.writeIntBigEndian ((int) bigEndianInt ("MThd")); - out.writeIntBigEndian (6); - out.writeShortBigEndian (1); // type - out.writeShortBigEndian (numTracks); - out.writeShortBigEndian (timeFormat); - - for (int i = 0; i < numTracks; ++i) - writeTrack (out, i); - - out.flush(); - - return true; -} - - -//============================================================================== -void MidiFile::writeTrack (OutputStream& mainOut, - const int trackNum) -{ - MemoryOutputStream out; - - const MidiMessageSequence& ms = *tracks[trackNum]; - - int lastTick = 0; - char lastStatusByte = 0; - - for (int i = 0; i < ms.getNumEvents(); ++i) - { - const MidiMessage& mm = ms.getEventPointer(i)->message; - - const int tick = roundDoubleToInt (mm.getTimeStamp()); - const int delta = jmax (0, tick - lastTick); - writeVariableLengthInt (out, delta); - lastTick = tick; - - const char statusByte = *(mm.getRawData()); - - if ((statusByte == lastStatusByte) - && ((statusByte & 0xf0) != 0xf0) - && i > 0 - && mm.getRawDataSize() > 1) - { - out.write (mm.getRawData() + 1, mm.getRawDataSize() - 1); - } - else - { - out.write (mm.getRawData(), mm.getRawDataSize()); - } - - lastStatusByte = statusByte; - } - - out.writeByte (0); - const MidiMessage m (MidiMessage::endOfTrack()); - out.write (m.getRawData(), - m.getRawDataSize()); - - mainOut.writeIntBigEndian ((int)bigEndianInt ("MTrk")); - mainOut.writeIntBigEndian (out.getDataSize()); - mainOut.write (out.getData(), out.getDataSize()); -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/midi/juce_MidiFile.h b/src/juce_appframework/audio/midi/juce_MidiFile.h deleted file mode 100644 index 0b77683344..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiFile.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIFILE_JUCEHEADER__ -#define __JUCE_MIDIFILE_JUCEHEADER__ - -#include "juce_MidiMessageSequence.h" -#include "../../../juce_core/io/juce_InputStream.h" -#include "../../../juce_core/io/juce_OutputStream.h" - - -//============================================================================== -/** - Reads/writes standard midi format files. - - To read a midi file, create a MidiFile object and call its readFrom() method. You - can then get the individual midi tracks from it using the getTrack() method. - - To write a file, create a MidiFile object, add some MidiMessageSequence objects - to it using the addTrack() method, and then call its writeTo() method to stream - it out. - - @see MidiMessageSequence -*/ -class JUCE_API MidiFile -{ -public: - //============================================================================== - /** Creates an empty MidiFile object. - */ - MidiFile() throw(); - - /** Destructor. */ - ~MidiFile() throw(); - - //============================================================================== - /** Returns the number of tracks in the file. - - @see getTrack, addTrack - */ - int getNumTracks() const throw(); - - /** Returns a pointer to one of the tracks in the file. - - @returns a pointer to the track, or 0 if the index is out-of-range - @see getNumTracks, addTrack - */ - const MidiMessageSequence* getTrack (const int index) const throw(); - - /** Adds a midi track to the file. - - This will make its own internal copy of the sequence that is passed-in. - - @see getNumTracks, getTrack - */ - void addTrack (const MidiMessageSequence& trackSequence) throw(); - - /** Removes all midi tracks from the file. - - @see getNumTracks - */ - void clear() throw(); - - /** Returns the raw time format code that will be written to a stream. - - After reading a midi file, this method will return the time-format that - was read from the file's header. It can be changed using the setTicksPerQuarterNote() - or setSmpteTimeFormat() methods. - - If the value returned is positive, it indicates the number of midi ticks - per quarter-note - see setTicksPerQuarterNote(). - - It it's negative, the upper byte indicates the frames-per-second (but negative), and - the lower byte is the number of ticks per frame - see setSmpteTimeFormat(). - */ - short getTimeFormat() const throw(); - - /** Sets the time format to use when this file is written to a stream. - - If this is called, the file will be written as bars/beats using the - specified resolution, rather than SMPTE absolute times, as would be - used if setSmpteTimeFormat() had been called instead. - - @param ticksPerQuarterNote e.g. 96, 960 - @see setSmpteTimeFormat - */ - void setTicksPerQuarterNote (const int ticksPerQuarterNote) throw(); - - /** Sets the time format to use when this file is written to a stream. - - If this is called, the file will be written using absolute times, rather - than bars/beats as would be the case if setTicksPerBeat() had been called - instead. - - @param framesPerSecond must be 24, 25, 29 or 30 - @param subframeResolution the sub-second resolution, e.g. 4 (midi time code), - 8, 10, 80 (SMPTE bit resolution), or 100. For millisecond - timing, setSmpteTimeFormat (25, 40) - @see setTicksPerBeat - */ - void setSmpteTimeFormat (const int framesPerSecond, - const int subframeResolution) throw(); - - //============================================================================== - /** Makes a list of all the tempo-change meta-events from all tracks in the midi file. - - Useful for finding the positions of all the tempo changes in a file. - - @param tempoChangeEvents a list to which all the events will be added - */ - void findAllTempoEvents (MidiMessageSequence& tempoChangeEvents) const; - - /** Makes a list of all the time-signature meta-events from all tracks in the midi file. - - Useful for finding the positions of all the tempo changes in a file. - - @param timeSigEvents a list to which all the events will be added - */ - void findAllTimeSigEvents (MidiMessageSequence& timeSigEvents) const; - - /** Returns the latest timestamp in any of the tracks. - - (Useful for finding the length of the file). - */ - double getLastTimestamp() const; - - //============================================================================== - /** Reads a midi file format stream. - - After calling this, you can get the tracks that were read from the file by using the - getNumTracks() and getTrack() methods. - - The timestamps of the midi events in the tracks will represent their positions in - terms of midi ticks. To convert them to seconds, use the convertTimestampTicksToSeconds() - method. - - @returns true if the stream was read successfully - */ - bool readFrom (InputStream& sourceStream); - - /** Writes the midi tracks as a standard midi file. - - @returns true if the operation succeeded. - */ - bool writeTo (OutputStream& destStream); - - /** Converts the timestamp of all the midi events from midi ticks to seconds. - - This will use the midi time format and tempo/time signature info in the - tracks to convert all the timestamps to absolute values in seconds. - */ - void convertTimestampTicksToSeconds(); - - - //============================================================================== - juce_UseDebuggingNewOperator - - /** @internal */ - static int compareElements (const MidiMessageSequence::MidiEventHolder* const first, - const MidiMessageSequence::MidiEventHolder* const second) throw(); - -private: - MidiMessageSequence* tracks [128]; - short numTracks, timeFormat; - - MidiFile (const MidiFile&); - const MidiFile& operator= (const MidiFile&); - - void readNextTrack (const char* data, int size); - void writeTrack (OutputStream& mainOut, const int trackNum); -}; - - -#endif // __JUCE_MIDIFILE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp b/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp deleted file mode 100644 index a0bdc41e5d..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiKeyboardState.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiKeyboardState.h" -#include "../../../juce_core/basics/juce_Time.h" - - -//============================================================================== -MidiKeyboardState::MidiKeyboardState() - : listeners (2) -{ - zeromem (noteStates, sizeof (noteStates)); -} - -MidiKeyboardState::~MidiKeyboardState() -{ -} - -//============================================================================== -void MidiKeyboardState::reset() -{ - const ScopedLock sl (lock); - zeromem (noteStates, sizeof (noteStates)); - eventsToAdd.clear(); -} - -bool MidiKeyboardState::isNoteOn (const int midiChannel, const int n) const throw() -{ - jassert (midiChannel >= 0 && midiChannel <= 16); - - return ((unsigned int) n) < 128 - && (noteStates[n] & (1 << (midiChannel - 1))) != 0; -} - -bool MidiKeyboardState::isNoteOnForChannels (const int midiChannelMask, const int n) const throw() -{ - return ((unsigned int) n) < 128 - && (noteStates[n] & midiChannelMask) != 0; -} - -void MidiKeyboardState::noteOn (const int midiChannel, const int midiNoteNumber, const float velocity) -{ - jassert (midiChannel >= 0 && midiChannel <= 16); - jassert (((unsigned int) midiNoteNumber) < 128); - - const ScopedLock sl (lock); - - if (((unsigned int) midiNoteNumber) < 128) - { - const int timeNow = (int) Time::getMillisecondCounter(); - eventsToAdd.addEvent (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity), timeNow); - eventsToAdd.clear (0, timeNow - 500); - - noteOnInternal (midiChannel, midiNoteNumber, velocity); - } -} - -void MidiKeyboardState::noteOnInternal (const int midiChannel, const int midiNoteNumber, const float velocity) -{ - if (((unsigned int) midiNoteNumber) < 128) - { - noteStates [midiNoteNumber] |= (1 << (midiChannel - 1)); - - for (int i = listeners.size(); --i >= 0;) - ((MidiKeyboardStateListener*) listeners.getUnchecked(i)) - ->handleNoteOn (this, midiChannel, midiNoteNumber, velocity); - } -} - -void MidiKeyboardState::noteOff (const int midiChannel, const int midiNoteNumber) -{ - const ScopedLock sl (lock); - - if (isNoteOn (midiChannel, midiNoteNumber)) - { - const int timeNow = (int) Time::getMillisecondCounter(); - eventsToAdd.addEvent (MidiMessage::noteOff (midiChannel, midiNoteNumber), timeNow); - eventsToAdd.clear (0, timeNow - 500); - - noteOffInternal (midiChannel, midiNoteNumber); - } -} - -void MidiKeyboardState::noteOffInternal (const int midiChannel, const int midiNoteNumber) -{ - if (isNoteOn (midiChannel, midiNoteNumber)) - { - noteStates [midiNoteNumber] &= ~(1 << (midiChannel - 1)); - - for (int i = listeners.size(); --i >= 0;) - ((MidiKeyboardStateListener*) listeners.getUnchecked(i)) - ->handleNoteOff (this, midiChannel, midiNoteNumber); - } -} - -void MidiKeyboardState::allNotesOff (const int midiChannel) -{ - const ScopedLock sl (lock); - - if (midiChannel <= 0) - { - for (int i = 1; i <= 16; ++i) - allNotesOff (i); - } - else - { - for (int i = 0; i < 128; ++i) - noteOff (midiChannel, i); - } -} - -void MidiKeyboardState::processNextMidiEvent (const MidiMessage& message) -{ - if (message.isNoteOn()) - { - noteOnInternal (message.getChannel(), message.getNoteNumber(), message.getFloatVelocity()); - } - else if (message.isNoteOff()) - { - noteOffInternal (message.getChannel(), message.getNoteNumber()); - } - else if (message.isAllNotesOff()) - { - for (int i = 0; i < 128; ++i) - noteOffInternal (message.getChannel(), i); - } -} - -void MidiKeyboardState::processNextMidiBuffer (MidiBuffer& buffer, - const int startSample, - const int numSamples, - const bool injectIndirectEvents) -{ - MidiBuffer::Iterator i (buffer); - MidiMessage message (0xf4, 0.0); - int time; - - const ScopedLock sl (lock); - - while (i.getNextEvent (message, time)) - processNextMidiEvent (message); - - if (injectIndirectEvents) - { - MidiBuffer::Iterator i2 (eventsToAdd); - const int firstEventToAdd = eventsToAdd.getFirstEventTime(); - const double scaleFactor = numSamples / (double) (eventsToAdd.getLastEventTime() + 1 - firstEventToAdd); - - while (i2.getNextEvent (message, time)) - { - const int pos = jlimit (0, numSamples - 1, roundDoubleToInt ((time - firstEventToAdd) * scaleFactor)); - buffer.addEvent (message, startSample + pos); - } - } - - eventsToAdd.clear(); -} - -//============================================================================== -void MidiKeyboardState::addListener (MidiKeyboardStateListener* const listener) throw() -{ - const ScopedLock sl (lock); - listeners.addIfNotAlreadyThere (listener); -} - -void MidiKeyboardState::removeListener (MidiKeyboardStateListener* const listener) throw() -{ - const ScopedLock sl (lock); - listeners.removeValue (listener); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/midi/juce_MidiKeyboardState.h b/src/juce_appframework/audio/midi/juce_MidiKeyboardState.h deleted file mode 100644 index dde8eca850..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiKeyboardState.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIKEYBOARDSTATE_JUCEHEADER__ -#define __JUCE_MIDIKEYBOARDSTATE_JUCEHEADER__ - -#include "juce_MidiBuffer.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../juce_core/containers/juce_VoidArray.h" -class MidiKeyboardState; - - -//============================================================================== -/** - Receives events from a MidiKeyboardState object. - - @see MidiKeyboardState -*/ -class JUCE_API MidiKeyboardStateListener -{ -public: - //============================================================================== - MidiKeyboardStateListener() throw() {} - virtual ~MidiKeyboardStateListener() {} - - //============================================================================== - /** Called when one of the MidiKeyboardState's keys is pressed. - - This will be called synchronously when the state is either processing a - buffer in its MidiKeyboardState::processNextMidiBuffer() method, or - when a note is being played with its MidiKeyboardState::noteOn() method. - - Note that this callback could happen from an audio callback thread, so be - careful not to block, and avoid any UI activity in the callback. - */ - virtual void handleNoteOn (MidiKeyboardState* source, - int midiChannel, int midiNoteNumber, float velocity) = 0; - - /** Called when one of the MidiKeyboardState's keys is released. - - This will be called synchronously when the state is either processing a - buffer in its MidiKeyboardState::processNextMidiBuffer() method, or - when a note is being played with its MidiKeyboardState::noteOff() method. - - Note that this callback could happen from an audio callback thread, so be - careful not to block, and avoid any UI activity in the callback. - */ - virtual void handleNoteOff (MidiKeyboardState* source, - int midiChannel, int midiNoteNumber) = 0; -}; - - -//============================================================================== -/** - Represents a piano keyboard, keeping track of which keys are currently pressed. - - This object can parse a stream of midi events, using them to update its idea - of which keys are pressed for each individiual midi channel. - - When keys go up or down, it can broadcast these events to listener objects. - - It also allows key up/down events to be triggered with its noteOn() and noteOff() - methods, and midi messages for these events will be merged into the - midi stream that gets processed by processNextMidiBuffer(). -*/ -class JUCE_API MidiKeyboardState -{ -public: - //============================================================================== - MidiKeyboardState(); - ~MidiKeyboardState(); - - //============================================================================== - /** Resets the state of the object. - - All internal data for all the channels is reset, but no events are sent as a - result. - - If you want to release any keys that are currently down, and to send out note-up - midi messages for this, use the allNotesOff() method instead. - */ - void reset(); - - /** Returns true if the given midi key is currently held down for the given midi channel. - - The channel number must be between 1 and 16. If you want to see if any notes are - on for a range of channels, use the isNoteOnForChannels() method. - */ - bool isNoteOn (const int midiChannel, const int midiNoteNumber) const throw(); - - /** Returns true if the given midi key is currently held down on any of a set of midi channels. - - The channel mask has a bit set for each midi channel you want to test for - bit - 0 = midi channel 1, bit 1 = midi channel 2, etc. - - If a note is on for at least one of the specified channels, this returns true. - */ - bool isNoteOnForChannels (const int midiChannelMask, const int midiNoteNumber) const throw(); - - /** Turns a specified note on. - - This will cause a suitable midi note-on event to be injected into the midi buffer during the - next call to processNextMidiBuffer(). - - It will also trigger a synchronous callback to the listeners to tell them that the key has - gone down. - */ - void noteOn (const int midiChannel, const int midiNoteNumber, const float velocity); - - /** Turns a specified note off. - - This will cause a suitable midi note-off event to be injected into the midi buffer during the - next call to processNextMidiBuffer(). - - It will also trigger a synchronous callback to the listeners to tell them that the key has - gone up. - - But if the note isn't acutally down for the given channel, this method will in fact do nothing. - */ - void noteOff (const int midiChannel, const int midiNoteNumber); - - /** This will turn off any currently-down notes for the given midi channel. - - If you pass 0 for the midi channel, it will in fact turn off all notes on all channels. - - Calling this method will make calls to noteOff(), so can trigger synchronous callbacks - and events being added to the midi stream. - */ - void allNotesOff (const int midiChannel); - - //============================================================================== - /** Looks at a key-up/down event and uses it to update the state of this object. - - To process a buffer full of midi messages, use the processNextMidiBuffer() method - instead. - */ - void processNextMidiEvent (const MidiMessage& message); - - /** Scans a midi stream for up/down events and adds its own events to it. - - This will look for any up/down events and use them to update the internal state, - synchronously making suitable callbacks to the listeners. - - If injectIndirectEvents is true, then midi events to produce the recent noteOn() - and noteOff() calls will be added into the buffer. - - Only the section of the buffer whose timestamps are between startSample and - (startSample + numSamples) will be affected, and any events added will be placed - between these times. - - If you're going to use this method, you'll need to keep calling it regularly for - it to work satisfactorily. - - To process a single midi event at a time, use the processNextMidiEvent() method - instead. - */ - void processNextMidiBuffer (MidiBuffer& buffer, - const int startSample, - const int numSamples, - const bool injectIndirectEvents); - - //============================================================================== - /** Registers a listener for callbacks when keys go up or down. - - @see removeListener - */ - void addListener (MidiKeyboardStateListener* const listener) throw(); - - /** Deregisters a listener. - - @see addListener - */ - void removeListener (MidiKeyboardStateListener* const listener) throw(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - CriticalSection lock; - uint16 noteStates [128]; - MidiBuffer eventsToAdd; - VoidArray listeners; - - void noteOnInternal (const int midiChannel, const int midiNoteNumber, const float velocity); - void noteOffInternal (const int midiChannel, const int midiNoteNumber); - - MidiKeyboardState (const MidiKeyboardState&); - const MidiKeyboardState& operator= (const MidiKeyboardState&); -}; - - - -#endif // __JUCE_MIDIKEYBOARDSTATE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/midi/juce_MidiMessage.cpp b/src/juce_appframework/audio/midi/juce_MidiMessage.cpp deleted file mode 100644 index 70f64c90d3..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiMessage.cpp +++ /dev/null @@ -1,1124 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiMessage.h" -#include "../../../juce_core/containers/juce_MemoryBlock.h" - - -//============================================================================== -int MidiMessage::readVariableLengthVal (const uint8* data, - int& numBytesUsed) throw() -{ - numBytesUsed = 0; - int v = 0; - int i; - - do - { - i = (int) *data++; - - if (++numBytesUsed > 6) - break; - - v = (v << 7) + (i & 0x7f); - - } while (i & 0x80); - - return v; -} - -int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) throw() -{ - // this method only works for valid starting bytes of a short midi message - jassert (firstByte >= 0x80 - && firstByte != 0xf0 - && firstByte != 0xf7); - - static const char messageLengths[] = - { - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - }; - - return messageLengths [firstByte & 0x7f]; -} - -//============================================================================== -MidiMessage::MidiMessage (const uint8* const d, - const int dataSize, - const double t) throw() - : timeStamp (t), - message (0), - size (dataSize) -{ - jassert (dataSize > 0); - - if (dataSize <= 4) - data = (uint8*) &message; - else - data = (uint8*) juce_malloc (dataSize); - - memcpy (data, d, dataSize); - - // check that the length matches the data.. - jassert (size > 3 || *d >= 0xf0 || getMessageLengthFromFirstByte (*d) == size); -} - -MidiMessage::MidiMessage (const int byte1, - const double t) throw() - : timeStamp (t), - data ((uint8*) &message), - size (1) -{ - data[0] = (uint8) byte1; - - // check that the length matches the data.. - jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 1); -} - -MidiMessage::MidiMessage (const int byte1, - const int byte2, - const double t) throw() - : timeStamp (t), - data ((uint8*) &message), - size (2) -{ - data[0] = (uint8) byte1; - data[1] = (uint8) byte2; - - // check that the length matches the data.. - jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 2); -} - -MidiMessage::MidiMessage (const int byte1, - const int byte2, - const int byte3, - const double t) throw() - : timeStamp (t), - data ((uint8*) &message), - size (3) -{ - data[0] = (uint8) byte1; - data[1] = (uint8) byte2; - data[2] = (uint8) byte3; - - // check that the length matches the data.. - jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 3); -} - -MidiMessage::MidiMessage (const MidiMessage& other) throw() - : timeStamp (other.timeStamp), - message (other.message), - size (other.size) -{ - if (other.data != (uint8*) &other.message) - { - data = (uint8*) juce_malloc (size); - memcpy (data, other.data, size); - } - else - { - data = (uint8*) &message; - } -} - -MidiMessage::MidiMessage (const MidiMessage& other, - const double newTimeStamp) throw() - : timeStamp (newTimeStamp), - message (other.message), - size (other.size) -{ - if (other.data != (uint8*) &other.message) - { - data = (uint8*) juce_malloc (size); - memcpy (data, other.data, size); - } - else - { - data = (uint8*) &message; - } -} - -MidiMessage::MidiMessage (const uint8* src, - int sz, - int& numBytesUsed, - const uint8 lastStatusByte, - double t) throw() - : timeStamp (t), - data ((uint8*) &message), - message (0) -{ - unsigned int byte = (unsigned int) *src; - - if (byte < 0x80) - { - byte = (unsigned int) (uint8) lastStatusByte; - numBytesUsed = -1; - } - else - { - numBytesUsed = 0; - --sz; - ++src; - } - - if (byte >= 0x80) - { - if (byte == 0xf0) - { - const uint8* d = (const uint8*) src; - - while (d < src + sz) - { - if (*d >= 0x80) // stop if we hit a status byte, and don't include it in this message - { - if (*d == 0xf7) // include an 0xf7 if we hit one - ++d; - - break; - } - - ++d; - } - - size = 1 + (int) (d - src); - - data = (uint8*) juce_malloc (size); - *data = (uint8) byte; - memcpy (data + 1, src, size - 1); - } - else if (byte == 0xff) - { - int n; - const int bytesLeft = readVariableLengthVal (src + 1, n); - size = jmin (sz + 1, n + 2 + bytesLeft); - - data = (uint8*) juce_malloc (size); - *data = (uint8) byte; - memcpy (data + 1, src, size - 1); - } - else - { - size = getMessageLengthFromFirstByte ((uint8) byte); - *data = (uint8) byte; - - if (size > 1) - { - data[1] = src[0]; - - if (size > 2) - data[2] = src[1]; - } - } - - numBytesUsed += size; - } - else - { - message = 0; - size = 0; - } -} - -const MidiMessage& MidiMessage::operator= (const MidiMessage& other) throw() -{ - if (this == &other) - return *this; - - timeStamp = other.timeStamp; - size = other.size; - message = other.message; - - if (data != (uint8*) &message) - juce_free (data); - - if (other.data != (uint8*) &other.message) - { - data = (uint8*) juce_malloc (size); - memcpy (data, other.data, size); - } - else - { - data = (uint8*) &message; - } - - return *this; -} - -MidiMessage::~MidiMessage() throw() -{ - if (data != (uint8*) &message) - juce_free (data); -} - -int MidiMessage::getChannel() const throw() -{ - if ((data[0] & 0xf0) != 0xf0) - return (data[0] & 0xf) + 1; - else - return 0; -} - -bool MidiMessage::isForChannel (const int channel) const throw() -{ - return ((data[0] & 0xf) == channel - 1) - && ((data[0] & 0xf0) != 0xf0); -} - -void MidiMessage::setChannel (const int channel) throw() -{ - if ((data[0] & 0xf0) != (uint8) 0xf0) - data[0] = (uint8) ((data[0] & (uint8)0xf0) - | (uint8)(channel - 1)); -} - -bool MidiMessage::isNoteOn() const throw() -{ - return ((data[0] & 0xf0) == 0x90) - && (data[2] != 0); -} - -bool MidiMessage::isNoteOff() const throw() -{ - return ((data[0] & 0xf0) == 0x80) - || ((data[2] == 0) && ((data[0] & 0xf0) == 0x90)); -} - -bool MidiMessage::isNoteOnOrOff() const throw() -{ - const int d = data[0] & 0xf0; - return (d == 0x90) || (d == 0x80); -} - -int MidiMessage::getNoteNumber() const throw() -{ - return data[1]; -} - -void MidiMessage::setNoteNumber (const int newNoteNumber) throw() -{ - if (isNoteOnOrOff()) - data[1] = (uint8) jlimit (0, 127, newNoteNumber); -} - -uint8 MidiMessage::getVelocity() const throw() -{ - if (isNoteOnOrOff()) - return data[2]; - else - return 0; -} - -float MidiMessage::getFloatVelocity() const throw() -{ - return getVelocity() * (1.0f / 127.0f); -} - -void MidiMessage::setVelocity (const float newVelocity) throw() -{ - if (isNoteOnOrOff()) - data[2] = (uint8) jlimit (0, 0x7f, roundFloatToInt (newVelocity * 127.0f)); -} - -void MidiMessage::multiplyVelocity (const float scaleFactor) throw() -{ - if (isNoteOnOrOff()) - data[2] = (uint8) jlimit (0, 0x7f, roundFloatToInt (scaleFactor * data[2])); -} - -bool MidiMessage::isAftertouch() const throw() -{ - return (data[0] & 0xf0) == 0xa0; -} - -int MidiMessage::getAfterTouchValue() const throw() -{ - return data[2]; -} - -const MidiMessage MidiMessage::aftertouchChange (const int channel, - const int noteNum, - const int aftertouchValue) throw() -{ - jassert (channel > 0 && channel <= 16); - jassert (((unsigned int) noteNum) <= 127); - jassert (((unsigned int) aftertouchValue) <= 127); - - return MidiMessage (0xa0 | jlimit (0, 15, channel - 1), - noteNum & 0x7f, - aftertouchValue & 0x7f); -} - -bool MidiMessage::isChannelPressure() const throw() -{ - return (data[0] & 0xf0) == 0xd0; -} - -int MidiMessage::getChannelPressureValue() const throw() -{ - jassert (isChannelPressure()); - - return data[1]; -} - -const MidiMessage MidiMessage::channelPressureChange (const int channel, - const int pressure) throw() -{ - jassert (channel > 0 && channel <= 16); - jassert (((unsigned int) pressure) <= 127); - - return MidiMessage (0xd0 | jlimit (0, 15, channel - 1), - pressure & 0x7f); -} - -bool MidiMessage::isProgramChange() const throw() -{ - return (data[0] & 0xf0) == 0xc0; -} - -int MidiMessage::getProgramChangeNumber() const throw() -{ - return data[1]; -} - -const MidiMessage MidiMessage::programChange (const int channel, - const int programNumber) throw() -{ - jassert (channel > 0 && channel <= 16); - - return MidiMessage (0xc0 | jlimit (0, 15, channel - 1), - programNumber & 0x7f); -} - -bool MidiMessage::isPitchWheel() const throw() -{ - return (data[0] & 0xf0) == 0xe0; -} - -int MidiMessage::getPitchWheelValue() const throw() -{ - return data[1] | (data[2] << 7); -} - -const MidiMessage MidiMessage::pitchWheel (const int channel, - const int position) throw() -{ - jassert (channel > 0 && channel <= 16); - jassert (((unsigned int) position) <= 0x3fff); - - return MidiMessage (0xe0 | jlimit (0, 15, channel - 1), - position & 127, - (position >> 7) & 127); -} - -bool MidiMessage::isController() const throw() -{ - return (data[0] & 0xf0) == 0xb0; -} - -int MidiMessage::getControllerNumber() const throw() -{ - jassert (isController()); - - return data[1]; -} - -int MidiMessage::getControllerValue() const throw() -{ - jassert (isController()); - - return data[2]; -} - -const MidiMessage MidiMessage::controllerEvent (const int channel, - const int controllerType, - const int value) throw() -{ - // the channel must be between 1 and 16 inclusive - jassert (channel > 0 && channel <= 16); - - return MidiMessage (0xb0 | jlimit (0, 15, channel - 1), - controllerType & 127, - value & 127); -} - -const MidiMessage MidiMessage::noteOn (const int channel, - const int noteNumber, - const float velocity) throw() -{ - return noteOn (channel, noteNumber, (uint8)(velocity * 127.0f)); -} - -const MidiMessage MidiMessage::noteOn (const int channel, - const int noteNumber, - const uint8 velocity) throw() -{ - jassert (channel > 0 && channel <= 16); - jassert (((unsigned int) noteNumber) <= 127); - - return MidiMessage (0x90 | jlimit (0, 15, channel - 1), - noteNumber & 127, - jlimit (0, 127, roundFloatToInt (velocity))); -} - -const MidiMessage MidiMessage::noteOff (const int channel, - const int noteNumber) throw() -{ - jassert (channel > 0 && channel <= 16); - jassert (((unsigned int) noteNumber) <= 127); - - return MidiMessage (0x80 | jlimit (0, 15, channel - 1), noteNumber & 127, 0); -} - -const MidiMessage MidiMessage::allNotesOff (const int channel) throw() -{ - jassert (channel > 0 && channel <= 16); - - return controllerEvent (channel, 123, 0); -} - -bool MidiMessage::isAllNotesOff() const throw() -{ - return (data[0] & 0xf0) == 0xb0 - && data[1] == 123; -} - -const MidiMessage MidiMessage::allSoundOff (const int channel) throw() -{ - return controllerEvent (channel, 120, 0); -} - -bool MidiMessage::isAllSoundOff() const throw() -{ - return (data[0] & 0xf0) == 0xb0 - && data[1] == 120; -} - -const MidiMessage MidiMessage::allControllersOff (const int channel) throw() -{ - return controllerEvent (channel, 121, 0); -} - -const MidiMessage MidiMessage::masterVolume (const float volume) throw() -{ - const int vol = jlimit (0, 0x3fff, roundFloatToInt (volume * 0x4000)); - - uint8 buf[8]; - buf[0] = 0xf0; - buf[1] = 0x7f; - buf[2] = 0x7f; - buf[3] = 0x04; - buf[4] = 0x01; - buf[5] = (uint8) (vol & 0x7f); - buf[6] = (uint8) (vol >> 7); - buf[7] = 0xf7; - - return MidiMessage (buf, 8); -} - -//============================================================================== -bool MidiMessage::isSysEx() const throw() -{ - return *data == 0xf0; -} - -const MidiMessage MidiMessage::createSysExMessage (const uint8* sysexData, - const int dataSize) throw() -{ - MemoryBlock mm (dataSize + 2); - uint8* const m = (uint8*) mm.getData(); - - m[0] = 0xf0; - memcpy (m + 1, sysexData, dataSize); - m[dataSize + 1] = 0xf7; - - return MidiMessage (m, dataSize + 2); -} - -const uint8* MidiMessage::getSysExData() const throw() -{ - return (isSysEx()) ? getRawData() + 1 - : 0; -} - -int MidiMessage::getSysExDataSize() const throw() -{ - return (isSysEx()) ? size - 2 - : 0; -} - -bool MidiMessage::isMetaEvent() const throw() -{ - return *data == 0xff; -} - -bool MidiMessage::isActiveSense() const throw() -{ - return *data == 0xfe; -} - -//============================================================================== -int MidiMessage::getMetaEventType() const throw() -{ - if (*data != 0xff) - return -1; - else - return data[1]; -} - -int MidiMessage::getMetaEventLength() const throw() -{ - if (*data == 0xff) - { - int n; - return jmin (size - 2, readVariableLengthVal (data + 2, n)); - } - - return 0; -} - -const uint8* MidiMessage::getMetaEventData() const throw() -{ - int n; - const uint8* d = data + 2; - readVariableLengthVal (d, n); - return d + n; -} - -bool MidiMessage::isTrackMetaEvent() const throw() -{ - return getMetaEventType() == 0; -} - -bool MidiMessage::isEndOfTrackMetaEvent() const throw() -{ - return getMetaEventType() == 47; -} - -bool MidiMessage::isTextMetaEvent() const throw() -{ - const int t = getMetaEventType(); - - return t > 0 && t < 16; -} - -const String MidiMessage::getTextFromTextMetaEvent() const throw() -{ - return String ((const char*) getMetaEventData(), - getMetaEventLength()); -} - -bool MidiMessage::isTrackNameEvent() const throw() -{ - return (data[1] == 3) - && (*data == 0xff); -} - -bool MidiMessage::isTempoMetaEvent() const throw() -{ - return (data[1] == 81) - && (*data == 0xff); -} - -bool MidiMessage::isMidiChannelMetaEvent() const throw() -{ - return (data[1] == 0x20) - && (*data == 0xff) - && (data[2] == 1); -} - -int MidiMessage::getMidiChannelMetaEventChannel() const throw() -{ - return data[3] + 1; -} - -double MidiMessage::getTempoSecondsPerQuarterNote() const throw() -{ - if (! isTempoMetaEvent()) - return 0.0; - - const uint8* const d = getMetaEventData(); - - return (((unsigned int) d[0] << 16) - | ((unsigned int) d[1] << 8) - | d[2]) - / 1000000.0; -} - -double MidiMessage::getTempoMetaEventTickLength (const short timeFormat) const throw() -{ - if (timeFormat > 0) - { - if (! isTempoMetaEvent()) - return 0.5 / timeFormat; - - return getTempoSecondsPerQuarterNote() / timeFormat; - } - else - { - const int frameCode = (-timeFormat) >> 8; - double framesPerSecond; - - switch (frameCode) - { - case 24: framesPerSecond = 24.0; break; - case 25: framesPerSecond = 25.0; break; - case 29: framesPerSecond = 29.97; break; - case 30: framesPerSecond = 30.0; break; - default: framesPerSecond = 30.0; break; - } - - return (1.0 / framesPerSecond) / (timeFormat & 0xff); - } -} - -const MidiMessage MidiMessage::tempoMetaEvent (int microsecondsPerQuarterNote) throw() -{ - uint8 d[8]; - d[0] = 0xff; - d[1] = 81; - d[2] = 3; - d[3] = (uint8) (microsecondsPerQuarterNote >> 16); - d[4] = (uint8) ((microsecondsPerQuarterNote >> 8) & 0xff); - d[5] = (uint8) (microsecondsPerQuarterNote & 0xff); - - return MidiMessage (d, 6, 0.0); -} - -bool MidiMessage::isTimeSignatureMetaEvent() const throw() -{ - return (data[1] == 0x58) - && (*data == (uint8) 0xff); -} - -void MidiMessage::getTimeSignatureInfo (int& numerator, - int& denominator) const throw() -{ - if (isTimeSignatureMetaEvent()) - { - const uint8* const d = getMetaEventData(); - numerator = d[0]; - denominator = 1 << d[1]; - } - else - { - numerator = 4; - denominator = 4; - } -} - -const MidiMessage MidiMessage::timeSignatureMetaEvent (const int numerator, - const int denominator) throw() -{ - uint8 d[8]; - d[0] = 0xff; - d[1] = 0x58; - d[2] = 0x04; - d[3] = (uint8) numerator; - - int n = 1; - int powerOfTwo = 0; - - while (n < denominator) - { - n <<= 1; - ++powerOfTwo; - } - - d[4] = (uint8) powerOfTwo; - d[5] = 0x01; - d[6] = 96; - - return MidiMessage (d, 7, 0.0); -} - -const MidiMessage MidiMessage::midiChannelMetaEvent (const int channel) throw() -{ - uint8 d[8]; - d[0] = 0xff; - d[1] = 0x20; - d[2] = 0x01; - d[3] = (uint8) jlimit (0, 0xff, channel - 1); - - return MidiMessage (d, 4, 0.0); -} - -bool MidiMessage::isKeySignatureMetaEvent() const throw() -{ - return getMetaEventType() == 89; -} - -int MidiMessage::getKeySignatureNumberOfSharpsOrFlats() const throw() -{ - return (int) *getMetaEventData(); -} - -const MidiMessage MidiMessage::endOfTrack() throw() -{ - return MidiMessage (0xff, 0x2f, 0, 0.0); -} - -//============================================================================== -bool MidiMessage::isSongPositionPointer() const throw() -{ - return *data == 0xf2; -} - -int MidiMessage::getSongPositionPointerMidiBeat() const throw() -{ - return data[1] | (data[2] << 7); -} - -const MidiMessage MidiMessage::songPositionPointer (const int positionInMidiBeats) throw() -{ - return MidiMessage (0xf2, - positionInMidiBeats & 127, - (positionInMidiBeats >> 7) & 127); -} - -bool MidiMessage::isMidiStart() const throw() -{ - return *data == 0xfa; -} - -const MidiMessage MidiMessage::midiStart() throw() -{ - return MidiMessage (0xfa); -} - -bool MidiMessage::isMidiContinue() const throw() -{ - return *data == 0xfb; -} - -const MidiMessage MidiMessage::midiContinue() throw() -{ - return MidiMessage (0xfb); -} - -bool MidiMessage::isMidiStop() const throw() -{ - return *data == 0xfc; -} - -const MidiMessage MidiMessage::midiStop() throw() -{ - return MidiMessage (0xfc); -} - -bool MidiMessage::isMidiClock() const throw() -{ - return *data == 0xf8; -} - -const MidiMessage MidiMessage::midiClock() throw() -{ - return MidiMessage (0xf8); -} - -bool MidiMessage::isQuarterFrame() const throw() -{ - return *data == 0xf1; -} - -int MidiMessage::getQuarterFrameSequenceNumber() const throw() -{ - return ((int) data[1]) >> 4; -} - -int MidiMessage::getQuarterFrameValue() const throw() -{ - return ((int) data[1]) & 0x0f; -} - -const MidiMessage MidiMessage::quarterFrame (const int sequenceNumber, - const int value) throw() -{ - return MidiMessage (0xf1, (sequenceNumber << 4) | value); -} - -bool MidiMessage::isFullFrame() const throw() -{ - return data[0] == 0xf0 - && data[1] == 0x7f - && size >= 10 - && data[3] == 0x01 - && data[4] == 0x01; -} - -void MidiMessage::getFullFrameParameters (int& hours, - int& minutes, - int& seconds, - int& frames, - MidiMessage::SmpteTimecodeType& timecodeType) const throw() -{ - jassert (isFullFrame()); - - timecodeType = (SmpteTimecodeType) (data[5] >> 5); - hours = data[5] & 0x1f; - minutes = data[6]; - seconds = data[7]; - frames = data[8]; -} - -const MidiMessage MidiMessage::fullFrame (const int hours, - const int minutes, - const int seconds, - const int frames, - MidiMessage::SmpteTimecodeType timecodeType) -{ - uint8 d[10]; - d[0] = 0xf0; - d[1] = 0x7f; - d[2] = 0x7f; - d[3] = 0x01; - d[4] = 0x01; - d[5] = (uint8) ((hours & 0x01f) | (timecodeType << 5)); - d[6] = (uint8) minutes; - d[7] = (uint8) seconds; - d[8] = (uint8) frames; - d[9] = 0xf7; - - return MidiMessage (d, 10, 0.0); -} - -bool MidiMessage::isMidiMachineControlMessage() const throw() -{ - return data[0] == 0xf0 - && data[1] == 0x7f - && data[3] == 0x06 - && size > 5; -} - -MidiMessage::MidiMachineControlCommand MidiMessage::getMidiMachineControlCommand() const throw() -{ - jassert (isMidiMachineControlMessage()); - - return (MidiMachineControlCommand) data[4]; -} - -const MidiMessage MidiMessage::midiMachineControlCommand (MidiMessage::MidiMachineControlCommand command) -{ - uint8 d[6]; - d[0] = 0xf0; - d[1] = 0x7f; - d[2] = 0x00; - d[3] = 0x06; - d[4] = (uint8) command; - d[5] = 0xf7; - - return MidiMessage (d, 6, 0.0); -} - -//============================================================================== -bool MidiMessage::isMidiMachineControlGoto (int& hours, - int& minutes, - int& seconds, - int& frames) const throw() -{ - if (size >= 12 - && data[0] == 0xf0 - && data[1] == 0x7f - && data[3] == 0x06 - && data[4] == 0x44 - && data[5] == 0x06 - && data[6] == 0x01) - { - hours = data[7] % 24; // (that some machines send out hours > 24) - minutes = data[8]; - seconds = data[9]; - frames = data[10]; - - return true; - } - - return false; -} - -const MidiMessage MidiMessage::midiMachineControlGoto (int hours, - int minutes, - int seconds, - int frames) -{ - uint8 d[12]; - d[0] = 0xf0; - d[1] = 0x7f; - d[2] = 0x00; - d[3] = 0x06; - d[4] = 0x44; - d[5] = 0x06; - d[6] = 0x01; - d[7] = (uint8) hours; - d[8] = (uint8) minutes; - d[9] = (uint8) seconds; - d[10] = (uint8) frames; - d[11] = 0xf7; - - return MidiMessage (d, 12, 0.0); -} - -//============================================================================== -const String MidiMessage::getMidiNoteName (int note, - bool useSharps, - bool includeOctaveNumber, - int octaveNumForMiddleC) throw() -{ - static const char* const sharpNoteNames[] = { "C", "C#", "D", "D#", "E", - "F", "F#", "G", "G#", "A", - "A#", "B" }; - - static const char* const flatNoteNames[] = { "C", "Db", "D", "Eb", "E", - "F", "Gb", "G", "Ab", "A", - "Bb", "B" }; - - if (((unsigned int) note) < 128) - { - const String s ((useSharps) ? sharpNoteNames [note % 12] - : flatNoteNames [note % 12]); - - if (includeOctaveNumber) - return s + String (note / 12 + (octaveNumForMiddleC - 5)); - else - return s; - } - - return String::empty; -} - -const double MidiMessage::getMidiNoteInHertz (int noteNumber) throw() -{ - noteNumber -= 12 * 6 + 9; // now 0 = A440 - return 440.0 * pow (2.0, noteNumber / 12.0); -} - -const String MidiMessage::getGMInstrumentName (int n) throw() -{ - const char *names[] = - { - "Acoustic Grand Piano", "Bright Acoustic Piano", "Electric Grand Piano", "Honky-tonk Piano", - "Electric Piano 1", "Electric Piano 2", "Harpsichord", "Clavinet", "Celesta", "Glockenspiel", - "Music Box", "Vibraphone", "Marimba", "Xylophone", "Tubular Bells", "Dulcimer", "Drawbar Organ", - "Percussive Organ", "Rock Organ", "Church Organ", "Reed Organ", "Accordion", "Harmonica", - "Tango Accordion", "Acoustic Guitar (nylon)", "Acoustic Guitar (steel)", "Electric Guitar (jazz)", - "Electric Guitar (clean)", "Electric Guitar (mute)", "Overdriven Guitar", "Distortion Guitar", - "Guitar Harmonics", "Acoustic Bass", "Electric Bass (finger)", "Electric Bass (pick)", - "Fretless Bass", "Slap Bass 1", "Slap Bass 2", "Synth Bass 1", "Synth Bass 2", "Violin", - "Viola", "Cello", "Contrabass", "Tremolo Strings", "Pizzicato Strings", "Orchestral Harp", - "Timpani", "String Ensemble 1", "String Ensemble 2", "SynthStrings 1", "SynthStrings 2", - "Choir Aahs", "Voice Oohs", "Synth Voice", "Orchestra Hit", "Trumpet", "Trombone", "Tuba", - "Muted Trumpet", "French Horn", "Brass Section", "SynthBrass 1", "SynthBrass 2", "Soprano Sax", - "Alto Sax", "Tenor Sax", "Baritone Sax", "Oboe", "English Horn", "Bassoon", "Clarinet", - "Piccolo", "Flute", "Recorder", "Pan Flute", "Blown Bottle", "Shakuhachi", "Whistle", - "Ocarina", "Lead 1 (square)", "Lead 2 (sawtooth)", "Lead 3 (calliope)", "Lead 4 (chiff)", - "Lead 5 (charang)", "Lead 6 (voice)", "Lead 7 (fifths)", "Lead 8 (bass+lead)", "Pad 1 (new age)", - "Pad 2 (warm)", "Pad 3 (polysynth)", "Pad 4 (choir)", "Pad 5 (bowed)", "Pad 6 (metallic)", - "Pad 7 (halo)", "Pad 8 (sweep)", "FX 1 (rain)", "FX 2 (soundtrack)", "FX 3 (crystal)", - "FX 4 (atmosphere)", "FX 5 (brightness)", "FX 6 (goblins)", "FX 7 (echoes)", "FX 8 (sci-fi)", - "Sitar", "Banjo", "Shamisen", "Koto", "Kalimba", "Bag pipe", "Fiddle", "Shanai", "Tinkle Bell", - "Agogo", "Steel Drums", "Woodblock", "Taiko Drum", "Melodic Tom", "Synth Drum", "Reverse Cymbal", - "Guitar Fret Noise", "Breath Noise", "Seashore", "Bird Tweet", "Telephone Ring", "Helicopter", - "Applause", "Gunshot" - }; - - return (((unsigned int) n) < 128) ? names[n] - : (const char*)0; -} - -const String MidiMessage::getGMInstrumentBankName (int n) throw() -{ - const char* names[] = - { - "Piano", "Chromatic Percussion", "Organ", "Guitar", - "Bass", "Strings", "Ensemble", "Brass", - "Reed", "Pipe", "Synth Lead", "Synth Pad", - "Synth Effects", "Ethnic", "Percussive", "Sound Effects" - }; - - return (((unsigned int) n) <= 15) ? names[n] - : (const char*)0; -} - -const String MidiMessage::getRhythmInstrumentName (int n) throw() -{ - const char* names[] = - { - "Acoustic Bass Drum", "Bass Drum 1", "Side Stick", "Acoustic Snare", - "Hand Clap", "Electric Snare", "Low Floor Tom", "Closed Hi-Hat", "High Floor Tom", - "Pedal Hi-Hat", "Low Tom", "Open Hi-Hat", "Low-Mid Tom", "Hi-Mid Tom", "Crash Cymbal 1", - "High Tom", "Ride Cymbal 1", "Chinese Cymbal", "Ride Bell", "Tambourine", "Splash Cymbal", - "Cowbell", "Crash Cymbal 2", "Vibraslap", "Ride Cymbal 2", "Hi Bongo", "Low Bongo", - "Mute Hi Conga", "Open Hi Conga", "Low Conga", "High Timbale", "Low Timbale", "High Agogo", - "Low Agogo", "Cabasa", "Maracas", "Short Whistle", "Long Whistle", "Short Guiro", - "Long Guiro", "Claves", "Hi Wood Block", "Low Wood Block", "Mute Cuica", "Open Cuica", - "Mute Triangle", "Open Triangle" - }; - - return (n >= 35 && n <= 81) ? names [n - 35] - : (const char*)0; -} - -const String MidiMessage::getControllerName (int n) throw() -{ - const char* names[] = - { - "Bank Select", "Modulation Wheel (coarse)", "Breath controller (coarse)", - 0, "Foot Pedal (coarse)", "Portamento Time (coarse)", - "Data Entry (coarse)", "Volume (coarse)", "Balance (coarse)", - 0, "Pan position (coarse)", "Expression (coarse)", "Effect Control 1 (coarse)", - "Effect Control 2 (coarse)", 0, 0, "General Purpose Slider 1", "General Purpose Slider 2", - "General Purpose Slider 3", "General Purpose Slider 4", 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, "Bank Select (fine)", "Modulation Wheel (fine)", "Breath controller (fine)", - 0, "Foot Pedal (fine)", "Portamento Time (fine)", "Data Entry (fine)", "Volume (fine)", - "Balance (fine)", 0, "Pan position (fine)", "Expression (fine)", "Effect Control 1 (fine)", - "Effect Control 2 (fine)", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - "Hold Pedal (on/off)", "Portamento (on/off)", "Sustenuto Pedal (on/off)", "Soft Pedal (on/off)", - "Legato Pedal (on/off)", "Hold 2 Pedal (on/off)", "Sound Variation", "Sound Timbre", - "Sound Release Time", "Sound Attack Time", "Sound Brightness", "Sound Control 6", - "Sound Control 7", "Sound Control 8", "Sound Control 9", "Sound Control 10", - "General Purpose Button 1 (on/off)", "General Purpose Button 2 (on/off)", - "General Purpose Button 3 (on/off)", "General Purpose Button 4 (on/off)", - 0, 0, 0, 0, 0, 0, 0, "Reverb Level", "Tremolo Level", "Chorus Level", "Celeste Level", - "Phaser Level", "Data Button increment", "Data Button decrement", "Non-registered Parameter (fine)", - "Non-registered Parameter (coarse)", "Registered Parameter (fine)", "Registered Parameter (coarse)", - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "All Sound Off", "All Controllers Off", - "Local Keyboard (on/off)", "All Notes Off", "Omni Mode Off", "Omni Mode On", "Mono Operation", - "Poly Operation" - }; - - return (((unsigned int) n) < 128) ? names[n] - : (const char*)0; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/midi/juce_MidiMessage.h b/src/juce_appframework/audio/midi/juce_MidiMessage.h deleted file mode 100644 index be13dc0a93..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiMessage.h +++ /dev/null @@ -1,910 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIMESSAGE_JUCEHEADER__ -#define __JUCE_MIDIMESSAGE_JUCEHEADER__ - -#include "../../../juce_core/text/juce_String.h" - - -//============================================================================== -/** - Encapsulates a MIDI message. - - @see MidiMessageSequence, MidiOutput, MidiInput -*/ -class JUCE_API MidiMessage -{ -public: - //============================================================================== - /** Creates a 3-byte short midi message. - - @param byte1 message byte 1 - @param byte2 message byte 2 - @param byte3 message byte 3 - @param timeStamp the time to give the midi message - this value doesn't - use any particular units, so will be application-specific - */ - MidiMessage (const int byte1, - const int byte2, - const int byte3, - const double timeStamp = 0) throw(); - - /** Creates a 2-byte short midi message. - - @param byte1 message byte 1 - @param byte2 message byte 2 - @param timeStamp the time to give the midi message - this value doesn't - use any particular units, so will be application-specific - */ - MidiMessage (const int byte1, - const int byte2, - const double timeStamp = 0) throw(); - - /** Creates a 1-byte short midi message. - - @param byte1 message byte 1 - @param timeStamp the time to give the midi message - this value doesn't - use any particular units, so will be application-specific - */ - MidiMessage (const int byte1, - const double timeStamp = 0) throw(); - - /** Creates a midi message from a block of data. */ - MidiMessage (const uint8* const data, - const int dataSize, - const double timeStamp = 0) throw(); - - /** Reads the next midi message from some data. - - This will read as many bytes from a data stream as it needs to make a - complete message, and will return the number of bytes it used. This lets - you read a sequence of midi messages from a file or stream. - - @param data the data to read from - @param size the maximum number of bytes it's allowed to read - @param numBytesUsed returns the number of bytes that were actually needed - @param lastStatusByte in a sequence of midi messages, the initial byte - can be dropped from a message if it's the same as the - first byte of the previous message, so this lets you - supply the byte to use if the first byte of the message - has in fact been dropped. - @param timeStamp the time to give the midi message - this value doesn't - use any particular units, so will be application-specific - */ - MidiMessage (const uint8* data, - int size, - int& numBytesUsed, - uint8 lastStatusByte, - double timeStamp = 0) throw(); - - /** Creates a copy of another midi message. */ - MidiMessage (const MidiMessage& other) throw(); - - /** Creates a copy of another midi message, with a different timestamp. */ - MidiMessage (const MidiMessage& other, - const double newTimeStamp) throw(); - - /** Destructor. */ - ~MidiMessage() throw(); - - /** Copies this message from another one. */ - const MidiMessage& operator= (const MidiMessage& other) throw(); - - //============================================================================== - /** Returns a pointer to the raw midi data. - - @see getRawDataSize - */ - uint8* getRawData() const throw() { return data; } - - /** Returns the number of bytes of data in the message. - - @see getRawData - */ - int getRawDataSize() const throw() { return size; } - - //============================================================================== - /** Returns the timestamp associated with this message. - - The units for the timestamp will be application-specific. - - @see setTimeStamp, addToTimeStamp - */ - double getTimeStamp() const throw() { return timeStamp; } - - /** Changes the message's associated timestamp. - - The units for the timestamp will be application-specific. - - @see addToTimeStamp, getTimeStamp - */ - void setTimeStamp (const double newTimestamp) throw() { timeStamp = newTimestamp; } - - /** Adds a value to the message's timestamp. - - The units for the timestamp will be application-specific. - */ - void addToTimeStamp (const double delta) throw() { timeStamp += delta; } - - //============================================================================== - /** Returns the midi channel associated with the message. - - @returns a value 1 to 16 if the message has a channel, or 0 if it hasn't (e.g. - if it's a sysex) - @see isForChannel, setChannel - */ - int getChannel() const throw(); - - /** Returns true if the message applies to the given midi channel. - - @param channelNumber the channel number to look for, in the range 1 to 16 - @see getChannel, setChannel - */ - bool isForChannel (const int channelNumber) const throw(); - - /** Changes the message's midi channel. - - This won't do anything for non-channel messages like sysexes. - - @param newChannelNumber the channel number to change it to, in the range 1 to 16 - */ - void setChannel (const int newChannelNumber) throw(); - - //============================================================================== - /** Returns true if this is a system-exclusive message. - */ - bool isSysEx() const throw(); - - /** Returns a pointer to the sysex data inside the message. - - If this event isn't a sysex event, it'll return 0. - - @see getSysExDataSize - */ - const uint8* getSysExData() const throw(); - - /** Returns the size of the sysex data. - - This value excludes the 0xf0 header byte and the 0xf7 at the end. - - @see getSysExData - */ - int getSysExDataSize() const throw(); - - //============================================================================== - /** Returns true if this message is a 'key-down' event. - - This will return false for a note-on event with a velocity of 0. - - @see isNoteOff, getNoteNumber, getVelocity, noteOn - */ - bool isNoteOn() const throw(); - - /** Creates a key-down message (using a floating-point velocity). - - @param channel the midi channel, in the range 1 to 16 - @param noteNumber the key number, 0 to 127 - @param velocity in the range 0 to 1.0 - @see isNoteOn - */ - static const MidiMessage noteOn (const int channel, - const int noteNumber, - const float velocity) throw(); - - /** Creates a key-down message (using an integer velocity). - - @param channel the midi channel, in the range 1 to 16 - @param noteNumber the key number, 0 to 127 - @param velocity in the range 0 to 127 - @see isNoteOn - */ - static const MidiMessage noteOn (const int channel, - const int noteNumber, - const uint8 velocity) throw(); - - /** Returns true if this message is a 'key-up' event. - - This will also return true for a note-on event with a velocity of 0. - - @see isNoteOn, getNoteNumber, getVelocity, noteOff - */ - bool isNoteOff() const throw(); - - /** Creates a key-up message. - - @param channel the midi channel, in the range 1 to 16 - @param noteNumber the key number, 0 to 127 - @see isNoteOff - */ - static const MidiMessage noteOff (const int channel, - const int noteNumber) throw(); - - /** Returns true if this message is a 'key-down' or 'key-up' event. - - @see isNoteOn, isNoteOff - */ - bool isNoteOnOrOff() const throw(); - - /** Returns the midi note number for note-on and note-off messages. - - If the message isn't a note-on or off, the value returned will be - meaningless. - - @see isNoteOff, getMidiNoteName, getMidiNoteInHertz, setNoteNumber - */ - int getNoteNumber() const throw(); - - /** Changes the midi note number of a note-on or note-off message. - - If the message isn't a note on or off, this will do nothing. - */ - void setNoteNumber (const int newNoteNumber) throw(); - - //============================================================================== - /** Returns the velocity of a note-on or note-off message. - - The value returned will be in the range 0 to 127. - - If the message isn't a note-on or off event, it will return 0. - - @see getFloatVelocity - */ - uint8 getVelocity() const throw(); - - /** Returns the velocity of a note-on or note-off message. - - The value returned will be in the range 0 to 1.0 - - If the message isn't a note-on or off event, it will return 0. - - @see getVelocity, setVelocity - */ - float getFloatVelocity() const throw(); - - /** Changes the velocity of a note-on or note-off message. - - If the message isn't a note on or off, this will do nothing. - - @param newVelocity the new velocity, in the range 0 to 1.0 - @see getFloatVelocity, multiplyVelocity - */ - void setVelocity (const float newVelocity) throw(); - - /** Multiplies the velocity of a note-on or note-off message by a given amount. - - If the message isn't a note on or off, this will do nothing. - - @param scaleFactor the value by which to multiply the velocity - @see setVelocity - */ - void multiplyVelocity (const float scaleFactor) throw(); - - //============================================================================== - /** Returns true if the message is a program (patch) change message. - - @see getProgramChangeNumber, getGMInstrumentName - */ - bool isProgramChange() const throw(); - - /** Returns the new program number of a program change message. - - If the message isn't a program change, the value returned will be - nonsense. - - @see isProgramChange, getGMInstrumentName - */ - int getProgramChangeNumber() const throw(); - - /** Creates a program-change message. - - @param channel the midi channel, in the range 1 to 16 - @param programNumber the midi program number, 0 to 127 - @see isProgramChange, getGMInstrumentName - */ - static const MidiMessage programChange (const int channel, - const int programNumber) throw(); - - //============================================================================== - /** Returns true if the message is a pitch-wheel move. - - @see getPitchWheelValue, pitchWheel - */ - bool isPitchWheel() const throw(); - - /** Returns the pitch wheel position from a pitch-wheel move message. - - The value returned is a 14-bit number from 0 to 0x3fff, indicating the wheel position. - If called for messages which aren't pitch wheel events, the number returned will be - nonsense. - - @see isPitchWheel - */ - int getPitchWheelValue() const throw(); - - /** Creates a pitch-wheel move message. - - @param channel the midi channel, in the range 1 to 16 - @param position the wheel position, in the range 0 to 16383 - @see isPitchWheel - */ - static const MidiMessage pitchWheel (const int channel, - const int position) throw(); - - //============================================================================== - /** Returns true if the message is an aftertouch event. - - For aftertouch events, use the getNoteNumber() method to find out the key - that it applies to, and getAftertouchValue() to find out the amount. Use - getChannel() to find out the channel. - - @see getAftertouchValue, getNoteNumber - */ - bool isAftertouch() const throw(); - - /** Returns the amount of aftertouch from an aftertouch messages. - - The value returned is in the range 0 to 127, and will be nonsense for messages - other than aftertouch messages. - - @see isAftertouch - */ - int getAfterTouchValue() const throw(); - - /** Creates an aftertouch message. - - @param channel the midi channel, in the range 1 to 16 - @param noteNumber the key number, 0 to 127 - @param aftertouchAmount the amount of aftertouch, 0 to 127 - @see isAftertouch - */ - static const MidiMessage aftertouchChange (const int channel, - const int noteNumber, - const int aftertouchAmount) throw(); - - /** Returns true if the message is a channel-pressure change event. - - This is like aftertouch, but common to the whole channel rather than a specific - note. Use getChannelPressureValue() to find out the pressure, and getChannel() - to find out the channel. - - @see channelPressureChange - */ - bool isChannelPressure() const throw(); - - /** Returns the pressure from a channel pressure change message. - - @returns the pressure, in the range 0 to 127 - @see isChannelPressure, channelPressureChange - */ - int getChannelPressureValue() const throw(); - - /** Creates a channel-pressure change event. - - @param channel the midi channel: 1 to 16 - @param pressure the pressure, 0 to 127 - @see isChannelPressure - */ - static const MidiMessage channelPressureChange (const int channel, - const int pressure) throw(); - - //============================================================================== - /** Returns true if this is a midi controller message. - - @see getControllerNumber, getControllerValue, controllerEvent - */ - bool isController() const throw(); - - /** Returns the controller number of a controller message. - - The name of the controller can be looked up using the getControllerName() method. - - Note that the value returned is invalid for messages that aren't controller changes. - - @see isController, getControllerName, getControllerValue - */ - int getControllerNumber() const throw(); - - /** Returns the controller value from a controller message. - - A value 0 to 127 is returned to indicate the new controller position. - - Note that the value returned is invalid for messages that aren't controller changes. - - @see isController, getControllerNumber - */ - int getControllerValue() const throw(); - - /** Creates a controller message. - - @param channel the midi channel, in the range 1 to 16 - @param controllerType the type of controller - @param value the controller value - @see isController - */ - static const MidiMessage controllerEvent (const int channel, - const int controllerType, - const int value) throw(); - - /** Checks whether this message is an all-notes-off message. - - @see allNotesOff - */ - bool isAllNotesOff() const throw(); - - /** Checks whether this message is an all-sound-off message. - - @see allSoundOff - */ - bool isAllSoundOff() const throw(); - - /** Creates an all-notes-off message. - - @param channel the midi channel, in the range 1 to 16 - @see isAllNotesOff - */ - static const MidiMessage allNotesOff (const int channel) throw(); - - /** Creates an all-sound-off message. - - @param channel the midi channel, in the range 1 to 16 - @see isAllSoundOff - */ - static const MidiMessage allSoundOff (const int channel) throw(); - - /** Creates an all-controllers-off message. - - @param channel the midi channel, in the range 1 to 16 - */ - static const MidiMessage allControllersOff (const int channel) throw(); - - //============================================================================== - /** Returns true if this event is a meta-event. - - Meta-events are things like tempo changes, track names, etc. - - @see getMetaEventType, isTrackMetaEvent, isEndOfTrackMetaEvent, - isTextMetaEvent, isTrackNameEvent, isTempoMetaEvent, isTimeSignatureMetaEvent, - isKeySignatureMetaEvent, isMidiChannelMetaEvent - */ - bool isMetaEvent() const throw(); - - /** Returns a meta-event's type number. - - If the message isn't a meta-event, this will return -1. - - @see isMetaEvent, isTrackMetaEvent, isEndOfTrackMetaEvent, - isTextMetaEvent, isTrackNameEvent, isTempoMetaEvent, isTimeSignatureMetaEvent, - isKeySignatureMetaEvent, isMidiChannelMetaEvent - */ - int getMetaEventType() const throw(); - - /** Returns a pointer to the data in a meta-event. - - @see isMetaEvent, getMetaEventLength - */ - const uint8* getMetaEventData() const throw(); - - /** Returns the length of the data for a meta-event. - - @see isMetaEvent, getMetaEventData - */ - int getMetaEventLength() const throw(); - - //============================================================================== - /** Returns true if this is a 'track' meta-event. */ - bool isTrackMetaEvent() const throw(); - - /** Returns true if this is an 'end-of-track' meta-event. */ - bool isEndOfTrackMetaEvent() const throw(); - - /** Creates an end-of-track meta-event. - - @see isEndOfTrackMetaEvent - */ - static const MidiMessage endOfTrack() throw(); - - /** Returns true if this is an 'track name' meta-event. - - You can use the getTextFromTextMetaEvent() method to get the track's name. - */ - bool isTrackNameEvent() const throw(); - - /** Returns true if this is a 'text' meta-event. - - @see getTextFromTextMetaEvent - */ - bool isTextMetaEvent() const throw(); - - /** Returns the text from a text meta-event. - - @see isTextMetaEvent - */ - const String getTextFromTextMetaEvent() const throw(); - - //============================================================================== - /** Returns true if this is a 'tempo' meta-event. - - @see getTempoMetaEventTickLength, getTempoSecondsPerQuarterNote - */ - bool isTempoMetaEvent() const throw(); - - /** Returns the tick length from a tempo meta-event. - - @param timeFormat the 16-bit time format value from the midi file's header. - @returns the tick length (in seconds). - @see isTempoMetaEvent - */ - double getTempoMetaEventTickLength (const short timeFormat) const throw(); - - /** Calculates the seconds-per-quarter-note from a tempo meta-event. - - @see isTempoMetaEvent, getTempoMetaEventTickLength - */ - double getTempoSecondsPerQuarterNote() const throw(); - - /** Creates a tempo meta-event. - - @see isTempoMetaEvent - */ - static const MidiMessage tempoMetaEvent (const int microsecondsPerQuarterNote) throw(); - - //============================================================================== - /** Returns true if this is a 'time-signature' meta-event. - - @see getTimeSignatureInfo - */ - bool isTimeSignatureMetaEvent() const throw(); - - /** Returns the time-signature values from a time-signature meta-event. - - @see isTimeSignatureMetaEvent - */ - void getTimeSignatureInfo (int& numerator, - int& denominator) const throw(); - - /** Creates a time-signature meta-event. - - @see isTimeSignatureMetaEvent - */ - static const MidiMessage timeSignatureMetaEvent (const int numerator, - const int denominator) throw(); - - //============================================================================== - /** Returns true if this is a 'key-signature' meta-event. - - @see getKeySignatureNumberOfSharpsOrFlats - */ - bool isKeySignatureMetaEvent() const throw(); - - /** Returns the key from a key-signature meta-event. - - @see isKeySignatureMetaEvent - */ - int getKeySignatureNumberOfSharpsOrFlats() const throw(); - - //============================================================================== - /** Returns true if this is a 'channel' meta-event. - - A channel meta-event specifies the midi channel that should be used - for subsequent meta-events. - - @see getMidiChannelMetaEventChannel - */ - bool isMidiChannelMetaEvent() const throw(); - - /** Returns the channel number from a channel meta-event. - - @returns the channel, in the range 1 to 16. - @see isMidiChannelMetaEvent - */ - int getMidiChannelMetaEventChannel() const throw(); - - /** Creates a midi channel meta-event. - - @param channel the midi channel, in the range 1 to 16 - @see isMidiChannelMetaEvent - */ - static const MidiMessage midiChannelMetaEvent (const int channel) throw(); - - //============================================================================== - /** Returns true if this is an active-sense message. */ - bool isActiveSense() const throw(); - - //============================================================================== - /** Returns true if this is a midi start event. - - @see midiStart - */ - bool isMidiStart() const throw(); - - /** Creates a midi start event. */ - static const MidiMessage midiStart() throw(); - - /** Returns true if this is a midi continue event. - - @see midiContinue - */ - bool isMidiContinue() const throw(); - - /** Creates a midi continue event. */ - static const MidiMessage midiContinue() throw(); - - /** Returns true if this is a midi stop event. - - @see midiStop - */ - bool isMidiStop() const throw(); - - /** Creates a midi stop event. */ - static const MidiMessage midiStop() throw(); - - /** Returns true if this is a midi clock event. - - @see midiClock, songPositionPointer - */ - bool isMidiClock() const throw(); - - /** Creates a midi clock event. */ - static const MidiMessage midiClock() throw(); - - /** Returns true if this is a song-position-pointer message. - - @see getSongPositionPointerMidiBeat, songPositionPointer - */ - bool isSongPositionPointer() const throw(); - - /** Returns the midi beat-number of a song-position-pointer message. - - @see isSongPositionPointer, songPositionPointer - */ - int getSongPositionPointerMidiBeat() const throw(); - - /** Creates a song-position-pointer message. - - The position is a number of midi beats from the start of the song, where 1 midi - beat is 6 midi clocks, and there are 24 midi clocks in a quarter-note. So there - are 4 midi beats in a quarter-note. - - @see isSongPositionPointer, getSongPositionPointerMidiBeat - */ - static const MidiMessage songPositionPointer (const int positionInMidiBeats) throw(); - - //============================================================================== - /** Returns true if this is a quarter-frame midi timecode message. - - @see quarterFrame, getQuarterFrameSequenceNumber, getQuarterFrameValue - */ - bool isQuarterFrame() const throw(); - - /** Returns the sequence number of a quarter-frame midi timecode message. - - This will be a value between 0 and 7. - - @see isQuarterFrame, getQuarterFrameValue, quarterFrame - */ - int getQuarterFrameSequenceNumber() const throw(); - - /** Returns the value from a quarter-frame message. - - This will be the lower nybble of the message's data-byte, a value - between 0 and 15 - */ - int getQuarterFrameValue() const throw(); - - /** Creates a quarter-frame MTC message. - - @param sequenceNumber a value 0 to 7 for the upper nybble of the message's data byte - @param value a value 0 to 15 for the lower nybble of the message's data byte - */ - static const MidiMessage quarterFrame (const int sequenceNumber, - const int value) throw(); - - /** SMPTE timecode types. - - Used by the getFullFrameParameters() and fullFrame() methods. - */ - enum SmpteTimecodeType - { - fps24 = 0, - fps25 = 1, - fps30drop = 2, - fps30 = 3 - }; - - /** Returns true if this is a full-frame midi timecode message. - */ - bool isFullFrame() const throw(); - - /** Extracts the timecode information from a full-frame midi timecode message. - - You should only call this on messages where you've used isFullFrame() to - check that they're the right kind. - */ - void getFullFrameParameters (int& hours, - int& minutes, - int& seconds, - int& frames, - SmpteTimecodeType& timecodeType) const throw(); - - /** Creates a full-frame MTC message. - */ - static const MidiMessage fullFrame (const int hours, - const int minutes, - const int seconds, - const int frames, - SmpteTimecodeType timecodeType); - - //============================================================================== - /** Types of MMC command. - - @see isMidiMachineControlMessage, getMidiMachineControlCommand, midiMachineControlCommand - */ - enum MidiMachineControlCommand - { - mmc_stop = 1, - mmc_play = 2, - mmc_deferredplay = 3, - mmc_fastforward = 4, - mmc_rewind = 5, - mmc_recordStart = 6, - mmc_recordStop = 7, - mmc_pause = 9 - }; - - /** Checks whether this is an MMC message. - - If it is, you can use the getMidiMachineControlCommand() to find out its type. - */ - bool isMidiMachineControlMessage() const throw(); - - /** For an MMC message, this returns its type. - - Make sure it's actually an MMC message with isMidiMachineControlMessage() before - calling this method. - */ - MidiMachineControlCommand getMidiMachineControlCommand() const throw(); - - /** Creates an MMC message. - */ - static const MidiMessage midiMachineControlCommand (MidiMachineControlCommand command); - - /** Checks whether this is an MMC "goto" message. - - If it is, the parameters passed-in are set to the time that the message contains. - - @see midiMachineControlGoto - */ - bool isMidiMachineControlGoto (int& hours, - int& minutes, - int& seconds, - int& frames) const throw(); - - /** Creates an MMC "goto" message. - - This messages tells the device to go to a specific frame. - - @see isMidiMachineControlGoto - */ - static const MidiMessage midiMachineControlGoto (int hours, - int minutes, - int seconds, - int frames); - - //============================================================================== - /** Creates a master-volume change message. - - @param volume the volume, 0 to 1.0 - */ - static const MidiMessage masterVolume (const float volume) throw(); - - //============================================================================== - /** Creates a system-exclusive message. - - The data passed in is wrapped with header and tail bytes of 0xf0 and 0xf7. - */ - static const MidiMessage createSysExMessage (const uint8* sysexData, - const int dataSize) throw(); - - - //============================================================================== - /** Reads a midi variable-length integer. - - @param data the data to read the number from - @param numBytesUsed on return, this will be set to the number of bytes that were read - */ - static int readVariableLengthVal (const uint8* data, - int& numBytesUsed) throw(); - - /** Based on the first byte of a short midi message, this uses a lookup table - to return the message length (either 1, 2, or 3 bytes). - - The value passed in must be 0x80 or higher. - */ - static int getMessageLengthFromFirstByte (const uint8 firstByte) throw(); - - //============================================================================== - /** Returns the name of a midi note number. - - E.g "C", "D#", etc. - - @param noteNumber the midi note number, 0 to 127 - @param useSharps if true, sharpened notes are used, e.g. "C#", otherwise - they'll be flattened, e.g. "Db" - @param includeOctaveNumber if true, the octave number will be appended to the string, - e.g. "C#4" - @param octaveNumForMiddleC if an octave number is being appended, this indicates the - number that will be used for middle C's octave - - @see getMidiNoteInHertz - */ - static const String getMidiNoteName (int noteNumber, - bool useSharps, - bool includeOctaveNumber, - int octaveNumForMiddleC) throw(); - - /** Returns the frequency of a midi note number. - - @see getMidiNoteName - */ - static const double getMidiNoteInHertz (int noteNumber) throw(); - - /** Returns the standard name of a GM instrument. - - @param midiInstrumentNumber the program number 0 to 127 - @see getProgramChangeNumber - */ - static const String getGMInstrumentName (int midiInstrumentNumber) throw(); - - /** Returns the name of a bank of GM instruments. - - @param midiBankNumber the bank, 0 to 15 - */ - static const String getGMInstrumentBankName (int midiBankNumber) throw(); - - /** Returns the standard name of a channel 10 percussion sound. - - @param midiNoteNumber the key number, 35 to 81 - */ - static const String getRhythmInstrumentName (int midiNoteNumber) throw(); - - /** Returns the name of a controller type number. - - @see getControllerNumber - */ - static const String getControllerName (int controllerNumber) throw(); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - double timeStamp; - uint8* data; - int message, size; -}; - - -#endif // __JUCE_MIDIMESSAGE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/midi/juce_MidiMessageCollector.cpp b/src/juce_appframework/audio/midi/juce_MidiMessageCollector.cpp deleted file mode 100644 index 105db83468..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiMessageCollector.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiMessageCollector.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../juce_core/basics/juce_Time.h" - - -//============================================================================== -MidiMessageCollector::MidiMessageCollector() - : lastCallbackTime (0), - sampleRate (44100.0001) -{ -} - -MidiMessageCollector::~MidiMessageCollector() -{ -} - -//============================================================================== -void MidiMessageCollector::reset (const double sampleRate_) -{ - jassert (sampleRate_ > 0); - - const ScopedLock sl (midiCallbackLock); - sampleRate = sampleRate_; - incomingMessages.clear(); - lastCallbackTime = Time::getMillisecondCounterHiRes(); -} - -void MidiMessageCollector::addMessageToQueue (const MidiMessage& message) -{ - // you need to call reset() to set the correct sample rate before using this object - jassert (sampleRate != 44100.0001); - - // the messages that come in here need to be time-stamped correctly - see MidiInput - // for details of what the number should be. - jassert (message.getTimeStamp() != 0); - - const ScopedLock sl (midiCallbackLock); - - const int sampleNumber - = (int) ((message.getTimeStamp() - 0.001 * lastCallbackTime) * sampleRate); - - incomingMessages.addEvent (message, sampleNumber); - - // if the messages don't get used for over a second, we'd better - // get rid of any old ones to avoid the queue getting too big - if (sampleNumber > sampleRate) - incomingMessages.clear (0, sampleNumber - (int) sampleRate); -} - -void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer, - const int numSamples) -{ - // you need to call reset() to set the correct sample rate before using this object - jassert (sampleRate != 44100.0001); - - const double timeNow = Time::getMillisecondCounterHiRes(); - const double msElapsed = timeNow - lastCallbackTime; - - const ScopedLock sl (midiCallbackLock); - lastCallbackTime = timeNow; - - if (! incomingMessages.isEmpty()) - { - int numSourceSamples = jmax (1, roundDoubleToInt (msElapsed * 0.001 * sampleRate)); - - int startSample = 0; - int scale = 1 << 16; - - const uint8* midiData; - int numBytes, samplePosition; - - MidiBuffer::Iterator iter (incomingMessages); - - if (numSourceSamples > numSamples) - { - // if our list of events is longer than the buffer we're being - // asked for, scale them down to squeeze them all in.. - const int maxBlockLengthToUse = numSamples << 5; - - if (numSourceSamples > maxBlockLengthToUse) - { - startSample = numSourceSamples - maxBlockLengthToUse; - numSourceSamples = maxBlockLengthToUse; - iter.setNextSamplePosition (startSample); - } - - scale = (numSamples << 10) / numSourceSamples; - - while (iter.getNextEvent (midiData, numBytes, samplePosition)) - { - samplePosition = ((samplePosition - startSample) * scale) >> 10; - - destBuffer.addEvent (midiData, numBytes, - jlimit (0, numSamples - 1, samplePosition)); - } - } - else - { - // if our event list is shorter than the number we need, put them - // towards the end of the buffer - startSample = numSamples - numSourceSamples; - - while (iter.getNextEvent (midiData, numBytes, samplePosition)) - { - destBuffer.addEvent (midiData, numBytes, - jlimit (0, numSamples - 1, samplePosition + startSample)); - } - } - - incomingMessages.clear(); - } -} - -//============================================================================== -void MidiMessageCollector::handleNoteOn (MidiKeyboardState*, int midiChannel, int midiNoteNumber, float velocity) -{ - MidiMessage m (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity)); - m.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001); - - addMessageToQueue (m); -} - -void MidiMessageCollector::handleNoteOff (MidiKeyboardState*, int midiChannel, int midiNoteNumber) -{ - MidiMessage m (MidiMessage::noteOff (midiChannel, midiNoteNumber)); - m.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001); - - addMessageToQueue (m); -} - -void MidiMessageCollector::handleIncomingMidiMessage (MidiInput*, const MidiMessage& message) -{ - addMessageToQueue (message); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/midi/juce_MidiMessageCollector.h b/src/juce_appframework/audio/midi/juce_MidiMessageCollector.h deleted file mode 100644 index 6ec010726e..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiMessageCollector.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIMESSAGECOLLECTOR_JUCEHEADER__ -#define __JUCE_MIDIMESSAGECOLLECTOR_JUCEHEADER__ - -#include "../devices/juce_MidiInput.h" -#include "juce_MidiKeyboardState.h" - -//============================================================================== -/** - Collects incoming realtime MIDI messages and turns them into blocks suitable for - processing by a block-based audio callback. - - The class can also be used as either a MidiKeyboardStateListener or a MidiInputCallback - so it can easily use a midi input or keyboard component as its source. - - @see MidiMessage, MidiInput -*/ -class JUCE_API MidiMessageCollector : public MidiKeyboardStateListener, - public MidiInputCallback -{ -public: - //============================================================================== - /** Creates a MidiMessageCollector. */ - MidiMessageCollector(); - - /** Destructor. */ - ~MidiMessageCollector(); - - //============================================================================== - /** Clears any messages from the queue. - - You need to call this method before starting to use the collector, so that - it knows the correct sample rate to use. - */ - void reset (const double sampleRate); - - /** Takes an incoming real-time message and adds it to the queue. - - The message's timestamp is taken, and it will be ready for retrieval as part - of the block returned by the next call to removeNextBlockOfMessages(). - - This method is fully thread-safe when overlapping calls are made with - removeNextBlockOfMessages(). - */ - void addMessageToQueue (const MidiMessage& message); - - /** Removes all the pending messages from the queue as a buffer. - - This will also correct the messages' timestamps to make sure they're in - the range 0 to numSamples - 1. - - This call should be made regularly by something like an audio processing - callback, because the time that it happens is used in calculating the - midi event positions. - - This method is fully thread-safe when overlapping calls are made with - addMessageToQueue(). - */ - void removeNextBlockOfMessages (MidiBuffer& destBuffer, - const int numSamples); - - - //============================================================================== - /** @internal */ - void handleNoteOn (MidiKeyboardState* source, int midiChannel, int midiNoteNumber, float velocity); - /** @internal */ - void handleNoteOff (MidiKeyboardState* source, int midiChannel, int midiNoteNumber); - /** @internal */ - void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - double lastCallbackTime; - CriticalSection midiCallbackLock; - MidiBuffer incomingMessages; - double sampleRate; - - MidiMessageCollector (const MidiMessageCollector&); - const MidiMessageCollector& operator= (const MidiMessageCollector&); -}; - - -#endif // __JUCE_MIDIMESSAGECOLLECTOR_JUCEHEADER__ diff --git a/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp b/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp deleted file mode 100644 index 9b72432f7e..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiMessageSequence.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_MidiMessageSequence.h" -#include "../../../juce_core/containers/juce_Array.h" - - -//============================================================================== -MidiMessageSequence::MidiMessageSequence() -{ -} - -MidiMessageSequence::MidiMessageSequence (const MidiMessageSequence& other) -{ - list.ensureStorageAllocated (other.list.size()); - - for (int i = 0; i < other.list.size(); ++i) - list.add (new MidiEventHolder (other.list.getUnchecked(i)->message)); -} - -const MidiMessageSequence& MidiMessageSequence::operator= (const MidiMessageSequence& other) -{ - if (this != &other) - { - clear(); - - for (int i = 0; i < other.list.size(); ++i) - list.add (new MidiEventHolder (other.list.getUnchecked(i)->message)); - } - - return *this; -} - -MidiMessageSequence::~MidiMessageSequence() -{ -} - -void MidiMessageSequence::clear() -{ - list.clear(); -} - -int MidiMessageSequence::getNumEvents() const -{ - return list.size(); -} - -MidiMessageSequence::MidiEventHolder* MidiMessageSequence::getEventPointer (const int index) const -{ - return list [index]; -} - -double MidiMessageSequence::getTimeOfMatchingKeyUp (const int index) const -{ - const MidiEventHolder* const meh = list [index]; - - if (meh != 0 && meh->noteOffObject != 0) - return meh->noteOffObject->message.getTimeStamp(); - else - return 0.0; -} - -int MidiMessageSequence::getIndexOfMatchingKeyUp (const int index) const -{ - const MidiEventHolder* const meh = list [index]; - - return (meh != 0) ? list.indexOf (meh->noteOffObject) : -1; -} - -int MidiMessageSequence::getIndexOf (MidiEventHolder* const event) const -{ - return list.indexOf (event); -} - -int MidiMessageSequence::getNextIndexAtTime (const double timeStamp) const -{ - const int numEvents = list.size(); - - int i; - for (i = 0; i < numEvents; ++i) - if (list.getUnchecked(i)->message.getTimeStamp() >= timeStamp) - break; - - return i; -} - -//============================================================================== -double MidiMessageSequence::getStartTime() const -{ - if (list.size() > 0) - return list.getUnchecked(0)->message.getTimeStamp(); - else - return 0; -} - -double MidiMessageSequence::getEndTime() const -{ - if (list.size() > 0) - return list.getLast()->message.getTimeStamp(); - else - return 0; -} - -double MidiMessageSequence::getEventTime (const int index) const -{ - if (((unsigned int) index) < (unsigned int) list.size()) - return list.getUnchecked (index)->message.getTimeStamp(); - - return 0.0; -} - -//============================================================================== -void MidiMessageSequence::addEvent (const MidiMessage& newMessage, - double timeAdjustment) -{ - MidiEventHolder* const newOne = new MidiEventHolder (newMessage); - - timeAdjustment += newMessage.getTimeStamp(); - newOne->message.setTimeStamp (timeAdjustment); - - int i; - for (i = list.size(); --i >= 0;) - if (list.getUnchecked(i)->message.getTimeStamp() <= timeAdjustment) - break; - - list.insert (i + 1, newOne); -} - -void MidiMessageSequence::deleteEvent (const int index, - const bool deleteMatchingNoteUp) -{ - if (((unsigned int) index) < (unsigned int) list.size()) - { - if (deleteMatchingNoteUp) - deleteEvent (getIndexOfMatchingKeyUp (index), false); - - list.remove (index); - } -} - -void MidiMessageSequence::addSequence (const MidiMessageSequence& other, - double timeAdjustment, - double firstAllowableTime, - double endOfAllowableDestTimes) -{ - firstAllowableTime -= timeAdjustment; - endOfAllowableDestTimes -= timeAdjustment; - - for (int i = 0; i < other.list.size(); ++i) - { - const MidiMessage& m = other.list.getUnchecked(i)->message; - const double t = m.getTimeStamp(); - - if (t >= firstAllowableTime && t < endOfAllowableDestTimes) - { - MidiEventHolder* const newOne = new MidiEventHolder (m); - newOne->message.setTimeStamp (timeAdjustment + t); - - list.add (newOne); - } - } - - sort(); -} - -//============================================================================== -int MidiMessageSequence::compareElements (const MidiMessageSequence::MidiEventHolder* const first, - const MidiMessageSequence::MidiEventHolder* const second) throw() -{ - const double diff = first->message.getTimeStamp() - - second->message.getTimeStamp(); - - return (diff > 0) - (diff < 0); -} - -void MidiMessageSequence::sort() -{ - list.sort (*this, true); -} - -//============================================================================== -void MidiMessageSequence::updateMatchedPairs() -{ - for (int i = 0; i < list.size(); ++i) - { - const MidiMessage& m1 = list.getUnchecked(i)->message; - - if (m1.isNoteOn()) - { - list.getUnchecked(i)->noteOffObject = 0; - const int note = m1.getNoteNumber(); - const int chan = m1.getChannel(); - const int len = list.size(); - - for (int j = i + 1; j < len; ++j) - { - const MidiMessage& m = list.getUnchecked(j)->message; - - if (m.getNoteNumber() == note && m.getChannel() == chan) - { - if (m.isNoteOff()) - { - list.getUnchecked(i)->noteOffObject = list[j]; - break; - } - else if (m.isNoteOn()) - { - list.insert (j, new MidiEventHolder (MidiMessage::noteOff (chan, note))); - list.getUnchecked(j)->message.setTimeStamp (m.getTimeStamp()); - list.getUnchecked(i)->noteOffObject = list[j]; - break; - } - } - } - } - } -} - -void MidiMessageSequence::addTimeToMessages (const double delta) -{ - for (int i = list.size(); --i >= 0;) - list.getUnchecked (i)->message.setTimeStamp (list.getUnchecked (i)->message.getTimeStamp() - + delta); -} - -//============================================================================== -void MidiMessageSequence::extractMidiChannelMessages (const int channelNumberToExtract, - MidiMessageSequence& destSequence, - const bool alsoIncludeMetaEvents) const -{ - for (int i = 0; i < list.size(); ++i) - { - const MidiMessage& mm = list.getUnchecked(i)->message; - - if (mm.isForChannel (channelNumberToExtract) - || (alsoIncludeMetaEvents && mm.isMetaEvent())) - { - destSequence.addEvent (mm); - } - } -} - -void MidiMessageSequence::extractSysExMessages (MidiMessageSequence& destSequence) const -{ - for (int i = 0; i < list.size(); ++i) - { - const MidiMessage& mm = list.getUnchecked(i)->message; - - if (mm.isSysEx()) - destSequence.addEvent (mm); - } -} - -void MidiMessageSequence::deleteMidiChannelMessages (const int channelNumberToRemove) -{ - for (int i = list.size(); --i >= 0;) - if (list.getUnchecked(i)->message.isForChannel (channelNumberToRemove)) - list.remove(i); -} - -void MidiMessageSequence::deleteSysExMessages() -{ - for (int i = list.size(); --i >= 0;) - if (list.getUnchecked(i)->message.isSysEx()) - list.remove(i); -} - -//============================================================================== -void MidiMessageSequence::createControllerUpdatesForTime (const int channelNumber, - const double time, - OwnedArray& dest) -{ - bool doneProg = false; - bool donePitchWheel = false; - Array doneControllers (32); - - for (int i = list.size(); --i >= 0;) - { - const MidiMessage& mm = list.getUnchecked(i)->message; - - if (mm.isForChannel (channelNumber) - && mm.getTimeStamp() <= time) - { - if (mm.isProgramChange()) - { - if (! doneProg) - { - dest.add (new MidiMessage (mm, 0.0)); - doneProg = true; - } - } - else if (mm.isController()) - { - if (! doneControllers.contains (mm.getControllerNumber())) - { - dest.add (new MidiMessage (mm, 0.0)); - doneControllers.add (mm.getControllerNumber()); - } - } - else if (mm.isPitchWheel()) - { - if (! donePitchWheel) - { - dest.add (new MidiMessage (mm, 0.0)); - donePitchWheel = true; - } - } - } - } -} - - -//============================================================================== -MidiMessageSequence::MidiEventHolder::MidiEventHolder (const MidiMessage& message_) - : message (message_), - noteOffObject (0) -{ -} - -MidiMessageSequence::MidiEventHolder::~MidiEventHolder() -{ -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/midi/juce_MidiMessageSequence.h b/src/juce_appframework/audio/midi/juce_MidiMessageSequence.h deleted file mode 100644 index 669c8c9cb9..0000000000 --- a/src/juce_appframework/audio/midi/juce_MidiMessageSequence.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MIDIMESSAGESEQUENCE_JUCEHEADER__ -#define __JUCE_MIDIMESSAGESEQUENCE_JUCEHEADER__ - -#include "juce_MidiMessage.h" -#include "../../../juce_core/containers/juce_OwnedArray.h" - - -//============================================================================== -/** - A sequence of timestamped midi messages. - - This allows the sequence to be manipulated, and also to be read from and - written to a standard midi file. - - @see MidiMessage, MidiFile -*/ -class JUCE_API MidiMessageSequence -{ -public: - //============================================================================== - /** Creates an empty midi sequence object. */ - MidiMessageSequence(); - - /** Creates a copy of another sequence. */ - MidiMessageSequence (const MidiMessageSequence& other); - - /** Replaces this sequence with another one. */ - const MidiMessageSequence& operator= (const MidiMessageSequence& other); - - /** Destructor. */ - ~MidiMessageSequence(); - - //============================================================================== - /** Structure used to hold midi events in the sequence. - - These structures act as 'handles' on the events as they are moved about in - the list, and make it quick to find the matching note-offs for note-on events. - - @see MidiMessageSequence::getEventPointer - */ - class MidiEventHolder - { - public: - //============================================================================== - /** Destructor. */ - ~MidiEventHolder(); - - /** The message itself, whose timestamp is used to specify the event's time. - */ - MidiMessage message; - - /** The matching note-off event (if this is a note-on event). - - If this isn't a note-on, this pointer will be null. - - Use the MidiMessageSequence::updateMatchedPairs() method to keep these - note-offs up-to-date after events have been moved around in the sequence - or deleted. - */ - MidiEventHolder* noteOffObject; - - - //============================================================================== - juce_UseDebuggingNewOperator - - private: - friend class MidiMessageSequence; - MidiEventHolder (const MidiMessage& message); - }; - - //============================================================================== - /** Clears the sequence. */ - void clear(); - - /** Returns the number of events in the sequence. */ - int getNumEvents() const; - - /** Returns a pointer to one of the events. */ - MidiEventHolder* getEventPointer (const int index) const; - - /** Returns the time of the note-up that matches the note-on at this index. - - If the event at this index isn't a note-on, it'll just return 0. - - @see MidiMessageSequence::MidiEventHolder::noteOffObject - */ - double getTimeOfMatchingKeyUp (const int index) const; - - /** Returns the index of the note-up that matches the note-on at this index. - - If the event at this index isn't a note-on, it'll just return -1. - - @see MidiMessageSequence::MidiEventHolder::noteOffObject - */ - int getIndexOfMatchingKeyUp (const int index) const; - - /** Returns the index of an event. */ - int getIndexOf (MidiEventHolder* const event) const; - - /** Returns the index of the first event on or after the given timestamp. - - If the time is beyond the end of the sequence, this will return the - number of events. - */ - int getNextIndexAtTime (const double timeStamp) const; - - //============================================================================== - /** Returns the timestamp of the first event in the sequence. - - @see getEndTime - */ - double getStartTime() const; - - /** Returns the timestamp of the last event in the sequence. - - @see getStartTime - */ - double getEndTime() const; - - /** Returns the timestamp of the event at a given index. - - If the index is out-of-range, this will return 0.0 - */ - double getEventTime (const int index) const; - - //============================================================================== - /** Inserts a midi message into the sequence. - - The index at which the new message gets inserted will depend on its timestamp, - because the sequence is kept sorted. - - Remember to call updateMatchedPairs() after adding note-on events. - - @param newMessage the new message to add (an internal copy will be made) - @param timeAdjustment an optional value to add to the timestamp of the message - that will be inserted - @see updateMatchedPairs - */ - void addEvent (const MidiMessage& newMessage, - double timeAdjustment = 0); - - /** Deletes one of the events in the sequence. - - Remember to call updateMatchedPairs() after removing events. - - @param index the index of the event to delete - @param deleteMatchingNoteUp whether to also remove the matching note-off - if the event you're removing is a note-on - */ - void deleteEvent (const int index, - const bool deleteMatchingNoteUp); - - /** Merges another sequence into this one. - - Remember to call updateMatchedPairs() after using this method. - - @param other the sequence to add from - @param timeAdjustmentDelta an amount to add to the timestamps of the midi events - as they are read from the other sequence - @param firstAllowableDestTime events will not be added if their time is earlier - than this time. (This is after their time has been adjusted - by the timeAdjustmentDelta) - @param endOfAllowableDestTimes events will not be added if their time is equal to - or greater than this time. (This is after their time has - been adjusted by the timeAdjustmentDelta) - */ - void addSequence (const MidiMessageSequence& other, - double timeAdjustmentDelta, - double firstAllowableDestTime, - double endOfAllowableDestTimes); - - //============================================================================== - /** Makes sure all the note-on and note-off pairs are up-to-date. - - Call this after moving messages about or deleting/adding messages, and it - will scan the list and make sure all the note-offs in the MidiEventHolder - structures are pointing at the correct ones. - */ - void updateMatchedPairs(); - - - //============================================================================== - /** Copies all the messages for a particular midi channel to another sequence. - - @param channelNumberToExtract the midi channel to look for, in the range 1 to 16 - @param destSequence the sequence that the chosen events should be copied to - @param alsoIncludeMetaEvents if true, any meta-events (which don't apply to a specific - channel) will also be copied across. - @see extractSysExMessages - */ - void extractMidiChannelMessages (const int channelNumberToExtract, - MidiMessageSequence& destSequence, - const bool alsoIncludeMetaEvents) const; - - /** Copies all midi sys-ex messages to another sequence. - - @param destSequence this is the sequence to which any sys-exes in this sequence - will be added - @see extractMidiChannelMessages - */ - void extractSysExMessages (MidiMessageSequence& destSequence) const; - - /** Removes any messages in this sequence that have a specific midi channel. - - @param channelNumberToRemove the midi channel to look for, in the range 1 to 16 - */ - void deleteMidiChannelMessages (const int channelNumberToRemove); - - /** Removes any sys-ex messages from this sequence. - */ - void deleteSysExMessages(); - - /** Adds an offset to the timestamps of all events in the sequence. - - @param deltaTime the amount to add to each timestamp. - */ - void addTimeToMessages (const double deltaTime); - - //============================================================================== - /** Scans through the sequence to determine the state of any midi controllers at - a given time. - - This will create a sequence of midi controller changes that can be - used to set all midi controllers to the state they would be in at the - specified time within this sequence. - - As well as controllers, it will also recreate the midi program number - and pitch bend position. - - @param channelNumber the midi channel to look for, in the range 1 to 16. Controllers - for other channels will be ignored. - @param time the time at which you want to find out the state - there are - no explicit units for this time measurement, it's the same units - as used for the timestamps of the messages - @param resultMessages an array to which midi controller-change messages will be added. This - will be the minimum number of controller changes to recreate the - state at the required time. - */ - void createControllerUpdatesForTime (const int channelNumber, - const double time, - OwnedArray& resultMessages); - - //============================================================================== - juce_UseDebuggingNewOperator - - /** @internal */ - static int compareElements (const MidiMessageSequence::MidiEventHolder* const first, - const MidiMessageSequence::MidiEventHolder* const second) throw(); - -private: - //============================================================================== - friend class MidiComparator; - friend class MidiFile; - OwnedArray list; - - void sort(); -}; - - -#endif // __JUCE_MIDIMESSAGESEQUENCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.h b/src/juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.h deleted file mode 100644 index f8b6b69fc8..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOUNITPLUGINFORMAT_JUCEHEADER__ -#define __JUCE_AUDIOUNITPLUGINFORMAT_JUCEHEADER__ - -#include "../juce_AudioPluginFormat.h" - -#if JUCE_PLUGINHOST_AU && JUCE_MAC - -//============================================================================== -/** - Implements a plugin format manager for AudioUnits. -*/ -class JUCE_API AudioUnitPluginFormat : public AudioPluginFormat -{ -public: - //============================================================================== - AudioUnitPluginFormat(); - ~AudioUnitPluginFormat(); - - //============================================================================== - const String getName() const { return "AudioUnit"; } - void findAllTypesForFile (OwnedArray & results, const String& fileOrIdentifier); - AudioPluginInstance* createInstanceFromDescription (const PluginDescription& desc); - bool fileMightContainThisPluginType (const String& fileOrIdentifier); - const String getNameOfPluginFromIdentifier (const String& fileOrIdentifier); - const StringArray searchPathsForPlugins (const FileSearchPath& directoriesToSearch, const bool recursive); - bool doesPluginStillExist (const PluginDescription& desc); - const FileSearchPath getDefaultLocationsToSearch(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioUnitPluginFormat (const AudioUnitPluginFormat&); - const AudioUnitPluginFormat& operator= (const AudioUnitPluginFormat&); -}; - -#endif - -#endif // __JUCE_AUDIOUNITPLUGINFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.mm b/src/juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.mm deleted file mode 100644 index 4034c77ff3..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.mm +++ /dev/null @@ -1,1541 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../../../juce_Config.h" - -#if JUCE_PLUGINHOST_AU && (! (defined (LINUX) || defined (_WIN32))) - -#include -#include -#include - -#if JUCE_SUPPORT_CARBON -#include -#include -#endif - -#include "../../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioUnitPluginFormat.h" -#include "../juce_PluginDescription.h" -#include "../../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../../juce_appframework/events/juce_Timer.h" -#include "../../../../juce_core/misc/juce_PlatformUtilities.h" -#include "../../../../juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.h" -#include "../../../../juce_appframework/gui/components/special/juce_NSViewComponent.h" -#if JUCE_MAC && JUCE_SUPPORT_CARBON - #include "../../../../native/mac/juce_mac_CarbonViewWrapperComponent.h" -#endif - -#if JUCE_MAC - -#if MACOS_10_3_OR_EARLIER - #define kAudioUnitType_Generator 'augn' -#endif - -// Change this to disable logging of various activities -#ifndef AU_LOGGING - #define AU_LOGGING 1 -#endif - -#if AU_LOGGING - #define log(a) Logger::writeToLog(a); -#else - #define log(a) -#endif - -static int insideCallback = 0; - -//============================================================================== -static const String osTypeToString (OSType type) throw() -{ - char s[4]; - s[0] = (char) (((uint32) type) >> 24); - s[1] = (char) (((uint32) type) >> 16); - s[2] = (char) (((uint32) type) >> 8); - s[3] = (char) ((uint32) type); - return String (s, 4); -} - -static OSType stringToOSType (const String& s1) throw() -{ - const String s (s1 + " "); - - return (((OSType) (unsigned char) s[0]) << 24) - | (((OSType) (unsigned char) s[1]) << 16) - | (((OSType) (unsigned char) s[2]) << 8) - | ((OSType) (unsigned char) s[3]); -} - -static const tchar* auIdentifierPrefix = T("AudioUnit:"); - -static const String createAUPluginIdentifier (const ComponentDescription& desc) -{ - jassert (osTypeToString ('abcd') == T("abcd")); // agh, must have got the endianness wrong.. - jassert (stringToOSType ("abcd") == (OSType) 'abcd'); // ditto - - String s (auIdentifierPrefix); - - if (desc.componentType == kAudioUnitType_MusicDevice) - s << "Synths/"; - else if (desc.componentType == kAudioUnitType_MusicEffect - || desc.componentType == kAudioUnitType_Effect) - s << "Effects/"; - else if (desc.componentType == kAudioUnitType_Generator) - s << "Generators/"; - else if (desc.componentType == kAudioUnitType_Panner) - s << "Panners/"; - - s << osTypeToString (desc.componentType) - << T(",") - << osTypeToString (desc.componentSubType) - << T(",") - << osTypeToString (desc.componentManufacturer); - - return s; -} - -static void getAUDetails (ComponentRecord* comp, String& name, String& manufacturer) -{ - Handle componentNameHandle = NewHandle (sizeof (void*)); - Handle componentInfoHandle = NewHandle (sizeof (void*)); - - if (componentNameHandle != 0 && componentInfoHandle != 0) - { - ComponentDescription desc; - - if (GetComponentInfo (comp, &desc, componentNameHandle, componentInfoHandle, 0) == noErr) - { - ConstStr255Param nameString = (ConstStr255Param) (*componentNameHandle); - ConstStr255Param infoString = (ConstStr255Param) (*componentInfoHandle); - - if (nameString != 0 && nameString[0] != 0) - { - const String all ((const char*) nameString + 1, nameString[0]); -DBG ("name: "+ all); - - manufacturer = all.upToFirstOccurrenceOf (T(":"), false, false).trim(); - name = all.fromFirstOccurrenceOf (T(":"), false, false).trim(); - } - - if (infoString != 0 && infoString[0] != 0) - { - const String all ((const char*) infoString + 1, infoString[0]); -DBG ("info: " + all); - } - - if (name.isEmpty()) - name = ""; - } - - DisposeHandle (componentNameHandle); - DisposeHandle (componentInfoHandle); - } -} - -static bool getComponentDescFromIdentifier (const String& fileOrIdentifier, ComponentDescription& desc, - String& name, String& version, String& manufacturer) -{ - zerostruct (desc); - - if (fileOrIdentifier.startsWithIgnoreCase (auIdentifierPrefix)) - { - String s (fileOrIdentifier.substring (jmax (fileOrIdentifier.lastIndexOfChar (T(':')), - fileOrIdentifier.lastIndexOfChar (T('/'))) + 1)); - - StringArray tokens; - tokens.addTokens (s, T(","), 0); - tokens.trim(); - tokens.removeEmptyStrings(); - - if (tokens.size() == 3) - { - desc.componentType = stringToOSType (tokens[0]); - desc.componentSubType = stringToOSType (tokens[1]); - desc.componentManufacturer = stringToOSType (tokens[2]); - - ComponentRecord* comp = FindNextComponent (0, &desc); - - if (comp != 0) - { - getAUDetails (comp, name, manufacturer); - - return true; - } - } - } - - return false; -} - - -//============================================================================== -class AudioUnitPluginWindowCarbon; -class AudioUnitPluginWindowCocoa; - -//============================================================================== -class AudioUnitPluginInstance : public AudioPluginInstance -{ -public: - //============================================================================== - ~AudioUnitPluginInstance(); - - //============================================================================== - // AudioPluginInstance methods: - - void fillInPluginDescription (PluginDescription& desc) const - { - desc.name = pluginName; - desc.fileOrIdentifier = createAUPluginIdentifier (componentDesc); - desc.uid = ((int) componentDesc.componentType) - ^ ((int) componentDesc.componentSubType) - ^ ((int) componentDesc.componentManufacturer); - desc.lastFileModTime = 0; - desc.pluginFormatName = "AudioUnit"; - desc.category = getCategory(); - desc.manufacturerName = manufacturer; - desc.version = version; - desc.numInputChannels = getNumInputChannels(); - desc.numOutputChannels = getNumOutputChannels(); - desc.isInstrument = (componentDesc.componentType == kAudioUnitType_MusicDevice); - } - - const String getName() const { return pluginName; } - bool acceptsMidi() const { return wantsMidiMessages; } - bool producesMidi() const { return false; } - - //============================================================================== - // AudioProcessor methods: - - void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock); - void releaseResources(); - void processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages); - - AudioProcessorEditor* createEditor(); - - const String getInputChannelName (const int index) const; - bool isInputChannelStereoPair (int index) const; - - const String getOutputChannelName (const int index) const; - bool isOutputChannelStereoPair (int index) const; - - //============================================================================== - int getNumParameters(); - float getParameter (int index); - void setParameter (int index, float newValue); - const String getParameterName (int index); - const String getParameterText (int index); - bool isParameterAutomatable (int index) const; - - //============================================================================== - int getNumPrograms(); - int getCurrentProgram(); - void setCurrentProgram (int index); - const String getProgramName (int index); - void changeProgramName (int index, const String& newName); - - //============================================================================== - void getStateInformation (MemoryBlock& destData); - void getCurrentProgramStateInformation (MemoryBlock& destData); - void setStateInformation (const void* data, int sizeInBytes); - void setCurrentProgramStateInformation (const void* data, int sizeInBytes); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - friend class AudioUnitPluginWindowCarbon; - friend class AudioUnitPluginWindowCocoa; - friend class AudioUnitPluginFormat; - - ComponentDescription componentDesc; - String pluginName, manufacturer, version; - String fileOrIdentifier; - CriticalSection lock; - bool initialised, wantsMidiMessages, wasPlaying; - - AudioBufferList* outputBufferList; - AudioTimeStamp timeStamp; - AudioSampleBuffer* currentBuffer; - - AudioUnit audioUnit; - Array parameterIds; - - //============================================================================== - bool getComponentDescFromFile (const String& fileOrIdentifier); - void initialise(); - - //============================================================================== - OSStatus renderGetInput (AudioUnitRenderActionFlags* ioActionFlags, - const AudioTimeStamp* inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData) const; - - static OSStatus renderGetInputCallback (void* inRefCon, - AudioUnitRenderActionFlags* ioActionFlags, - const AudioTimeStamp* inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData) - { - return ((AudioUnitPluginInstance*) inRefCon) - ->renderGetInput (ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData); - } - - OSStatus getBeatAndTempo (Float64* outCurrentBeat, Float64* outCurrentTempo) const; - OSStatus getMusicalTimeLocation (UInt32* outDeltaSampleOffsetToNextBeat, Float32* outTimeSig_Numerator, - UInt32* outTimeSig_Denominator, Float64* outCurrentMeasureDownBeat) const; - OSStatus getTransportState (Boolean* outIsPlaying, Boolean* outTransportStateChanged, - Float64* outCurrentSampleInTimeLine, Boolean* outIsCycling, - Float64* outCycleStartBeat, Float64* outCycleEndBeat); - - static OSStatus getBeatAndTempoCallback (void* inHostUserData, Float64* outCurrentBeat, Float64* outCurrentTempo) - { - return ((AudioUnitPluginInstance*) inHostUserData)->getBeatAndTempo (outCurrentBeat, outCurrentTempo); - } - - static OSStatus getMusicalTimeLocationCallback (void* inHostUserData, UInt32* outDeltaSampleOffsetToNextBeat, - Float32* outTimeSig_Numerator, UInt32* outTimeSig_Denominator, - Float64* outCurrentMeasureDownBeat) - { - return ((AudioUnitPluginInstance*) inHostUserData) - ->getMusicalTimeLocation (outDeltaSampleOffsetToNextBeat, outTimeSig_Numerator, - outTimeSig_Denominator, outCurrentMeasureDownBeat); - } - - static OSStatus getTransportStateCallback (void* inHostUserData, Boolean* outIsPlaying, Boolean* outTransportStateChanged, - Float64* outCurrentSampleInTimeLine, Boolean* outIsCycling, - Float64* outCycleStartBeat, Float64* outCycleEndBeat) - { - return ((AudioUnitPluginInstance*) inHostUserData) - ->getTransportState (outIsPlaying, outTransportStateChanged, - outCurrentSampleInTimeLine, outIsCycling, - outCycleStartBeat, outCycleEndBeat); - } - - //============================================================================== - void getNumChannels (int& numIns, int& numOuts) - { - numIns = 0; - numOuts = 0; - - AUChannelInfo supportedChannels [128]; - UInt32 supportedChannelsSize = sizeof (supportedChannels); - - if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global, - 0, supportedChannels, &supportedChannelsSize) == noErr - && supportedChannelsSize > 0) - { - for (int i = 0; i < supportedChannelsSize / sizeof (AUChannelInfo); ++i) - { - numIns = jmax (numIns, supportedChannels[i].inChannels); - numOuts = jmax (numOuts, supportedChannels[i].outChannels); - } - } - else - { - // (this really means the plugin will take any number of ins/outs as long - // as they are the same) - numIns = numOuts = 2; - } - } - - const String getCategory() const; - - //============================================================================== - AudioUnitPluginInstance (const String& fileOrIdentifier); -}; - -//============================================================================== -AudioUnitPluginInstance::AudioUnitPluginInstance (const String& fileOrIdentifier) - : fileOrIdentifier (fileOrIdentifier), - initialised (false), - wantsMidiMessages (false), - audioUnit (0), - outputBufferList (0), - currentBuffer (0) -{ - try - { - ++insideCallback; - - log (T("Opening AU: ") + fileOrIdentifier); - - if (getComponentDescFromFile (fileOrIdentifier)) - { - ComponentRecord* const comp = FindNextComponent (0, &componentDesc); - - if (comp != 0) - { - audioUnit = (AudioUnit) OpenComponent (comp); - - wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice - || componentDesc.componentType == kAudioUnitType_MusicEffect; - } - } - - --insideCallback; - } - catch (...) - { - --insideCallback; - } -} - -AudioUnitPluginInstance::~AudioUnitPluginInstance() -{ - { - const ScopedLock sl (lock); - - jassert (insideCallback == 0); - - if (audioUnit != 0) - { - AudioUnitUninitialize (audioUnit); - CloseComponent (audioUnit); - audioUnit = 0; - } - } - - juce_free (outputBufferList); -} - -bool AudioUnitPluginInstance::getComponentDescFromFile (const String& fileOrIdentifier) -{ - zerostruct (componentDesc); - - if (getComponentDescFromIdentifier (fileOrIdentifier, componentDesc, pluginName, version, manufacturer)) - return true; - - const File file (fileOrIdentifier); - if (! file.hasFileExtension (T(".component"))) - return false; - - const char* const utf8 = fileOrIdentifier.toUTF8(); - CFURLRef url = CFURLCreateFromFileSystemRepresentation (0, (const UInt8*) utf8, - strlen (utf8), file.isDirectory()); - if (url != 0) - { - CFBundleRef bundleRef = CFBundleCreate (kCFAllocatorDefault, url); - CFRelease (url); - - if (bundleRef != 0) - { - CFTypeRef name = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleName")); - - if (name != 0 && CFGetTypeID (name) == CFStringGetTypeID()) - pluginName = PlatformUtilities::cfStringToJuceString ((CFStringRef) name); - - if (pluginName.isEmpty()) - pluginName = file.getFileNameWithoutExtension(); - - CFTypeRef versionString = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleVersion")); - - if (versionString != 0 && CFGetTypeID (versionString) == CFStringGetTypeID()) - version = PlatformUtilities::cfStringToJuceString ((CFStringRef) versionString); - - CFTypeRef manuString = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleGetInfoString")); - - if (manuString != 0 && CFGetTypeID (manuString) == CFStringGetTypeID()) - manufacturer = PlatformUtilities::cfStringToJuceString ((CFStringRef) manuString); - - short resFileId = CFBundleOpenBundleResourceMap (bundleRef); - UseResFile (resFileId); - - for (int i = 1; i <= Count1Resources ('thng'); ++i) - { - Handle h = Get1IndResource ('thng', i); - - if (h != 0) - { - HLock (h); - const uint32* const types = (const uint32*) *h; - - if (types[0] == kAudioUnitType_MusicDevice - || types[0] == kAudioUnitType_MusicEffect - || types[0] == kAudioUnitType_Effect - || types[0] == kAudioUnitType_Generator - || types[0] == kAudioUnitType_Panner) - { - componentDesc.componentType = types[0]; - componentDesc.componentSubType = types[1]; - componentDesc.componentManufacturer = types[2]; - break; - } - - HUnlock (h); - ReleaseResource (h); - } - } - - CFBundleCloseBundleResourceMap (bundleRef, resFileId); - CFRelease (bundleRef); - } - } - - return componentDesc.componentType != 0 && componentDesc.componentSubType != 0; -} - -//============================================================================== -void AudioUnitPluginInstance::initialise() -{ - if (initialised || audioUnit == 0) - return; - - log (T("Initialising AU: ") + pluginName); - - parameterIds.clear(); - - { - UInt32 paramListSize = 0; - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, - 0, 0, ¶mListSize); - - if (paramListSize > 0) - { - parameterIds.insertMultiple (0, 0, paramListSize / sizeof (int)); - - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, - 0, ¶meterIds.getReference(0), ¶mListSize); - } - } - - { - AURenderCallbackStruct info; - zerostruct (info); - info.inputProcRefCon = this; - info.inputProc = renderGetInputCallback; - - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, - 0, &info, sizeof (info)); - } - - { - HostCallbackInfo info; - zerostruct (info); - info.hostUserData = this; - info.beatAndTempoProc = getBeatAndTempoCallback; - info.musicalTimeLocationProc = getMusicalTimeLocationCallback; - info.transportStateProc = getTransportStateCallback; - - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_HostCallbacks, kAudioUnitScope_Global, - 0, &info, sizeof (info)); - } - - int numIns, numOuts; - getNumChannels (numIns, numOuts); - setPlayConfigDetails (numIns, numOuts, 0, 0); - - initialised = AudioUnitInitialize (audioUnit) == noErr; - - setLatencySamples (0); -} - - -//============================================================================== -void AudioUnitPluginInstance::prepareToPlay (double sampleRate_, - int samplesPerBlockExpected) -{ - initialise(); - - if (initialised) - { - int numIns, numOuts; - getNumChannels (numIns, numOuts); - - setPlayConfigDetails (numIns, numOuts, sampleRate_, samplesPerBlockExpected); - - Float64 latencySecs = 0.0; - UInt32 latencySize = sizeof (latencySecs); - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, - 0, &latencySecs, &latencySize); - - setLatencySamples (roundDoubleToInt (latencySecs * sampleRate_)); - - AudioUnitReset (audioUnit, kAudioUnitScope_Input, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Output, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Global, 0); - - AudioStreamBasicDescription stream; - zerostruct (stream); - stream.mSampleRate = sampleRate_; - stream.mFormatID = kAudioFormatLinearPCM; - stream.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved; - stream.mFramesPerPacket = 1; - stream.mBytesPerPacket = 4; - stream.mBytesPerFrame = 4; - stream.mBitsPerChannel = 32; - stream.mChannelsPerFrame = numIns; - - OSStatus err = AudioUnitSetProperty (audioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Input, - 0, &stream, sizeof (stream)); - - stream.mChannelsPerFrame = numOuts; - - err = AudioUnitSetProperty (audioUnit, - kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, - 0, &stream, sizeof (stream)); - - juce_free (outputBufferList); - outputBufferList = (AudioBufferList*) juce_calloc (sizeof (AudioBufferList) + sizeof (AudioBuffer) * (numOuts + 1)); - outputBufferList->mNumberBuffers = numOuts; - - for (int i = numOuts; --i >= 0;) - outputBufferList->mBuffers[i].mNumberChannels = 1; - - zerostruct (timeStamp); - timeStamp.mSampleTime = 0; - timeStamp.mHostTime = AudioGetCurrentHostTime(); - timeStamp.mFlags = kAudioTimeStampSampleTimeValid | kAudioTimeStampHostTimeValid; - - currentBuffer = 0; - wasPlaying = false; - } -} - -void AudioUnitPluginInstance::releaseResources() -{ - if (initialised) - { - AudioUnitReset (audioUnit, kAudioUnitScope_Input, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Output, 0); - AudioUnitReset (audioUnit, kAudioUnitScope_Global, 0); - - juce_free (outputBufferList); - outputBufferList = 0; - currentBuffer = 0; - } -} - -OSStatus AudioUnitPluginInstance::renderGetInput (AudioUnitRenderActionFlags* ioActionFlags, - const AudioTimeStamp* inTimeStamp, - UInt32 inBusNumber, - UInt32 inNumberFrames, - AudioBufferList* ioData) const -{ - if (inBusNumber == 0 - && currentBuffer != 0) - { - jassert (inNumberFrames == currentBuffer->getNumSamples()); // if this ever happens, might need to add extra handling - - for (int i = 0; i < ioData->mNumberBuffers; ++i) - { - if (i < currentBuffer->getNumChannels()) - { - memcpy (ioData->mBuffers[i].mData, - currentBuffer->getSampleData (i, 0), - sizeof (float) * inNumberFrames); - } - else - { - zeromem (ioData->mBuffers[i].mData, sizeof (float) * inNumberFrames); - } - } - } - - return noErr; -} - -void AudioUnitPluginInstance::processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) -{ - const int numSamples = buffer.getNumSamples(); - - if (initialised) - { - AudioUnitRenderActionFlags flags = 0; - - timeStamp.mHostTime = AudioGetCurrentHostTime(); - - for (int i = getNumOutputChannels(); --i >= 0;) - { - outputBufferList->mBuffers[i].mDataByteSize = sizeof (float) * numSamples; - outputBufferList->mBuffers[i].mData = buffer.getSampleData (i, 0); - } - - currentBuffer = &buffer; - - if (wantsMidiMessages) - { - const uint8* midiEventData; - int midiEventSize, midiEventPosition; - MidiBuffer::Iterator i (midiMessages); - - while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) - { - if (midiEventSize <= 3) - MusicDeviceMIDIEvent (audioUnit, - midiEventData[0], midiEventData[1], midiEventData[2], - midiEventPosition); - else - MusicDeviceSysEx (audioUnit, midiEventData, midiEventSize); - } - - midiMessages.clear(); - } - - AudioUnitRender (audioUnit, &flags, &timeStamp, - 0, numSamples, outputBufferList); - - timeStamp.mSampleTime += numSamples; - } - else - { - // Not initialised, so just bypass.. - for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) - buffer.clear (i, 0, buffer.getNumSamples()); - } -} - -//============================================================================== -OSStatus AudioUnitPluginInstance::getBeatAndTempo (Float64* outCurrentBeat, Float64* outCurrentTempo) const -{ - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != 0 && ph->getCurrentPosition (result)) - { - if (outCurrentBeat != 0) - *outCurrentBeat = result.ppqPosition; - - if (outCurrentTempo != 0) - *outCurrentTempo = result.bpm; - } - else - { - if (outCurrentBeat != 0) - *outCurrentBeat = 0; - - if (outCurrentTempo != 0) - *outCurrentTempo = 120.0; - } - - return noErr; -} - -OSStatus AudioUnitPluginInstance::getMusicalTimeLocation (UInt32* outDeltaSampleOffsetToNextBeat, - Float32* outTimeSig_Numerator, - UInt32* outTimeSig_Denominator, - Float64* outCurrentMeasureDownBeat) const -{ - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != 0 && ph->getCurrentPosition (result)) - { - if (outTimeSig_Numerator != 0) - *outTimeSig_Numerator = result.timeSigNumerator; - - if (outTimeSig_Denominator != 0) - *outTimeSig_Denominator = result.timeSigDenominator; - - if (outDeltaSampleOffsetToNextBeat != 0) - *outDeltaSampleOffsetToNextBeat = 0; //xxx - - if (outCurrentMeasureDownBeat != 0) - *outCurrentMeasureDownBeat = result.ppqPositionOfLastBarStart; //xxx wrong - } - else - { - if (outDeltaSampleOffsetToNextBeat != 0) - *outDeltaSampleOffsetToNextBeat = 0; - - if (outTimeSig_Numerator != 0) - *outTimeSig_Numerator = 4; - - if (outTimeSig_Denominator != 0) - *outTimeSig_Denominator = 4; - - if (outCurrentMeasureDownBeat != 0) - *outCurrentMeasureDownBeat = 0; - } - - return noErr; -} - -OSStatus AudioUnitPluginInstance::getTransportState (Boolean* outIsPlaying, - Boolean* outTransportStateChanged, - Float64* outCurrentSampleInTimeLine, - Boolean* outIsCycling, - Float64* outCycleStartBeat, - Float64* outCycleEndBeat) -{ - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != 0 && ph->getCurrentPosition (result)) - { - if (outIsPlaying != 0) - *outIsPlaying = result.isPlaying; - - if (outTransportStateChanged != 0) - { - *outTransportStateChanged = result.isPlaying != wasPlaying; - wasPlaying = result.isPlaying; - } - - if (outCurrentSampleInTimeLine != 0) - *outCurrentSampleInTimeLine = roundDoubleToInt (result.timeInSeconds * getSampleRate()); - - if (outIsCycling != 0) - *outIsCycling = false; - - if (outCycleStartBeat != 0) - *outCycleStartBeat = 0; - - if (outCycleEndBeat != 0) - *outCycleEndBeat = 0; - } - else - { - if (outIsPlaying != 0) - *outIsPlaying = false; - - if (outTransportStateChanged != 0) - *outTransportStateChanged = false; - - if (outCurrentSampleInTimeLine != 0) - *outCurrentSampleInTimeLine = 0; - - if (outIsCycling != 0) - *outIsCycling = false; - - if (outCycleStartBeat != 0) - *outCycleStartBeat = 0; - - if (outCycleEndBeat != 0) - *outCycleEndBeat = 0; - } - - return noErr; -} - - -//============================================================================== -static VoidArray activeWindows; - -class AudioUnitPluginWindowCocoa : public AudioProcessorEditor -{ -public: - AudioUnitPluginWindowCocoa (AudioUnitPluginInstance& plugin_, const bool createGenericViewIfNeeded) - : AudioProcessorEditor (&plugin_), - plugin (plugin_), - wrapper (0) - { - addAndMakeVisible (wrapper = new NSViewComponent()); - - activeWindows.add (this); - - setOpaque (true); - setVisible (true); - setSize (100, 100); - - createView (createGenericViewIfNeeded); - } - - ~AudioUnitPluginWindowCocoa() - { - const bool wasValid = isValid(); - - wrapper->setView (0); - activeWindows.removeValue (this); - - if (wasValid) - plugin.editorBeingDeleted (this); - - delete wrapper; - } - - bool isValid() const { return wrapper->getView() != 0; } - - void paint (Graphics& g) - { - g.fillAll (Colours::white); - } - - void resized() - { - wrapper->setSize (getWidth(), getHeight()); - } - -private: - AudioUnitPluginInstance& plugin; - NSViewComponent* wrapper; - - bool createView (const bool createGenericViewIfNeeded) - { - NSView* pluginView = 0; - - UInt32 dataSize = 0; - Boolean isWritable = false; - - if (AudioUnitGetPropertyInfo (plugin.audioUnit, kAudioUnitProperty_CocoaUI, kAudioUnitScope_Global, - 0, &dataSize, &isWritable) == noErr - && dataSize != 0 - && AudioUnitGetPropertyInfo (plugin.audioUnit, kAudioUnitProperty_CocoaUI, kAudioUnitScope_Global, - 0, &dataSize, &isWritable) == noErr) - { - AudioUnitCocoaViewInfo* info = (AudioUnitCocoaViewInfo*) juce_calloc (dataSize); - - if (AudioUnitGetProperty (plugin.audioUnit, kAudioUnitProperty_CocoaUI, kAudioUnitScope_Global, - 0, info, &dataSize) == noErr) - { - NSString* viewClassName = (NSString*) (info->mCocoaAUViewClass[0]); - NSString* path = (NSString*) CFURLCopyPath (info->mCocoaAUViewBundleLocation); - NSBundle* viewBundle = [NSBundle bundleWithPath: [path autorelease]]; - Class viewClass = [viewBundle classNamed: viewClassName]; - - if ([viewClass conformsToProtocol: @protocol (AUCocoaUIBase)] - && [viewClass instancesRespondToSelector: @selector (interfaceVersion)] - && [viewClass instancesRespondToSelector: @selector (uiViewForAudioUnit: withSize:)]) - { - id factory = [[[viewClass alloc] init] autorelease]; - pluginView = [factory uiViewForAudioUnit: plugin.audioUnit - withSize: NSMakeSize (getWidth(), getHeight())]; - } - - for (int i = (dataSize - sizeof (CFURLRef)) / sizeof (CFStringRef); --i >= 0;) - { - CFRelease (info->mCocoaAUViewClass[i]); - CFRelease (info->mCocoaAUViewBundleLocation); - } - } - - juce_free (info); - } - - if (createGenericViewIfNeeded && (pluginView == 0)) - pluginView = [[AUGenericView alloc] initWithAudioUnit: plugin.audioUnit]; - - wrapper->setView (pluginView); - - if (pluginView != 0) - setSize ([pluginView frame].size.width, - [pluginView frame].size.height); - - return pluginView != 0; - } -}; - -#if JUCE_SUPPORT_CARBON - -//============================================================================== -class AudioUnitPluginWindowCarbon : public AudioProcessorEditor -{ -public: - //============================================================================== - AudioUnitPluginWindowCarbon (AudioUnitPluginInstance& plugin_) - : AudioProcessorEditor (&plugin_), - plugin (plugin_), - viewComponent (0) - { - addAndMakeVisible (innerWrapper = new InnerWrapperComponent (this)); - - activeWindows.add (this); - - setOpaque (true); - setVisible (true); - setSize (400, 300); - - ComponentDescription viewList [16]; - UInt32 viewListSize = sizeof (viewList); - AudioUnitGetProperty (plugin.audioUnit, kAudioUnitProperty_GetUIComponentList, kAudioUnitScope_Global, - 0, &viewList, &viewListSize); - - componentRecord = FindNextComponent (0, &viewList[0]); - } - - ~AudioUnitPluginWindowCarbon() - { - deleteAndZero (innerWrapper); - - activeWindows.removeValue (this); - - if (isValid()) - plugin.editorBeingDeleted (this); - } - - bool isValid() const throw() { return componentRecord != 0; } - - //============================================================================== - void paint (Graphics& g) - { - g.fillAll (Colours::black); - } - - void resized() - { - innerWrapper->setSize (getWidth(), getHeight()); - } - - //============================================================================== - bool keyStateChanged (const bool) - { - return false; - } - - bool keyPressed (const KeyPress&) - { - return false; - } - - //============================================================================== - void broughtToFront() - { - activeWindows.removeValue (this); - activeWindows.add (this); - } - - //============================================================================== - AudioUnit getAudioUnit() const { return plugin.audioUnit; } - - AudioUnitCarbonView getViewComponent() - { - if (viewComponent == 0 && componentRecord != 0) - viewComponent = (AudioUnitCarbonView) OpenComponent (componentRecord); - - return viewComponent; - } - - void closeViewComponent() - { - if (viewComponent != 0) - { - CloseComponent (viewComponent); - viewComponent = 0; - } - } - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioUnitPluginInstance& plugin; - ComponentRecord* componentRecord; - AudioUnitCarbonView viewComponent; - - //============================================================================== - class InnerWrapperComponent : public CarbonViewWrapperComponent - { - public: - InnerWrapperComponent (AudioUnitPluginWindowCarbon* const owner_) - : owner (owner_) - { - } - - ~InnerWrapperComponent() - { - deleteWindow(); - } - - HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) - { - log (T("Opening AU GUI: ") + owner->plugin.getName()); - - AudioUnitCarbonView viewComponent = owner->getViewComponent(); - - if (viewComponent == 0) - return 0; - - Float32Point pos = { 0, 0 }; - Float32Point size = { 250, 200 }; - - HIViewRef pluginView = 0; - - AudioUnitCarbonViewCreate (viewComponent, - owner->getAudioUnit(), - windowRef, - rootView, - &pos, - &size, - (ControlRef*) &pluginView); - - return pluginView; - } - - void removeView (HIViewRef) - { - log (T("Closing AU GUI: ") + owner->plugin.getName()); - - owner->closeViewComponent(); - } - - private: - AudioUnitPluginWindowCarbon* const owner; - }; - - friend class InnerWrapperComponent; - InnerWrapperComponent* innerWrapper; -}; - -#endif - -//============================================================================== -AudioProcessorEditor* AudioUnitPluginInstance::createEditor() -{ - AudioProcessorEditor* w = new AudioUnitPluginWindowCocoa (*this, false); - - if (! ((AudioUnitPluginWindowCocoa*) w)->isValid()) - deleteAndZero (w); - -#if JUCE_SUPPORT_CARBON - if (w == 0) - { - w = new AudioUnitPluginWindowCarbon (*this); - - if (! ((AudioUnitPluginWindowCarbon*) w)->isValid()) - deleteAndZero (w); - } -#endif - - if (w == 0) - w = new AudioUnitPluginWindowCocoa (*this, true); // use AUGenericView as a fallback - - return w; -} - - -//============================================================================== -const String AudioUnitPluginInstance::getCategory() const -{ - const char* result = 0; - - switch (componentDesc.componentType) - { - case kAudioUnitType_Effect: - case kAudioUnitType_MusicEffect: - result = "Effect"; - break; - case kAudioUnitType_MusicDevice: - result = "Synth"; - break; - case kAudioUnitType_Generator: - result = "Generator"; - break; - case kAudioUnitType_Panner: - result = "Panner"; - break; - default: - break; - } - - return result; -} - -//============================================================================== -int AudioUnitPluginInstance::getNumParameters() -{ - return parameterIds.size(); -} - -float AudioUnitPluginInstance::getParameter (int index) -{ - const ScopedLock sl (lock); - - Float32 value = 0.0f; - - if (audioUnit != 0 && ((unsigned int) index) < (unsigned int) parameterIds.size()) - { - AudioUnitGetParameter (audioUnit, - (UInt32) parameterIds.getUnchecked (index), - kAudioUnitScope_Global, 0, - &value); - } - - return value; -} - -void AudioUnitPluginInstance::setParameter (int index, float newValue) -{ - const ScopedLock sl (lock); - - if (audioUnit != 0 && ((unsigned int) index) < (unsigned int) parameterIds.size()) - { - AudioUnitSetParameter (audioUnit, - (UInt32) parameterIds.getUnchecked (index), - kAudioUnitScope_Global, 0, - newValue, 0); - } -} - -const String AudioUnitPluginInstance::getParameterName (int index) -{ - AudioUnitParameterInfo info; - zerostruct (info); - UInt32 sz = sizeof (info); - - String name; - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_ParameterInfo, - kAudioUnitScope_Global, - parameterIds [index], &info, &sz) == noErr) - { - if ((info.flags & kAudioUnitParameterFlag_HasCFNameString) != 0) - name = PlatformUtilities::cfStringToJuceString (info.cfNameString); - else - name = String (info.name, sizeof (info.name)); - } - - return name; -} - -const String AudioUnitPluginInstance::getParameterText (int index) -{ - return String (getParameter (index)); -} - -bool AudioUnitPluginInstance::isParameterAutomatable (int index) const -{ - AudioUnitParameterInfo info; - UInt32 sz = sizeof (info); - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_ParameterInfo, - kAudioUnitScope_Global, - parameterIds [index], &info, &sz) == noErr) - { - return (info.flags & kAudioUnitParameterFlag_NonRealTime) == 0; - } - - return true; -} - -//============================================================================== -int AudioUnitPluginInstance::getNumPrograms() -{ - CFArrayRef presets; - UInt32 sz = sizeof (CFArrayRef); - int num = 0; - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, &presets, &sz) == noErr) - { - num = (int) CFArrayGetCount (presets); - CFRelease (presets); - } - - return num; -} - -int AudioUnitPluginInstance::getCurrentProgram() -{ - AUPreset current; - current.presetNumber = 0; - UInt32 sz = sizeof (AUPreset); - - AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, ¤t, &sz); - - return current.presetNumber; -} - -void AudioUnitPluginInstance::setCurrentProgram (int newIndex) -{ - AUPreset current; - current.presetNumber = newIndex; - current.presetName = 0; - - AudioUnitSetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, ¤t, sizeof (AUPreset)); -} - -const String AudioUnitPluginInstance::getProgramName (int index) -{ - String s; - CFArrayRef presets; - UInt32 sz = sizeof (CFArrayRef); - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_FactoryPresets, - kAudioUnitScope_Global, - 0, &presets, &sz) == noErr) - { - for (CFIndex i = 0; i < CFArrayGetCount (presets); ++i) - { - const AUPreset* p = (const AUPreset*) CFArrayGetValueAtIndex (presets, i); - - if (p != 0 && p->presetNumber == index) - { - s = PlatformUtilities::cfStringToJuceString (p->presetName); - break; - } - } - - CFRelease (presets); - } - - return s; -} - -void AudioUnitPluginInstance::changeProgramName (int index, const String& newName) -{ - jassertfalse // xxx not implemented! -} - -//============================================================================== -const String AudioUnitPluginInstance::getInputChannelName (const int index) const -{ - if (((unsigned int) index) < (unsigned int) getNumInputChannels()) - return T("Input ") + String (index + 1); - - return String::empty; -} - -bool AudioUnitPluginInstance::isInputChannelStereoPair (int index) const -{ - if (((unsigned int) index) >= (unsigned int) getNumInputChannels()) - return false; - - - return true; -} - -const String AudioUnitPluginInstance::getOutputChannelName (const int index) const -{ - if (((unsigned int) index) < (unsigned int) getNumOutputChannels()) - return T("Output ") + String (index + 1); - - return String::empty; -} - -bool AudioUnitPluginInstance::isOutputChannelStereoPair (int index) const -{ - if (((unsigned int) index) >= (unsigned int) getNumOutputChannels()) - return false; - - return true; -} - -//============================================================================== -void AudioUnitPluginInstance::getStateInformation (MemoryBlock& destData) -{ - getCurrentProgramStateInformation (destData); -} - -void AudioUnitPluginInstance::getCurrentProgramStateInformation (MemoryBlock& destData) -{ - CFPropertyListRef propertyList = 0; - UInt32 sz = sizeof (CFPropertyListRef); - - if (AudioUnitGetProperty (audioUnit, - kAudioUnitProperty_ClassInfo, - kAudioUnitScope_Global, - 0, &propertyList, &sz) == noErr) - { - CFWriteStreamRef stream = CFWriteStreamCreateWithAllocatedBuffers (kCFAllocatorDefault, kCFAllocatorDefault); - CFWriteStreamOpen (stream); - - CFIndex bytesWritten = CFPropertyListWriteToStream (propertyList, stream, kCFPropertyListBinaryFormat_v1_0, 0); - CFWriteStreamClose (stream); - - CFDataRef data = (CFDataRef) CFWriteStreamCopyProperty (stream, kCFStreamPropertyDataWritten); - - destData.setSize (bytesWritten); - destData.copyFrom (CFDataGetBytePtr (data), 0, destData.getSize()); - CFRelease (data); - - CFRelease (stream); - CFRelease (propertyList); - } -} - -void AudioUnitPluginInstance::setStateInformation (const void* data, int sizeInBytes) -{ - setCurrentProgramStateInformation (data, sizeInBytes); -} - -void AudioUnitPluginInstance::setCurrentProgramStateInformation (const void* data, int sizeInBytes) -{ - CFReadStreamRef stream = CFReadStreamCreateWithBytesNoCopy (kCFAllocatorDefault, - (const UInt8*) data, - sizeInBytes, - kCFAllocatorNull); - CFReadStreamOpen (stream); - - CFPropertyListFormat format = kCFPropertyListBinaryFormat_v1_0; - CFPropertyListRef propertyList = CFPropertyListCreateFromStream (kCFAllocatorDefault, - stream, - 0, - kCFPropertyListImmutable, - &format, - 0); - CFRelease (stream); - - if (propertyList != 0) - AudioUnitSetProperty (audioUnit, - kAudioUnitProperty_ClassInfo, - kAudioUnitScope_Global, - 0, &propertyList, sizeof (propertyList)); -} - -//============================================================================== -//============================================================================== -AudioUnitPluginFormat::AudioUnitPluginFormat() -{ -} - -AudioUnitPluginFormat::~AudioUnitPluginFormat() -{ -} - -void AudioUnitPluginFormat::findAllTypesForFile (OwnedArray & results, - const String& fileOrIdentifier) -{ - if (! fileMightContainThisPluginType (fileOrIdentifier)) - return; - - PluginDescription desc; - desc.fileOrIdentifier = fileOrIdentifier; - desc.uid = 0; - - AudioUnitPluginInstance* instance = dynamic_cast (createInstanceFromDescription (desc)); - - if (instance == 0) - return; - - try - { - instance->fillInPluginDescription (desc); - results.add (new PluginDescription (desc)); - } - catch (...) - { - // crashed while loading... - } - - deleteAndZero (instance); -} - -AudioPluginInstance* AudioUnitPluginFormat::createInstanceFromDescription (const PluginDescription& desc) -{ - AudioUnitPluginInstance* result = 0; - - if (fileMightContainThisPluginType (desc.fileOrIdentifier)) - { - result = new AudioUnitPluginInstance (desc.fileOrIdentifier); - - if (result->audioUnit != 0) - { - result->initialise(); - } - else - { - deleteAndZero (result); - } - } - - return result; -} - -const StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath& /*directoriesToSearch*/, - const bool /*recursive*/) -{ - StringArray result; - ComponentRecord* comp = 0; - ComponentDescription desc; - zerostruct (desc); - - for (;;) - { - zerostruct (desc); - comp = FindNextComponent (comp, &desc); - - if (comp == 0) - break; - - GetComponentInfo (comp, &desc, 0, 0, 0); - - if (desc.componentType == kAudioUnitType_MusicDevice - || desc.componentType == kAudioUnitType_MusicEffect - || desc.componentType == kAudioUnitType_Effect - || desc.componentType == kAudioUnitType_Generator - || desc.componentType == kAudioUnitType_Panner) - { - const String s (createAUPluginIdentifier (desc)); - DBG (s); - result.add (s); - } - } - - return result; -} - -bool AudioUnitPluginFormat::fileMightContainThisPluginType (const String& fileOrIdentifier) -{ - ComponentDescription desc; - - String name, version, manufacturer; - if (getComponentDescFromIdentifier (fileOrIdentifier, desc, name, version, manufacturer)) - return FindNextComponent (0, &desc) != 0; - - const File f (fileOrIdentifier); - - return f.hasFileExtension (T(".component")) - && f.isDirectory(); -} - -const String AudioUnitPluginFormat::getNameOfPluginFromIdentifier (const String& fileOrIdentifier) -{ - ComponentDescription desc; - String name, version, manufacturer; - getComponentDescFromIdentifier (fileOrIdentifier, desc, name, version, manufacturer); - - if (name.isEmpty()) - name = fileOrIdentifier; - - return name; -} - -bool AudioUnitPluginFormat::doesPluginStillExist (const PluginDescription& desc) -{ - return File (desc.fileOrIdentifier).exists(); -} - -const FileSearchPath AudioUnitPluginFormat::getDefaultLocationsToSearch() -{ - return FileSearchPath ("/(Default AudioUnit locations)"); -} - -#endif - -END_JUCE_NAMESPACE - -#undef log - -#endif diff --git a/src/juce_appframework/audio/plugins/formats/juce_DirectXPluginFormat.h b/src/juce_appframework/audio/plugins/formats/juce_DirectXPluginFormat.h deleted file mode 100644 index 2d397f2351..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_DirectXPluginFormat.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_DIRECTXPLUGINFORMAT_JUCEHEADER__ -#define __JUCE_DIRECTXPLUGINFORMAT_JUCEHEADER__ - -#include "../juce_AudioPluginFormat.h" - -#if JUCE_PLUGINHOST_DX && JUCE_WIN32 - - -// Sorry, this file is just a placeholder at the moment!... - - -//============================================================================== -/** - Implements a plugin format manager for DirectX plugins. -*/ -class JUCE_API DirectXPluginFormat : public AudioPluginFormat -{ -public: - //============================================================================== - DirectXPluginFormat(); - ~DirectXPluginFormat(); - - //============================================================================== - const String getName() const { return "DirectX"; } - void findAllTypesForFile (OwnedArray & results, const String& fileOrIdentifier); - AudioPluginInstance* createInstanceFromDescription (const PluginDescription& desc); - bool fileMightContainThisPluginType (const String& fileOrIdentifier); - const String getNameOfPluginFromIdentifier (const String& fileOrIdentifier) { return fileOrIdentifier; } - const FileSearchPath getDefaultLocationsToSearch(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - DirectXPluginFormat (const DirectXPluginFormat&); - const DirectXPluginFormat& operator= (const DirectXPluginFormat&); -}; - -#endif - -#endif // __JUCE_DIRECTXPLUGINFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/formats/juce_LADSPAPluginFormat.h b/src/juce_appframework/audio/plugins/formats/juce_LADSPAPluginFormat.h deleted file mode 100644 index e5509d9579..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_LADSPAPluginFormat.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_LADSPAPLUGINFORMAT_JUCEHEADER__ -#define __JUCE_LADSPAPLUGINFORMAT_JUCEHEADER__ - -#include "../juce_AudioPluginFormat.h" - -#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX - - -// Sorry, this file is just a placeholder at the moment!... - - -//============================================================================== -/** - Implements a plugin format manager for DirectX plugins. -*/ -class JUCE_API LADSPAPluginFormat : public AudioPluginFormat -{ -public: - //============================================================================== - LADSPAPluginFormat(); - ~LADSPAPluginFormat(); - - //============================================================================== - const String getName() const { return "LADSPA"; } - void findAllTypesForFile (OwnedArray & results, const String& fileOrIdentifier); - AudioPluginInstance* createInstanceFromDescription (const PluginDescription& desc); - bool fileMightContainThisPluginType (const String& fileOrIdentifier); - const String getNameOfPluginFromIdentifier (const String& fileOrIdentifier) { return fileOrIdentifier; } - const FileSearchPath getDefaultLocationsToSearch(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - LADSPAPluginFormat (const LADSPAPluginFormat&); - const LADSPAPluginFormat& operator= (const LADSPAPluginFormat&); -}; - -#endif - -#endif // __JUCE_LADSPAPLUGINFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/formats/juce_VSTMidiEventList.h b/src/juce_appframework/audio/plugins/formats/juce_VSTMidiEventList.h deleted file mode 100644 index d0d8dbd655..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_VSTMidiEventList.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifdef __aeffect__ - -#ifndef __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ -#define __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ - - -//============================================================================== -/** Holds a set of VSTMidiEvent objects and makes it easy to add - events to the list. - - This is used by both the VST hosting code and the plugin wrapper. -*/ -class VSTMidiEventList -{ -public: - //============================================================================== - VSTMidiEventList() - : events (0), numEventsUsed (0), numEventsAllocated (0) - { - } - - ~VSTMidiEventList() - { - freeEvents(); - } - - //============================================================================== - void clear() - { - numEventsUsed = 0; - - if (events != 0) - events->numEvents = 0; - } - - void addEvent (const void* const midiData, const int numBytes, const int frameOffset) - { - ensureSize (numEventsUsed + 1); - - VstMidiEvent* const e = (VstMidiEvent*) (events->events [numEventsUsed]); - events->numEvents = ++numEventsUsed; - - if (numBytes <= 4) - { - if (e->type == kVstSysExType) - { - juce_free (((VstMidiSysexEvent*) e)->sysexDump); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - e->noteLength = 0; - e->noteOffset = 0; - e->detune = 0; - e->noteOffVelocity = 0; - } - - e->deltaFrames = frameOffset; - memcpy (e->midiData, midiData, numBytes); - } - else - { - VstMidiSysexEvent* const se = (VstMidiSysexEvent*) e; - - if (se->type == kVstSysExType) - se->sysexDump = (char*) juce_realloc (se->sysexDump, numBytes); - else - se->sysexDump = (char*) juce_malloc (numBytes); - - memcpy (se->sysexDump, midiData, numBytes); - - se->type = kVstSysExType; - se->byteSize = sizeof (VstMidiSysexEvent); - se->deltaFrames = frameOffset; - se->flags = 0; - se->dumpBytes = numBytes; - se->resvd1 = 0; - se->resvd2 = 0; - } - } - - //============================================================================== - // Handy method to pull the events out of an event buffer supplied by the host - // or plugin. - static void addEventsToMidiBuffer (const VstEvents* events, MidiBuffer& dest) - { - for (int i = 0; i < events->numEvents; ++i) - { - const VstEvent* const e = events->events[i]; - - if (e != 0) - { - if (e->type == kVstMidiType) - { - dest.addEvent ((const JUCE_NAMESPACE::uint8*) ((const VstMidiEvent*) e)->midiData, - 4, e->deltaFrames); - } - else if (e->type == kVstSysExType) - { - dest.addEvent ((const JUCE_NAMESPACE::uint8*) ((const VstMidiSysexEvent*) e)->sysexDump, - (int) ((const VstMidiSysexEvent*) e)->dumpBytes, - e->deltaFrames); - } - } - } - } - - //============================================================================== - void ensureSize (int numEventsNeeded) - { - if (numEventsNeeded > numEventsAllocated) - { - numEventsNeeded = (numEventsNeeded + 32) & ~31; - - const int size = 20 + sizeof (VstEvent*) * numEventsNeeded; - - if (events == 0) - events = (VstEvents*) juce_calloc (size); - else - events = (VstEvents*) juce_realloc (events, size); - - for (int i = numEventsAllocated; i < numEventsNeeded; ++i) - { - VstMidiEvent* const e = (VstMidiEvent*) juce_calloc (jmax ((int) sizeof (VstMidiEvent), - (int) sizeof (VstMidiSysexEvent))); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - - events->events[i] = (VstEvent*) e; - } - - numEventsAllocated = numEventsNeeded; - } - } - - void freeEvents() - { - if (events != 0) - { - for (int i = numEventsAllocated; --i >= 0;) - { - VstMidiEvent* const e = (VstMidiEvent*) (events->events[i]); - - if (e->type == kVstSysExType) - juce_free (((VstMidiSysexEvent*) e)->sysexDump); - - juce_free (e); - } - - juce_free (events); - events = 0; - numEventsUsed = 0; - numEventsAllocated = 0; - } - } - - //============================================================================== - VstEvents* events; - -private: - int numEventsUsed, numEventsAllocated; -}; - - -#endif // __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ -#endif // __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.cpp b/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.cpp deleted file mode 100644 index d0a14cf392..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.cpp +++ /dev/null @@ -1,3037 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../../../juce_Config.h" - -#if JUCE_PLUGINHOST_VST - -#if (defined (_WIN32) || defined (_WIN64)) - #undef _WIN32_WINNT - #define _WIN32_WINNT 0x500 - #undef STRICT - #define STRICT - #include - #include - #pragma warning (disable : 4312 4355) -#elif defined (LINUX) || defined (__linux__) - #include - #include - #include - #include - #include - #undef Font - #undef KeyPress - #undef Drawable - #undef Time -#else - #ifndef JUCE_MAC_VST_INCLUDED - // On the mac, this file needs to be compiled indirectly, by using - // juce_VSTPluginFormat.mm instead - that wraps it as an objective-C file for cocoa - #error - #endif - #include - #include -#endif - -//============================================================================== -#include "../../../../juce_core/basics/juce_StandardHeader.h" - -#if ! (JUCE_MAC && JUCE_64BIT) - -BEGIN_JUCE_NAMESPACE - -#include "juce_VSTPluginFormat.h" -#include "../../../../juce_core/threads/juce_Process.h" -#include "../../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../../juce_core/basics/juce_Random.h" -#include "../../../../juce_core/io/files/juce_DirectoryIterator.h" -#include "../../../events/juce_Timer.h" -#include "../../../events/juce_AsyncUpdater.h" -#include "../../../events/juce_MessageManager.h" -#include "../../../gui/components/layout/juce_ComponentMovementWatcher.h" -#include "../../../application/juce_Application.h" -#include "../../../../juce_core/misc/juce_PlatformUtilities.h" - -#if JUCE_MAC && JUCE_SUPPORT_CARBON - #include "../../../../native/mac/juce_mac_CarbonViewWrapperComponent.h" -#endif - -//============================================================================== -#undef PRAGMA_ALIGN_SUPPORTED -#define VST_FORCE_DEPRECATED 0 - -#ifdef _MSC_VER - #pragma warning (push) - #pragma warning (disable: 4996) -#endif - -/* Obviously you're going to need the Steinberg vstsdk2.4 folder in - your include path if you want to add VST support. - - If you're not interested in VSTs, you can disable them by changing the - JUCE_PLUGINHOST_VST flag in juce_Config.h -*/ -#include "pluginterfaces/vst2.x/aeffectx.h" - -#ifdef _MSC_VER - #pragma warning (pop) -#endif - -//============================================================================== -#if JUCE_LINUX - #define Font JUCE_NAMESPACE::Font - #define KeyPress JUCE_NAMESPACE::KeyPress - #define Drawable JUCE_NAMESPACE::Drawable - #define Time JUCE_NAMESPACE::Time -#endif - -#include "../juce_PluginDescription.h" -#include "juce_VSTMidiEventList.h" - -#if ! JUCE_WIN32 - #define _fpreset() - #define _clearfp() -#endif - -extern void juce_callAnyTimersSynchronously(); - - -//============================================================================== -const int fxbVersionNum = 1; - -struct fxProgram -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxCk' - long version; - long fxID; // fx unique id - long fxVersion; - long numParams; - char prgName[28]; - float params[1]; // variable no. of parameters -}; - -struct fxSet -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxBk' - long version; - long fxID; // fx unique id - long fxVersion; - long numPrograms; - char future[128]; - fxProgram programs[1]; // variable no. of programs -}; - -struct fxChunkSet -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxCh', 'FPCh', or 'FBCh' - long version; - long fxID; // fx unique id - long fxVersion; - long numPrograms; - char future[128]; - long chunkSize; - char chunk[8]; // variable -}; - -struct fxProgramSet -{ - long chunkMagic; // 'CcnK' - long byteSize; // of this chunk, excl. magic + byteSize - long fxMagic; // 'FxCh', 'FPCh', or 'FBCh' - long version; - long fxID; // fx unique id - long fxVersion; - long numPrograms; - char name[28]; - long chunkSize; - char chunk[8]; // variable -}; - - -#ifdef JUCE_LITTLE_ENDIAN - static long vst_swap (const long x) throw() { return (long) swapByteOrder ((uint32) x); } - - static float vst_swapFloat (const float x) throw() - { - union { uint32 asInt; float asFloat; } n; - n.asFloat = x; - n.asInt = swapByteOrder (n.asInt); - return n.asFloat; - } -#else - #define vst_swap(x) (x) - #define vst_swapFloat(x) (x) -#endif - -//============================================================================== -typedef AEffect* (*MainCall) (audioMasterCallback); - -static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt); - -static int shellUIDToCreate = 0; -static int insideVSTCallback = 0; - -class VSTPluginWindow; - -//============================================================================== -// Change this to disable logging of various VST activities -#ifndef VST_LOGGING - #define VST_LOGGING 1 -#endif - -#if VST_LOGGING - #define log(a) Logger::writeToLog(a); -#else - #define log(a) -#endif - -//============================================================================== -#if JUCE_MAC && JUCE_PPC -static void* NewCFMFromMachO (void* const machofp) throw() -{ - void* result = juce_malloc (8); - - ((void**) result)[0] = machofp; - ((void**) result)[1] = result; - - return result; -} -#endif - -//============================================================================== -#if JUCE_LINUX - -extern Display* display; -extern XContext improbableNumber; - -typedef void (*EventProcPtr) (XEvent* ev); - -static bool xErrorTriggered; - -static int temporaryErrorHandler (Display*, XErrorEvent*) -{ - xErrorTriggered = true; - return 0; -} - -static int getPropertyFromXWindow (Window handle, Atom atom) -{ - XErrorHandler oldErrorHandler = XSetErrorHandler (temporaryErrorHandler); - xErrorTriggered = false; - - int userSize; - unsigned long bytes, userCount; - unsigned char* data; - Atom userType; - - XGetWindowProperty (display, handle, atom, 0, 1, false, AnyPropertyType, - &userType, &userSize, &userCount, &bytes, &data); - - XSetErrorHandler (oldErrorHandler); - - return (userCount == 1 && ! xErrorTriggered) ? *(int*) data - : 0; -} - -static Window getChildWindow (Window windowToCheck) -{ - Window rootWindow, parentWindow; - Window* childWindows; - unsigned int numChildren; - - XQueryTree (display, - windowToCheck, - &rootWindow, - &parentWindow, - &childWindows, - &numChildren); - - if (numChildren > 0) - return childWindows [0]; - - return 0; -} - -static void translateJuceToXButtonModifiers (const MouseEvent& e, XEvent& ev) throw() -{ - if (e.mods.isLeftButtonDown()) - { - ev.xbutton.button = Button1; - ev.xbutton.state |= Button1Mask; - } - else if (e.mods.isRightButtonDown()) - { - ev.xbutton.button = Button3; - ev.xbutton.state |= Button3Mask; - } - else if (e.mods.isMiddleButtonDown()) - { - ev.xbutton.button = Button2; - ev.xbutton.state |= Button2Mask; - } -} - -static void translateJuceToXMotionModifiers (const MouseEvent& e, XEvent& ev) throw() -{ - if (e.mods.isLeftButtonDown()) - ev.xmotion.state |= Button1Mask; - else if (e.mods.isRightButtonDown()) - ev.xmotion.state |= Button3Mask; - else if (e.mods.isMiddleButtonDown()) - ev.xmotion.state |= Button2Mask; -} - -static void translateJuceToXCrossingModifiers (const MouseEvent& e, XEvent& ev) throw() -{ - if (e.mods.isLeftButtonDown()) - ev.xcrossing.state |= Button1Mask; - else if (e.mods.isRightButtonDown()) - ev.xcrossing.state |= Button3Mask; - else if (e.mods.isMiddleButtonDown()) - ev.xcrossing.state |= Button2Mask; -} - -static void translateJuceToXMouseWheelModifiers (const MouseEvent& e, const float increment, XEvent& ev) throw() -{ - if (increment < 0) - { - ev.xbutton.button = Button5; - ev.xbutton.state |= Button5Mask; - } - else if (increment > 0) - { - ev.xbutton.button = Button4; - ev.xbutton.state |= Button4Mask; - } -} - -#endif - -//============================================================================== -static VoidArray activeModules; - -//============================================================================== -class ModuleHandle : public ReferenceCountedObject -{ -public: - //============================================================================== - File file; - MainCall moduleMain; - String pluginName; - - //============================================================================== - static ModuleHandle* findOrCreateModule (const File& file) - { - for (int i = activeModules.size(); --i >= 0;) - { - ModuleHandle* const module = (ModuleHandle*) activeModules.getUnchecked(i); - - if (module->file == file) - return module; - } - - _fpreset(); // (doesn't do any harm) - ++insideVSTCallback; - shellUIDToCreate = 0; - - log ("Attempting to load VST: " + file.getFullPathName()); - - ModuleHandle* m = new ModuleHandle (file); - - if (! m->open()) - deleteAndZero (m); - - --insideVSTCallback; - _fpreset(); // (doesn't do any harm) - - return m; - } - - //============================================================================== - ModuleHandle (const File& file_) - : file (file_), - moduleMain (0), -#if JUCE_WIN32 || JUCE_LINUX - hModule (0) -#elif JUCE_MAC - fragId (0), - resHandle (0), - bundleRef (0), - resFileId (0) -#endif - { - activeModules.add (this); - -#if JUCE_WIN32 || JUCE_LINUX - fullParentDirectoryPathName = file_.getParentDirectory().getFullPathName(); -#elif JUCE_MAC - FSRef ref; - PlatformUtilities::makeFSRefFromPath (&ref, file_.getParentDirectory().getFullPathName()); - FSGetCatalogInfo (&ref, kFSCatInfoNone, 0, 0, &parentDirFSSpec, 0); -#endif - } - - ~ModuleHandle() - { - activeModules.removeValue (this); - - close(); - } - - //============================================================================== - juce_UseDebuggingNewOperator - - //============================================================================== -#if JUCE_WIN32 || JUCE_LINUX - void* hModule; - String fullParentDirectoryPathName; - - bool open() - { -#if JUCE_WIN32 - static bool timePeriodSet = false; - - if (! timePeriodSet) - { - timePeriodSet = true; - timeBeginPeriod (2); - } -#endif - - pluginName = file.getFileNameWithoutExtension(); - - hModule = PlatformUtilities::loadDynamicLibrary (file.getFullPathName()); - - moduleMain = (MainCall) PlatformUtilities::getProcedureEntryPoint (hModule, "VSTPluginMain"); - - if (moduleMain == 0) - moduleMain = (MainCall) PlatformUtilities::getProcedureEntryPoint (hModule, "main"); - - return moduleMain != 0; - } - - void close() - { - _fpreset(); // (doesn't do any harm) - - PlatformUtilities::freeDynamicLibrary (hModule); - } - - void closeEffect (AEffect* eff) - { - eff->dispatcher (eff, effClose, 0, 0, 0, 0); - } - -#else - CFragConnectionID fragId; - Handle resHandle; - CFBundleRef bundleRef; - FSSpec parentDirFSSpec; - short resFileId; - - bool open() - { - bool ok = false; - const String filename (file.getFullPathName()); - - if (file.hasFileExtension (T(".vst"))) - { - const char* const utf8 = filename.toUTF8(); - CFURLRef url = CFURLCreateFromFileSystemRepresentation (0, (const UInt8*) utf8, - strlen (utf8), file.isDirectory()); - - if (url != 0) - { - bundleRef = CFBundleCreate (kCFAllocatorDefault, url); - CFRelease (url); - - if (bundleRef != 0) - { - if (CFBundleLoadExecutable (bundleRef)) - { - moduleMain = (MainCall) CFBundleGetFunctionPointerForName (bundleRef, CFSTR("main_macho")); - - if (moduleMain == 0) - moduleMain = (MainCall) CFBundleGetFunctionPointerForName (bundleRef, CFSTR("VSTPluginMain")); - - if (moduleMain != 0) - { - CFTypeRef name = CFBundleGetValueForInfoDictionaryKey (bundleRef, CFSTR("CFBundleName")); - - if (name != 0) - { - if (CFGetTypeID (name) == CFStringGetTypeID()) - { - char buffer[1024]; - - if (CFStringGetCString ((CFStringRef) name, buffer, sizeof (buffer), CFStringGetSystemEncoding())) - pluginName = buffer; - } - } - - if (pluginName.isEmpty()) - pluginName = file.getFileNameWithoutExtension(); - - resFileId = CFBundleOpenBundleResourceMap (bundleRef); - - ok = true; - } - } - - if (! ok) - { - CFBundleUnloadExecutable (bundleRef); - CFRelease (bundleRef); - bundleRef = 0; - } - } - } - } -#if JUCE_PPC - else - { - FSRef fn; - - if (FSPathMakeRef ((UInt8*) (const char*) filename, &fn, 0) == noErr) - { - resFileId = FSOpenResFile (&fn, fsRdPerm); - - if (resFileId != -1) - { - const int numEffs = Count1Resources ('aEff'); - - for (int i = 0; i < numEffs; ++i) - { - resHandle = Get1IndResource ('aEff', i + 1); - - if (resHandle != 0) - { - OSType type; - Str255 name; - SInt16 id; - GetResInfo (resHandle, &id, &type, name); - pluginName = String ((const char*) name + 1, name[0]); - DetachResource (resHandle); - HLock (resHandle); - - Ptr ptr; - Str255 errorText; - - OSErr err = GetMemFragment (*resHandle, GetHandleSize (resHandle), - name, kPrivateCFragCopy, - &fragId, &ptr, errorText); - - if (err == noErr) - { - moduleMain = (MainCall) newMachOFromCFM (ptr); - ok = true; - } - else - { - HUnlock (resHandle); - } - - break; - } - } - - if (! ok) - CloseResFile (resFileId); - } - } - } -#endif - - return ok; - } - - void close() - { -#if JUCE_PPC - if (fragId != 0) - { - if (moduleMain != 0) - disposeMachOFromCFM ((void*) moduleMain); - - CloseConnection (&fragId); - HUnlock (resHandle); - - if (resFileId != 0) - CloseResFile (resFileId); - } - else -#endif - if (bundleRef != 0) - { - CFBundleCloseBundleResourceMap (bundleRef, resFileId); - - if (CFGetRetainCount (bundleRef) == 1) - CFBundleUnloadExecutable (bundleRef); - - if (CFGetRetainCount (bundleRef) > 0) - CFRelease (bundleRef); - } - } - - void closeEffect (AEffect* eff) - { -#if JUCE_PPC - if (fragId != 0) - { - VoidArray thingsToDelete; - thingsToDelete.add ((void*) eff->dispatcher); - thingsToDelete.add ((void*) eff->process); - thingsToDelete.add ((void*) eff->setParameter); - thingsToDelete.add ((void*) eff->getParameter); - thingsToDelete.add ((void*) eff->processReplacing); - - eff->dispatcher (eff, effClose, 0, 0, 0, 0); - - for (int i = thingsToDelete.size(); --i >= 0;) - disposeMachOFromCFM (thingsToDelete[i]); - } - else -#endif - { - eff->dispatcher (eff, effClose, 0, 0, 0, 0); - } - } - -#if JUCE_PPC - static void* newMachOFromCFM (void* cfmfp) - { - if (cfmfp == 0) - return 0; - - UInt32* const mfp = (UInt32*) juce_malloc (sizeof (UInt32) * 6); - - mfp[0] = 0x3d800000 | ((UInt32) cfmfp >> 16); - mfp[1] = 0x618c0000 | ((UInt32) cfmfp & 0xffff); - mfp[2] = 0x800c0000; - mfp[3] = 0x804c0004; - mfp[4] = 0x7c0903a6; - mfp[5] = 0x4e800420; - - MakeDataExecutable (mfp, sizeof (UInt32) * 6); - return mfp; - } - - static void disposeMachOFromCFM (void* ptr) - { - juce_free (ptr); - } - - void coerceAEffectFunctionCalls (AEffect* eff) - { - if (fragId != 0) - { - eff->dispatcher = (AEffectDispatcherProc) newMachOFromCFM ((void*) eff->dispatcher); - eff->process = (AEffectProcessProc) newMachOFromCFM ((void*) eff->process); - eff->setParameter = (AEffectSetParameterProc) newMachOFromCFM ((void*) eff->setParameter); - eff->getParameter = (AEffectGetParameterProc) newMachOFromCFM ((void*) eff->getParameter); - eff->processReplacing = (AEffectProcessProc) newMachOFromCFM ((void*) eff->processReplacing); - } - } -#endif - -#endif -}; - - -//============================================================================== -/** - An instance of a plugin, created by a VSTPluginFormat. - -*/ -class VSTPluginInstance : public AudioPluginInstance, - private Timer, - private AsyncUpdater -{ -public: - //============================================================================== - ~VSTPluginInstance(); - - //============================================================================== - // AudioPluginInstance methods: - - void fillInPluginDescription (PluginDescription& desc) const - { - desc.name = name; - desc.fileOrIdentifier = module->file.getFullPathName(); - desc.uid = getUID(); - desc.lastFileModTime = module->file.getLastModificationTime(); - desc.pluginFormatName = "VST"; - desc.category = getCategory(); - - { - char buffer [kVstMaxVendorStrLen + 8]; - zerostruct (buffer); - dispatch (effGetVendorString, 0, 0, buffer, 0); - desc.manufacturerName = buffer; - } - - desc.version = getVersion(); - desc.numInputChannels = getNumInputChannels(); - desc.numOutputChannels = getNumOutputChannels(); - desc.isInstrument = (effect != 0 && (effect->flags & effFlagsIsSynth) != 0); - } - - const String getName() const { return name; } - int getUID() const throw(); - bool acceptsMidi() const { return wantsMidiMessages; } - bool producesMidi() const { return dispatch (effCanDo, 0, 0, (void*) "sendVstMidiEvent", 0) > 0; } - - //============================================================================== - // AudioProcessor methods: - - void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock); - void releaseResources(); - void processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages); - - AudioProcessorEditor* createEditor(); - - const String getInputChannelName (const int index) const; - bool isInputChannelStereoPair (int index) const; - - const String getOutputChannelName (const int index) const; - bool isOutputChannelStereoPair (int index) const; - - //============================================================================== - int getNumParameters() { return effect != 0 ? effect->numParams : 0; } - float getParameter (int index); - void setParameter (int index, float newValue); - const String getParameterName (int index); - const String getParameterText (int index); - bool isParameterAutomatable (int index) const; - - //============================================================================== - int getNumPrograms() { return effect != 0 ? effect->numPrograms : 0; } - int getCurrentProgram() { return dispatch (effGetProgram, 0, 0, 0, 0); } - void setCurrentProgram (int index); - const String getProgramName (int index); - void changeProgramName (int index, const String& newName); - - //============================================================================== - void getStateInformation (MemoryBlock& destData); - void getCurrentProgramStateInformation (MemoryBlock& destData); - void setStateInformation (const void* data, int sizeInBytes); - void setCurrentProgramStateInformation (const void* data, int sizeInBytes); - - //============================================================================== - void timerCallback(); - void handleAsyncUpdate(); - VstIntPtr handleCallback (VstInt32 opcode, VstInt32 index, VstInt32 value, void *ptr, float opt); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - friend class VSTPluginWindow; - friend class VSTPluginFormat; - - AEffect* effect; - String name; - CriticalSection lock; - bool wantsMidiMessages, initialised, isPowerOn; - mutable StringArray programNames; - AudioSampleBuffer tempBuffer; - CriticalSection midiInLock; - MidiBuffer incomingMidi; - VSTMidiEventList midiEventsToSend; - VstTimeInfo vstHostTime; - float** channels; - - ReferenceCountedObjectPtr module; - - //============================================================================== - int dispatch (const int opcode, const int index, const int value, void* const ptr, float opt) const; - bool restoreProgramSettings (const fxProgram* const prog); - const String getCurrentProgramName(); - void setParamsInProgramBlock (fxProgram* const prog) throw(); - void updateStoredProgramNames(); - void initialise(); - void handleMidiFromPlugin (const VstEvents* const events); - void createTempParameterStore (MemoryBlock& dest); - void restoreFromTempParameterStore (const MemoryBlock& mb); - const String getParameterLabel (int index) const; - - bool usesChunks() const throw() { return effect != 0 && (effect->flags & effFlagsProgramChunks) != 0; } - void getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const; - void setChunkData (const char* data, int size, bool isPreset); - bool loadFromFXBFile (const void* data, int numBytes); - bool saveToFXBFile (MemoryBlock& dest, bool isFXB, int maxSizeMB); - - int getVersionNumber() const throw() { return effect != 0 ? effect->version : 0; } - const String getVersion() const throw(); - const String getCategory() const throw(); - - bool hasEditor() const throw() { return effect != 0 && (effect->flags & effFlagsHasEditor) != 0; } - void setPower (const bool on); - - VSTPluginInstance (const ReferenceCountedObjectPtr & module); -}; - -//============================================================================== -VSTPluginInstance::VSTPluginInstance (const ReferenceCountedObjectPtr & module_) - : effect (0), - wantsMidiMessages (false), - initialised (false), - isPowerOn (false), - tempBuffer (1, 1), - channels (0), - module (module_) -{ - try - { - _fpreset(); - - ++insideVSTCallback; - - name = module->pluginName; - log (T("Creating VST instance: ") + name); - -#if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); - -#if JUCE_PPC - if (module->fragId != 0) - { - static void* audioMasterCoerced = 0; - if (audioMasterCoerced == 0) - audioMasterCoerced = NewCFMFromMachO ((void*) &audioMaster); - - effect = module->moduleMain ((audioMasterCallback) audioMasterCoerced); - } - else -#endif -#endif - { - effect = module->moduleMain (&audioMaster); - } - - --insideVSTCallback; - - if (effect != 0 && effect->magic == kEffectMagic) - { -#if JUCE_PPC - module->coerceAEffectFunctionCalls (effect); -#endif - - jassert (effect->resvd2 == 0); - jassert (effect->object != 0); - - _fpreset(); // some dodgy plugs fuck around with this - } - else - { - effect = 0; - } - } - catch (...) - { - --insideVSTCallback; - } -} - -VSTPluginInstance::~VSTPluginInstance() -{ - { - const ScopedLock sl (lock); - - jassert (insideVSTCallback == 0); - - if (effect != 0 && effect->magic == kEffectMagic) - { - try - { -#if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); -#endif - - // Must delete any editors before deleting the plugin instance! - jassert (getActiveEditor() == 0); - - _fpreset(); // some dodgy plugs fuck around with this - - module->closeEffect (effect); - } - catch (...) - {} - } - - module = 0; - effect = 0; - } - - juce_free (channels); - channels = 0; -} - -//============================================================================== -void VSTPluginInstance::initialise() -{ - if (initialised || effect == 0) - return; - - log (T("Initialising VST: ") + module->pluginName); - initialised = true; - - dispatch (effIdentify, 0, 0, 0, 0); - - // this code would ask the plugin for its name, but so few plugins - // actually bother implementing this correctly, that it's better to - // just ignore it and use the file name instead. -/* { - char buffer [256]; - zerostruct (buffer); - dispatch (effGetEffectName, 0, 0, buffer, 0); - - name = String (buffer).trim(); - if (name.isEmpty()) - name = module->pluginName; - } -*/ - - if (getSampleRate() > 0) - dispatch (effSetSampleRate, 0, 0, 0, (float) getSampleRate()); - - if (getBlockSize() > 0) - dispatch (effSetBlockSize, 0, jmax (32, getBlockSize()), 0, 0); - - dispatch (effOpen, 0, 0, 0, 0); - - setPlayConfigDetails (effect->numInputs, effect->numOutputs, - getSampleRate(), getBlockSize()); - - if (getNumPrograms() > 1) - setCurrentProgram (0); - else - dispatch (effSetProgram, 0, 0, 0, 0); - - int i; - for (i = effect->numInputs; --i >= 0;) - dispatch (effConnectInput, i, 1, 0, 0); - - for (i = effect->numOutputs; --i >= 0;) - dispatch (effConnectOutput, i, 1, 0, 0); - - updateStoredProgramNames(); - - wantsMidiMessages = dispatch (effCanDo, 0, 0, (void*) "receiveVstMidiEvent", 0) > 0; - - setLatencySamples (effect->initialDelay); -} - - -//============================================================================== -void VSTPluginInstance::prepareToPlay (double sampleRate_, - int samplesPerBlockExpected) -{ - setPlayConfigDetails (effect->numInputs, effect->numOutputs, - sampleRate_, samplesPerBlockExpected); - - setLatencySamples (effect->initialDelay); - - juce_free (channels); - channels = (float**) juce_calloc (sizeof (float*) * jmax (16, getNumOutputChannels() + 2, getNumInputChannels() + 2)); - - vstHostTime.tempo = 120.0; - vstHostTime.timeSigNumerator = 4; - vstHostTime.timeSigDenominator = 4; - vstHostTime.sampleRate = sampleRate_; - vstHostTime.samplePos = 0; - vstHostTime.flags = kVstNanosValid; /*| kVstTransportPlaying | kVstTempoValid | kVstTimeSigValid*/; - - initialise(); - - if (initialised) - { - wantsMidiMessages = wantsMidiMessages - || (dispatch (effCanDo, 0, 0, (void*) "receiveVstMidiEvent", 0) > 0); - - if (wantsMidiMessages) - midiEventsToSend.ensureSize (256); - else - midiEventsToSend.freeEvents(); - - incomingMidi.clear(); - - dispatch (effSetSampleRate, 0, 0, 0, (float) sampleRate_); - dispatch (effSetBlockSize, 0, jmax (16, samplesPerBlockExpected), 0, 0); - - tempBuffer.setSize (jmax (1, effect->numOutputs), samplesPerBlockExpected); - - if (! isPowerOn) - setPower (true); - - // dodgy hack to force some plugins to initialise the sample rate.. - if ((! hasEditor()) && getNumParameters() > 0) - { - const float old = getParameter (0); - setParameter (0, (old < 0.5f) ? 1.0f : 0.0f); - setParameter (0, old); - } - - dispatch (effStartProcess, 0, 0, 0, 0); - } -} - -void VSTPluginInstance::releaseResources() -{ - if (initialised) - { - dispatch (effStopProcess, 0, 0, 0, 0); - setPower (false); - } - - tempBuffer.setSize (1, 1); - incomingMidi.clear(); - - midiEventsToSend.freeEvents(); - juce_free (channels); - channels = 0; -} - -void VSTPluginInstance::processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) -{ - const int numSamples = buffer.getNumSamples(); - - if (initialised) - { - AudioPlayHead* playHead = getPlayHead(); - - if (playHead != 0) - { - AudioPlayHead::CurrentPositionInfo position; - playHead->getCurrentPosition (position); - - vstHostTime.tempo = position.bpm; - vstHostTime.timeSigNumerator = position.timeSigNumerator; - vstHostTime.timeSigDenominator = position.timeSigDenominator; - vstHostTime.ppqPos = position.ppqPosition; - vstHostTime.barStartPos = position.ppqPositionOfLastBarStart; - vstHostTime.flags |= kVstTempoValid | kVstTimeSigValid | kVstPpqPosValid | kVstBarsValid; - - if (position.isPlaying) - vstHostTime.flags |= kVstTransportPlaying; - else - vstHostTime.flags &= ~kVstTransportPlaying; - } - -#if JUCE_WIN32 - vstHostTime.nanoSeconds = timeGetTime() * 1000000.0; -#elif JUCE_LINUX - timeval micro; - gettimeofday (µ, 0); - vstHostTime.nanoSeconds = micro.tv_usec * 1000.0; -#elif JUCE_MAC - UnsignedWide micro; - Microseconds (µ); - vstHostTime.nanoSeconds = micro.lo * 1000.0; -#endif - - if (wantsMidiMessages) - { - midiEventsToSend.clear(); - midiEventsToSend.ensureSize (1); - - MidiBuffer::Iterator iter (midiMessages); - const uint8* midiData; - int numBytesOfMidiData, samplePosition; - - while (iter.getNextEvent (midiData, numBytesOfMidiData, samplePosition)) - { - midiEventsToSend.addEvent (midiData, numBytesOfMidiData, - jlimit (0, numSamples - 1, samplePosition)); - } - - try - { - effect->dispatcher (effect, effProcessEvents, 0, 0, midiEventsToSend.events, 0); - } - catch (...) - {} - } - - int i; - const int maxChans = jmax (effect->numInputs, effect->numOutputs); - - for (i = 0; i < maxChans; ++i) - channels[i] = buffer.getSampleData (i); - - channels [maxChans] = 0; - - _clearfp(); - - if ((effect->flags & effFlagsCanReplacing) != 0) - { - try - { - effect->processReplacing (effect, channels, channels, numSamples); - } - catch (...) - {} - } - else - { - tempBuffer.setSize (effect->numOutputs, numSamples); - tempBuffer.clear(); - - float* outs [64]; - - for (i = effect->numOutputs; --i >= 0;) - outs[i] = tempBuffer.getSampleData (i); - - outs [effect->numOutputs] = 0; - - try - { - effect->process (effect, channels, outs, numSamples); - } - catch (...) - {} - - for (i = effect->numOutputs; --i >= 0;) - buffer.copyFrom (i, 0, outs[i], numSamples); - } - } - else - { - // Not initialised, so just bypass.. - for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) - buffer.clear (i, 0, buffer.getNumSamples()); - } - - { - // copy any incoming midi.. - const ScopedLock sl (midiInLock); - - midiMessages = incomingMidi; - incomingMidi.clear(); - } -} - -//============================================================================== -void VSTPluginInstance::handleMidiFromPlugin (const VstEvents* const events) -{ - if (events != 0) - { - const ScopedLock sl (midiInLock); - VSTMidiEventList::addEventsToMidiBuffer (events, incomingMidi); - } -} - -//============================================================================== -static Array activeVSTWindows; - -//============================================================================== -class VSTPluginWindow : public AudioProcessorEditor, - #if ! JUCE_MAC - public ComponentMovementWatcher, - #endif - public Timer -{ -public: - //============================================================================== - VSTPluginWindow (VSTPluginInstance& plugin_) - : AudioProcessorEditor (&plugin_), -#if ! JUCE_MAC - ComponentMovementWatcher (this), -#endif - plugin (plugin_), - isOpen (false), - wasShowing (false), - pluginRefusesToResize (false), - pluginWantsKeys (false), - alreadyInside (false), - recursiveResize (false) - { -#if JUCE_WIN32 - sizeCheckCount = 0; - pluginHWND = 0; -#elif JUCE_LINUX - pluginWindow = None; - pluginProc = None; -#else - addAndMakeVisible (innerWrapper = new InnerWrapperComponent (this)); -#endif - - activeVSTWindows.add (this); - - setSize (1, 1); - setOpaque (true); - setVisible (true); - } - - ~VSTPluginWindow() - { -#if JUCE_MAC - deleteAndZero (innerWrapper); -#else - closePluginWindow(); -#endif - activeVSTWindows.removeValue (this); - plugin.editorBeingDeleted (this); - } - - //============================================================================== -#if ! JUCE_MAC - void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) - { - if (recursiveResize) - return; - - Component* const topComp = getTopLevelComponent(); - - if (topComp->getPeer() != 0) - { - int x = 0, y = 0; - relativePositionToOtherComponent (topComp, x, y); - - recursiveResize = true; - -#if JUCE_WIN32 - if (pluginHWND != 0) - MoveWindow (pluginHWND, x, y, getWidth(), getHeight(), TRUE); -#elif JUCE_LINUX - if (pluginWindow != 0) - { - XResizeWindow (display, pluginWindow, getWidth(), getHeight()); - XMoveWindow (display, pluginWindow, x, y); - XMapRaised (display, pluginWindow); - } -#endif - - recursiveResize = false; - } - } - - void componentVisibilityChanged (Component&) - { - const bool isShowingNow = isShowing(); - - if (wasShowing != isShowingNow) - { - wasShowing = isShowingNow; - - if (isShowingNow) - openPluginWindow(); - else - closePluginWindow(); - } - - componentMovedOrResized (true, true); - } - - void componentPeerChanged() - { - closePluginWindow(); - openPluginWindow(); - } -#endif - - //============================================================================== - bool keyStateChanged (const bool) - { - return pluginWantsKeys; - } - - bool keyPressed (const KeyPress&) - { - return pluginWantsKeys; - } - - //============================================================================== -#if JUCE_MAC - void paint (Graphics& g) - { - g.fillAll (Colours::black); - } -#else - void paint (Graphics& g) - { - if (isOpen) - { - ComponentPeer* const peer = getPeer(); - - if (peer != 0) - { - peer->addMaskedRegion (getScreenX() - peer->getScreenX(), - getScreenY() - peer->getScreenY(), - getWidth(), getHeight()); - -#if JUCE_LINUX - if (pluginWindow != 0) - { - const Rectangle clip (g.getClipBounds()); - - XEvent ev; - zerostruct (ev); - ev.xexpose.type = Expose; - ev.xexpose.display = display; - ev.xexpose.window = pluginWindow; - ev.xexpose.x = clip.getX(); - ev.xexpose.y = clip.getY(); - ev.xexpose.width = clip.getWidth(); - ev.xexpose.height = clip.getHeight(); - - sendEventToChild (&ev); - } -#endif - } - } - else - { - g.fillAll (Colours::black); - } - } -#endif - - //============================================================================== - void timerCallback() - { -#if JUCE_WIN32 - if (--sizeCheckCount <= 0) - { - sizeCheckCount = 10; - - checkPluginWindowSize(); - } -#endif - - try - { - static bool reentrant = false; - - if (! reentrant) - { - reentrant = true; - plugin.dispatch (effEditIdle, 0, 0, 0, 0); - reentrant = false; - } - } - catch (...) - {} - } - - //============================================================================== - void mouseDown (const MouseEvent& e) - { -#if JUCE_LINUX - if (pluginWindow == 0) - return; - - toFront (true); - - XEvent ev; - zerostruct (ev); - ev.xbutton.display = display; - ev.xbutton.type = ButtonPress; - ev.xbutton.window = pluginWindow; - ev.xbutton.root = RootWindow (display, DefaultScreen (display)); - ev.xbutton.time = CurrentTime; - ev.xbutton.x = e.x; - ev.xbutton.y = e.y; - ev.xbutton.x_root = e.getScreenX(); - ev.xbutton.y_root = e.getScreenY(); - - translateJuceToXButtonModifiers (e, ev); - - sendEventToChild (&ev); - -#elif JUCE_WIN32 - (void) e; - - toFront (true); -#endif - } - - void broughtToFront() - { - activeVSTWindows.removeValue (this); - activeVSTWindows.add (this); - -#if JUCE_MAC - dispatch (effEditTop, 0, 0, 0, 0); -#endif - } - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - VSTPluginInstance& plugin; - bool isOpen, wasShowing, recursiveResize; - bool pluginWantsKeys, pluginRefusesToResize, alreadyInside; - -#if JUCE_WIN32 - HWND pluginHWND; - void* originalWndProc; - int sizeCheckCount; -#elif JUCE_LINUX - Window pluginWindow; - EventProcPtr pluginProc; -#endif - - //============================================================================== -#if JUCE_MAC - void openPluginWindow (WindowRef parentWindow) - { - if (isOpen || parentWindow == 0) - return; - - isOpen = true; - - ERect* rect = 0; - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effEditOpen, 0, 0, parentWindow, 0); - - // do this before and after like in the steinberg example - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effGetProgram, 0, 0, 0, 0); // also in steinberg code - - // Install keyboard hooks - pluginWantsKeys = (dispatch (effKeysRequired, 0, 0, 0, 0) == 0); - - // double-check it's not too tiny - int w = 250, h = 150; - - if (rect != 0) - { - w = rect->right - rect->left; - h = rect->bottom - rect->top; - - if (w == 0 || h == 0) - { - w = 250; - h = 150; - } - } - - w = jmax (w, 32); - h = jmax (h, 32); - - setSize (w, h); - - startTimer (18 + JUCE_NAMESPACE::Random::getSystemRandom().nextInt (5)); - repaint(); - } - -#else - void openPluginWindow() - { - if (isOpen || getWindowHandle() == 0) - return; - - log (T("Opening VST UI: ") + plugin.name); - isOpen = true; - - ERect* rect = 0; - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effEditOpen, 0, 0, getWindowHandle(), 0); - - // do this before and after like in the steinberg example - dispatch (effEditGetRect, 0, 0, &rect, 0); - dispatch (effGetProgram, 0, 0, 0, 0); // also in steinberg code - - // Install keyboard hooks - pluginWantsKeys = (dispatch (effKeysRequired, 0, 0, 0, 0) == 0); - -#if JUCE_WIN32 - originalWndProc = 0; - pluginHWND = GetWindow ((HWND) getWindowHandle(), GW_CHILD); - - if (pluginHWND == 0) - { - isOpen = false; - setSize (300, 150); - return; - } - - #pragma warning (push) - #pragma warning (disable: 4244) - - originalWndProc = (void*) GetWindowLongPtr (pluginHWND, GWL_WNDPROC); - - if (! pluginWantsKeys) - SetWindowLongPtr (pluginHWND, GWL_WNDPROC, (LONG_PTR) vstHookWndProc); - - #pragma warning (pop) - - int w, h; - RECT r; - GetWindowRect (pluginHWND, &r); - w = r.right - r.left; - h = r.bottom - r.top; - - if (rect != 0) - { - const int rw = rect->right - rect->left; - const int rh = rect->bottom - rect->top; - - if ((rw > 50 && rh > 50 && rw < 2000 && rh < 2000 && rw != w && rh != h) - || ((w == 0 && rw > 0) || (h == 0 && rh > 0))) - { - // very dodgy logic to decide which size is right. - if (abs (rw - w) > 350 || abs (rh - h) > 350) - { - SetWindowPos (pluginHWND, 0, - 0, 0, rw, rh, - SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER); - - GetWindowRect (pluginHWND, &r); - - w = r.right - r.left; - h = r.bottom - r.top; - - pluginRefusesToResize = (w != rw) || (h != rh); - - w = rw; - h = rh; - } - } - } - -#elif JUCE_LINUX - pluginWindow = getChildWindow ((Window) getWindowHandle()); - - if (pluginWindow != 0) - pluginProc = (EventProcPtr) getPropertyFromXWindow (pluginWindow, - XInternAtom (display, "_XEventProc", False)); - - int w = 250, h = 150; - - if (rect != 0) - { - w = rect->right - rect->left; - h = rect->bottom - rect->top; - - if (w == 0 || h == 0) - { - w = 250; - h = 150; - } - } - - if (pluginWindow != 0) - XMapRaised (display, pluginWindow); -#endif - - // double-check it's not too tiny - w = jmax (w, 32); - h = jmax (h, 32); - - setSize (w, h); - -#if JUCE_WIN32 - checkPluginWindowSize(); -#endif - - startTimer (18 + JUCE_NAMESPACE::Random::getSystemRandom().nextInt (5)); - repaint(); - } -#endif - - //============================================================================== -#if ! JUCE_MAC - void closePluginWindow() - { - if (isOpen) - { - log (T("Closing VST UI: ") + plugin.getName()); - isOpen = false; - - dispatch (effEditClose, 0, 0, 0, 0); - -#if JUCE_WIN32 - #pragma warning (push) - #pragma warning (disable: 4244) - - if (pluginHWND != 0 && IsWindow (pluginHWND)) - SetWindowLongPtr (pluginHWND, GWL_WNDPROC, (LONG_PTR) originalWndProc); - - #pragma warning (pop) - - stopTimer(); - - if (pluginHWND != 0 && IsWindow (pluginHWND)) - DestroyWindow (pluginHWND); - - pluginHWND = 0; -#elif JUCE_LINUX - stopTimer(); - pluginWindow = 0; - pluginProc = 0; -#endif - } - } -#endif - - //============================================================================== - int dispatch (const int opcode, const int index, const int value, void* const ptr, float opt) - { - return plugin.dispatch (opcode, index, value, ptr, opt); - } - - //============================================================================== -#if JUCE_WIN32 - void checkPluginWindowSize() throw() - { - RECT r; - GetWindowRect (pluginHWND, &r); - const int w = r.right - r.left; - const int h = r.bottom - r.top; - - if (isShowing() && w > 0 && h > 0 - && (w != getWidth() || h != getHeight()) - && ! pluginRefusesToResize) - { - setSize (w, h); - sizeCheckCount = 0; - } - } - - // hooks to get keyboard events from VST windows.. - static LRESULT CALLBACK vstHookWndProc (HWND hW, UINT message, WPARAM wParam, LPARAM lParam) - { - for (int i = activeVSTWindows.size(); --i >= 0;) - { - const VSTPluginWindow* const w = (const VSTPluginWindow*) activeVSTWindows.getUnchecked (i); - - if (w->pluginHWND == hW) - { - if (message == WM_CHAR - || message == WM_KEYDOWN - || message == WM_SYSKEYDOWN - || message == WM_KEYUP - || message == WM_SYSKEYUP - || message == WM_APPCOMMAND) - { - SendMessage ((HWND) w->getTopLevelComponent()->getWindowHandle(), - message, wParam, lParam); - } - - return CallWindowProc ((WNDPROC) (w->originalWndProc), - (HWND) w->pluginHWND, - message, - wParam, - lParam); - } - } - - return DefWindowProc (hW, message, wParam, lParam); - } -#endif - -#if JUCE_LINUX - //============================================================================== - // overload mouse/keyboard events to forward them to the plugin's inner window.. - void sendEventToChild (XEvent* event) - { - if (pluginProc != 0) - { - // if the plugin publishes an event procedure, pass the event directly.. - pluginProc (event); - } - else if (pluginWindow != 0) - { - // if the plugin has a window, then send the event to the window so that - // its message thread will pick it up.. - XSendEvent (display, pluginWindow, False, 0L, event); - XFlush (display); - } - } - - void mouseEnter (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev; - zerostruct (ev); - ev.xcrossing.display = display; - ev.xcrossing.type = EnterNotify; - ev.xcrossing.window = pluginWindow; - ev.xcrossing.root = RootWindow (display, DefaultScreen (display)); - ev.xcrossing.time = CurrentTime; - ev.xcrossing.x = e.x; - ev.xcrossing.y = e.y; - ev.xcrossing.x_root = e.getScreenX(); - ev.xcrossing.y_root = e.getScreenY(); - ev.xcrossing.mode = NotifyNormal; // NotifyGrab, NotifyUngrab - ev.xcrossing.detail = NotifyAncestor; // NotifyVirtual, NotifyInferior, NotifyNonlinear,NotifyNonlinearVirtual - - translateJuceToXCrossingModifiers (e, ev); - - sendEventToChild (&ev); - } - } - - void mouseExit (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev; - zerostruct (ev); - ev.xcrossing.display = display; - ev.xcrossing.type = LeaveNotify; - ev.xcrossing.window = pluginWindow; - ev.xcrossing.root = RootWindow (display, DefaultScreen (display)); - ev.xcrossing.time = CurrentTime; - ev.xcrossing.x = e.x; - ev.xcrossing.y = e.y; - ev.xcrossing.x_root = e.getScreenX(); - ev.xcrossing.y_root = e.getScreenY(); - ev.xcrossing.mode = NotifyNormal; // NotifyGrab, NotifyUngrab - ev.xcrossing.detail = NotifyAncestor; // NotifyVirtual, NotifyInferior, NotifyNonlinear,NotifyNonlinearVirtual - ev.xcrossing.focus = hasKeyboardFocus (true); // TODO - yes ? - - translateJuceToXCrossingModifiers (e, ev); - - sendEventToChild (&ev); - } - } - - void mouseMove (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev; - zerostruct (ev); - ev.xmotion.display = display; - ev.xmotion.type = MotionNotify; - ev.xmotion.window = pluginWindow; - ev.xmotion.root = RootWindow (display, DefaultScreen (display)); - ev.xmotion.time = CurrentTime; - ev.xmotion.is_hint = NotifyNormal; - ev.xmotion.x = e.x; - ev.xmotion.y = e.y; - ev.xmotion.x_root = e.getScreenX(); - ev.xmotion.y_root = e.getScreenY(); - - sendEventToChild (&ev); - } - } - - void mouseDrag (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev; - zerostruct (ev); - ev.xmotion.display = display; - ev.xmotion.type = MotionNotify; - ev.xmotion.window = pluginWindow; - ev.xmotion.root = RootWindow (display, DefaultScreen (display)); - ev.xmotion.time = CurrentTime; - ev.xmotion.x = e.x ; - ev.xmotion.y = e.y; - ev.xmotion.x_root = e.getScreenX(); - ev.xmotion.y_root = e.getScreenY(); - ev.xmotion.is_hint = NotifyNormal; - - translateJuceToXMotionModifiers (e, ev); - sendEventToChild (&ev); - } - } - - void mouseUp (const MouseEvent& e) - { - if (pluginWindow != 0) - { - XEvent ev; - zerostruct (ev); - ev.xbutton.display = display; - ev.xbutton.type = ButtonRelease; - ev.xbutton.window = pluginWindow; - ev.xbutton.root = RootWindow (display, DefaultScreen (display)); - ev.xbutton.time = CurrentTime; - ev.xbutton.x = e.x; - ev.xbutton.y = e.y; - ev.xbutton.x_root = e.getScreenX(); - ev.xbutton.y_root = e.getScreenY(); - - translateJuceToXButtonModifiers (e, ev); - sendEventToChild (&ev); - } - } - - void mouseWheelMove (const MouseEvent& e, - float incrementX, - float incrementY) - { - if (pluginWindow != 0) - { - XEvent ev; - zerostruct (ev); - ev.xbutton.display = display; - ev.xbutton.type = ButtonPress; - ev.xbutton.window = pluginWindow; - ev.xbutton.root = RootWindow (display, DefaultScreen (display)); - ev.xbutton.time = CurrentTime; - ev.xbutton.x = e.x; - ev.xbutton.y = e.y; - ev.xbutton.x_root = e.getScreenX(); - ev.xbutton.y_root = e.getScreenY(); - - translateJuceToXMouseWheelModifiers (e, incrementY, ev); - sendEventToChild (&ev); - - // TODO - put a usleep here ? - - ev.xbutton.type = ButtonRelease; - sendEventToChild (&ev); - } - } -#endif - -#if JUCE_MAC - -#if ! JUCE_SUPPORT_CARBON - #error "To build VSTs, you need to enable the JUCE_SUPPORT_CARBON flag in your config!" -#endif - - class InnerWrapperComponent : public CarbonViewWrapperComponent - { - public: - InnerWrapperComponent (VSTPluginWindow* const owner_) - : owner (owner_), - alreadyInside (false) - { - } - - ~InnerWrapperComponent() - { - deleteWindow(); - } - - HIViewRef attachView (WindowRef windowRef, HIViewRef rootView) - { - owner->openPluginWindow (windowRef); - return 0; - } - - void removeView (HIViewRef) - { - owner->dispatch (effEditClose, 0, 0, 0, 0); - owner->dispatch (effEditSleep, 0, 0, 0, 0); - } - - bool getEmbeddedViewSize (int& w, int& h) - { - ERect* rect = 0; - owner->dispatch (effEditGetRect, 0, 0, &rect, 0); - w = rect->right - rect->left; - h = rect->bottom - rect->top; - return true; - } - - void mouseDown (int x, int y) - { - if (! alreadyInside) - { - alreadyInside = true; - getTopLevelComponent()->toFront (true); - owner->dispatch (effEditMouse, x, y, 0, 0); - alreadyInside = false; - } - else - { - PostEvent (::mouseDown, 0); - } - } - - void paint() - { - ComponentPeer* const peer = getPeer(); - - if (peer != 0) - { - ERect r; - r.left = getScreenX() - peer->getScreenX(); - r.right = r.left + getWidth(); - r.top = getScreenY() - peer->getScreenY(); - r.bottom = r.top + getHeight(); - - owner->dispatch (effEditDraw, 0, 0, &r, 0); - } - } - - private: - VSTPluginWindow* const owner; - bool alreadyInside; - }; - - friend class InnerWrapperComponent; - InnerWrapperComponent* innerWrapper; - - void resized() - { - innerWrapper->setSize (getWidth(), getHeight()); - } -#endif -}; - -//============================================================================== -AudioProcessorEditor* VSTPluginInstance::createEditor() -{ - if (hasEditor()) - return new VSTPluginWindow (*this); - - return 0; -} - - -//============================================================================== -void VSTPluginInstance::handleAsyncUpdate() -{ - // indicates that something about the plugin has changed.. - updateHostDisplay(); -} - -//============================================================================== -bool VSTPluginInstance::restoreProgramSettings (const fxProgram* const prog) -{ - if (vst_swap (prog->chunkMagic) == 'CcnK' && vst_swap (prog->fxMagic) == 'FxCk') - { - changeProgramName (getCurrentProgram(), prog->prgName); - - for (int i = 0; i < vst_swap (prog->numParams); ++i) - setParameter (i, vst_swapFloat (prog->params[i])); - - return true; - } - - return false; -} - -bool VSTPluginInstance::loadFromFXBFile (const void* const data, - const int dataSize) -{ - if (dataSize < 28) - return false; - - const fxSet* const set = (const fxSet*) data; - - if ((vst_swap (set->chunkMagic) != 'CcnK' && vst_swap (set->chunkMagic) != 'KncC') - || vst_swap (set->version) > fxbVersionNum) - return false; - - if (vst_swap (set->fxMagic) == 'FxBk') - { - // bank of programs - if (vst_swap (set->numPrograms) >= 0) - { - const int oldProg = getCurrentProgram(); - const int numParams = vst_swap (((const fxProgram*) (set->programs))->numParams); - const int progLen = sizeof (fxProgram) + (numParams - 1) * sizeof (float); - - for (int i = 0; i < vst_swap (set->numPrograms); ++i) - { - if (i != oldProg) - { - const fxProgram* const prog = (const fxProgram*) (((const char*) (set->programs)) + i * progLen); - if (((const char*) prog) - ((const char*) set) >= dataSize) - return false; - - if (vst_swap (set->numPrograms) > 0) - setCurrentProgram (i); - - if (! restoreProgramSettings (prog)) - return false; - } - } - - if (vst_swap (set->numPrograms) > 0) - setCurrentProgram (oldProg); - - const fxProgram* const prog = (const fxProgram*) (((const char*) (set->programs)) + oldProg * progLen); - if (((const char*) prog) - ((const char*) set) >= dataSize) - return false; - - if (! restoreProgramSettings (prog)) - return false; - } - } - else if (vst_swap (set->fxMagic) == 'FxCk') - { - // single program - const fxProgram* const prog = (const fxProgram*) data; - - if (vst_swap (prog->chunkMagic) != 'CcnK') - return false; - - changeProgramName (getCurrentProgram(), prog->prgName); - - for (int i = 0; i < vst_swap (prog->numParams); ++i) - setParameter (i, vst_swapFloat (prog->params[i])); - } - else if (vst_swap (set->fxMagic) == 'FBCh' || vst_swap (set->fxMagic) == 'hCBF') - { - // non-preset chunk - const fxChunkSet* const cset = (const fxChunkSet*) data; - - if (vst_swap (cset->chunkSize) + sizeof (fxChunkSet) - 8 > (unsigned int) dataSize) - return false; - - setChunkData (cset->chunk, vst_swap (cset->chunkSize), false); - } - else if (vst_swap (set->fxMagic) == 'FPCh' || vst_swap (set->fxMagic) == 'hCPF') - { - // preset chunk - const fxProgramSet* const cset = (const fxProgramSet*) data; - - if (vst_swap (cset->chunkSize) + sizeof (fxProgramSet) - 8 > (unsigned int) dataSize) - return false; - - setChunkData (cset->chunk, vst_swap (cset->chunkSize), true); - - changeProgramName (getCurrentProgram(), cset->name); - } - else - { - return false; - } - - return true; -} - -//============================================================================== -void VSTPluginInstance::setParamsInProgramBlock (fxProgram* const prog) throw() -{ - const int numParams = getNumParameters(); - - prog->chunkMagic = vst_swap ('CcnK'); - prog->byteSize = 0; - prog->fxMagic = vst_swap ('FxCk'); - prog->version = vst_swap (fxbVersionNum); - prog->fxID = vst_swap (getUID()); - prog->fxVersion = vst_swap (getVersionNumber()); - prog->numParams = vst_swap (numParams); - - getCurrentProgramName().copyToBuffer (prog->prgName, sizeof (prog->prgName) - 1); - - for (int i = 0; i < numParams; ++i) - prog->params[i] = vst_swapFloat (getParameter (i)); -} - -bool VSTPluginInstance::saveToFXBFile (MemoryBlock& dest, bool isFXB, int maxSizeMB) -{ - const int numPrograms = getNumPrograms(); - const int numParams = getNumParameters(); - - if (usesChunks()) - { - if (isFXB) - { - MemoryBlock chunk; - getChunkData (chunk, false, maxSizeMB); - - const int totalLen = sizeof (fxChunkSet) + chunk.getSize() - 8; - dest.setSize (totalLen, true); - - fxChunkSet* const set = (fxChunkSet*) dest.getData(); - set->chunkMagic = vst_swap ('CcnK'); - set->byteSize = 0; - set->fxMagic = vst_swap ('FBCh'); - set->version = vst_swap (fxbVersionNum); - set->fxID = vst_swap (getUID()); - set->fxVersion = vst_swap (getVersionNumber()); - set->numPrograms = vst_swap (numPrograms); - set->chunkSize = vst_swap (chunk.getSize()); - - chunk.copyTo (set->chunk, 0, chunk.getSize()); - } - else - { - MemoryBlock chunk; - getChunkData (chunk, true, maxSizeMB); - - const int totalLen = sizeof (fxProgramSet) + chunk.getSize() - 8; - dest.setSize (totalLen, true); - - fxProgramSet* const set = (fxProgramSet*) dest.getData(); - set->chunkMagic = vst_swap ('CcnK'); - set->byteSize = 0; - set->fxMagic = vst_swap ('FPCh'); - set->version = vst_swap (fxbVersionNum); - set->fxID = vst_swap (getUID()); - set->fxVersion = vst_swap (getVersionNumber()); - set->numPrograms = vst_swap (numPrograms); - set->chunkSize = vst_swap (chunk.getSize()); - - getCurrentProgramName().copyToBuffer (set->name, sizeof (set->name) - 1); - chunk.copyTo (set->chunk, 0, chunk.getSize()); - } - } - else - { - if (isFXB) - { - const int progLen = sizeof (fxProgram) + (numParams - 1) * sizeof (float); - const int len = (sizeof (fxSet) - sizeof (fxProgram)) + progLen * jmax (1, numPrograms); - dest.setSize (len, true); - - fxSet* const set = (fxSet*) dest.getData(); - set->chunkMagic = vst_swap ('CcnK'); - set->byteSize = 0; - set->fxMagic = vst_swap ('FxBk'); - set->version = vst_swap (fxbVersionNum); - set->fxID = vst_swap (getUID()); - set->fxVersion = vst_swap (getVersionNumber()); - set->numPrograms = vst_swap (numPrograms); - - const int oldProgram = getCurrentProgram(); - MemoryBlock oldSettings; - createTempParameterStore (oldSettings); - - setParamsInProgramBlock ((fxProgram*) (((char*) (set->programs)) + oldProgram * progLen)); - - for (int i = 0; i < numPrograms; ++i) - { - if (i != oldProgram) - { - setCurrentProgram (i); - setParamsInProgramBlock ((fxProgram*) (((char*) (set->programs)) + i * progLen)); - } - } - - setCurrentProgram (oldProgram); - restoreFromTempParameterStore (oldSettings); - } - else - { - const int totalLen = sizeof (fxProgram) + (numParams - 1) * sizeof (float); - dest.setSize (totalLen, true); - - setParamsInProgramBlock ((fxProgram*) dest.getData()); - } - } - - return true; -} - -void VSTPluginInstance::getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const -{ - if (usesChunks()) - { - void* data = 0; - const int bytes = dispatch (effGetChunk, isPreset ? 1 : 0, 0, &data, 0.0f); - - if (data != 0 && bytes <= maxSizeMB * 1024 * 1024) - { - mb.setSize (bytes); - mb.copyFrom (data, 0, bytes); - } - } -} - -void VSTPluginInstance::setChunkData (const char* data, int size, bool isPreset) -{ - if (size > 0 && usesChunks()) - { - dispatch (effSetChunk, isPreset ? 1 : 0, size, (void*) data, 0.0f); - - if (! isPreset) - updateStoredProgramNames(); - } -} - -//============================================================================== -void VSTPluginInstance::timerCallback() -{ - if (dispatch (effIdle, 0, 0, 0, 0) == 0) - stopTimer(); -} - -int VSTPluginInstance::dispatch (const int opcode, const int index, const int value, void* const ptr, float opt) const -{ - const ScopedLock sl (lock); - - ++insideVSTCallback; - int result = 0; - - try - { - if (effect != 0) - { -#if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); - - CGrafPtr oldPort; - - if (getActiveEditor() != 0) - { - int x = 0, y = 0; - getActiveEditor()->relativePositionToOtherComponent (getActiveEditor()->getTopLevelComponent(), x, y); - - GetPort (&oldPort); - SetPortWindowPort ((WindowRef) getActiveEditor()->getWindowHandle()); - SetOrigin (-x, -y); - } -#endif - - result = effect->dispatcher (effect, opcode, index, value, ptr, opt); - -#if JUCE_MAC - if (getActiveEditor() != 0) - SetPort (oldPort); - - module->resFileId = CurResFile(); -#endif - - --insideVSTCallback; - return result; - } - } - catch (...) - { - //char s[512]; - //sprintf (s, "dispatcher (%d, %d, %d, %x, %f)", opcode, index, value, (int)ptr, opt); - } - - --insideVSTCallback; - return result; -} - -//============================================================================== -// handles non plugin-specific callbacks.. - -static const int defaultVSTSampleRateValue = 16384; -static const int defaultVSTBlockSizeValue = 512; - - -static VstIntPtr handleGeneralCallback (VstInt32 opcode, VstInt32 index, VstInt32 value, void *ptr, float opt) -{ - (void) index; - (void) value; - (void) opt; - - switch (opcode) - { - case audioMasterCanDo: - { - static const char* canDos[] = { "supplyIdle", - "sendVstEvents", - "sendVstMidiEvent", - "sendVstTimeInfo", - "receiveVstEvents", - "receiveVstMidiEvent", - "supportShell", - "shellCategory" }; - - for (int i = 0; i < numElementsInArray (canDos); ++i) - if (strcmp (canDos[i], (const char*) ptr) == 0) - return 1; - - return 0; - } - - case audioMasterVersion: - return 0x2400; - case audioMasterCurrentId: - return shellUIDToCreate; - case audioMasterGetNumAutomatableParameters: - return 0; - case audioMasterGetAutomationState: - return 1; - - case audioMasterGetVendorVersion: - return 0x0101; - case audioMasterGetVendorString: - case audioMasterGetProductString: - { - String hostName ("Juce VST Host"); - - if (JUCEApplication::getInstance() != 0) - hostName = JUCEApplication::getInstance()->getApplicationName(); - - hostName.copyToBuffer ((char*) ptr, jmin (kVstMaxVendorStrLen, kVstMaxProductStrLen) - 1); - } - break; - - case audioMasterGetSampleRate: - return (VstIntPtr) defaultVSTSampleRateValue; - - case audioMasterGetBlockSize: - return (VstIntPtr) defaultVSTBlockSizeValue; - - case audioMasterSetOutputSampleRate: - return 0; - - default: - DBG ("*** Unhandled VST Callback: " + String ((int) opcode)); - break; - } - - return 0; -} - -// handles callbacks for a specific plugin -VstIntPtr VSTPluginInstance::handleCallback (VstInt32 opcode, VstInt32 index, VstInt32 value, void *ptr, float opt) -{ - switch (opcode) - { - case audioMasterAutomate: - sendParamChangeMessageToListeners (index, opt); - break; - - case audioMasterProcessEvents: - handleMidiFromPlugin ((const VstEvents*) ptr); - break; - - case audioMasterGetTime: - #ifdef _MSC_VER - #pragma warning (push) - #pragma warning (disable: 4311) - #endif - - return (VstIntPtr) &vstHostTime; - - #ifdef _MSC_VER - #pragma warning (pop) - #endif - break; - - case audioMasterIdle: - if (insideVSTCallback == 0 && MessageManager::getInstance()->isThisTheMessageThread()) - { - ++insideVSTCallback; -#if JUCE_MAC - if (getActiveEditor() != 0) - dispatch (effEditIdle, 0, 0, 0, 0); -#endif - juce_callAnyTimersSynchronously(); - - handleUpdateNowIfNeeded(); - - for (int i = ComponentPeer::getNumPeers(); --i >= 0;) - ComponentPeer::getPeer (i)->performAnyPendingRepaintsNow(); - - --insideVSTCallback; - } - break; - - case audioMasterUpdateDisplay: - triggerAsyncUpdate(); - break; - - case audioMasterTempoAt: - // returns (10000 * bpm) - break; - - case audioMasterNeedIdle: - startTimer (50); - break; - - case audioMasterSizeWindow: - if (getActiveEditor() != 0) - getActiveEditor()->setSize (index, value); - - return 1; - - case audioMasterGetSampleRate: - return (VstIntPtr) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue); - - case audioMasterGetBlockSize: - return (VstIntPtr) (getBlockSize() > 0 ? getBlockSize() : defaultVSTBlockSizeValue); - - case audioMasterWantMidi: - wantsMidiMessages = true; - break; - - case audioMasterGetDirectory: - #if JUCE_MAC - return (VstIntPtr) (void*) &module->parentDirFSSpec; - #else - return (VstIntPtr) (pointer_sized_uint) (const char*) module->fullParentDirectoryPathName; - #endif - - case audioMasterGetAutomationState: - // returns 0: not supported, 1: off, 2:read, 3:write, 4:read/write - break; - - // none of these are handled (yet).. - case audioMasterBeginEdit: - case audioMasterEndEdit: - case audioMasterSetTime: - case audioMasterPinConnected: - case audioMasterGetParameterQuantization: - case audioMasterIOChanged: - case audioMasterGetInputLatency: - case audioMasterGetOutputLatency: - case audioMasterGetPreviousPlug: - case audioMasterGetNextPlug: - case audioMasterWillReplaceOrAccumulate: - case audioMasterGetCurrentProcessLevel: - case audioMasterOfflineStart: - case audioMasterOfflineRead: - case audioMasterOfflineWrite: - case audioMasterOfflineGetCurrentPass: - case audioMasterOfflineGetCurrentMetaPass: - case audioMasterVendorSpecific: - case audioMasterSetIcon: - case audioMasterGetLanguage: - case audioMasterOpenWindow: - case audioMasterCloseWindow: - break; - - default: - return handleGeneralCallback (opcode, index, value, ptr, opt); - } - - return 0; -} - -// entry point for all callbacks from the plugin -static VstIntPtr VSTCALLBACK audioMaster (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt) -{ - try - { - if (effect != 0 && effect->resvd2 != 0) - { - return ((VSTPluginInstance*)(effect->resvd2)) - ->handleCallback (opcode, index, value, ptr, opt); - } - - return handleGeneralCallback (opcode, index, value, ptr, opt); - } - catch (...) - { - return 0; - } -} - -//============================================================================== -const String VSTPluginInstance::getVersion() const throw() -{ - unsigned int v = dispatch (effGetVendorVersion, 0, 0, 0, 0); - - String s; - - if (v == 0 || v == -1) - v = getVersionNumber(); - - if (v != 0) - { - int versionBits[4]; - int n = 0; - - while (v != 0) - { - versionBits [n++] = (v & 0xff); - v >>= 8; - } - - s << 'V'; - - while (n > 0) - { - s << versionBits [--n]; - - if (n > 0) - s << '.'; - } - } - - return s; -} - -int VSTPluginInstance::getUID() const throw() -{ - int uid = effect != 0 ? effect->uniqueID : 0; - - if (uid == 0) - uid = module->file.hashCode(); - - return uid; -} - -const String VSTPluginInstance::getCategory() const throw() -{ - const char* result = 0; - - switch (dispatch (effGetPlugCategory, 0, 0, 0, 0)) - { - case kPlugCategEffect: - result = "Effect"; - break; - - case kPlugCategSynth: - result = "Synth"; - break; - - case kPlugCategAnalysis: - result = "Anaylsis"; - break; - - case kPlugCategMastering: - result = "Mastering"; - break; - - case kPlugCategSpacializer: - result = "Spacial"; - break; - - case kPlugCategRoomFx: - result = "Reverb"; - break; - - case kPlugSurroundFx: - result = "Surround"; - break; - - case kPlugCategRestoration: - result = "Restoration"; - break; - - case kPlugCategGenerator: - result = "Tone generation"; - break; - - default: - break; - } - - return result; -} - -//============================================================================== -float VSTPluginInstance::getParameter (int index) -{ - if (effect != 0 && ((unsigned int) index) < (unsigned int) effect->numParams) - { - try - { - const ScopedLock sl (lock); - return effect->getParameter (effect, index); - } - catch (...) - { - } - } - - return 0.0f; -} - -void VSTPluginInstance::setParameter (int index, float newValue) -{ - if (effect != 0 && ((unsigned int) index) < (unsigned int) effect->numParams) - { - try - { - const ScopedLock sl (lock); - - if (effect->getParameter (effect, index) != newValue) - effect->setParameter (effect, index, newValue); - } - catch (...) - { - } - } -} - -const String VSTPluginInstance::getParameterName (int index) -{ - if (effect != 0) - { - jassert (index >= 0 && index < effect->numParams); - - char nm [256]; - zerostruct (nm); - dispatch (effGetParamName, index, 0, nm, 0); - return String (nm).trim(); - } - - return String::empty; -} - -const String VSTPluginInstance::getParameterLabel (int index) const -{ - if (effect != 0) - { - jassert (index >= 0 && index < effect->numParams); - - char nm [256]; - zerostruct (nm); - dispatch (effGetParamLabel, index, 0, nm, 0); - return String (nm).trim(); - } - - return String::empty; -} - -const String VSTPluginInstance::getParameterText (int index) -{ - if (effect != 0) - { - jassert (index >= 0 && index < effect->numParams); - - char nm [256]; - zerostruct (nm); - dispatch (effGetParamDisplay, index, 0, nm, 0); - return String (nm).trim(); - } - - return String::empty; -} - -bool VSTPluginInstance::isParameterAutomatable (int index) const -{ - if (effect != 0) - { - jassert (index >= 0 && index < effect->numParams); - return dispatch (effCanBeAutomated, index, 0, 0, 0) != 0; - } - - return false; -} - -void VSTPluginInstance::createTempParameterStore (MemoryBlock& dest) -{ - dest.setSize (64 + 4 * getNumParameters()); - dest.fillWith (0); - - getCurrentProgramName().copyToBuffer ((char*) dest.getData(), 63); - - float* const p = (float*) (((char*) dest.getData()) + 64); - for (int i = 0; i < getNumParameters(); ++i) - p[i] = getParameter(i); -} - -void VSTPluginInstance::restoreFromTempParameterStore (const MemoryBlock& m) -{ - changeProgramName (getCurrentProgram(), (const char*) m.getData()); - - float* p = (float*) (((char*) m.getData()) + 64); - for (int i = 0; i < getNumParameters(); ++i) - setParameter (i, p[i]); -} - -//============================================================================== -void VSTPluginInstance::setCurrentProgram (int newIndex) -{ - if (getNumPrograms() > 0 && newIndex != getCurrentProgram()) - dispatch (effSetProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), 0, 0); -} - -const String VSTPluginInstance::getProgramName (int index) -{ - if (index == getCurrentProgram()) - { - return getCurrentProgramName(); - } - else if (effect != 0) - { - char nm [256]; - zerostruct (nm); - - if (dispatch (effGetProgramNameIndexed, - jlimit (0, getNumPrograms(), index), - -1, nm, 0) != 0) - { - return String (nm).trim(); - } - } - - return programNames [index]; -} - -void VSTPluginInstance::changeProgramName (int index, const String& newName) -{ - if (index == getCurrentProgram()) - { - if (getNumPrograms() > 0 && newName != getCurrentProgramName()) - dispatch (effSetProgramName, 0, 0, (void*) (const char*) newName.substring (0, 24), 0.0f); - } - else - { - jassertfalse // xxx not implemented! - } -} - -void VSTPluginInstance::updateStoredProgramNames() -{ - if (effect != 0 && getNumPrograms() > 0) - { - char nm [256]; - zerostruct (nm); - - // only do this if the plugin can't use indexed names.. - if (dispatch (effGetProgramNameIndexed, 0, -1, nm, 0) == 0) - { - const int oldProgram = getCurrentProgram(); - MemoryBlock oldSettings; - createTempParameterStore (oldSettings); - - for (int i = 0; i < getNumPrograms(); ++i) - { - setCurrentProgram (i); - getCurrentProgramName(); // (this updates the list) - } - - setCurrentProgram (oldProgram); - restoreFromTempParameterStore (oldSettings); - } - } -} - -const String VSTPluginInstance::getCurrentProgramName() -{ - if (effect != 0) - { - char nm [256]; - zerostruct (nm); - dispatch (effGetProgramName, 0, 0, nm, 0); - - const int index = getCurrentProgram(); - if (programNames[index].isEmpty()) - { - while (programNames.size() < index) - programNames.add (String::empty); - - programNames.set (index, String (nm).trim()); - } - - return String (nm).trim(); - } - - return String::empty; -} - -//============================================================================== -const String VSTPluginInstance::getInputChannelName (const int index) const -{ - if (index >= 0 && index < getNumInputChannels()) - { - VstPinProperties pinProps; - if (dispatch (effGetInputProperties, index, 0, &pinProps, 0.0f) != 0) - return String (pinProps.label, sizeof (pinProps.label)); - } - - return String::empty; -} - -bool VSTPluginInstance::isInputChannelStereoPair (int index) const -{ - if (index < 0 || index >= getNumInputChannels()) - return false; - - VstPinProperties pinProps; - if (dispatch (effGetInputProperties, index, 0, &pinProps, 0.0f) != 0) - return (pinProps.flags & kVstPinIsStereo) != 0; - - return true; -} - -const String VSTPluginInstance::getOutputChannelName (const int index) const -{ - if (index >= 0 && index < getNumOutputChannels()) - { - VstPinProperties pinProps; - if (dispatch (effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0) - return String (pinProps.label, sizeof (pinProps.label)); - } - - return String::empty; -} - -bool VSTPluginInstance::isOutputChannelStereoPair (int index) const -{ - if (index < 0 || index >= getNumOutputChannels()) - return false; - - VstPinProperties pinProps; - if (dispatch (effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0) - return (pinProps.flags & kVstPinIsStereo) != 0; - - return true; -} - -//============================================================================== -void VSTPluginInstance::setPower (const bool on) -{ - dispatch (effMainsChanged, 0, on ? 1 : 0, 0, 0); - isPowerOn = on; -} - -//============================================================================== -const int defaultMaxSizeMB = 64; - -void VSTPluginInstance::getStateInformation (MemoryBlock& destData) -{ - saveToFXBFile (destData, true, defaultMaxSizeMB); -} - -void VSTPluginInstance::getCurrentProgramStateInformation (MemoryBlock& destData) -{ - saveToFXBFile (destData, false, defaultMaxSizeMB); -} - -void VSTPluginInstance::setStateInformation (const void* data, int sizeInBytes) -{ - loadFromFXBFile (data, sizeInBytes); -} - -void VSTPluginInstance::setCurrentProgramStateInformation (const void* data, int sizeInBytes) -{ - loadFromFXBFile (data, sizeInBytes); -} - -//============================================================================== -//============================================================================== -VSTPluginFormat::VSTPluginFormat() -{ -} - -VSTPluginFormat::~VSTPluginFormat() -{ -} - -void VSTPluginFormat::findAllTypesForFile (OwnedArray & results, - const String& fileOrIdentifier) -{ - if (! fileMightContainThisPluginType (fileOrIdentifier)) - return; - - PluginDescription desc; - desc.fileOrIdentifier = fileOrIdentifier; - desc.uid = 0; - - VSTPluginInstance* instance = dynamic_cast (createInstanceFromDescription (desc)); - - if (instance == 0) - return; - - try - { -#if JUCE_MAC - if (instance->module->resFileId != 0) - UseResFile (instance->module->resFileId); -#endif - - instance->fillInPluginDescription (desc); - - VstPlugCategory category = (VstPlugCategory) instance->dispatch (effGetPlugCategory, 0, 0, 0, 0); - - if (category != kPlugCategShell) - { - // Normal plugin... - results.add (new PluginDescription (desc)); - - ++insideVSTCallback; - instance->dispatch (effOpen, 0, 0, 0, 0); - --insideVSTCallback; - } - else - { - // It's a shell plugin, so iterate all the subtypes... - char shellEffectName [64]; - - for (;;) - { - zerostruct (shellEffectName); - const int uid = instance->dispatch (effShellGetNextPlugin, 0, 0, shellEffectName, 0); - - if (uid == 0) - { - break; - } - else - { - desc.uid = uid; - desc.name = shellEffectName; - - bool alreadyThere = false; - - for (int i = results.size(); --i >= 0;) - { - PluginDescription* const d = results.getUnchecked(i); - - if (d->isDuplicateOf (desc)) - { - alreadyThere = true; - break; - } - } - - if (! alreadyThere) - results.add (new PluginDescription (desc)); - } - } - } - } - catch (...) - { - // crashed while loading... - } - - deleteAndZero (instance); -} - -AudioPluginInstance* VSTPluginFormat::createInstanceFromDescription (const PluginDescription& desc) -{ - VSTPluginInstance* result = 0; - - if (fileMightContainThisPluginType (desc.fileOrIdentifier)) - { - File file (desc.fileOrIdentifier); - - const File previousWorkingDirectory (File::getCurrentWorkingDirectory()); - file.getParentDirectory().setAsCurrentWorkingDirectory(); - - const ReferenceCountedObjectPtr module (ModuleHandle::findOrCreateModule (file)); - - if (module != 0) - { - shellUIDToCreate = desc.uid; - - result = new VSTPluginInstance (module); - - if (result->effect != 0) - { - result->effect->resvd2 = (VstIntPtr) (pointer_sized_int) result; - result->initialise(); - } - else - { - deleteAndZero (result); - } - } - - previousWorkingDirectory.setAsCurrentWorkingDirectory(); - } - - return result; -} - -bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdentifier) -{ - const File f (fileOrIdentifier); - -#if JUCE_MAC - if (f.isDirectory() && f.hasFileExtension (T(".vst"))) - return true; - -#if JUCE_PPC - FSRef fileRef; - if (PlatformUtilities::makeFSRefFromPath (&fileRef, f.getFullPathName())) - { - const short resFileId = FSOpenResFile (&fileRef, fsRdPerm); - - if (resFileId != -1) - { - const int numEffects = Count1Resources ('aEff'); - CloseResFile (resFileId); - - if (numEffects > 0) - return true; - } - } -#endif - - return false; -#elif JUCE_WIN32 - return f.existsAsFile() - && f.hasFileExtension (T(".dll")); -#elif JUCE_LINUX - return f.existsAsFile() - && f.hasFileExtension (T(".so")); -#endif -} - -const String VSTPluginFormat::getNameOfPluginFromIdentifier (const String& fileOrIdentifier) -{ - return fileOrIdentifier; -} - -bool VSTPluginFormat::doesPluginStillExist (const PluginDescription& desc) -{ - return File (desc.fileOrIdentifier).exists(); -} - -const StringArray VSTPluginFormat::searchPathsForPlugins (const FileSearchPath& directoriesToSearch, const bool recursive) -{ - StringArray results; - - for (int j = 0; j < directoriesToSearch.getNumPaths(); ++j) - recursiveFileSearch (results, directoriesToSearch [j], recursive); - - return results; -} - -void VSTPluginFormat::recursiveFileSearch (StringArray& results, const File& dir, const bool recursive) -{ - // avoid allowing the dir iterator to be recursive, because we want to avoid letting it delve inside - // .component or .vst directories. - DirectoryIterator iter (dir, false, "*", File::findFilesAndDirectories); - - while (iter.next()) - { - const File f (iter.getFile()); - bool isPlugin = false; - - if (fileMightContainThisPluginType (f.getFullPathName())) - { - isPlugin = true; - results.add (f.getFullPathName()); - } - - if (recursive && (! isPlugin) && f.isDirectory()) - recursiveFileSearch (results, f, true); - } -} - -const FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() -{ -#if JUCE_MAC - return FileSearchPath ("~/Library/Audio/Plug-Ins/VST;/Library/Audio/Plug-Ins/VST"); -#elif JUCE_WIN32 - const String programFiles (File::getSpecialLocation (File::globalApplicationsDirectory).getFullPathName()); - - return FileSearchPath (programFiles + "\\Steinberg\\VstPlugins"); -#elif JUCE_LINUX - return FileSearchPath ("/usr/lib/vst"); -#endif -} - - -END_JUCE_NAMESPACE - -#endif - -#undef log - -#endif diff --git a/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.h b/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.h deleted file mode 100644 index 54993c1d90..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_VSTPLUGINFORMAT_JUCEHEADER__ -#define __JUCE_VSTPLUGINFORMAT_JUCEHEADER__ - -#include "../juce_AudioPluginFormat.h" - - -#if JUCE_PLUGINHOST_VST - -//============================================================================== -/** - Implements a plugin format manager for VSTs. -*/ -class JUCE_API VSTPluginFormat : public AudioPluginFormat -{ -public: - //============================================================================== - VSTPluginFormat(); - ~VSTPluginFormat(); - - //============================================================================== - const String getName() const { return "VST"; } - void findAllTypesForFile (OwnedArray & results, const String& fileOrIdentifier); - AudioPluginInstance* createInstanceFromDescription (const PluginDescription& desc); - bool fileMightContainThisPluginType (const String& fileOrIdentifier); - const String getNameOfPluginFromIdentifier (const String& fileOrIdentifier); - const StringArray searchPathsForPlugins (const FileSearchPath& directoriesToSearch, const bool recursive); - bool doesPluginStillExist (const PluginDescription& desc); - const FileSearchPath getDefaultLocationsToSearch(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - VSTPluginFormat (const VSTPluginFormat&); - const VSTPluginFormat& operator= (const VSTPluginFormat&); - - void recursiveFileSearch (StringArray& results, const File& dir, const bool recursive); -}; - - -#endif -#endif // __JUCE_VSTPLUGINFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.mm b/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.mm deleted file mode 100644 index 28025a09cf..0000000000 --- a/src/juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.mm +++ /dev/null @@ -1,29 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -// This file just wraps juce_VSTPluginFormat.cpp in an objective-C wrapper -#define JUCE_MAC_VST_INCLUDED 1 -#include "juce_VSTPluginFormat.cpp" - diff --git a/src/juce_appframework/audio/plugins/juce_AudioPluginFormat.cpp b/src/juce_appframework/audio/plugins/juce_AudioPluginFormat.cpp deleted file mode 100644 index 239c3e726e..0000000000 --- a/src/juce_appframework/audio/plugins/juce_AudioPluginFormat.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioPluginFormat.h" - - -//============================================================================== -AudioPluginFormat::AudioPluginFormat() throw() -{ -} - -AudioPluginFormat::~AudioPluginFormat() -{ -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_AudioPluginFormat.h b/src/juce_appframework/audio/plugins/juce_AudioPluginFormat.h deleted file mode 100644 index 67723b7e60..0000000000 --- a/src/juce_appframework/audio/plugins/juce_AudioPluginFormat.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPLUGINFORMAT_JUCEHEADER__ -#define __JUCE_AUDIOPLUGINFORMAT_JUCEHEADER__ - -#include "juce_AudioPluginInstance.h" -#include "../../../juce_core/io/files/juce_FileSearchPath.h" -class PluginDescription; - - -//============================================================================== -/** - The base class for a type of plugin format, such as VST, AudioUnit, LADSPA, etc. - - Use the static getNumFormats() and getFormat() calls to find the types - of format that are available. -*/ -class JUCE_API AudioPluginFormat -{ -public: - //============================================================================== - /** Destructor. */ - virtual ~AudioPluginFormat(); - - //============================================================================== - /** Returns the format name. - - E.g. "VST", "AudioUnit", etc. - */ - virtual const String getName() const = 0; - - /** This tries to create descriptions for all the plugin types available in - a binary module file. - - The file will be some kind of DLL or bundle. - - Normally there will only be one type returned, but some plugins - (e.g. VST shells) can use a single DLL to create a set of different plugin - subtypes, so in that case, each subtype is returned as a separate object. - */ - virtual void findAllTypesForFile (OwnedArray & results, - const String& fileOrIdentifier) = 0; - - /** Tries to recreate a type from a previously generated PluginDescription. - - @see PluginDescription::createInstance - */ - virtual AudioPluginInstance* createInstanceFromDescription (const PluginDescription& desc) = 0; - - /** Should do a quick check to see if this file or directory might be a plugin of - this format. - - This is for searching for potential files, so it shouldn't actually try to - load the plugin or do anything time-consuming. - */ - virtual bool fileMightContainThisPluginType (const String& fileOrIdentifier) = 0; - - /** Returns a readable version of the name of the plugin that this identifier refers to. - */ - virtual const String getNameOfPluginFromIdentifier (const String& fileOrIdentifier) = 0; - - /** Checks whether this plugin could possibly be loaded. - - It doesn't actually need to load it, just to check whether the file or component - still exists. - */ - virtual bool doesPluginStillExist (const PluginDescription& desc) = 0; - - /** Searches a suggested set of directories for any plugins in this format. - - The path might be ignored, e.g. by AUs, which are found by the OS rather - than manually. - */ - virtual const StringArray searchPathsForPlugins (const FileSearchPath& directoriesToSearch, - const bool recursive) = 0; - - /** Returns the typical places to look for this kind of plugin. - - Note that if this returns no paths, it means that the format can't be scanned-for - (i.e. it's an internal format that doesn't live in files) - */ - virtual const FileSearchPath getDefaultLocationsToSearch() = 0; - - - //============================================================================== - juce_UseDebuggingNewOperator - - -protected: - AudioPluginFormat() throw(); - - AudioPluginFormat (const AudioPluginFormat&); - const AudioPluginFormat& operator= (const AudioPluginFormat&); -}; - - -#endif // __JUCE_AUDIOPLUGINFORMAT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.cpp b/src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.cpp deleted file mode 100644 index bc4a83d574..0000000000 --- a/src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioPluginFormatManager.h" -#include "juce_PluginDescription.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" - -#include "formats/juce_VSTPluginFormat.h" -#include "formats/juce_AudioUnitPluginFormat.h" -#include "formats/juce_DirectXPluginFormat.h" -#include "formats/juce_LADSPAPluginFormat.h" - - -//============================================================================== -AudioPluginFormatManager::AudioPluginFormatManager() throw() -{ -} - -AudioPluginFormatManager::~AudioPluginFormatManager() throw() -{ - clearSingletonInstance(); -} - -juce_ImplementSingleton_SingleThreaded (AudioPluginFormatManager); - -//============================================================================== -void AudioPluginFormatManager::addDefaultFormats() -{ -#ifdef JUCE_DEBUG - // you should only call this method once! - for (int i = formats.size(); --i >= 0;) - { - #if JUCE_PLUGINHOST_VST - jassert (dynamic_cast (formats[i]) == 0); - #endif - - #if JUCE_PLUGINHOST_AU && JUCE_MAC - jassert (dynamic_cast (formats[i]) == 0); - #endif - - #if JUCE_PLUGINHOST_DX && JUCE_WIN32 - jassert (dynamic_cast (formats[i]) == 0); - #endif - - #if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX - jassert (dynamic_cast (formats[i]) == 0); - #endif - } -#endif - -#if JUCE_PLUGINHOST_AU && JUCE_MAC - formats.add (new AudioUnitPluginFormat()); -#endif - -#if JUCE_PLUGINHOST_VST - formats.add (new VSTPluginFormat()); -#endif - -#if JUCE_PLUGINHOST_DX && JUCE_WIN32 - formats.add (new DirectXPluginFormat()); -#endif - -#if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX - formats.add (new LADSPAPluginFormat()); -#endif -} - -int AudioPluginFormatManager::getNumFormats() throw() -{ - return formats.size(); -} - -AudioPluginFormat* AudioPluginFormatManager::getFormat (const int index) throw() -{ - return formats [index]; -} - -void AudioPluginFormatManager::addFormat (AudioPluginFormat* const format) throw() -{ - formats.add (format); -} - -AudioPluginInstance* AudioPluginFormatManager::createPluginInstance (const PluginDescription& description, - String& errorMessage) const -{ - AudioPluginInstance* result = 0; - - for (int i = 0; i < formats.size(); ++i) - { - result = formats.getUnchecked(i)->createInstanceFromDescription (description); - - if (result != 0) - break; - } - - if (result == 0) - { - if (! doesPluginStillExist (description)) - errorMessage = TRANS ("This plug-in file no longer exists"); - else - errorMessage = TRANS ("This plug-in failed to load correctly"); - } - - return result; -} - -bool AudioPluginFormatManager::doesPluginStillExist (const PluginDescription& description) const -{ - for (int i = 0; i < formats.size(); ++i) - if (formats.getUnchecked(i)->getName() == description.pluginFormatName) - return formats.getUnchecked(i)->doesPluginStillExist (description); - - return false; -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.h b/src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.h deleted file mode 100644 index edc099a0e2..0000000000 --- a/src/juce_appframework/audio/plugins/juce_AudioPluginFormatManager.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPLUGINFORMATMANAGER_JUCEHEADER__ -#define __JUCE_AUDIOPLUGINFORMATMANAGER_JUCEHEADER__ - -#include "juce_AudioPluginFormat.h" -#include "../../application/juce_DeletedAtShutdown.h" -#include "../../../juce_core/basics/juce_Singleton.h" - - -//============================================================================== -/** - This maintains a list of known AudioPluginFormats. - - @see AudioPluginFormat -*/ -class JUCE_API AudioPluginFormatManager : public DeletedAtShutdown -{ -public: - //============================================================================== - AudioPluginFormatManager() throw(); - - /** Destructor. */ - ~AudioPluginFormatManager() throw(); - - juce_DeclareSingleton_SingleThreaded (AudioPluginFormatManager, false); - - //============================================================================== - /** Adds any formats that it knows about, e.g. VST. - */ - void addDefaultFormats(); - - //============================================================================== - /** Returns the number of types of format that are available. - - Use getFormat() to get one of them. - */ - int getNumFormats() throw(); - - /** Returns one of the available formats. - - @see getNumFormats - */ - AudioPluginFormat* getFormat (const int index) throw(); - - //============================================================================== - /** Adds a format to the list. - - The object passed in will be owned and deleted by the manager. - */ - void addFormat (AudioPluginFormat* const format) throw(); - - - //============================================================================== - /** Tries to load the type for this description, by trying all the formats - that this manager knows about. - - The caller is responsible for deleting the object that is returned. - - If it can't load the plugin, it returns 0 and leaves a message in the - errorMessage string. - */ - AudioPluginInstance* createPluginInstance (const PluginDescription& description, - String& errorMessage) const; - - /** Checks that the file or component for this plugin actually still exists. - - (This won't try to load the plugin) - */ - bool doesPluginStillExist (const PluginDescription& description) const; - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - OwnedArray formats; - - AudioPluginFormatManager (const AudioPluginFormatManager&); - const AudioPluginFormatManager& operator= (const AudioPluginFormatManager&); -}; - - - -#endif // __JUCE_AUDIOPLUGINFORMATMANAGER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/juce_AudioPluginInstance.cpp b/src/juce_appframework/audio/plugins/juce_AudioPluginInstance.cpp deleted file mode 100644 index 3aafbd8c60..0000000000 --- a/src/juce_appframework/audio/plugins/juce_AudioPluginInstance.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#define JUCE_PLUGIN_HOST 1 - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioPluginInstance.h" - - -//============================================================================== -AudioPluginInstance::AudioPluginInstance() -{ -} - -AudioPluginInstance::~AudioPluginInstance() -{ -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_AudioPluginInstance.h b/src/juce_appframework/audio/plugins/juce_AudioPluginInstance.h deleted file mode 100644 index 8c91c9119d..0000000000 --- a/src/juce_appframework/audio/plugins/juce_AudioPluginInstance.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPLUGININSTANCE_JUCEHEADER__ -#define __JUCE_AUDIOPLUGININSTANCE_JUCEHEADER__ - -#include "../processors/juce_AudioProcessor.h" -#include "juce_PluginDescription.h" - - -//============================================================================== -/** - Base class for an active instance of a plugin. - - This derives from the AudioProcessor class, and adds some extra functionality - that helps when wrapping dynamically loaded plugins. - - @see AudioProcessor, AudioPluginFormat -*/ -class JUCE_API AudioPluginInstance : public AudioProcessor -{ -public: - //============================================================================== - /** Destructor. - - Make sure that you delete any UI components that belong to this plugin before - deleting the plugin. - */ - virtual ~AudioPluginInstance(); - - //============================================================================== - /** Fills-in the appropriate parts of this plugin description object. - */ - virtual void fillInPluginDescription (PluginDescription& description) const = 0; - - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - AudioPluginInstance(); - - AudioPluginInstance (const AudioPluginInstance&); - const AudioPluginInstance& operator= (const AudioPluginInstance&); -}; - - -#endif // __JUCE_AUDIOPLUGININSTANCE_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/juce_KnownPluginList.cpp b/src/juce_appframework/audio/plugins/juce_KnownPluginList.cpp deleted file mode 100644 index b6aa5f61f3..0000000000 --- a/src/juce_appframework/audio/plugins/juce_KnownPluginList.cpp +++ /dev/null @@ -1,456 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_KnownPluginList.h" -#include "juce_AudioPluginFormatManager.h" - - -//============================================================================== -KnownPluginList::KnownPluginList() -{ -} - -KnownPluginList::~KnownPluginList() -{ -} - -void KnownPluginList::clear() -{ - if (types.size() > 0) - { - types.clear(); - sendChangeMessage (this); - } -} - -PluginDescription* KnownPluginList::getTypeForFile (const String& fileOrIdentifier) const throw() -{ - for (int i = 0; i < types.size(); ++i) - if (types.getUnchecked(i)->fileOrIdentifier == fileOrIdentifier) - return types.getUnchecked(i); - - return 0; -} - -PluginDescription* KnownPluginList::getTypeForIdentifierString (const String& identifierString) const throw() -{ - for (int i = 0; i < types.size(); ++i) - if (types.getUnchecked(i)->createIdentifierString() == identifierString) - return types.getUnchecked(i); - - return 0; -} - -bool KnownPluginList::addType (const PluginDescription& type) -{ - for (int i = types.size(); --i >= 0;) - { - if (types.getUnchecked(i)->isDuplicateOf (type)) - { - // strange - found a duplicate plugin with different info.. - jassert (types.getUnchecked(i)->name == type.name); - jassert (types.getUnchecked(i)->isInstrument == type.isInstrument); - - *types.getUnchecked(i) = type; - return false; - } - } - - types.add (new PluginDescription (type)); - sendChangeMessage (this); - return true; -} - -void KnownPluginList::removeType (const int index) throw() -{ - types.remove (index); - sendChangeMessage (this); -} - -static Time getFileModTime (const String& fileOrIdentifier) throw() -{ - if (fileOrIdentifier.startsWithChar (T('/')) - || fileOrIdentifier[1] == T(':')) - { - return File (fileOrIdentifier).getLastModificationTime(); - } - - return Time (0); -} - -static bool timesAreDifferent (const Time& t1, const Time& t2) throw() -{ - return t1 != t2 || t1 == Time (0); -} - -bool KnownPluginList::isListingUpToDate (const String& fileOrIdentifier) const throw() -{ - if (getTypeForFile (fileOrIdentifier) == 0) - return false; - - for (int i = types.size(); --i >= 0;) - { - const PluginDescription* const d = types.getUnchecked(i); - - if (d->fileOrIdentifier == fileOrIdentifier - && timesAreDifferent (d->lastFileModTime, getFileModTime (fileOrIdentifier))) - { - return false; - } - } - - return true; -} - -bool KnownPluginList::scanAndAddFile (const String& fileOrIdentifier, - const bool dontRescanIfAlreadyInList, - OwnedArray & typesFound, - AudioPluginFormat& format) -{ - bool addedOne = false; - - if (dontRescanIfAlreadyInList - && getTypeForFile (fileOrIdentifier) != 0) - { - bool needsRescanning = false; - - for (int i = types.size(); --i >= 0;) - { - const PluginDescription* const d = types.getUnchecked(i); - - if (d->fileOrIdentifier == fileOrIdentifier) - { - if (timesAreDifferent (d->lastFileModTime, getFileModTime (fileOrIdentifier))) - needsRescanning = true; - else - typesFound.add (new PluginDescription (*d)); - } - } - - if (! needsRescanning) - return false; - } - - OwnedArray found; - format.findAllTypesForFile (found, fileOrIdentifier); - - for (int i = 0; i < found.size(); ++i) - { - PluginDescription* const desc = found.getUnchecked(i); - jassert (desc != 0); - - if (addType (*desc)) - addedOne = true; - - typesFound.add (new PluginDescription (*desc)); - } - - return addedOne; -} - -void KnownPluginList::scanAndAddDragAndDroppedFiles (const StringArray& files, - OwnedArray & typesFound) -{ - for (int i = 0; i < files.size(); ++i) - { - bool loaded = false; - - for (int j = 0; j < AudioPluginFormatManager::getInstance()->getNumFormats(); ++j) - { - AudioPluginFormat* const format = AudioPluginFormatManager::getInstance()->getFormat (j); - - if (scanAndAddFile (files[i], true, typesFound, *format)) - loaded = true; - } - - if (! loaded) - { - const File f (files[i]); - - if (f.isDirectory()) - { - StringArray s; - - { - OwnedArray subFiles; - f.findChildFiles (subFiles, File::findFilesAndDirectories, false); - - for (int j = 0; j < subFiles.size(); ++j) - s.add (subFiles.getUnchecked (j)->getFullPathName()); - } - - scanAndAddDragAndDroppedFiles (s, typesFound); - } - } - } -} - -//============================================================================== -class PluginSorter -{ -public: - KnownPluginList::SortMethod method; - - PluginSorter() throw() {} - - int compareElements (const PluginDescription* const first, - const PluginDescription* const second) const throw() - { - int diff = 0; - - if (method == KnownPluginList::sortByCategory) - diff = first->category.compareLexicographically (second->category); - else if (method == KnownPluginList::sortByManufacturer) - diff = first->manufacturerName.compareLexicographically (second->manufacturerName); - else if (method == KnownPluginList::sortByFileSystemLocation) - diff = first->fileOrIdentifier.replaceCharacter (T('\\'), T('/')) - .upToLastOccurrenceOf (T("/"), false, false) - .compare (second->fileOrIdentifier.replaceCharacter (T('\\'), T('/')) - .upToLastOccurrenceOf (T("/"), false, false)); - - if (diff == 0) - diff = first->name.compareLexicographically (second->name); - - return diff; - } -}; - -void KnownPluginList::sort (const SortMethod method) -{ - if (method != defaultOrder) - { - PluginSorter sorter; - sorter.method = method; - types.sort (sorter, true); - - sendChangeMessage (this); - } -} - -//============================================================================== -XmlElement* KnownPluginList::createXml() const -{ - XmlElement* const e = new XmlElement (T("KNOWNPLUGINS")); - - for (int i = 0; i < types.size(); ++i) - e->addChildElement (types.getUnchecked(i)->createXml()); - - return e; -} - -void KnownPluginList::recreateFromXml (const XmlElement& xml) -{ - clear(); - - if (xml.hasTagName (T("KNOWNPLUGINS"))) - { - forEachXmlChildElement (xml, e) - { - PluginDescription info; - - if (info.loadFromXml (*e)) - addType (info); - } - } -} - -//============================================================================== -const int menuIdBase = 0x324503f4; - -// This is used to turn a bunch of paths into a nested menu structure. -struct PluginFilesystemTree -{ -private: - String folder; - OwnedArray subFolders; - Array plugins; - - void addPlugin (PluginDescription* const pd, const String& path) - { - if (path.isEmpty()) - { - plugins.add (pd); - } - else - { - const String firstSubFolder (path.upToFirstOccurrenceOf (T("/"), false, false)); - const String remainingPath (path.fromFirstOccurrenceOf (T("/"), false, false)); - - for (int i = subFolders.size(); --i >= 0;) - { - if (subFolders.getUnchecked(i)->folder.equalsIgnoreCase (firstSubFolder)) - { - subFolders.getUnchecked(i)->addPlugin (pd, remainingPath); - return; - } - } - - PluginFilesystemTree* const newFolder = new PluginFilesystemTree(); - newFolder->folder = firstSubFolder; - subFolders.add (newFolder); - - newFolder->addPlugin (pd, remainingPath); - } - } - - // removes any deeply nested folders that don't contain any actual plugins - void optimise() - { - for (int i = subFolders.size(); --i >= 0;) - { - PluginFilesystemTree* const sub = subFolders.getUnchecked(i); - - sub->optimise(); - - if (sub->plugins.size() == 0) - { - for (int j = 0; j < sub->subFolders.size(); ++j) - subFolders.add (sub->subFolders.getUnchecked(j)); - - sub->subFolders.clear (false); - subFolders.remove (i); - } - } - } - -public: - void buildTree (const Array & allPlugins) - { - for (int i = 0; i < allPlugins.size(); ++i) - { - String path (allPlugins.getUnchecked(i) - ->fileOrIdentifier.replaceCharacter (T('\\'), T('/')) - .upToLastOccurrenceOf (T("/"), false, false)); - - if (path.substring (1, 2) == T(":")) - path = path.substring (2); - - addPlugin (allPlugins.getUnchecked(i), path); - } - - optimise(); - } - - void addToMenu (PopupMenu& m, const OwnedArray & allPlugins) const - { - int i; - for (i = 0; i < subFolders.size(); ++i) - { - const PluginFilesystemTree* const sub = subFolders.getUnchecked(i); - - PopupMenu subMenu; - sub->addToMenu (subMenu, allPlugins); - -#if JUCE_MAC - // avoid the special AU formatting nonsense on Mac.. - m.addSubMenu (sub->folder.fromFirstOccurrenceOf (T(":"), false, false), subMenu); -#else - m.addSubMenu (sub->folder, subMenu); -#endif - } - - for (i = 0; i < plugins.size(); ++i) - { - PluginDescription* const plugin = plugins.getUnchecked(i); - - m.addItem (allPlugins.indexOf (plugin) + menuIdBase, - plugin->name, true, false); - } - } -}; - -//============================================================================== -void KnownPluginList::addToMenu (PopupMenu& menu, const SortMethod sortMethod) const -{ - Array sorted; - - { - PluginSorter sorter; - sorter.method = sortMethod; - - for (int i = 0; i < types.size(); ++i) - sorted.addSorted (sorter, types.getUnchecked(i)); - } - - if (sortMethod == sortByCategory - || sortMethod == sortByManufacturer) - { - String lastSubMenuName; - PopupMenu sub; - - for (int i = 0; i < sorted.size(); ++i) - { - const PluginDescription* const pd = sorted.getUnchecked(i); - String thisSubMenuName (sortMethod == sortByCategory ? pd->category - : pd->manufacturerName); - - if (! thisSubMenuName.containsNonWhitespaceChars()) - thisSubMenuName = T("Other"); - - if (thisSubMenuName != lastSubMenuName) - { - if (sub.getNumItems() > 0) - { - menu.addSubMenu (lastSubMenuName, sub); - sub.clear(); - } - - lastSubMenuName = thisSubMenuName; - } - - sub.addItem (types.indexOf (pd) + menuIdBase, pd->name, true, false); - } - - if (sub.getNumItems() > 0) - menu.addSubMenu (lastSubMenuName, sub); - } - else if (sortMethod == sortByFileSystemLocation) - { - PluginFilesystemTree root; - root.buildTree (sorted); - root.addToMenu (menu, types); - } - else - { - for (int i = 0; i < sorted.size(); ++i) - { - const PluginDescription* const pd = sorted.getUnchecked(i); - menu.addItem (types.indexOf (pd) + menuIdBase, pd->name, true, false); - } - } -} - -int KnownPluginList::getIndexChosenByMenu (const int menuResultCode) const -{ - const int i = menuResultCode - menuIdBase; - - return (((unsigned int) i) < (unsigned int) types.size()) ? i : -1; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_KnownPluginList.h b/src/juce_appframework/audio/plugins/juce_KnownPluginList.h deleted file mode 100644 index 3f24797543..0000000000 --- a/src/juce_appframework/audio/plugins/juce_KnownPluginList.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_KNOWNPLUGINLIST_JUCEHEADER__ -#define __JUCE_KNOWNPLUGINLIST_JUCEHEADER__ - -#include "juce_PluginDescription.h" -#include "juce_AudioPluginFormat.h" -#include "../../events/juce_ChangeBroadcaster.h" -#include "../../gui/components/menus/juce_PopupMenu.h" - - -//============================================================================== -/** - Manages a list of plugin types. - - This can be easily edited, saved and loaded, and used to create instances of - the plugin types in it. - - @see PluginListComponent -*/ -class JUCE_API KnownPluginList : public ChangeBroadcaster -{ -public: - //============================================================================== - /** Creates an empty list. - */ - KnownPluginList(); - - /** Destructor. */ - ~KnownPluginList(); - - //============================================================================== - /** Clears the list. */ - void clear(); - - /** Returns the number of types currently in the list. - @see getType - */ - int getNumTypes() const throw() { return types.size(); } - - /** Returns one of the types. - @see getNumTypes - */ - PluginDescription* getType (const int index) const throw() { return types [index]; } - - /** Looks for a type in the list which comes from this file. - */ - PluginDescription* getTypeForFile (const String& fileOrIdentifier) const throw(); - - /** Looks for a type in the list which matches a plugin type ID. - - The identifierString parameter must have been created by - PluginDescription::createIdentifierString(). - */ - PluginDescription* getTypeForIdentifierString (const String& identifierString) const throw(); - - /** Adds a type manually from its description. */ - bool addType (const PluginDescription& type); - - /** Removes a type. */ - void removeType (const int index) throw(); - - /** Looks for all types that can be loaded from a given file, and adds them - to the list. - - If dontRescanIfAlreadyInList is true, then the file will only be loaded and - re-tested if it's not already in the list, or if the file's modification - time has changed since the list was created. If dontRescanIfAlreadyInList is - false, the file will always be reloaded and tested. - - Returns true if any new types were added, and all the types found in this - file (even if it was already known and hasn't been re-scanned) get returned - in the array. - */ - bool scanAndAddFile (const String& possiblePluginFileOrIdentifier, - const bool dontRescanIfAlreadyInList, - OwnedArray & typesFound, - AudioPluginFormat& formatToUse); - - /** Returns true if the specified file is already known about and if it - hasn't been modified since our entry was created. - */ - bool isListingUpToDate (const String& possiblePluginFileOrIdentifier) const throw(); - - /** Scans and adds a bunch of files that might have been dragged-and-dropped. - - If any types are found in the files, their descriptions are returned in the array. - */ - void scanAndAddDragAndDroppedFiles (const StringArray& filenames, - OwnedArray & typesFound); - - //============================================================================== - /** Sort methods used to change the order of the plugins in the list. - */ - enum SortMethod - { - defaultOrder = 0, - sortAlphabetically, - sortByCategory, - sortByManufacturer, - sortByFileSystemLocation - }; - - //============================================================================== - /** Adds all the plugin types to a popup menu so that the user can select one. - - Depending on the sort method, it may add sub-menus for categories, - manufacturers, etc. - - Use getIndexChosenByMenu() to find out the type that was chosen. - */ - void addToMenu (PopupMenu& menu, - const SortMethod sortMethod) const; - - /** Converts a menu item index that has been chosen into its index in this list. - - Returns -1 if it's not an ID that was used. - - @see addToMenu - */ - int getIndexChosenByMenu (const int menuResultCode) const; - - //============================================================================== - /** Sorts the list. */ - void sort (const SortMethod method); - - //============================================================================== - /** Creates some XML that can be used to store the state of this list. - */ - XmlElement* createXml() const; - - /** Recreates the state of this list from its stored XML format. - */ - void recreateFromXml (const XmlElement& xml); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - OwnedArray types; - - KnownPluginList (const KnownPluginList&); - const KnownPluginList& operator= (const KnownPluginList&); -}; - - -#endif // __JUCE_KNOWNPLUGINLIST_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/juce_PluginDescription.cpp b/src/juce_appframework/audio/plugins/juce_PluginDescription.cpp deleted file mode 100644 index c945ee9a37..0000000000 --- a/src/juce_appframework/audio/plugins/juce_PluginDescription.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_PluginDescription.h" -#include "juce_AudioPluginFormat.h" - - -//============================================================================== -PluginDescription::PluginDescription() throw() - : uid (0), - isInstrument (false), - numInputChannels (0), - numOutputChannels (0) -{ -} - -PluginDescription::~PluginDescription() throw() -{ -} - -PluginDescription::PluginDescription (const PluginDescription& other) throw() - : name (other.name), - pluginFormatName (other.pluginFormatName), - category (other.category), - manufacturerName (other.manufacturerName), - version (other.version), - fileOrIdentifier (other.fileOrIdentifier), - lastFileModTime (other.lastFileModTime), - uid (other.uid), - isInstrument (other.isInstrument), - numInputChannels (other.numInputChannels), - numOutputChannels (other.numOutputChannels) -{ -} - -const PluginDescription& PluginDescription::operator= (const PluginDescription& other) throw() -{ - name = other.name; - pluginFormatName = other.pluginFormatName; - category = other.category; - manufacturerName = other.manufacturerName; - version = other.version; - fileOrIdentifier = other.fileOrIdentifier; - uid = other.uid; - isInstrument = other.isInstrument; - lastFileModTime = other.lastFileModTime; - numInputChannels = other.numInputChannels; - numOutputChannels = other.numOutputChannels; - - return *this; -} - -bool PluginDescription::isDuplicateOf (const PluginDescription& other) const -{ - return fileOrIdentifier == other.fileOrIdentifier - && uid == other.uid; -} - -const String PluginDescription::createIdentifierString() const throw() -{ - return pluginFormatName - + T("-") + name - + T("-") + String::toHexString (fileOrIdentifier.hashCode()) - + T("-") + String::toHexString (uid); -} - -XmlElement* PluginDescription::createXml() const -{ - XmlElement* const e = new XmlElement (T("PLUGIN")); - e->setAttribute (T("name"), name); - e->setAttribute (T("format"), pluginFormatName); - e->setAttribute (T("category"), category); - e->setAttribute (T("manufacturer"), manufacturerName); - e->setAttribute (T("version"), version); - e->setAttribute (T("file"), fileOrIdentifier); - e->setAttribute (T("uid"), String::toHexString (uid)); - e->setAttribute (T("isInstrument"), isInstrument); - e->setAttribute (T("fileTime"), String::toHexString (lastFileModTime.toMilliseconds())); - e->setAttribute (T("numInputs"), numInputChannels); - e->setAttribute (T("numOutputs"), numOutputChannels); - - return e; -} - -bool PluginDescription::loadFromXml (const XmlElement& xml) -{ - if (xml.hasTagName (T("PLUGIN"))) - { - name = xml.getStringAttribute (T("name")); - pluginFormatName = xml.getStringAttribute (T("format")); - category = xml.getStringAttribute (T("category")); - manufacturerName = xml.getStringAttribute (T("manufacturer")); - version = xml.getStringAttribute (T("version")); - fileOrIdentifier = xml.getStringAttribute (T("file")); - uid = xml.getStringAttribute (T("uid")).getHexValue32(); - isInstrument = xml.getBoolAttribute (T("isInstrument"), false); - lastFileModTime = Time (xml.getStringAttribute (T("fileTime")).getHexValue64()); - numInputChannels = xml.getIntAttribute (T("numInputs")); - numOutputChannels = xml.getIntAttribute (T("numOutputs")); - - return true; - } - - return false; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_PluginDescription.h b/src/juce_appframework/audio/plugins/juce_PluginDescription.h deleted file mode 100644 index ed506f11b2..0000000000 --- a/src/juce_appframework/audio/plugins/juce_PluginDescription.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_PLUGINDESCRIPTION_JUCEHEADER__ -#define __JUCE_PLUGINDESCRIPTION_JUCEHEADER__ - -#include "../../../juce_core/io/files/juce_File.h" -#include "../../../juce_core/text/juce_XmlElement.h" - - -//============================================================================== -/** - A small class to represent some facts about a particular type of plugin. - - This class is for storing and managing the details about a plugin without - actually having to load an instance of it. - - A KnownPluginList contains a list of PluginDescription objects. - - @see KnownPluginList -*/ -class JUCE_API PluginDescription -{ -public: - //============================================================================== - PluginDescription() throw(); - PluginDescription (const PluginDescription& other) throw(); - const PluginDescription& operator= (const PluginDescription& other) throw(); - ~PluginDescription() throw(); - - //============================================================================== - /** The name of the plugin. */ - String name; - - /** The plugin format, e.g. "VST", "AudioUnit", etc. - */ - String pluginFormatName; - - /** A category, such as "Dynamics", "Reverbs", etc. - */ - String category; - - /** The manufacturer. */ - String manufacturerName; - - /** The version. This string doesn't have any particular format. */ - String version; - - /** Either the file containing the plugin module, or some other unique way - of identifying it. - - E.g. for an AU, this would be an ID string that the component manager - could use to retrieve the plugin. For a VST, it's the file path. - */ - String fileOrIdentifier; - - /** The last time the plugin file was changed. - This is handy when scanning for new or changed plugins. - */ - Time lastFileModTime; - - /** A unique ID for the plugin. - - Note that this might not be unique between formats, e.g. a VST and some - other format might actually have the same id. - - @see createIdentifierString - */ - int uid; - - /** True if the plugin identifies itself as a synthesiser. */ - bool isInstrument; - - /** The number of inputs. */ - int numInputChannels; - - /** The number of outputs. */ - int numOutputChannels; - - /** Returns true if the two descriptions refer the the same plugin. - - This isn't quite as simple as them just having the same file (because of - shell plugins). - */ - bool isDuplicateOf (const PluginDescription& other) const; - - //============================================================================== - /** Returns a string that can be saved and used to uniquely identify the - plugin again. - - This contains less info than the XML encoding, and is independent of the - plugin's file location, so can be used to store a plugin ID for use - across different machines. - */ - const String createIdentifierString() const throw(); - - //============================================================================== - /** Creates an XML object containing these details. - - @see loadFromXml - */ - XmlElement* createXml() const; - - /** Reloads the info in this structure from an XML record that was previously - saved with createXML(). - - Returns true if the XML was a valid plugin description. - */ - bool loadFromXml (const XmlElement& xml); - - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -#endif // __JUCE_PLUGINDESCRIPTION_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp b/src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp deleted file mode 100644 index f664ceb69e..0000000000 --- a/src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_PluginDirectoryScanner.h" -#include "juce_AudioPluginFormat.h" -#include "../../../juce_core/io/files/juce_DirectoryIterator.h" - - -//============================================================================== -PluginDirectoryScanner::PluginDirectoryScanner (KnownPluginList& listToAddTo, - AudioPluginFormat& formatToLookFor, - FileSearchPath directoriesToSearch, - const bool recursive, - const File& deadMansPedalFile_) - : list (listToAddTo), - format (formatToLookFor), - deadMansPedalFile (deadMansPedalFile_), - nextIndex (0), - progress (0) -{ - directoriesToSearch.removeRedundantPaths(); - - filesOrIdentifiersToScan = format.searchPathsForPlugins (directoriesToSearch, recursive); - - // If any plugins have crashed recently when being loaded, move them to the - // end of the list to give the others a chance to load correctly.. - const StringArray crashedPlugins (getDeadMansPedalFile()); - - for (int i = 0; i < crashedPlugins.size(); ++i) - { - const String f = crashedPlugins[i]; - - for (int j = filesOrIdentifiersToScan.size(); --j >= 0;) - if (f == filesOrIdentifiersToScan[j]) - filesOrIdentifiersToScan.move (j, -1); - } -} - -PluginDirectoryScanner::~PluginDirectoryScanner() -{ -} - -//============================================================================== -const String PluginDirectoryScanner::getNextPluginFileThatWillBeScanned() const throw() -{ - return format.getNameOfPluginFromIdentifier (filesOrIdentifiersToScan [nextIndex]); -} - -bool PluginDirectoryScanner::scanNextFile (const bool dontRescanIfAlreadyInList) -{ - String file (filesOrIdentifiersToScan [nextIndex]); - - if (file.isNotEmpty()) - { - if (! list.isListingUpToDate (file)) - { - OwnedArray typesFound; - - // Add this plugin to the end of the dead-man's pedal list in case it crashes... - StringArray crashedPlugins (getDeadMansPedalFile()); - crashedPlugins.removeString (file); - crashedPlugins.add (file); - setDeadMansPedalFile (crashedPlugins); - - list.scanAndAddFile (file, - dontRescanIfAlreadyInList, - typesFound, - format); - - // Managed to load without crashing, so remove it from the dead-man's-pedal.. - crashedPlugins.removeString (file); - setDeadMansPedalFile (crashedPlugins); - - if (typesFound.size() == 0) - failedFiles.add (file); - } - - ++nextIndex; - progress = nextIndex / (float) filesOrIdentifiersToScan.size(); - } - - return nextIndex < filesOrIdentifiersToScan.size(); -} - -const StringArray PluginDirectoryScanner::getDeadMansPedalFile() throw() -{ - StringArray lines; - - if (deadMansPedalFile != File::nonexistent) - { - lines.addLines (deadMansPedalFile.loadFileAsString()); - lines.removeEmptyStrings(); - } - - return lines; -} - -void PluginDirectoryScanner::setDeadMansPedalFile (const StringArray& newContents) throw() -{ - if (deadMansPedalFile != File::nonexistent) - deadMansPedalFile.replaceWithText (newContents.joinIntoString ("\n"), true, true); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.h b/src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.h deleted file mode 100644 index f7c1f79c25..0000000000 --- a/src/juce_appframework/audio/plugins/juce_PluginDirectoryScanner.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_PLUGINDIRECTORYSCANNER_JUCEHEADER__ -#define __JUCE_PLUGINDIRECTORYSCANNER_JUCEHEADER__ - -#include "juce_KnownPluginList.h" -#include "juce_AudioPluginFormatManager.h" - - -//============================================================================== -/** - Scans a directory for plugins, and adds them to a KnownPluginList. - - To use one of these, create it and call scanNextFile() repeatedly, until - it returns false. -*/ -class JUCE_API PluginDirectoryScanner -{ -public: - //============================================================================== - /** - Creates a scanner. - - @param listToAddResultsTo this will get the new types added to it. - @param formatToLookFor this is the type of format that you want to look for - @param directoriesToSearch the path to search - @param searchRecursively true to search recursively - @param deadMansPedalFile if this isn't File::nonexistent, then it will - be used as a file to store the names of any plugins - that crash during initialisation. If there are - any plugins listed in it, then these will always - be scanned after all other possible files have - been tried - in this way, even if there's a few - dodgy plugins in your path, then a couple of rescans - will still manage to find all the proper plugins. - It's probably best to choose a file in the user's - application data directory (alongside your app's - settings file) for this. The file format it uses - is just a list of filenames of the modules that - failed. - */ - PluginDirectoryScanner (KnownPluginList& listToAddResultsTo, - AudioPluginFormat& formatToLookFor, - FileSearchPath directoriesToSearch, - const bool searchRecursively, - const File& deadMansPedalFile); - - /** Destructor. */ - ~PluginDirectoryScanner(); - - //============================================================================== - /** Tries the next likely-looking file. - - If dontRescanIfAlreadyInList is true, then the file will only be loaded and - re-tested if it's not already in the list, or if the file's modification - time has changed since the list was created. If dontRescanIfAlreadyInList is - false, the file will always be reloaded and tested. - - Returns false when there are no more files to try. - */ - bool scanNextFile (const bool dontRescanIfAlreadyInList); - - /** Returns the description of the plugin that will be scanned during the next - call to scanNextFile(). - - This is handy if you want to show the user which file is currently getting - scanned. - */ - const String getNextPluginFileThatWillBeScanned() const throw(); - - /** Returns the estimated progress, between 0 and 1. - */ - float getProgress() const { return progress; } - - /** This returns a list of all the filenames of things that looked like being - a plugin file, but which failed to open for some reason. - */ - const StringArray& getFailedFiles() const throw() { return failedFiles; } - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - KnownPluginList& list; - AudioPluginFormat& format; - StringArray filesOrIdentifiersToScan; - File deadMansPedalFile; - StringArray failedFiles; - int nextIndex; - float progress; - - const StringArray getDeadMansPedalFile() throw(); - void setDeadMansPedalFile (const StringArray& newContents) throw(); - - PluginDirectoryScanner (const PluginDirectoryScanner&); - const PluginDirectoryScanner& operator= (const PluginDirectoryScanner&); -}; - - -#endif // __JUCE_PLUGINDIRECTORYSCANNER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/plugins/juce_PluginListComponent.cpp b/src/juce_appframework/audio/plugins/juce_PluginListComponent.cpp deleted file mode 100644 index 6ff6367b1b..0000000000 --- a/src/juce_appframework/audio/plugins/juce_PluginListComponent.cpp +++ /dev/null @@ -1,304 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_PluginListComponent.h" -#include "juce_PluginDirectoryScanner.h" -#include "../../gui/components/controls/juce_TextEditor.h" -#include "../../gui/components/windows/juce_AlertWindow.h" -#include "../../gui/graphics/fonts/juce_GlyphArrangement.h" -#include "../../gui/components/filebrowser/juce_FileSearchPathListComponent.h" -#include "../../../juce_core/text/juce_LocalisedStrings.h" -#include "../../events/juce_MessageManager.h" - - -//============================================================================== -PluginListComponent::PluginListComponent (KnownPluginList& listToEdit, - const File& deadMansPedalFile_, - PropertiesFile* const propertiesToUse_) - : list (listToEdit), - deadMansPedalFile (deadMansPedalFile_), - propertiesToUse (propertiesToUse_) -{ - addAndMakeVisible (listBox = new ListBox (String::empty, this)); - - addAndMakeVisible (optionsButton = new TextButton ("Options...")); - optionsButton->addButtonListener (this); - optionsButton->setTriggeredOnMouseDown (true); - - setSize (400, 600); - list.addChangeListener (this); -} - -PluginListComponent::~PluginListComponent() -{ - list.removeChangeListener (this); - deleteAllChildren(); -} - -void PluginListComponent::resized() -{ - listBox->setBounds (0, 0, getWidth(), getHeight() - 30); - optionsButton->changeWidthToFitText (24); - optionsButton->setTopLeftPosition (8, getHeight() - 28); -} - -void PluginListComponent::changeListenerCallback (void*) -{ - listBox->updateContent(); - listBox->repaint(); -} - -int PluginListComponent::getNumRows() -{ - return list.getNumTypes(); -} - -void PluginListComponent::paintListBoxItem (int row, - Graphics& g, - int width, int height, - bool rowIsSelected) -{ - if (rowIsSelected) - g.fillAll (findColour (TextEditor::highlightColourId)); - - const PluginDescription* const pd = list.getType (row); - - if (pd != 0) - { - GlyphArrangement ga; - ga.addCurtailedLineOfText (Font (height * 0.7f, Font::bold), pd->name, 8.0f, height * 0.8f, width - 10.0f, true); - - g.setColour (Colours::black); - ga.draw (g); - - float x, y, r, b; - ga.getBoundingBox (0, -1, x, y, r, b, false); - - String desc; - desc << pd->pluginFormatName - << (pd->isInstrument ? " instrument" : " effect") - << " - " - << pd->numInputChannels << (pd->numInputChannels == 1 ? " in" : " ins") - << " / " - << pd->numOutputChannels << (pd->numOutputChannels == 1 ? " out" : " outs"); - - if (pd->manufacturerName.isNotEmpty()) - desc << " - " << pd->manufacturerName; - - if (pd->version.isNotEmpty()) - desc << " - " << pd->version; - - if (pd->category.isNotEmpty()) - desc << " - category: '" << pd->category << '\''; - - g.setColour (Colours::grey); - - ga.clear(); - ga.addCurtailedLineOfText (Font (height * 0.6f), desc, r + 10.0f, height * 0.8f, width - r - 12.0f, true); - ga.draw (g); - } -} - -void PluginListComponent::deleteKeyPressed (int lastRowSelected) -{ - list.removeType (lastRowSelected); -} - -void PluginListComponent::buttonClicked (Button* b) -{ - if (optionsButton == b) - { - PopupMenu menu; - menu.addItem (1, TRANS("Clear list")); - menu.addItem (5, TRANS("Remove selected plugin from list"), listBox->getNumSelectedRows() > 0); - menu.addItem (6, TRANS("Show folder containing selected plugin"), listBox->getNumSelectedRows() > 0); - menu.addItem (7, TRANS("Remove any plugins whose files no longer exist")); - menu.addSeparator(); - menu.addItem (2, TRANS("Sort alphabetically")); - menu.addItem (3, TRANS("Sort by category")); - menu.addItem (4, TRANS("Sort by manufacturer")); - menu.addSeparator(); - - for (int i = 0; i < AudioPluginFormatManager::getInstance()->getNumFormats(); ++i) - { - AudioPluginFormat* const format = AudioPluginFormatManager::getInstance()->getFormat (i); - - if (format->getDefaultLocationsToSearch().getNumPaths() > 0) - menu.addItem (10 + i, "Scan for new or updated " + format->getName() + " plugins..."); - } - - const int r = menu.showAt (optionsButton); - - if (r == 1) - { - list.clear(); - } - else if (r == 2) - { - list.sort (KnownPluginList::sortAlphabetically); - } - else if (r == 3) - { - list.sort (KnownPluginList::sortByCategory); - } - else if (r == 4) - { - list.sort (KnownPluginList::sortByManufacturer); - } - else if (r == 5) - { - const SparseSet selected (listBox->getSelectedRows()); - - for (int i = list.getNumTypes(); --i >= 0;) - if (selected.contains (i)) - list.removeType (i); - } - else if (r == 6) - { - const PluginDescription* const desc = list.getType (listBox->getSelectedRow()); - - if (desc != 0) - { - if (File (desc->fileOrIdentifier).existsAsFile()) - File (desc->fileOrIdentifier).getParentDirectory().startAsProcess(); - } - } - else if (r == 7) - { - for (int i = list.getNumTypes(); --i >= 0;) - { - if (! AudioPluginFormatManager::getInstance()->doesPluginStillExist (*list.getType (i))) - { - list.removeType (i); - } - } - } - else if (r != 0) - { - typeToScan = r - 10; - startTimer (1); - } - } -} - -void PluginListComponent::timerCallback() -{ - stopTimer(); - scanFor (AudioPluginFormatManager::getInstance()->getFormat (typeToScan)); -} - -bool PluginListComponent::isInterestedInFileDrag (const StringArray& /*files*/) -{ - return true; -} - -void PluginListComponent::filesDropped (const StringArray& files, int, int) -{ - OwnedArray typesFound; - list.scanAndAddDragAndDroppedFiles (files, typesFound); -} - -void PluginListComponent::scanFor (AudioPluginFormat* format) -{ - if (format == 0) - return; - - FileSearchPath path (format->getDefaultLocationsToSearch()); - - if (propertiesToUse != 0) - path = propertiesToUse->getValue ("lastPluginScanPath_" + format->getName(), path.toString()); - - { - AlertWindow aw (TRANS("Select folders to scan..."), String::empty, AlertWindow::NoIcon); - FileSearchPathListComponent pathList; - pathList.setSize (500, 300); - pathList.setPath (path); - - aw.addCustomComponent (&pathList); - aw.addButton (TRANS("Scan"), 1, KeyPress::returnKey); - aw.addButton (TRANS("Cancel"), 0, KeyPress (KeyPress::escapeKey)); - - if (aw.runModalLoop() == 0) - return; - - path = pathList.getPath(); - } - - if (propertiesToUse != 0) - { - propertiesToUse->setValue ("lastPluginScanPath_" + format->getName(), path.toString()); - propertiesToUse->saveIfNeeded(); - } - - double progress = 0.0; - - AlertWindow aw (TRANS("Scanning for plugins..."), - TRANS("Searching for all possible plugin files..."), AlertWindow::NoIcon); - - aw.addButton (TRANS("Cancel"), 0, KeyPress (KeyPress::escapeKey)); - aw.addProgressBarComponent (progress); - - aw.enterModalState(); - - MessageManager::getInstance()->runDispatchLoopUntil (300); - - PluginDirectoryScanner scanner (list, *format, path, true, deadMansPedalFile); - - for (;;) - { - aw.setMessage (TRANS("Testing:\n\n") - + scanner.getNextPluginFileThatWillBeScanned()); - - MessageManager::getInstance()->runDispatchLoopUntil (20); - - if (! scanner.scanNextFile (true)) - break; - - if (! aw.isCurrentlyModal()) - break; - - progress = scanner.getProgress(); - } - - if (scanner.getFailedFiles().size() > 0) - { - StringArray shortNames; - - for (int i = 0; i < scanner.getFailedFiles().size(); ++i) - shortNames.add (File (scanner.getFailedFiles()[i]).getFileName()); - - AlertWindow::showMessageBox (AlertWindow::InfoIcon, - TRANS("Scan complete"), - TRANS("Note that the following files appeared to be plugin files, but failed to load correctly:\n\n") - + shortNames.joinIntoString (", ")); - } -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/plugins/juce_PluginListComponent.h b/src/juce_appframework/audio/plugins/juce_PluginListComponent.h deleted file mode 100644 index c27f3b69f9..0000000000 --- a/src/juce_appframework/audio/plugins/juce_PluginListComponent.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_PLUGINLISTCOMPONENT_JUCEHEADER__ -#define __JUCE_PLUGINLISTCOMPONENT_JUCEHEADER__ - -#include "juce_KnownPluginList.h" -#include "juce_AudioPluginFormat.h" -#include "../../gui/components/controls/juce_ListBox.h" -#include "../../gui/components/buttons/juce_TextButton.h" -#include "../../application/juce_PropertiesFile.h" - - -//============================================================================== -/** - A component displaying a list of plugins, with options to scan for them, - add, remove and sort them. -*/ -class JUCE_API PluginListComponent : public Component, - public ListBoxModel, - public ChangeListener, - public ButtonListener, - public Timer -{ -public: - //============================================================================== - /** - Creates the list component. - - For info about the deadMansPedalFile, see the PluginDirectoryScanner constructor. - - The properties file, if supplied, is used to store the user's last search paths. - */ - PluginListComponent (KnownPluginList& listToRepresent, - const File& deadMansPedalFile, - PropertiesFile* const propertiesToUse); - - /** Destructor. */ - ~PluginListComponent(); - - //============================================================================== - /** @internal */ - void resized(); - /** @internal */ - bool isInterestedInFileDrag (const StringArray& files); - /** @internal */ - void filesDropped (const StringArray& files, int, int); - /** @internal */ - int getNumRows(); - /** @internal */ - void paintListBoxItem (int row, Graphics& g, int width, int height, bool rowIsSelected); - /** @internal */ - void deleteKeyPressed (int lastRowSelected); - /** @internal */ - void buttonClicked (Button* b); - /** @internal */ - void changeListenerCallback (void*); - /** @internal */ - void timerCallback(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - KnownPluginList& list; - File deadMansPedalFile; - ListBox* listBox; - TextButton* optionsButton; - PropertiesFile* propertiesToUse; - int typeToScan; - - void scanFor (AudioPluginFormat* format); - - PluginListComponent (const PluginListComponent&); - const PluginListComponent& operator= (const PluginListComponent&); -}; - - -#endif // __JUCE_PLUGINLISTCOMPONENT_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_AudioPlayHead.h b/src/juce_appframework/audio/processors/juce_AudioPlayHead.h deleted file mode 100644 index 7561169c4f..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioPlayHead.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ -#define __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ - - -//============================================================================== -/** - A subclass of AudioPlayHead can supply information about the position and - status of a moving play head during audio playback. - - One of these can be supplied to an AudioProcessor object so that it can find - out about the position of the audio that it is rendering. - - @see AudioProcessor::setPlayHead, AudioProcessor::getPlayHead -*/ -class JUCE_API AudioPlayHead -{ -protected: - //============================================================================== - AudioPlayHead() {} - -public: - virtual ~AudioPlayHead() {} - - //============================================================================== - /** Frame rate types. */ - enum FrameRateType - { - fps24 = 0, - fps25 = 1, - fps2997 = 2, - fps30 = 3, - fps2997drop = 4, - fps30drop = 5, - fpsUnknown = 99 - }; - - //============================================================================== - /** This structure is filled-in by the AudioPlayHead::getCurrentPosition() method. - */ - struct CurrentPositionInfo - { - /** The tempo in BPM */ - double bpm; - - /** Time signature numerator, e.g. the 3 of a 3/4 time sig */ - int timeSigNumerator; - /** Time signature denominator, e.g. the 4 of a 3/4 time sig */ - int timeSigDenominator; - - /** The current play position, in seconds from the start of the edit. */ - double timeInSeconds; - - /** For timecode, the position of the start of the edit, in seconds from 00:00:00:00. */ - double editOriginTime; - - /** The current play position in pulses-per-quarter-note. - - This is the number of quarter notes since the edit start. - */ - double ppqPosition; - - /** The position of the start of the last bar, in pulses-per-quarter-note. - - This is the number of quarter notes from the start of the edit to the - start of the current bar. - - Note - this value may be unavailable on some hosts, e.g. Pro-Tools. If - it's not available, the value will be 0. - */ - double ppqPositionOfLastBarStart; - - /** The video frame rate, if applicable. */ - FrameRateType frameRate; - - /** True if the transport is currently playing. */ - bool isPlaying; - - /** True if the transport is currently recording. - - (When isRecording is true, then isPlaying will also be true). - */ - bool isRecording; - }; - - //============================================================================== - /** Fills-in the given structure with details about the transport's - position at the start of the current processing block. - */ - virtual bool getCurrentPosition (CurrentPositionInfo& result) = 0; -}; - - -#endif // __JUCE_AUDIOPLAYHEAD_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp b/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp deleted file mode 100644 index df14765c59..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessor.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioProcessor.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" -#include "../../../juce_core/text/juce_XmlDocument.h" - - -//============================================================================== -AudioProcessor::AudioProcessor() - : playHead (0), - activeEditor (0), - sampleRate (0), - blockSize (0), - numInputChannels (0), - numOutputChannels (0), - latencySamples (0), - suspended (false), - nonRealtime (false) -{ -} - -AudioProcessor::~AudioProcessor() -{ - // ooh, nasty - the editor should have been deleted before the filter - // that it refers to is deleted.. - jassert (activeEditor == 0); - -#ifdef JUCE_DEBUG - // This will fail if you've called beginParameterChangeGesture() for one - // or more parameters without having made a corresponding call to endParameterChangeGesture... - jassert (changingParams.countNumberOfSetBits() == 0); -#endif -} - -void AudioProcessor::setPlayHead (AudioPlayHead* const newPlayHead) throw() -{ - playHead = newPlayHead; -} - -void AudioProcessor::addListener (AudioProcessorListener* const newListener) throw() -{ - const ScopedLock sl (listenerLock); - listeners.addIfNotAlreadyThere (newListener); -} - -void AudioProcessor::removeListener (AudioProcessorListener* const listenerToRemove) throw() -{ - const ScopedLock sl (listenerLock); - listeners.removeValue (listenerToRemove); -} - -void AudioProcessor::setPlayConfigDetails (const int numIns, - const int numOuts, - const double sampleRate_, - const int blockSize_) throw() -{ - numInputChannels = numIns; - numOutputChannels = numOuts; - sampleRate = sampleRate_; - blockSize = blockSize_; -} - -void AudioProcessor::setNonRealtime (const bool nonRealtime_) throw() -{ - nonRealtime = nonRealtime_; -} - -void AudioProcessor::setLatencySamples (const int newLatency) -{ - if (latencySamples != newLatency) - { - latencySamples = newLatency; - updateHostDisplay(); - } -} - -void AudioProcessor::setParameterNotifyingHost (const int parameterIndex, - const float newValue) -{ - setParameter (parameterIndex, newValue); - sendParamChangeMessageToListeners (parameterIndex, newValue); -} - -void AudioProcessor::sendParamChangeMessageToListeners (const int parameterIndex, const float newValue) -{ - jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); - - for (int i = listeners.size(); --i >= 0;) - { - listenerLock.enter(); - AudioProcessorListener* const l = (AudioProcessorListener*) listeners [i]; - listenerLock.exit(); - - if (l != 0) - l->audioProcessorParameterChanged (this, parameterIndex, newValue); - } -} - -void AudioProcessor::beginParameterChangeGesture (int parameterIndex) -{ - jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); - -#ifdef JUCE_DEBUG - // This means you've called beginParameterChangeGesture twice in succession without a matching - // call to endParameterChangeGesture. That might be fine in most hosts, but better to avoid doing it. - jassert (! changingParams [parameterIndex]); - changingParams.setBit (parameterIndex); -#endif - - for (int i = listeners.size(); --i >= 0;) - { - listenerLock.enter(); - AudioProcessorListener* const l = (AudioProcessorListener*) listeners [i]; - listenerLock.exit(); - - if (l != 0) - l->audioProcessorParameterChangeGestureBegin (this, parameterIndex); - } -} - -void AudioProcessor::endParameterChangeGesture (int parameterIndex) -{ - jassert (((unsigned int) parameterIndex) < (unsigned int) getNumParameters()); - -#ifdef JUCE_DEBUG - // This means you've called endParameterChangeGesture without having previously called - // endParameterChangeGesture. That might be fine in most hosts, but better to keep the - // calls matched correctly. - jassert (changingParams [parameterIndex]); - changingParams.clearBit (parameterIndex); -#endif - - for (int i = listeners.size(); --i >= 0;) - { - listenerLock.enter(); - AudioProcessorListener* const l = (AudioProcessorListener*) listeners [i]; - listenerLock.exit(); - - if (l != 0) - l->audioProcessorParameterChangeGestureEnd (this, parameterIndex); - } -} - -void AudioProcessor::updateHostDisplay() -{ - for (int i = listeners.size(); --i >= 0;) - { - listenerLock.enter(); - AudioProcessorListener* const l = (AudioProcessorListener*) listeners [i]; - listenerLock.exit(); - - if (l != 0) - l->audioProcessorChanged (this); - } -} - -bool AudioProcessor::isParameterAutomatable (int /*parameterIndex*/) const -{ - return true; -} - -bool AudioProcessor::isMetaParameter (int /*parameterIndex*/) const -{ - return false; -} - -void AudioProcessor::suspendProcessing (const bool shouldBeSuspended) -{ - const ScopedLock sl (callbackLock); - suspended = shouldBeSuspended; -} - -void AudioProcessor::reset() -{ -} - -//============================================================================== -void AudioProcessor::editorBeingDeleted (AudioProcessorEditor* const editor) throw() -{ - const ScopedLock sl (callbackLock); - - jassert (activeEditor == editor); - - if (activeEditor == editor) - activeEditor = 0; -} - -AudioProcessorEditor* AudioProcessor::createEditorIfNeeded() -{ - if (activeEditor != 0) - return activeEditor; - - AudioProcessorEditor* const ed = createEditor(); - - if (ed != 0) - { - // you must give your editor comp a size before returning it.. - jassert (ed->getWidth() > 0 && ed->getHeight() > 0); - - const ScopedLock sl (callbackLock); - activeEditor = ed; - } - - return ed; -} - -//============================================================================== -void AudioProcessor::getCurrentProgramStateInformation (JUCE_NAMESPACE::MemoryBlock& destData) -{ - getStateInformation (destData); -} - -void AudioProcessor::setCurrentProgramStateInformation (const void* data, int sizeInBytes) -{ - setStateInformation (data, sizeInBytes); -} - -//============================================================================== -// magic number to identify memory blocks that we've stored as XML -const uint32 magicXmlNumber = 0x21324356; - -void AudioProcessor::copyXmlToBinary (const XmlElement& xml, - JUCE_NAMESPACE::MemoryBlock& destData) -{ - const String xmlString (xml.createDocument (String::empty, true, false)); - const int stringLength = xmlString.length(); - - destData.setSize (stringLength + 10); - - char* const d = (char*) destData.getData(); - *(uint32*) d = swapIfBigEndian ((const uint32) magicXmlNumber); - *(uint32*) (d + 4) = swapIfBigEndian ((const uint32) stringLength); - - xmlString.copyToBuffer (d + 8, stringLength); -} - -XmlElement* AudioProcessor::getXmlFromBinary (const void* data, - const int sizeInBytes) -{ - if (sizeInBytes > 8 - && littleEndianInt ((const char*) data) == magicXmlNumber) - { - const uint32 stringLength = littleEndianInt (((const char*) data) + 4); - - if (stringLength > 0) - { - XmlDocument doc (String (((const char*) data) + 8, - jmin ((sizeInBytes - 8), stringLength))); - - return doc.getDocumentElement(); - } - } - - return 0; -} - -//============================================================================== -void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) -{ -} - -void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProcessor*, int) -{ -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessor.h b/src/juce_appframework/audio/processors/juce_AudioProcessor.h deleted file mode 100644 index 87a64055cf..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessor.h +++ /dev/null @@ -1,589 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPROCESSOR_JUCEHEADER__ -#define __JUCE_AUDIOPROCESSOR_JUCEHEADER__ - -#include "juce_AudioProcessorEditor.h" -#include "../dsp/juce_AudioSampleBuffer.h" -#include "../midi/juce_MidiBuffer.h" -#include "../../../juce_core/containers/juce_BitArray.h" -#include "juce_AudioProcessorListener.h" -#include "juce_AudioPlayHead.h" - - -//============================================================================== -/** - Base class for audio processing filters or plugins. - - This is intended to act as a base class of audio filter that is general enough to - be wrapped as a VST, AU, RTAS, etc, or used internally. - - It is also used by the plugin hosting code as the wrapper around an instance - of a loaded plugin. - - Derive your filter class from this base class, and if you're building a plugin, - you should implement a global function called createPluginFilter() which creates - and returns a new instance of your subclass. -*/ -class JUCE_API AudioProcessor -{ -protected: - //============================================================================== - /** Constructor. - - You can also do your initialisation tasks in the initialiseFilterInfo() - call, which will be made after this object has been created. - */ - AudioProcessor(); - -public: - /** Destructor. */ - virtual ~AudioProcessor(); - - //============================================================================== - /** Returns the name of this processor. - */ - virtual const String getName() const = 0; - - //============================================================================== - /** Called before playback starts, to let the filter prepare itself. - - The sample rate is the target sample rate, and will remain constant until - playback stops. - - The estimatedSamplesPerBlock value is a HINT about the typical number of - samples that will be processed for each callback, but isn't any kind - of guarantee. The actual block sizes that the host uses may be different - each time the callback happens, and may be more or less than this value. - */ - virtual void prepareToPlay (double sampleRate, - int estimatedSamplesPerBlock) = 0; - - /** Called after playback has stopped, to let the filter free up any resources it - no longer needs. - */ - virtual void releaseResources() = 0; - - /** Renders the next block. - - When this method is called, the buffer contains a number of channels which is - at least as great as the maximum number of input and output channels that - this filter is using. It will be filled with the filter's input data and - should be replaced with the filter's output. - - So for example if your filter has 2 input channels and 4 output channels, then - the buffer will contain 4 channels, the first two being filled with the - input data. Your filter should read these, do its processing, and replace - the contents of all 4 channels with its output. - - Or if your filter has 5 inputs and 2 outputs, the buffer will have 5 channels, - all filled with data, and your filter should overwrite the first 2 of these - with its output. But be VERY careful not to write anything to the last 3 - channels, as these might be mapped to memory that the host assumes is read-only! - - Note that if you have more outputs than inputs, then only those channels that - correspond to an input channel are guaranteed to contain sensible data - e.g. - in the case of 2 inputs and 4 outputs, the first two channels contain the input, - but the last two channels may contain garbage, so you should be careful not to - let this pass through without being overwritten or cleared. - - Also note that the buffer may have more channels than are strictly necessary, - but your should only read/write from the ones that your filter is supposed to - be using. - - The number of samples in these buffers is NOT guaranteed to be the same for every - callback, and may be more or less than the estimated value given to prepareToPlay(). - Your code must be able to cope with variable-sized blocks, or you're going to get - clicks and crashes! - - If the filter is receiving a midi input, then the midiMessages array will be filled - with the midi messages for this block. Each message's timestamp will indicate the - message's time, as a number of samples from the start of the block. - - Any messages left in the midi buffer when this method has finished are assumed to - be the filter's midi output. This means that your filter should be careful to - clear any incoming messages from the array if it doesn't want them to be passed-on. - - Be very careful about what you do in this callback - it's going to be called by - the audio thread, so any kind of interaction with the UI is absolutely - out of the question. If you change a parameter in here and need to tell your UI to - update itself, the best way is probably to inherit from a ChangeBroadcaster, let - the UI components register as listeners, and then call sendChangeMessage() inside the - processBlock() method to send out an asynchronous message. You could also use - the AsyncUpdater class in a similar way. - */ - virtual void processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) = 0; - - //============================================================================== - /** Returns the current AudioPlayHead object that should be used to find - out the state and position of the playhead. - - You can call this from your processBlock() method, and use the AudioPlayHead - object to get the details about the time of the start of the block currently - being processed. - - If the host hasn't supplied a playhead object, this will return 0. - */ - AudioPlayHead* getPlayHead() const throw() { return playHead; } - - - //============================================================================== - /** Returns the current sample rate. - - This can be called from your processBlock() method - it's not guaranteed - to be valid at any other time, and may return 0 if it's unknown. - */ - double getSampleRate() const throw() { return sampleRate; } - - /** Returns the current typical block size that is being used. - - This can be called from your processBlock() method - it's not guaranteed - to be valid at any other time. - - Remember it's not the ONLY block size that may be used when calling - processBlock, it's just the normal one. The actual block sizes used may be - larger or smaller than this, and will vary between successive calls. - */ - int getBlockSize() const throw() { return blockSize; } - - //============================================================================== - /** Returns the number of input channels that the host will be sending the filter. - - If writing a plugin, your JucePluginCharacteristics.h file should specify the - number of channels that your filter would prefer to have, and this method lets - you know how many the host is actually using. - - Note that this method is only valid during or after the prepareToPlay() - method call. Until that point, the number of channels will be unknown. - */ - int getNumInputChannels() const throw() { return numInputChannels; } - - /** Returns the number of output channels that the host will be sending the filter. - - If writing a plugin, your JucePluginCharacteristics.h file should specify the - number of channels that your filter would prefer to have, and this method lets - you know how many the host is actually using. - - Note that this method is only valid during or after the prepareToPlay() - method call. Until that point, the number of channels will be unknown. - */ - int getNumOutputChannels() const throw() { return numOutputChannels; } - - /** Returns the name of one of the input channels, as returned by the host. - - The host might not supply very useful names for channels, and this might be - something like "1", "2", "left", "right", etc. - */ - virtual const String getInputChannelName (const int channelIndex) const = 0; - - /** Returns the name of one of the output channels, as returned by the host. - - The host might not supply very useful names for channels, and this might be - something like "1", "2", "left", "right", etc. - */ - virtual const String getOutputChannelName (const int channelIndex) const = 0; - - /** Returns true if the specified channel is part of a stereo pair with its neighbour. */ - virtual bool isInputChannelStereoPair (int index) const = 0; - - /** Returns true if the specified channel is part of a stereo pair with its neighbour. */ - virtual bool isOutputChannelStereoPair (int index) const = 0; - - /** This returns the number of samples delay that the filter imposes on the audio - passing through it. - - The host will call this to find the latency - the filter itself should set this value - by calling setLatencySamples() as soon as it can during its initialisation. - */ - int getLatencySamples() const throw() { return latencySamples; } - - /** The filter should call this to set the number of samples delay that it introduces. - - The filter should call this as soon as it can during initialisation, and can call it - later if the value changes. - */ - void setLatencySamples (const int newLatency); - - /** Returns true if the processor wants midi messages. */ - virtual bool acceptsMidi() const = 0; - - /** Returns true if the processor produces midi messages. */ - virtual bool producesMidi() const = 0; - - //============================================================================== - /** This returns a critical section that will automatically be locked while the host - is calling the processBlock() method. - - Use it from your UI or other threads to lock access to variables that are used - by the process callback, but obviously be careful not to keep it locked for - too long, because that could cause stuttering playback. If you need to do something - that'll take a long time and need the processing to stop while it happens, use the - suspendProcessing() method instead. - - @see suspendProcessing - */ - const CriticalSection& getCallbackLock() const throw() { return callbackLock; } - - /** Enables and disables the processing callback. - - If you need to do something time-consuming on a thread and would like to make sure - the audio processing callback doesn't happen until you've finished, use this - to disable the callback and re-enable it again afterwards. - - E.g. - @code - void loadNewPatch() - { - suspendProcessing (true); - - ..do something that takes ages.. - - suspendProcessing (false); - } - @endcode - - If the host tries to make an audio callback while processing is suspended, the - filter will return an empty buffer, but won't block the audio thread like it would - do if you use the getCallbackLock() critical section to synchronise access. - - If you're going to use this, your processBlock() method must call isSuspended() and - check whether it's suspended or not. If it is, then it should skip doing any real - processing, either emitting silence or passing the input through unchanged. - - @see getCallbackLock - */ - void suspendProcessing (const bool shouldBeSuspended); - - /** Returns true if processing is currently suspended. - @see suspendProcessing - */ - bool isSuspended() const throw() { return suspended; } - - /** A plugin can override this to be told when it should reset any playing voices. - - The default implementation does nothing, but a host may call this to tell the - plugin that it should stop any tails or sounds that have been left running. - */ - virtual void reset(); - - //============================================================================== - /** Returns true if the processor is being run in an offline mode for rendering. - - If the processor is being run live on realtime signals, this returns false. - If the mode is unknown, this will assume it's realtime and return false. - - This value may be unreliable until the prepareToPlay() method has been called, - and could change each time prepareToPlay() is called. - - @see setNonRealtime() - */ - bool isNonRealtime() const throw() { return nonRealtime; } - - /** Called by the host to tell this processor whether it's being used in a non-realime - capacity for offline rendering or bouncing. - - Whatever value is passed-in will be - */ - void setNonRealtime (const bool isNonRealtime) throw(); - - //============================================================================== - /** Creates the filter's UI. - - This can return 0 if you want a UI-less filter, in which case the host may create - a generic UI that lets the user twiddle the parameters directly. - - If you do want to pass back a component, the component should be created and set to - the correct size before returning it. - - Remember not to do anything silly like allowing your filter to keep a pointer to - the component that gets created - it could be deleted later without any warning, which - would make your pointer into a dangler. Use the getActiveEditor() method instead. - - The correct way to handle the connection between an editor component and its - filter is to use something like a ChangeBroadcaster so that the editor can - register itself as a listener, and be told when a change occurs. This lets them - safely unregister themselves when they are deleted. - - Here are a few things to bear in mind when writing an editor: - - - Initially there won't be an editor, until the user opens one, or they might - not open one at all. Your filter mustn't rely on it being there. - - An editor object may be deleted and a replacement one created again at any time. - - It's safe to assume that an editor will be deleted before its filter. - */ - virtual AudioProcessorEditor* createEditor() = 0; - - //============================================================================== - /** Returns the active editor, if there is one. - - Bear in mind this can return 0, even if an editor has previously been - opened. - */ - AudioProcessorEditor* getActiveEditor() const throw() { return activeEditor; } - - /** Returns the active editor, or if there isn't one, it will create one. - - This may call createEditor() internally to create the component. - */ - AudioProcessorEditor* createEditorIfNeeded(); - - //============================================================================== - /** This must return the correct value immediately after the object has been - created, and mustn't change the number of parameters later. - */ - virtual int getNumParameters() = 0; - - /** Returns the name of a particular parameter. */ - virtual const String getParameterName (int parameterIndex) = 0; - - /** Called by the host to find out the value of one of the filter's parameters. - - The host will expect the value returned to be between 0 and 1.0. - - This could be called quite frequently, so try to make your code efficient. - It's also likely to be called by non-UI threads, so the code in here should - be thread-aware. - */ - virtual float getParameter (int parameterIndex) = 0; - - /** Returns the value of a parameter as a text string. */ - virtual const String getParameterText (int parameterIndex) = 0; - - /** The host will call this method to change the value of one of the filter's parameters. - - The host may call this at any time, including during the audio processing - callback, so the filter has to process this very fast and avoid blocking. - - If you want to set the value of a parameter internally, e.g. from your - editor component, then don't call this directly - instead, use the - setParameterNotifyingHost() method, which will also send a message to - the host telling it about the change. If the message isn't sent, the host - won't be able to automate your parameters properly. - - The value passed will be between 0 and 1.0. - */ - virtual void setParameter (int parameterIndex, - float newValue) = 0; - - /** Your filter can call this when it needs to change one of its parameters. - - This could happen when the editor or some other internal operation changes - a parameter. This method will call the setParameter() method to change the - value, and will then send a message to the host telling it about the change. - - Note that to make sure the host correctly handles automation, you should call - the beginParameterChangeGesture() and endParameterChangeGesture() methods to - tell the host when the user has started and stopped changing the parameter. - */ - void setParameterNotifyingHost (int parameterIndex, - float newValue); - - /** Returns true if the host can automate this parameter. - - By default, this returns true for all parameters. - */ - virtual bool isParameterAutomatable (int parameterIndex) const; - - /** Should return true if this parameter is a "meta" parameter. - - A meta-parameter is a parameter that changes other params. It is used - by some hosts (e.g. AudioUnit hosts). - - By default this returns false. - */ - virtual bool isMetaParameter (int parameterIndex) const; - - /** Sends a signal to the host to tell it that the user is about to start changing this - parameter. - - This allows the host to know when a parameter is actively being held by the user, and - it may use this information to help it record automation. - - If you call this, it must be matched by a later call to endParameterChangeGesture(). - */ - void beginParameterChangeGesture (int parameterIndex); - - /** Tells the host that the user has finished changing this parameter. - - This allows the host to know when a parameter is actively being held by the user, and - it may use this information to help it record automation. - - A call to this method must follow a call to beginParameterChangeGesture(). - */ - void endParameterChangeGesture (int parameterIndex); - - /** The filter can call this when something (apart from a parameter value) has changed. - - It sends a hint to the host that something like the program, number of parameters, - etc, has changed, and that it should update itself. - */ - void updateHostDisplay(); - - //============================================================================== - /** Returns the number of preset programs the filter supports. - - The value returned must be valid as soon as this object is created, and - must not change over its lifetime. - - This value shouldn't be less than 1. - */ - virtual int getNumPrograms() = 0; - - /** Returns the number of the currently active program. - */ - virtual int getCurrentProgram() = 0; - - /** Called by the host to change the current program. - */ - virtual void setCurrentProgram (int index) = 0; - - /** Must return the name of a given program. */ - virtual const String getProgramName (int index) = 0; - - /** Called by the host to rename a program. - */ - virtual void changeProgramName (int index, const String& newName) = 0; - - //============================================================================== - /** The host will call this method when it wants to save the filter's internal state. - - This must copy any info about the filter's state into the block of memory provided, - so that the host can store this and later restore it using setStateInformation(). - - Note that there's also a getCurrentProgramStateInformation() method, which only - stores the current program, not the state of the entire filter. - - See also the helper function copyXmlToBinary() for storing settings as XML. - - @see getCurrentProgramStateInformation - */ - virtual void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData) = 0; - - /** The host will call this method if it wants to save the state of just the filter's - current program. - - Unlike getStateInformation, this should only return the current program's state. - - Not all hosts support this, and if you don't implement it, the base class - method just calls getStateInformation() instead. If you do implement it, be - sure to also implement getCurrentProgramStateInformation. - - @see getStateInformation, setCurrentProgramStateInformation - */ - virtual void getCurrentProgramStateInformation (JUCE_NAMESPACE::MemoryBlock& destData); - - /** This must restore the filter's state from a block of data previously created - using getStateInformation(). - - Note that there's also a setCurrentProgramStateInformation() method, which tries - to restore just the current program, not the state of the entire filter. - - See also the helper function getXmlFromBinary() for loading settings as XML. - - @see setCurrentProgramStateInformation - */ - virtual void setStateInformation (const void* data, int sizeInBytes) = 0; - - /** The host will call this method if it wants to restore the state of just the filter's - current program. - - Not all hosts support this, and if you don't implement it, the base class - method just calls setStateInformation() instead. If you do implement it, be - sure to also implement getCurrentProgramStateInformation. - - @see setStateInformation, getCurrentProgramStateInformation - */ - virtual void setCurrentProgramStateInformation (const void* data, int sizeInBytes); - - - //============================================================================== - /** Adds a listener that will be called when an aspect of this processor changes. */ - void addListener (AudioProcessorListener* const newListener) throw(); - - /** Removes a previously added listener. */ - void removeListener (AudioProcessorListener* const listenerToRemove) throw(); - - //============================================================================== - /** Not for public use - this is called before deleting an editor component. */ - void editorBeingDeleted (AudioProcessorEditor* const editor) throw(); - - /** Not for public use - this is called to initialise the processor. */ - void setPlayHead (AudioPlayHead* const newPlayHead) throw(); - - /** Not for public use - this is called to initialise the processor before playing. */ - void setPlayConfigDetails (const int numIns, const int numOuts, - const double sampleRate, - const int blockSize) throw(); - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - //============================================================================== - /** Helper function that just converts an xml element into a binary blob. - - Use this in your filter's getStateInformation() method if you want to - store its state as xml. - - Then use getXmlFromBinary() to reverse this operation and retrieve the XML - from a binary blob. - */ - static void copyXmlToBinary (const XmlElement& xml, - JUCE_NAMESPACE::MemoryBlock& destData); - - /** Retrieves an XML element that was stored as binary with the copyXmlToBinary() method. - - This might return 0 if the data's unsuitable or corrupted. Otherwise it will return - an XmlElement object that the caller must delete when no longer needed. - */ - static XmlElement* getXmlFromBinary (const void* data, - const int sizeInBytes); - - /** @internal */ - AudioPlayHead* playHead; - - /** @internal */ - void sendParamChangeMessageToListeners (const int parameterIndex, const float newValue); - -private: - VoidArray listeners; - AudioProcessorEditor* activeEditor; - double sampleRate; - int blockSize, numInputChannels, numOutputChannels, latencySamples; - bool suspended, nonRealtime; - CriticalSection callbackLock, listenerLock; - -#ifdef JUCE_DEBUG - BitArray changingParams; -#endif - - AudioProcessor (const AudioProcessor&); - const AudioProcessor& operator= (const AudioProcessor&); -}; - - -#endif // __JUCE_AUDIOPROCESSOR_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp b/src/juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp deleted file mode 100644 index d1cd6bd5dd..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioProcessorEditor.h" -#include "juce_AudioProcessor.h" - - -//============================================================================== -AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* const owner_) - : owner (owner_) -{ - // the filter must be valid.. - jassert (owner != 0); -} - -AudioProcessorEditor::~AudioProcessorEditor() -{ - // if this fails, then the wrapper hasn't called editorBeingDeleted() on the - // filter for some reason.. - jassert (owner->getActiveEditor() != this); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorEditor.h b/src/juce_appframework/audio/processors/juce_AudioProcessorEditor.h deleted file mode 100644 index 7ecbe5e622..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorEditor.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPROCESSOREDITOR_JUCEHEADER__ -#define __JUCE_AUDIOPROCESSOREDITOR_JUCEHEADER__ - -#include "../../gui/components/juce_Component.h" -class AudioProcessor; - - -//============================================================================== -/** - Base class for the component that acts as the GUI for an AudioProcessor. - - Derive your editor component from this class, and create an instance of it - by overriding the AudioProcessor::createEditor() method. - - @see AudioProcessor, GenericAudioProcessorEditor -*/ -class JUCE_API AudioProcessorEditor : public Component -{ -protected: - //============================================================================== - /** Creates an editor for the specified processor. - */ - AudioProcessorEditor (AudioProcessor* const owner); - -public: - /** Destructor. */ - ~AudioProcessorEditor(); - - - //============================================================================== - /** Returns a pointer to the processor that this editor represents. */ - AudioProcessor* getAudioProcessor() const throw() { return owner; } - - -private: - //============================================================================== - AudioProcessor* const owner; -}; - - -#endif // __JUCE_AUDIOPROCESSOREDITOR_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp b/src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp deleted file mode 100644 index 7563acd671..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp +++ /dev/null @@ -1,1356 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioProcessorGraph.h" -#include "../../events/juce_MessageManager.h" - - -const int AudioProcessorGraph::midiChannelIndex = 0x1000; - -//============================================================================== -AudioProcessorGraph::Node::Node (const uint32 id_, - AudioProcessor* const processor_) throw() - : id (id_), - processor (processor_), - isPrepared (false) -{ - jassert (processor_ != 0); -} - -AudioProcessorGraph::Node::~Node() -{ - delete processor; -} - -void AudioProcessorGraph::Node::prepare (const double sampleRate, const int blockSize, - AudioProcessorGraph* const graph) -{ - if (! isPrepared) - { - isPrepared = true; - - AudioProcessorGraph::AudioGraphIOProcessor* const ioProc - = dynamic_cast (processor); - - if (ioProc != 0) - ioProc->setParentGraph (graph); - - processor->setPlayConfigDetails (processor->getNumInputChannels(), - processor->getNumOutputChannels(), - sampleRate, blockSize); - - processor->prepareToPlay (sampleRate, blockSize); - } -} - -void AudioProcessorGraph::Node::unprepare() -{ - if (isPrepared) - { - isPrepared = false; - processor->releaseResources(); - } -} - -//============================================================================== -AudioProcessorGraph::AudioProcessorGraph() - : lastNodeId (0), - renderingBuffers (1, 1), - currentAudioOutputBuffer (1, 1) -{ -} - -AudioProcessorGraph::~AudioProcessorGraph() -{ - clearRenderingSequence(); - clear(); -} - -const String AudioProcessorGraph::getName() const -{ - return "Audio Graph"; -} - -//============================================================================== -void AudioProcessorGraph::clear() -{ - nodes.clear(); - connections.clear(); - triggerAsyncUpdate(); -} - -AudioProcessorGraph::Node* AudioProcessorGraph::getNodeForId (const uint32 nodeId) const throw() -{ - for (int i = nodes.size(); --i >= 0;) - if (nodes.getUnchecked(i)->id == nodeId) - return nodes.getUnchecked(i); - - return 0; -} - -AudioProcessorGraph::Node* AudioProcessorGraph::addNode (AudioProcessor* const newProcessor, - uint32 nodeId) -{ - if (newProcessor == 0) - { - jassertfalse - return 0; - } - - if (nodeId == 0) - { - nodeId = ++lastNodeId; - } - else - { - // you can't add a node with an id that already exists in the graph.. - jassert (getNodeForId (nodeId) == 0); - removeNode (nodeId); - } - - lastNodeId = nodeId; - - Node* const n = new Node (nodeId, newProcessor); - nodes.add (n); - triggerAsyncUpdate(); - - AudioProcessorGraph::AudioGraphIOProcessor* const ioProc - = dynamic_cast (n->processor); - - if (ioProc != 0) - ioProc->setParentGraph (this); - - return n; -} - -bool AudioProcessorGraph::removeNode (const uint32 nodeId) -{ - disconnectNode (nodeId); - - for (int i = nodes.size(); --i >= 0;) - { - if (nodes.getUnchecked(i)->id == nodeId) - { - AudioProcessorGraph::AudioGraphIOProcessor* const ioProc - = dynamic_cast (nodes.getUnchecked(i)->processor); - - if (ioProc != 0) - ioProc->setParentGraph (0); - - nodes.remove (i); - triggerAsyncUpdate(); - - return true; - } - } - - return false; -} - -//============================================================================== -const AudioProcessorGraph::Connection* AudioProcessorGraph::getConnectionBetween (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) const throw() -{ - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == sourceNodeId - && c->destNodeId == destNodeId - && c->sourceChannelIndex == sourceChannelIndex - && c->destChannelIndex == destChannelIndex) - { - return c; - } - } - - return 0; -} - -bool AudioProcessorGraph::isConnected (const uint32 possibleSourceNodeId, - const uint32 possibleDestNodeId) const throw() -{ - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == possibleSourceNodeId - && c->destNodeId == possibleDestNodeId) - { - return true; - } - } - - return false; -} - -bool AudioProcessorGraph::canConnect (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) const throw() -{ - if (sourceChannelIndex < 0 - || destChannelIndex < 0 - || sourceNodeId == destNodeId - || (destChannelIndex == midiChannelIndex) != (sourceChannelIndex == midiChannelIndex)) - return false; - - const Node* const source = getNodeForId (sourceNodeId); - - if (source == 0 - || (sourceChannelIndex != midiChannelIndex && sourceChannelIndex >= source->processor->getNumOutputChannels()) - || (sourceChannelIndex == midiChannelIndex && ! source->processor->producesMidi())) - return false; - - const Node* const dest = getNodeForId (destNodeId); - - if (dest == 0 - || (destChannelIndex != midiChannelIndex && destChannelIndex >= dest->processor->getNumInputChannels()) - || (destChannelIndex == midiChannelIndex && ! dest->processor->acceptsMidi())) - return false; - - return getConnectionBetween (sourceNodeId, sourceChannelIndex, - destNodeId, destChannelIndex) == 0; -} - -bool AudioProcessorGraph::addConnection (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) -{ - if (! canConnect (sourceNodeId, sourceChannelIndex, destNodeId, destChannelIndex)) - return false; - - Connection* const c = new Connection(); - c->sourceNodeId = sourceNodeId; - c->sourceChannelIndex = sourceChannelIndex; - c->destNodeId = destNodeId; - c->destChannelIndex = destChannelIndex; - - connections.add (c); - triggerAsyncUpdate(); - - return true; -} - -void AudioProcessorGraph::removeConnection (const int index) -{ - connections.remove (index); - triggerAsyncUpdate(); -} - -bool AudioProcessorGraph::removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex, - const uint32 destNodeId, const int destChannelIndex) -{ - bool doneAnything = false; - - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == sourceNodeId - && c->destNodeId == destNodeId - && c->sourceChannelIndex == sourceChannelIndex - && c->destChannelIndex == destChannelIndex) - { - removeConnection (i); - doneAnything = true; - triggerAsyncUpdate(); - } - } - - return doneAnything; -} - -bool AudioProcessorGraph::disconnectNode (const uint32 nodeId) -{ - bool doneAnything = false; - - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - if (c->sourceNodeId == nodeId || c->destNodeId == nodeId) - { - removeConnection (i); - doneAnything = true; - triggerAsyncUpdate(); - } - } - - return doneAnything; -} - -bool AudioProcessorGraph::removeIllegalConnections() -{ - bool doneAnything = false; - - for (int i = connections.size(); --i >= 0;) - { - const Connection* const c = connections.getUnchecked(i); - - const Node* const source = getNodeForId (c->sourceNodeId); - const Node* const dest = getNodeForId (c->destNodeId); - - if (source == 0 || dest == 0 - || (c->sourceChannelIndex != midiChannelIndex - && (((unsigned int) c->sourceChannelIndex) >= (unsigned int) source->processor->getNumOutputChannels())) - || (c->sourceChannelIndex == midiChannelIndex - && ! source->processor->producesMidi()) - || (c->destChannelIndex != midiChannelIndex - && (((unsigned int) c->destChannelIndex) >= (unsigned int) dest->processor->getNumInputChannels())) - || (c->destChannelIndex == midiChannelIndex - && ! dest->processor->acceptsMidi())) - { - removeConnection (i); - doneAnything = true; - triggerAsyncUpdate(); - } - } - - return doneAnything; -} - -//============================================================================== -namespace GraphRenderingOps -{ - -//============================================================================== -class AudioGraphRenderingOp -{ -public: - AudioGraphRenderingOp() throw() {} - virtual ~AudioGraphRenderingOp() throw() {} - - virtual void perform (AudioSampleBuffer& sharedBufferChans, - const OwnedArray & sharedMidiBuffers, - const int numSamples) throw() = 0; - - juce_UseDebuggingNewOperator -}; - -//============================================================================== -class ClearChannelOp : public AudioGraphRenderingOp -{ -public: - ClearChannelOp (const int channelNum_) throw() - : channelNum (channelNum_) - {} - - ~ClearChannelOp() throw() {} - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) throw() - { - sharedBufferChans.clear (channelNum, 0, numSamples); - } - -private: - const int channelNum; - - ClearChannelOp (const ClearChannelOp&); - const ClearChannelOp& operator= (const ClearChannelOp&); -}; - -//============================================================================== -class CopyChannelOp : public AudioGraphRenderingOp -{ -public: - CopyChannelOp (const int srcChannelNum_, const int dstChannelNum_) throw() - : srcChannelNum (srcChannelNum_), - dstChannelNum (dstChannelNum_) - {} - - ~CopyChannelOp() throw() {} - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) throw() - { - sharedBufferChans.copyFrom (dstChannelNum, 0, sharedBufferChans, srcChannelNum, 0, numSamples); - } - -private: - const int srcChannelNum, dstChannelNum; - - CopyChannelOp (const CopyChannelOp&); - const CopyChannelOp& operator= (const CopyChannelOp&); -}; - -//============================================================================== -class AddChannelOp : public AudioGraphRenderingOp -{ -public: - AddChannelOp (const int srcChannelNum_, const int dstChannelNum_) throw() - : srcChannelNum (srcChannelNum_), - dstChannelNum (dstChannelNum_) - {} - - ~AddChannelOp() throw() {} - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray &, const int numSamples) throw() - { - sharedBufferChans.addFrom (dstChannelNum, 0, sharedBufferChans, srcChannelNum, 0, numSamples); - } - -private: - const int srcChannelNum, dstChannelNum; - - AddChannelOp (const AddChannelOp&); - const AddChannelOp& operator= (const AddChannelOp&); -}; - -//============================================================================== -class ClearMidiBufferOp : public AudioGraphRenderingOp -{ -public: - ClearMidiBufferOp (const int bufferNum_) throw() - : bufferNum (bufferNum_) - {} - - ~ClearMidiBufferOp() throw() {} - - void perform (AudioSampleBuffer&, const OwnedArray & sharedMidiBuffers, const int) throw() - { - sharedMidiBuffers.getUnchecked (bufferNum)->clear(); - } - -private: - const int bufferNum; - - ClearMidiBufferOp (const ClearMidiBufferOp&); - const ClearMidiBufferOp& operator= (const ClearMidiBufferOp&); -}; - -//============================================================================== -class CopyMidiBufferOp : public AudioGraphRenderingOp -{ -public: - CopyMidiBufferOp (const int srcBufferNum_, const int dstBufferNum_) throw() - : srcBufferNum (srcBufferNum_), - dstBufferNum (dstBufferNum_) - {} - - ~CopyMidiBufferOp() throw() {} - - void perform (AudioSampleBuffer&, const OwnedArray & sharedMidiBuffers, const int) throw() - { - *sharedMidiBuffers.getUnchecked (dstBufferNum) = *sharedMidiBuffers.getUnchecked (srcBufferNum); - } - -private: - const int srcBufferNum, dstBufferNum; - - CopyMidiBufferOp (const CopyMidiBufferOp&); - const CopyMidiBufferOp& operator= (const CopyMidiBufferOp&); -}; - -//============================================================================== -class AddMidiBufferOp : public AudioGraphRenderingOp -{ -public: - AddMidiBufferOp (const int srcBufferNum_, const int dstBufferNum_) throw() - : srcBufferNum (srcBufferNum_), - dstBufferNum (dstBufferNum_) - {} - - ~AddMidiBufferOp() throw() {} - - void perform (AudioSampleBuffer&, const OwnedArray & sharedMidiBuffers, const int numSamples) throw() - { - sharedMidiBuffers.getUnchecked (dstBufferNum) - ->addEvents (*sharedMidiBuffers.getUnchecked (srcBufferNum), 0, numSamples, 0); - } - -private: - const int srcBufferNum, dstBufferNum; - - AddMidiBufferOp (const AddMidiBufferOp&); - const AddMidiBufferOp& operator= (const AddMidiBufferOp&); -}; - -//============================================================================== -class ProcessBufferOp : public AudioGraphRenderingOp -{ -public: - ProcessBufferOp (const AudioProcessorGraph::Node::Ptr& node_, - const Array & audioChannelsToUse_, - const int totalChans_, - const int midiBufferToUse_) throw() - : node (node_), - processor (node_->processor), - audioChannelsToUse (audioChannelsToUse_), - totalChans (jmax (1, totalChans_)), - midiBufferToUse (midiBufferToUse_) - { - channels = (float**) juce_calloc (sizeof (float*) * totalChans); - - while (audioChannelsToUse.size() < totalChans) - audioChannelsToUse.add (0); - } - - ~ProcessBufferOp() throw() - { - juce_free (channels); - } - - void perform (AudioSampleBuffer& sharedBufferChans, const OwnedArray & sharedMidiBuffers, const int numSamples) throw() - { - for (int i = totalChans; --i >= 0;) - channels[i] = sharedBufferChans.getSampleData (audioChannelsToUse.getUnchecked (i), 0); - - AudioSampleBuffer buffer (channels, totalChans, numSamples); - - processor->processBlock (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse)); - } - - const AudioProcessorGraph::Node::Ptr node; - AudioProcessor* const processor; - -private: - Array audioChannelsToUse; - float** channels; - int totalChans; - int midiBufferToUse; - - ProcessBufferOp (const ProcessBufferOp&); - const ProcessBufferOp& operator= (const ProcessBufferOp&); -}; - -//============================================================================== -/** Used to calculate the correct sequence of rendering ops needed, based on - the best re-use of shared buffers at each stage. -*/ -class RenderingOpSequenceCalculator -{ -public: - //============================================================================== - RenderingOpSequenceCalculator (AudioProcessorGraph& graph_, - const VoidArray& orderedNodes_, - VoidArray& renderingOps) - : graph (graph_), - orderedNodes (orderedNodes_) - { - nodeIds.add (-2); // first buffer is read-only zeros - channels.add (0); - - midiNodeIds.add (-2); - - for (int i = 0; i < orderedNodes.size(); ++i) - { - createRenderingOpsForNode ((AudioProcessorGraph::Node*) orderedNodes.getUnchecked(i), - renderingOps, i); - - markAnyUnusedBuffersAsFree (i); - } - } - - int getNumBuffersNeeded() const throw() { return nodeIds.size(); } - - int getNumMidiBuffersNeeded() const throw() { return midiNodeIds.size(); } - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioProcessorGraph& graph; - const VoidArray& orderedNodes; - Array nodeIds, channels, midiNodeIds; - - //============================================================================== - void createRenderingOpsForNode (AudioProcessorGraph::Node* const node, - VoidArray& renderingOps, - const int ourRenderingIndex) - { - const int numIns = node->processor->getNumInputChannels(); - const int numOuts = node->processor->getNumOutputChannels(); - const int totalChans = jmax (numIns, numOuts); - - Array audioChannelsToUse; - int midiBufferToUse = -1; - - for (int inputChan = 0; inputChan < numIns; ++inputChan) - { - // get a list of all the inputs to this node - Array sourceNodes, sourceOutputChans; - - for (int i = graph.getNumConnections(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = graph.getConnection (i); - - if (c->destNodeId == node->id && c->destChannelIndex == inputChan) - { - sourceNodes.add (c->sourceNodeId); - sourceOutputChans.add (c->sourceChannelIndex); - } - } - - int bufIndex = -1; - - if (sourceNodes.size() == 0) - { - // unconnected input channel - - if (inputChan >= numOuts) - { - bufIndex = getReadOnlyEmptyBuffer(); - jassert (bufIndex >= 0); - } - else - { - bufIndex = getFreeBuffer (false); - renderingOps.add (new ClearChannelOp (bufIndex)); - } - } - else if (sourceNodes.size() == 1) - { - // channel with a straightforward single input.. - const int srcNode = sourceNodes.getUnchecked(0); - const int srcChan = sourceOutputChans.getUnchecked(0); - - bufIndex = getBufferContaining (srcNode, srcChan); - - if (bufIndex < 0) - { - // if not found, this is probably a feedback loop - bufIndex = getReadOnlyEmptyBuffer(); - jassert (bufIndex >= 0); - } - - if (inputChan < numOuts - && isBufferNeededLater (ourRenderingIndex, - inputChan, - srcNode, srcChan)) - { - // can't mess up this channel because it's needed later by another node, so we - // need to use a copy of it.. - const int newFreeBuffer = getFreeBuffer (false); - - renderingOps.add (new CopyChannelOp (bufIndex, newFreeBuffer)); - - bufIndex = newFreeBuffer; - } - } - else - { - // channel with a mix of several inputs.. - - // try to find a re-usable channel from our inputs.. - int reusableInputIndex = -1; - - for (int i = 0; i < sourceNodes.size(); ++i) - { - const int sourceBufIndex = getBufferContaining (sourceNodes.getUnchecked(i), - sourceOutputChans.getUnchecked(i)); - - if (sourceBufIndex >= 0 - && ! isBufferNeededLater (ourRenderingIndex, - inputChan, - sourceNodes.getUnchecked(i), - sourceOutputChans.getUnchecked(i))) - { - // we've found one of our input chans that can be re-used.. - reusableInputIndex = i; - bufIndex = sourceBufIndex; - break; - } - } - - if (reusableInputIndex < 0) - { - // can't re-use any of our input chans, so get a new one and copy everything into it.. - bufIndex = getFreeBuffer (false); - jassert (bufIndex != 0); - - const int srcIndex = getBufferContaining (sourceNodes.getUnchecked (0), - sourceOutputChans.getUnchecked (0)); - if (srcIndex < 0) - { - // if not found, this is probably a feedback loop - renderingOps.add (new ClearChannelOp (bufIndex)); - } - else - { - renderingOps.add (new CopyChannelOp (srcIndex, bufIndex)); - } - - reusableInputIndex = 0; - } - - for (int j = 0; j < sourceNodes.size(); ++j) - { - if (j != reusableInputIndex) - { - const int srcIndex = getBufferContaining (sourceNodes.getUnchecked(j), - sourceOutputChans.getUnchecked(j)); - if (srcIndex >= 0) - renderingOps.add (new AddChannelOp (srcIndex, bufIndex)); - } - } - } - - jassert (bufIndex >= 0); - audioChannelsToUse.add (bufIndex); - - if (inputChan < numOuts) - markBufferAsContaining (bufIndex, node->id, inputChan); - } - - for (int outputChan = numIns; outputChan < numOuts; ++outputChan) - { - const int bufIndex = getFreeBuffer (false); - jassert (bufIndex != 0); - audioChannelsToUse.add (bufIndex); - - markBufferAsContaining (bufIndex, node->id, outputChan); - } - - // Now the same thing for midi.. - Array midiSourceNodes; - - for (int i = graph.getNumConnections(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = graph.getConnection (i); - - if (c->destNodeId == node->id && c->destChannelIndex == AudioProcessorGraph::midiChannelIndex) - midiSourceNodes.add (c->sourceNodeId); - } - - if (midiSourceNodes.size() == 0) - { - // No midi inputs.. - midiBufferToUse = getFreeBuffer (true); // need to pick a buffer even if the processor doesn't use midi - - if (node->processor->acceptsMidi() || node->processor->producesMidi()) - renderingOps.add (new ClearMidiBufferOp (midiBufferToUse)); - } - else if (midiSourceNodes.size() == 1) - { - // One midi input.. - midiBufferToUse = getBufferContaining (midiSourceNodes.getUnchecked(0), - AudioProcessorGraph::midiChannelIndex); - - if (midiBufferToUse >= 0) - { - if (isBufferNeededLater (ourRenderingIndex, - AudioProcessorGraph::midiChannelIndex, - midiSourceNodes.getUnchecked(0), - AudioProcessorGraph::midiChannelIndex)) - { - // can't mess up this channel because it's needed later by another node, so we - // need to use a copy of it.. - const int newFreeBuffer = getFreeBuffer (true); - renderingOps.add (new CopyMidiBufferOp (midiBufferToUse, newFreeBuffer)); - midiBufferToUse = newFreeBuffer; - } - } - else - { - // probably a feedback loop, so just use an empty one.. - midiBufferToUse = getFreeBuffer (true); // need to pick a buffer even if the processor doesn't use midi - } - } - else - { - // More than one midi input being mixed.. - int reusableInputIndex = -1; - - for (int i = 0; i < midiSourceNodes.size(); ++i) - { - const int sourceBufIndex = getBufferContaining (midiSourceNodes.getUnchecked(i), - AudioProcessorGraph::midiChannelIndex); - - if (sourceBufIndex >= 0 - && ! isBufferNeededLater (ourRenderingIndex, - AudioProcessorGraph::midiChannelIndex, - midiSourceNodes.getUnchecked(i), - AudioProcessorGraph::midiChannelIndex)) - { - // we've found one of our input buffers that can be re-used.. - reusableInputIndex = i; - midiBufferToUse = sourceBufIndex; - break; - } - } - - if (reusableInputIndex < 0) - { - // can't re-use any of our input buffers, so get a new one and copy everything into it.. - midiBufferToUse = getFreeBuffer (true); - jassert (midiBufferToUse >= 0); - - const int srcIndex = getBufferContaining (midiSourceNodes.getUnchecked(0), - AudioProcessorGraph::midiChannelIndex); - if (srcIndex >= 0) - renderingOps.add (new CopyMidiBufferOp (srcIndex, midiBufferToUse)); - else - renderingOps.add (new ClearMidiBufferOp (midiBufferToUse)); - - reusableInputIndex = 0; - } - - for (int j = 0; j < midiSourceNodes.size(); ++j) - { - if (j != reusableInputIndex) - { - const int srcIndex = getBufferContaining (midiSourceNodes.getUnchecked(j), - AudioProcessorGraph::midiChannelIndex); - if (srcIndex >= 0) - renderingOps.add (new AddMidiBufferOp (srcIndex, midiBufferToUse)); - } - } - } - - if (node->processor->producesMidi()) - markBufferAsContaining (midiBufferToUse, node->id, - AudioProcessorGraph::midiChannelIndex); - - renderingOps.add (new ProcessBufferOp (node, audioChannelsToUse, - totalChans, midiBufferToUse)); - } - - //============================================================================== - int getFreeBuffer (const bool forMidi) - { - if (forMidi) - { - for (int i = 1; i < midiNodeIds.size(); ++i) - if (midiNodeIds.getUnchecked(i) < 0) - return i; - - midiNodeIds.add (-1); - return midiNodeIds.size() - 1; - } - else - { - for (int i = 1; i < nodeIds.size(); ++i) - if (nodeIds.getUnchecked(i) < 0) - return i; - - nodeIds.add (-1); - channels.add (0); - return nodeIds.size() - 1; - } - } - - int getReadOnlyEmptyBuffer() const throw() - { - return 0; - } - - int getBufferContaining (const int nodeId, const int outputChannel) const throw() - { - if (outputChannel == AudioProcessorGraph::midiChannelIndex) - { - for (int i = midiNodeIds.size(); --i >= 0;) - if (midiNodeIds.getUnchecked(i) == nodeId) - return i; - } - else - { - for (int i = nodeIds.size(); --i >= 0;) - if (nodeIds.getUnchecked(i) == nodeId - && channels.getUnchecked(i) == outputChannel) - return i; - } - - return -1; - } - - void markAnyUnusedBuffersAsFree (const int stepIndex) - { - int i; - for (i = 0; i < nodeIds.size(); ++i) - { - if (nodeIds.getUnchecked(i) >= 0 - && ! isBufferNeededLater (stepIndex, -1, - nodeIds.getUnchecked(i), - channels.getUnchecked(i))) - { - nodeIds.set (i, -1); - } - } - - for (i = 0; i < midiNodeIds.size(); ++i) - { - if (midiNodeIds.getUnchecked(i) >= 0 - && ! isBufferNeededLater (stepIndex, -1, - midiNodeIds.getUnchecked(i), - AudioProcessorGraph::midiChannelIndex)) - { - midiNodeIds.set (i, -1); - } - } - } - - bool isBufferNeededLater (int stepIndexToSearchFrom, - int inputChannelOfIndexToIgnore, - const int nodeId, - const int outputChanIndex) const throw() - { - while (stepIndexToSearchFrom < orderedNodes.size()) - { - const AudioProcessorGraph::Node* const node = (const AudioProcessorGraph::Node*) orderedNodes.getUnchecked (stepIndexToSearchFrom); - - if (outputChanIndex == AudioProcessorGraph::midiChannelIndex) - { - if (inputChannelOfIndexToIgnore != AudioProcessorGraph::midiChannelIndex - && graph.getConnectionBetween (nodeId, AudioProcessorGraph::midiChannelIndex, - node->id, AudioProcessorGraph::midiChannelIndex) != 0) - return true; - } - else - { - for (int i = 0; i < node->processor->getNumInputChannels(); ++i) - if (i != inputChannelOfIndexToIgnore - && graph.getConnectionBetween (nodeId, outputChanIndex, - node->id, i) != 0) - return true; - } - - inputChannelOfIndexToIgnore = -1; - ++stepIndexToSearchFrom; - } - - return false; - } - - void markBufferAsContaining (int bufferNum, int nodeId, int outputIndex) - { - if (outputIndex == AudioProcessorGraph::midiChannelIndex) - { - jassert (bufferNum > 0 && bufferNum < midiNodeIds.size()); - - midiNodeIds.set (bufferNum, nodeId); - } - else - { - jassert (bufferNum >= 0 && bufferNum < nodeIds.size()); - - nodeIds.set (bufferNum, nodeId); - channels.set (bufferNum, outputIndex); - } - } - - RenderingOpSequenceCalculator (const RenderingOpSequenceCalculator&); - const RenderingOpSequenceCalculator& operator= (const RenderingOpSequenceCalculator&); -}; - -} - -//============================================================================== -void AudioProcessorGraph::clearRenderingSequence() -{ - const ScopedLock sl (renderLock); - - for (int i = renderingOps.size(); --i >= 0;) - { - GraphRenderingOps::AudioGraphRenderingOp* const r - = (GraphRenderingOps::AudioGraphRenderingOp*) renderingOps.getUnchecked(i); - - renderingOps.remove (i); - delete r; - } -} - -bool AudioProcessorGraph::isAnInputTo (const uint32 possibleInputId, - const uint32 possibleDestinationId, - const int recursionCheck) const throw() -{ - if (recursionCheck > 0) - { - for (int i = connections.size(); --i >= 0;) - { - const AudioProcessorGraph::Connection* const c = connections.getUnchecked (i); - - if (c->destNodeId == possibleDestinationId - && (c->sourceNodeId == possibleInputId - || isAnInputTo (possibleInputId, c->sourceNodeId, recursionCheck - 1))) - return true; - } - } - - return false; -} - -void AudioProcessorGraph::buildRenderingSequence() -{ - VoidArray newRenderingOps; - int numRenderingBuffersNeeded = 2; - int numMidiBuffersNeeded = 1; - - { - MessageManagerLock mml; - - VoidArray orderedNodes; - - int i; - for (i = 0; i < nodes.size(); ++i) - { - Node* const node = nodes.getUnchecked(i); - - node->prepare (getSampleRate(), getBlockSize(), this); - - int j = 0; - for (; j < orderedNodes.size(); ++j) - if (isAnInputTo (node->id, - ((Node*) orderedNodes.getUnchecked (j))->id, - nodes.size() + 1)) - break; - - orderedNodes.insert (j, node); - } - - GraphRenderingOps::RenderingOpSequenceCalculator calculator (*this, orderedNodes, newRenderingOps); - - numRenderingBuffersNeeded = calculator.getNumBuffersNeeded(); - numMidiBuffersNeeded = calculator.getNumMidiBuffersNeeded(); - } - - VoidArray oldRenderingOps (renderingOps); - - { - // swap over to the new rendering sequence.. - const ScopedLock sl (renderLock); - - renderingBuffers.setSize (numRenderingBuffersNeeded, getBlockSize()); - renderingBuffers.clear(); - - for (int i = midiBuffers.size(); --i >= 0;) - midiBuffers.getUnchecked(i)->clear(); - - while (midiBuffers.size() < numMidiBuffersNeeded) - midiBuffers.add (new MidiBuffer()); - - renderingOps = newRenderingOps; - } - - for (int i = oldRenderingOps.size(); --i >= 0;) - delete (GraphRenderingOps::AudioGraphRenderingOp*) oldRenderingOps.getUnchecked(i); -} - -void AudioProcessorGraph::handleAsyncUpdate() -{ - buildRenderingSequence(); -} - -//============================================================================== -void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSamplesPerBlock) -{ - currentAudioInputBuffer = 0; - currentAudioOutputBuffer.setSize (jmax (1, getNumOutputChannels()), estimatedSamplesPerBlock); - currentMidiInputBuffer = 0; - currentMidiOutputBuffer.clear(); - - clearRenderingSequence(); - buildRenderingSequence(); -} - -void AudioProcessorGraph::releaseResources() -{ - for (int i = 0; i < nodes.size(); ++i) - nodes.getUnchecked(i)->unprepare(); - - renderingBuffers.setSize (1, 1); - midiBuffers.clear(); - - currentAudioInputBuffer = 0; - currentAudioOutputBuffer.setSize (1, 1); - currentMidiInputBuffer = 0; - currentMidiOutputBuffer.clear(); -} - -void AudioProcessorGraph::processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages) -{ - const int numSamples = buffer.getNumSamples(); - - const ScopedLock sl (renderLock); - - currentAudioInputBuffer = &buffer; - currentAudioOutputBuffer.setSize (jmax (1, buffer.getNumChannels()), numSamples); - currentAudioOutputBuffer.clear(); - currentMidiInputBuffer = &midiMessages; - currentMidiOutputBuffer.clear(); - - int i; - for (i = 0; i < renderingOps.size(); ++i) - { - GraphRenderingOps::AudioGraphRenderingOp* const op - = (GraphRenderingOps::AudioGraphRenderingOp*) renderingOps.getUnchecked(i); - - op->perform (renderingBuffers, midiBuffers, numSamples); - } - - for (i = 0; i < buffer.getNumChannels(); ++i) - buffer.copyFrom (i, 0, currentAudioOutputBuffer, i, 0, numSamples); -} - -const String AudioProcessorGraph::getInputChannelName (const int channelIndex) const -{ - return "Input " + String (channelIndex + 1); -} - -const String AudioProcessorGraph::getOutputChannelName (const int channelIndex) const -{ - return "Output " + String (channelIndex + 1); -} - -bool AudioProcessorGraph::isInputChannelStereoPair (int /*index*/) const -{ - return true; -} - -bool AudioProcessorGraph::isOutputChannelStereoPair (int /*index*/) const -{ - return true; -} - -bool AudioProcessorGraph::acceptsMidi() const -{ - return true; -} - -bool AudioProcessorGraph::producesMidi() const -{ - return true; -} - -void AudioProcessorGraph::getStateInformation (JUCE_NAMESPACE::MemoryBlock& /*destData*/) -{ -} - -void AudioProcessorGraph::setStateInformation (const void* /*data*/, int /*sizeInBytes*/) -{ -} - - -//============================================================================== -AudioProcessorGraph::AudioGraphIOProcessor::AudioGraphIOProcessor (const IODeviceType type_) - : type (type_), - graph (0) -{ -} - -AudioProcessorGraph::AudioGraphIOProcessor::~AudioGraphIOProcessor() -{ -} - -const String AudioProcessorGraph::AudioGraphIOProcessor::getName() const -{ - switch (type) - { - case audioOutputNode: - return "Audio Output"; - case audioInputNode: - return "Audio Input"; - case midiOutputNode: - return "Midi Output"; - case midiInputNode: - return "Midi Input"; - default: - break; - } - - return String::empty; -} - -void AudioProcessorGraph::AudioGraphIOProcessor::fillInPluginDescription (PluginDescription& d) const -{ - d.name = getName(); - d.uid = d.name.hashCode(); - d.category = "I/O devices"; - d.pluginFormatName = "Internal"; - d.manufacturerName = "Raw Material Software"; - d.version = "1.0"; - d.isInstrument = false; - - d.numInputChannels = getNumInputChannels(); - if (type == audioOutputNode && graph != 0) - d.numInputChannels = graph->getNumInputChannels(); - - d.numOutputChannels = getNumOutputChannels(); - if (type == audioInputNode && graph != 0) - d.numOutputChannels = graph->getNumOutputChannels(); -} - -void AudioProcessorGraph::AudioGraphIOProcessor::prepareToPlay (double, int) -{ - jassert (graph != 0); -} - -void AudioProcessorGraph::AudioGraphIOProcessor::releaseResources() -{ -} - -void AudioProcessorGraph::AudioGraphIOProcessor::processBlock (AudioSampleBuffer& buffer, - MidiBuffer& midiMessages) -{ - jassert (graph != 0); - - switch (type) - { - case audioOutputNode: - { - for (int i = jmin (graph->currentAudioOutputBuffer.getNumChannels(), - buffer.getNumChannels()); --i >= 0;) - { - graph->currentAudioOutputBuffer.addFrom (i, 0, buffer, i, 0, buffer.getNumSamples()); - } - - break; - } - - case audioInputNode: - { - for (int i = jmin (graph->currentAudioInputBuffer->getNumChannels(), - buffer.getNumChannels()); --i >= 0;) - { - buffer.copyFrom (i, 0, *graph->currentAudioInputBuffer, i, 0, buffer.getNumSamples()); - } - - break; - } - - case midiOutputNode: - graph->currentMidiOutputBuffer.addEvents (midiMessages, 0, buffer.getNumSamples(), 0); - break; - - case midiInputNode: - midiMessages.addEvents (*graph->currentMidiInputBuffer, 0, buffer.getNumSamples(), 0); - break; - - default: - break; - } -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::acceptsMidi() const -{ - return type == midiOutputNode; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::producesMidi() const -{ - return type == midiInputNode; -} - -const String AudioProcessorGraph::AudioGraphIOProcessor::getInputChannelName (const int channelIndex) const -{ - switch (type) - { - case audioOutputNode: - return "Output " + String (channelIndex + 1); - case midiOutputNode: - return "Midi Output"; - default: - break; - } - - return String::empty; -} - -const String AudioProcessorGraph::AudioGraphIOProcessor::getOutputChannelName (const int channelIndex) const -{ - switch (type) - { - case audioInputNode: - return "Input " + String (channelIndex + 1); - case midiInputNode: - return "Midi Input"; - default: - break; - } - - return String::empty; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isInputChannelStereoPair (int /*index*/) const -{ - return type == audioInputNode || type == audioOutputNode; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isOutputChannelStereoPair (int index) const -{ - return isInputChannelStereoPair (index); -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isInput() const throw() -{ - return type == audioInputNode || type == midiInputNode; -} - -bool AudioProcessorGraph::AudioGraphIOProcessor::isOutput() const throw() -{ - return type == audioOutputNode || type == midiOutputNode; -} - -AudioProcessorEditor* AudioProcessorGraph::AudioGraphIOProcessor::createEditor() -{ - return 0; -} - -int AudioProcessorGraph::AudioGraphIOProcessor::getNumParameters() { return 0; } -const String AudioProcessorGraph::AudioGraphIOProcessor::getParameterName (int) { return String::empty; } - -float AudioProcessorGraph::AudioGraphIOProcessor::getParameter (int) { return 0.0f; } -const String AudioProcessorGraph::AudioGraphIOProcessor::getParameterText (int) { return String::empty; } -void AudioProcessorGraph::AudioGraphIOProcessor::setParameter (int, float) { } - -int AudioProcessorGraph::AudioGraphIOProcessor::getNumPrograms() { return 0; } -int AudioProcessorGraph::AudioGraphIOProcessor::getCurrentProgram() { return 0; } -void AudioProcessorGraph::AudioGraphIOProcessor::setCurrentProgram (int) { } - -const String AudioProcessorGraph::AudioGraphIOProcessor::getProgramName (int) { return String::empty; } -void AudioProcessorGraph::AudioGraphIOProcessor::changeProgramName (int, const String&) { } - -void AudioProcessorGraph::AudioGraphIOProcessor::getStateInformation (JUCE_NAMESPACE::MemoryBlock&) -{ -} - -void AudioProcessorGraph::AudioGraphIOProcessor::setStateInformation (const void*, int) -{ -} - -void AudioProcessorGraph::AudioGraphIOProcessor::setParentGraph (AudioProcessorGraph* const newGraph) throw() -{ - graph = newGraph; - - if (graph != 0) - { - setPlayConfigDetails (type == audioOutputNode ? graph->getNumOutputChannels() : 0, - type == audioInputNode ? graph->getNumInputChannels() : 0, - getSampleRate(), - getBlockSize()); - - updateHostDisplay(); - } -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorGraph.h b/src/juce_appframework/audio/processors/juce_AudioProcessorGraph.h deleted file mode 100644 index bc827df8dc..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorGraph.h +++ /dev/null @@ -1,436 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__ -#define __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__ - -#include "juce_AudioProcessor.h" -#include "../plugins/juce_AudioPluginFormatManager.h" -#include "../plugins/juce_KnownPluginList.h" -#include "../../../juce_core/containers/juce_ReferenceCountedArray.h" - - -//============================================================================== -/** - A type of AudioProcessor which plays back a graph of other AudioProcessors. - - Use one of these objects if you want to wire-up a set of AudioProcessors - and play back the result. - - Processors can be added to the graph as "nodes" using addNode(), and once - added, you can connect any of their input or output channels to other - nodes using addConnection(). - - To play back a graph through an audio device, you might want to use an - AudioProcessorPlayer object. -*/ -class JUCE_API AudioProcessorGraph : public AudioProcessor, - public AsyncUpdater -{ -public: - //============================================================================== - /** Creates an empty graph. - */ - AudioProcessorGraph(); - - /** Destructor. - - Any processor objects that have been added to the graph will also be deleted. - */ - ~AudioProcessorGraph(); - - //============================================================================== - /** Represents one of the nodes, or processors, in an AudioProcessorGraph. - - To create a node, call AudioProcessorGraph::addNode(). - */ - class JUCE_API Node : public ReferenceCountedObject - { - public: - /** Destructor. - */ - ~Node(); - - //============================================================================== - /** The ID number assigned to this node. - - This is assigned by the graph that owns it, and can't be changed. - */ - const uint32 id; - - /** The actual processor object that this node represents. - */ - AudioProcessor* const processor; - - /** A set of user-definable properties that are associated with this node. - - This can be used to attach values to the node for whatever purpose seems - useful. For example, you might store an x and y position if your application - is displaying the nodes on-screen. - */ - PropertySet properties; - - //============================================================================== - /** A convenient typedef for referring to a pointer to a node object. - */ - typedef ReferenceCountedObjectPtr Ptr; - - //============================================================================== - juce_UseDebuggingNewOperator - - private: - friend class AudioProcessorGraph; - - bool isPrepared; - - Node (const uint32 id, AudioProcessor* const processor) throw(); - - void prepare (const double sampleRate, const int blockSize, AudioProcessorGraph* const graph); - void unprepare(); - - Node (const Node&); - const Node& operator= (const Node&); - }; - - //============================================================================== - /** Represents a connection between two channels of two nodes in an AudioProcessorGraph. - - To create a connection, use AudioProcessorGraph::addConnection(). - */ - struct JUCE_API Connection - { - public: - //============================================================================== - /** The ID number of the node which is the input source for this connection. - @see AudioProcessorGraph::getNodeForId - */ - uint32 sourceNodeId; - - /** The index of the output channel of the source node from which this - connection takes its data. - - If this value is the special number AudioProcessorGraph::midiChannelIndex, then - it is referring to the source node's midi output. Otherwise, it is the zero-based - index of an audio output channel in the source node. - */ - int sourceChannelIndex; - - /** The ID number of the node which is the destination for this connection. - @see AudioProcessorGraph::getNodeForId - */ - uint32 destNodeId; - - /** The index of the input channel of the destination node to which this - connection delivers its data. - - If this value is the special number AudioProcessorGraph::midiChannelIndex, then - it is referring to the destination node's midi input. Otherwise, it is the zero-based - index of an audio input channel in the destination node. - */ - int destChannelIndex; - - //============================================================================== - juce_UseDebuggingNewOperator - - private: - }; - - //============================================================================== - /** Deletes all nodes and connections from this graph. - - Any processor objects in the graph will be deleted. - */ - void clear(); - - /** Returns the number of nodes in the graph. */ - int getNumNodes() const throw() { return nodes.size(); } - - /** Returns a pointer to one of the nodes in the graph. - - This will return 0 if the index is out of range. - @see getNodeForId - */ - Node* getNode (const int index) const throw() { return nodes [index]; } - - /** Searches the graph for a node with the given ID number and returns it. - - If no such node was found, this returns 0. - @see getNode - */ - Node* getNodeForId (const uint32 nodeId) const throw(); - - /** Adds a node to the graph. - - This creates a new node in the graph, for the specified processor. Once you have - added a processor to the graph, the graph owns it and will delete it later when - it is no longer needed. - - The optional nodeId parameter lets you specify an ID to use for the node, but - if the value is already in use, this new node will overwrite the old one. - - If this succeeds, it returns a pointer to the newly-created node. - */ - Node* addNode (AudioProcessor* const newProcessor, - uint32 nodeId = 0); - - /** Deletes a node within the graph which has the specified ID. - - This will also delete any connections that are attached to this node. - */ - bool removeNode (const uint32 nodeId); - - //============================================================================== - /** Returns the number of connections in the graph. */ - int getNumConnections() const throw() { return connections.size(); } - - /** Returns a pointer to one of the connections in the graph. */ - const Connection* getConnection (const int index) const throw() { return connections [index]; } - - /** Searches for a connection between some specified channels. - - If no such connection is found, this returns 0. - */ - const Connection* getConnectionBetween (const uint32 sourceNodeId, - const int sourceChannelIndex, - const uint32 destNodeId, - const int destChannelIndex) const throw(); - - /** Returns true if there is a connection between any of the channels of - two specified nodes. - */ - bool isConnected (const uint32 possibleSourceNodeId, - const uint32 possibleDestNodeId) const throw(); - - /** Returns true if it would be legal to connect the specified points. - */ - bool canConnect (const uint32 sourceNodeId, const int sourceChannelIndex, - const uint32 destNodeId, const int destChannelIndex) const throw(); - - /** Attempts to connect two specified channels of two nodes. - - If this isn't allowed (e.g. because you're trying to connect a midi channel - to an audio one or other such nonsense), then it'll return false. - */ - bool addConnection (const uint32 sourceNodeId, const int sourceChannelIndex, - const uint32 destNodeId, const int destChannelIndex); - - /** Deletes the connection with the specified index. - - Returns true if a connection was actually deleted. - */ - void removeConnection (const int index); - - /** Deletes any connection between two specified points. - - Returns true if a connection was actually deleted. - */ - bool removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex, - const uint32 destNodeId, const int destChannelIndex); - - /** Removes all connections from the specified node. - */ - bool disconnectNode (const uint32 nodeId); - - /** Performs a sanity checks of all the connections. - - This might be useful if some of the processors are doing things like changing - their channel counts, which could render some connections obsolete. - */ - bool removeIllegalConnections(); - - //============================================================================== - /** A special number that represents the midi channel of a node. - - This is used as a channel index value if you want to refer to the midi input - or output instead of an audio channel. - */ - static const int midiChannelIndex; - - - //============================================================================== - /** A special type of AudioProcessor that can live inside an AudioProcessorGraph - in order to use the audio that comes into and out of the graph itself. - - If you create an AudioGraphIOProcessor in "input" mode, it will act as a - node in the graph which delivers the audio that is coming into the parent - graph. This allows you to stream the data to other nodes and process the - incoming audio. - - Likewise, one of these in "output" mode can be sent data which it will add to - the sum of data being sent to the graph's output. - - @see AudioProcessorGraph - */ - class JUCE_API AudioGraphIOProcessor : public AudioPluginInstance - { - public: - /** Specifies the mode in which this processor will operate. - */ - enum IODeviceType - { - audioInputNode, /**< In this mode, the processor has output channels - representing all the audio input channels that are - coming into its parent audio graph. */ - audioOutputNode, /**< In this mode, the processor has input channels - representing all the audio output channels that are - going out of its parent audio graph. */ - midiInputNode, /**< In this mode, the processor has a midi output which - delivers the same midi data that is arriving at its - parent graph. */ - midiOutputNode /**< In this mode, the processor has a midi input and - any data sent to it will be passed out of the parent - graph. */ - }; - - //============================================================================== - /** Returns the mode of this processor. */ - IODeviceType getType() const throw() { return type; } - - /** Returns the parent graph to which this processor belongs, or 0 if it - hasn't yet been added to one. */ - AudioProcessorGraph* getParentGraph() const throw() { return graph; } - - /** True if this is an audio or midi input. */ - bool isInput() const throw(); - /** True if this is an audio or midi output. */ - bool isOutput() const throw(); - - //============================================================================== - AudioGraphIOProcessor (const IODeviceType type); - ~AudioGraphIOProcessor(); - - const String getName() const; - void fillInPluginDescription (PluginDescription& d) const; - - void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock); - void releaseResources(); - void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages); - - const String getInputChannelName (const int channelIndex) const; - const String getOutputChannelName (const int channelIndex) const; - bool isInputChannelStereoPair (int index) const; - bool isOutputChannelStereoPair (int index) const; - bool acceptsMidi() const; - bool producesMidi() const; - - AudioProcessorEditor* createEditor(); - - int getNumParameters(); - const String getParameterName (int); - float getParameter (int); - const String getParameterText (int); - void setParameter (int, float); - - int getNumPrograms(); - int getCurrentProgram(); - void setCurrentProgram (int); - const String getProgramName (int); - void changeProgramName (int, const String&); - - void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData); - void setStateInformation (const void* data, int sizeInBytes); - - /** @internal */ - void setParentGraph (AudioProcessorGraph* const graph) throw(); - - juce_UseDebuggingNewOperator - - private: - const IODeviceType type; - AudioProcessorGraph* graph; - - AudioGraphIOProcessor (const AudioGraphIOProcessor&); - const AudioGraphIOProcessor& operator= (const AudioGraphIOProcessor&); - }; - - //============================================================================== - // AudioProcessor methods: - - const String getName() const; - - void prepareToPlay (double sampleRate, int estimatedSamplesPerBlock); - void releaseResources(); - void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages); - - const String getInputChannelName (const int channelIndex) const; - const String getOutputChannelName (const int channelIndex) const; - bool isInputChannelStereoPair (int index) const; - bool isOutputChannelStereoPair (int index) const; - - bool acceptsMidi() const; - bool producesMidi() const; - - AudioProcessorEditor* createEditor() { return 0; } - - int getNumParameters() { return 0; } - const String getParameterName (int) { return String::empty; } - float getParameter (int) { return 0; } - const String getParameterText (int) { return String::empty; } - void setParameter (int, float) { } - - int getNumPrograms() { return 0; } - int getCurrentProgram() { return 0; } - void setCurrentProgram (int) { } - const String getProgramName (int) { return String::empty; } - void changeProgramName (int, const String&) { } - - void getStateInformation (JUCE_NAMESPACE::MemoryBlock& destData); - void setStateInformation (const void* data, int sizeInBytes); - - /** @internal */ - void handleAsyncUpdate(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - ReferenceCountedArray nodes; - OwnedArray connections; - int lastNodeId; - AudioSampleBuffer renderingBuffers; - OwnedArray midiBuffers; - - CriticalSection renderLock; - VoidArray renderingOps; - - friend class AudioGraphIOProcessor; - AudioSampleBuffer* currentAudioInputBuffer; - AudioSampleBuffer currentAudioOutputBuffer; - MidiBuffer* currentMidiInputBuffer; - MidiBuffer currentMidiOutputBuffer; - - void clearRenderingSequence(); - void buildRenderingSequence(); - - bool isAnInputTo (const uint32 possibleInputId, - const uint32 possibleDestinationId, - const int recursionCheck) const throw(); - - AudioProcessorGraph (const AudioProcessorGraph&); - const AudioProcessorGraph& operator= (const AudioProcessorGraph&); -}; - - -#endif // __JUCE_AUDIOPROCESSORGRAPH_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorListener.h b/src/juce_appframework/audio/processors/juce_AudioProcessorListener.h deleted file mode 100644 index f46cd23ee7..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorListener.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPROCESSORLISTENER_JUCEHEADER__ -#define __JUCE_AUDIOPROCESSORLISTENER_JUCEHEADER__ - -class AudioProcessor; - -//============================================================================== -/** - Base class for listeners that want to know about changes to an AudioProcessor. - - Use AudioProcessor::addListener() to register your listener with an AudioProcessor. - - @see AudioProcessor -*/ -class JUCE_API AudioProcessorListener -{ -public: - //============================================================================== - /** Destructor. */ - virtual ~AudioProcessorListener() {} - - //============================================================================== - /** Receives a callback when a parameter is changed. - - IMPORTANT NOTE: this will be called synchronously when a parameter changes, and - many audio processors will change their parameter during their audio callback. - This means that not only has your handler code got to be completely thread-safe, - but it's also got to be VERY fast, and avoid blocking. If you need to handle - this event on your message thread, use this callback to trigger an AsyncUpdater - or ChangeBroadcaster which you can respond to on the message thread. - */ - virtual void audioProcessorParameterChanged (AudioProcessor* processor, - int parameterIndex, - float newValue) = 0; - - /** Called to indicate that something else in the plugin has changed, like its - program, number of parameters, etc. - - IMPORTANT NOTE: this will be called synchronously, and many audio processors will - call it during their audio callback. This means that not only has your handler code - got to be completely thread-safe, but it's also got to be VERY fast, and avoid - blocking. If you need to handle this event on your message thread, use this callback - to trigger an AsyncUpdater or ChangeBroadcaster which you can respond to later on the - message thread. - */ - virtual void audioProcessorChanged (AudioProcessor* processor) = 0; - - /** Indicates that a parameter change gesture has started. - - E.g. if the user is dragging a slider, this would be called when they first - press the mouse button, and audioProcessorParameterChangeGestureEnd would be - called when they release it. - - IMPORTANT NOTE: this will be called synchronously, and many audio processors will - call it during their audio callback. This means that not only has your handler code - got to be completely thread-safe, but it's also got to be VERY fast, and avoid - blocking. If you need to handle this event on your message thread, use this callback - to trigger an AsyncUpdater or ChangeBroadcaster which you can respond to later on the - message thread. - - @see audioProcessorParameterChangeGestureEnd - */ - virtual void audioProcessorParameterChangeGestureBegin (AudioProcessor* processor, - int parameterIndex); - - /** Indicates that a parameter change gesture has finished. - - E.g. if the user is dragging a slider, this would be called when they release - the mouse button. - - IMPORTANT NOTE: this will be called synchronously, and many audio processors will - call it during their audio callback. This means that not only has your handler code - got to be completely thread-safe, but it's also got to be VERY fast, and avoid - blocking. If you need to handle this event on your message thread, use this callback - to trigger an AsyncUpdater or ChangeBroadcaster which you can respond to later on the - message thread. - - @see audioPluginParameterChangeGestureStart - */ - virtual void audioProcessorParameterChangeGestureEnd (AudioProcessor* processor, - int parameterIndex); -}; - -#endif // __JUCE_AUDIOPROCESSORLISTENER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp b/src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp deleted file mode 100644 index ddf303ba81..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_AudioProcessorPlayer.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -AudioProcessorPlayer::AudioProcessorPlayer() - : processor (0), - sampleRate (0), - blockSize (0), - isPrepared (false), - numInputChans (0), - numOutputChans (0), - tempBuffer (1, 1) -{ -} - -AudioProcessorPlayer::~AudioProcessorPlayer() -{ - setProcessor (0); -} - -//============================================================================== -void AudioProcessorPlayer::setProcessor (AudioProcessor* const processorToPlay) -{ - if (processor != processorToPlay) - { - if (processorToPlay != 0 && sampleRate > 0 && blockSize > 0) - { - processorToPlay->setPlayConfigDetails (numInputChans, numOutputChans, - sampleRate, blockSize); - - processorToPlay->prepareToPlay (sampleRate, blockSize); - } - - lock.enter(); - AudioProcessor* const oldOne = isPrepared ? processor : 0; - processor = processorToPlay; - isPrepared = true; - lock.exit(); - - if (oldOne != 0) - oldOne->releaseResources(); - } -} - -//============================================================================== -void AudioProcessorPlayer::audioDeviceIOCallback (const float** inputChannelData, - int numInputChannels, - float** outputChannelData, - int numOutputChannels, - int numSamples) -{ - // these should have been prepared by audioDeviceAboutToStart()... - jassert (sampleRate > 0 && blockSize > 0); - - incomingMidi.clear(); - messageCollector.removeNextBlockOfMessages (incomingMidi, numSamples); - int i, totalNumChans = 0; - - if (numInputChannels > numOutputChannels) - { - // if there aren't enough output channels for the number of - // inputs, we need to create some temporary extra ones (can't - // use the input data in case it gets written to) - tempBuffer.setSize (numInputChannels - numOutputChannels, numSamples, - false, false, true); - - for (i = 0; i < numOutputChannels; ++i) - { - channels[totalNumChans] = outputChannelData[i]; - memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples); - ++totalNumChans; - } - - for (i = numOutputChannels; i < numInputChannels; ++i) - { - channels[totalNumChans] = tempBuffer.getSampleData (i - numOutputChannels, 0); - memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples); - ++totalNumChans; - } - } - else - { - for (i = 0; i < numInputChannels; ++i) - { - channels[totalNumChans] = outputChannelData[i]; - memcpy (channels[totalNumChans], inputChannelData[i], sizeof (float) * numSamples); - ++totalNumChans; - } - - for (i = numInputChannels; i < numOutputChannels; ++i) - { - channels[totalNumChans] = outputChannelData[i]; - zeromem (channels[totalNumChans], sizeof (float) * numSamples); - ++totalNumChans; - } - } - - AudioSampleBuffer buffer (channels, totalNumChans, numSamples); - - const ScopedLock sl (lock); - - if (processor != 0) - processor->processBlock (buffer, incomingMidi); -} - -void AudioProcessorPlayer::audioDeviceAboutToStart (AudioIODevice* device) -{ - const ScopedLock sl (lock); - - sampleRate = device->getCurrentSampleRate(); - blockSize = device->getCurrentBufferSizeSamples(); - numInputChans = device->getActiveInputChannels().countNumberOfSetBits(); - numOutputChans = device->getActiveOutputChannels().countNumberOfSetBits(); - - messageCollector.reset (sampleRate); - zeromem (channels, sizeof (channels)); - - if (processor != 0) - { - if (isPrepared) - processor->releaseResources(); - - AudioProcessor* const oldProcessor = processor; - setProcessor (0); - setProcessor (oldProcessor); - } -} - -void AudioProcessorPlayer::audioDeviceStopped() -{ - const ScopedLock sl (lock); - - if (processor != 0 && isPrepared) - processor->releaseResources(); - - sampleRate = 0.0; - blockSize = 0; - isPrepared = false; - tempBuffer.setSize (1, 1); -} - -void AudioProcessorPlayer::handleIncomingMidiMessage (MidiInput*, const MidiMessage& message) -{ - messageCollector.addMessageToQueue (message); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.h b/src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.h deleted file mode 100644 index 1f0c18fccf..0000000000 --- a/src/juce_appframework/audio/processors/juce_AudioProcessorPlayer.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_AUDIOPROCESSORPLAYER_JUCEHEADER__ -#define __JUCE_AUDIOPROCESSORPLAYER_JUCEHEADER__ - -#include "juce_AudioProcessor.h" -#include "../devices/juce_AudioIODevice.h" -#include "../devices/juce_MidiInput.h" -#include "../midi/juce_MidiMessageCollector.h" - - -//============================================================================== -/** - An AudioIODeviceCallback object which streams audio through an AudioProcessor. - - To use one of these, just make it the callback used by your AudioIODevice, and - give it a processor to use by calling setProcessor(). - - It's also a MidiInputCallback, so you can connect it to both an audio and midi - input to send both streams through the processor. - - @see AudioProcessor, AudioProcessorGraph -*/ -class JUCE_API AudioProcessorPlayer : public AudioIODeviceCallback, - public MidiInputCallback -{ -public: - //============================================================================== - /** - */ - AudioProcessorPlayer(); - - /** Destructor. */ - virtual ~AudioProcessorPlayer(); - - //============================================================================== - /** Sets the processor that should be played. - - The processor that is passed in will not be deleted or owned by this object. - To stop anything playing, pass in 0 to this method. - */ - void setProcessor (AudioProcessor* const processorToPlay); - - /** Returns the current audio processor that is being played. - */ - AudioProcessor* getCurrentProcessor() const throw() { return processor; } - - /** Returns a midi message collector that you can pass midi messages to if you - want them to be injected into the midi stream that is being sent to the - processor. - */ - MidiMessageCollector& getMidiMessageCollector() throw() { return messageCollector; } - - //============================================================================== - /** @internal */ - void audioDeviceIOCallback (const float** inputChannelData, - int totalNumInputChannels, - float** outputChannelData, - int totalNumOutputChannels, - int numSamples); - /** @internal */ - void audioDeviceAboutToStart (AudioIODevice* device); - /** @internal */ - void audioDeviceStopped(); - /** @internal */ - void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioProcessor* processor; - CriticalSection lock; - double sampleRate; - int blockSize; - bool isPrepared; - - int numInputChans, numOutputChans; - float* channels [128]; - AudioSampleBuffer tempBuffer; - - MidiBuffer incomingMidi; - MidiMessageCollector messageCollector; - - AudioProcessorPlayer (const AudioProcessorPlayer&); - const AudioProcessorPlayer& operator= (const AudioProcessorPlayer&); -}; - - -#endif // __JUCE_AUDIOPROCESSORPLAYER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.cpp b/src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.cpp deleted file mode 100644 index 4ab7cb162d..0000000000 --- a/src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_GenericAudioProcessorEditor.h" -#include "juce_AudioProcessor.h" -#include "../../gui/components/controls/juce_Slider.h" - - -//============================================================================== -class ProcessorParameterPropertyComp : public PropertyComponent, - public AudioProcessorListener, - public AsyncUpdater -{ -public: - ProcessorParameterPropertyComp (const String& name, - AudioProcessor* const owner_, - const int index_) - : PropertyComponent (name), - owner (owner_), - index (index_) - { - addAndMakeVisible (slider = new ParamSlider (owner_, index_)); - owner_->addListener (this); - } - - ~ProcessorParameterPropertyComp() - { - owner->removeListener (this); - deleteAllChildren(); - } - - void refresh() - { - slider->setValue (owner->getParameter (index), false); - } - - void audioProcessorChanged (AudioProcessor*) {} - - void audioProcessorParameterChanged (AudioProcessor*, int parameterIndex, float) - { - if (parameterIndex == index) - triggerAsyncUpdate(); - } - - void handleAsyncUpdate() - { - refresh(); - } - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - AudioProcessor* const owner; - const int index; - Slider* slider; - - //============================================================================== - class ParamSlider : public Slider - { - public: - ParamSlider (AudioProcessor* const owner_, const int index_) - : Slider (String::empty), - owner (owner_), - index (index_) - { - setRange (0.0, 1.0, 0.0); - setSliderStyle (Slider::LinearBar); - setTextBoxIsEditable (false); - setScrollWheelEnabled (false); - } - - ~ParamSlider() - { - } - - void valueChanged() - { - const float newVal = (float) getValue(); - - if (owner->getParameter (index) != newVal) - owner->setParameter (index, newVal); - } - - const String getTextFromValue (double /*value*/) - { - return owner->getParameterText (index); - } - - //============================================================================== - juce_UseDebuggingNewOperator - - private: - AudioProcessor* const owner; - const int index; - }; -}; - - -//============================================================================== -GenericAudioProcessorEditor::GenericAudioProcessorEditor (AudioProcessor* const owner) - : AudioProcessorEditor (owner) -{ - setOpaque (true); - - addAndMakeVisible (panel = new PropertyPanel()); - - Array params; - - const int numParams = owner->getNumParameters(); - int totalHeight = 0; - - for (int i = 0; i < numParams; ++i) - { - String name (owner->getParameterName (i)); - if (name.trim().isEmpty()) - name = "Unnamed"; - - ProcessorParameterPropertyComp* const pc = new ProcessorParameterPropertyComp (name, owner, i); - params.add (pc); - totalHeight += pc->getPreferredHeight(); - } - - panel->addProperties (params); - - setSize (400, jlimit (25, 400, totalHeight)); -} - -GenericAudioProcessorEditor::~GenericAudioProcessorEditor() -{ - deleteAllChildren(); -} - -void GenericAudioProcessorEditor::paint (Graphics& g) -{ - g.fillAll (Colours::white); -} - -void GenericAudioProcessorEditor::resized() -{ - panel->setSize (getWidth(), getHeight()); -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.h b/src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.h deleted file mode 100644 index f45c1e64f1..0000000000 --- a/src/juce_appframework/audio/processors/juce_GenericAudioProcessorEditor.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_GENERICAUDIOPROCESSOREDITOR_JUCEHEADER__ -#define __JUCE_GENERICAUDIOPROCESSOREDITOR_JUCEHEADER__ - -#include "juce_AudioProcessorEditor.h" -#include "../../gui/components/properties/juce_PropertyPanel.h" - - -//============================================================================== -/** - A type of UI component that displays the parameters of an AudioProcessor as - a simple list of sliders. - - This can be used for showing an editor for a processor that doesn't supply - its own custom editor. - - @see AudioProcessor -*/ -class JUCE_API GenericAudioProcessorEditor : public AudioProcessorEditor -{ -public: - //============================================================================== - GenericAudioProcessorEditor (AudioProcessor* const owner); - ~GenericAudioProcessorEditor(); - - //============================================================================== - void paint (Graphics& g); - void resized(); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - PropertyPanel* panel; -}; - - -#endif // __JUCE_GENERICAUDIOPROCESSOREDITOR_JUCEHEADER__ diff --git a/src/juce_appframework/audio/synthesisers/juce_Sampler.cpp b/src/juce_appframework/audio/synthesisers/juce_Sampler.cpp deleted file mode 100644 index add2e1dc7c..0000000000 --- a/src/juce_appframework/audio/synthesisers/juce_Sampler.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_Sampler.h" -#include "../audio_file_formats/juce_AudioFormatReader.h" - - -//============================================================================== -SamplerSound::SamplerSound (const String& name_, - AudioFormatReader& source, - const BitArray& midiNotes_, - const int midiNoteForNormalPitch, - const double attackTimeSecs, - const double releaseTimeSecs, - const double maxSampleLengthSeconds) - : name (name_), - midiNotes (midiNotes_), - midiRootNote (midiNoteForNormalPitch) -{ - sourceSampleRate = source.sampleRate; - - if (sourceSampleRate <= 0 || source.lengthInSamples <= 0) - { - data = 0; - length = 0; - attackSamples = 0; - releaseSamples = 0; - } - else - { - length = jmin ((int) source.lengthInSamples, - (int) (maxSampleLengthSeconds * sourceSampleRate)); - - data = new AudioSampleBuffer (jmin (2, source.numChannels), length + 4); - - data->readFromAudioReader (&source, 0, length + 4, 0, true, true); - - attackSamples = roundDoubleToInt (attackTimeSecs * sourceSampleRate); - releaseSamples = roundDoubleToInt (releaseTimeSecs * sourceSampleRate); - } -} - -SamplerSound::~SamplerSound() -{ - delete data; - data = 0; -} - -//============================================================================== -bool SamplerSound::appliesToNote (const int midiNoteNumber) -{ - return midiNotes [midiNoteNumber]; -} - -bool SamplerSound::appliesToChannel (const int /*midiChannel*/) -{ - return true; -} - - -//============================================================================== -SamplerVoice::SamplerVoice() - : pitchRatio (0.0), - sourceSamplePosition (0.0), - lgain (0.0f), - rgain (0.0f), - isInAttack (false), - isInRelease (false) -{ -} - -SamplerVoice::~SamplerVoice() -{ -} - -bool SamplerVoice::canPlaySound (SynthesiserSound* sound) -{ - return dynamic_cast (sound) != 0; -} - -void SamplerVoice::startNote (const int midiNoteNumber, - const float velocity, - SynthesiserSound* s, - const int /*currentPitchWheelPosition*/) -{ - const SamplerSound* const sound = dynamic_cast (s); - jassert (sound != 0); // this object can only play SamplerSounds! - - if (sound != 0) - { - const double targetFreq = MidiMessage::getMidiNoteInHertz (midiNoteNumber); - const double naturalFreq = MidiMessage::getMidiNoteInHertz (sound->midiRootNote); - - pitchRatio = (targetFreq * sound->sourceSampleRate) / (naturalFreq * getSampleRate()); - - sourceSamplePosition = 0.0; - lgain = velocity; - rgain = velocity; - - isInAttack = (sound->attackSamples > 0); - isInRelease = false; - - if (isInAttack) - { - attackReleaseLevel = 0.0f; - attackDelta = (float) (pitchRatio / sound->attackSamples); - } - else - { - attackReleaseLevel = 1.0f; - attackDelta = 0.0f; - } - - if (sound->releaseSamples > 0) - { - releaseDelta = (float) (-pitchRatio / sound->releaseSamples); - } - else - { - releaseDelta = 0.0f; - } - } -} - -void SamplerVoice::stopNote (const bool allowTailOff) -{ - if (allowTailOff) - { - isInAttack = false; - isInRelease = true; - } - else - { - clearCurrentNote(); - } -} - -void SamplerVoice::pitchWheelMoved (const int /*newValue*/) -{ -} - -void SamplerVoice::controllerMoved (const int /*controllerNumber*/, - const int /*newValue*/) -{ -} - -//============================================================================== -void SamplerVoice::renderNextBlock (AudioSampleBuffer& outputBuffer, int startSample, int numSamples) -{ - const SamplerSound* const playingSound = (SamplerSound*) (SynthesiserSound*) getCurrentlyPlayingSound(); - - if (playingSound != 0) - { - const float* const inL = playingSound->data->getSampleData (0, 0); - const float* const inR = playingSound->data->getNumChannels() > 1 - ? playingSound->data->getSampleData (1, 0) : 0; - - float* outL = outputBuffer.getSampleData (0, startSample); - float* outR = outputBuffer.getNumChannels() > 1 ? outputBuffer.getSampleData (1, startSample) : 0; - - while (--numSamples >= 0) - { - const int pos = (int) sourceSamplePosition; - const float alpha = (float) (sourceSamplePosition - pos); - const float invAlpha = 1.0f - alpha; - - // just using a very simple linear interpolation here.. - float l = (inL [pos] * invAlpha + inL [pos + 1] * alpha); - float r = (inR != 0) ? (inR [pos] * invAlpha + inR [pos + 1] * alpha) - : l; - - l *= lgain; - r *= rgain; - - if (isInAttack) - { - l *= attackReleaseLevel; - r *= attackReleaseLevel; - - attackReleaseLevel += attackDelta; - - if (attackReleaseLevel >= 1.0f) - { - attackReleaseLevel = 1.0f; - isInAttack = false; - } - } - else if (isInRelease) - { - l *= attackReleaseLevel; - r *= attackReleaseLevel; - - attackReleaseLevel += releaseDelta; - - if (attackReleaseLevel <= 0.0f) - { - stopNote (false); - break; - } - } - - if (outR != 0) - { - *outL++ += l; - *outR++ += r; - } - else - { - *outL++ += (l + r) * 0.5f; - } - - sourceSamplePosition += pitchRatio; - - if (sourceSamplePosition > playingSound->length) - { - stopNote (false); - break; - } - } - } -} - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/synthesisers/juce_Sampler.h b/src/juce_appframework/audio/synthesisers/juce_Sampler.h deleted file mode 100644 index d1db824bb6..0000000000 --- a/src/juce_appframework/audio/synthesisers/juce_Sampler.h +++ /dev/null @@ -1,157 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_SAMPLER_JUCEHEADER__ -#define __JUCE_SAMPLER_JUCEHEADER__ - -#include "../../../juce_core/containers/juce_BitArray.h" -#include "juce_Synthesiser.h" - - -//============================================================================== -/** - A subclass of SynthesiserSound that represents a sampled audio clip. - - This is a pretty basic sampler, and just attempts to load the whole audio stream - into memory. - - To use it, create a Synthesiser, add some SamplerVoice objects to it, then - give it some SampledSound objects to play. - - @see SamplerVoice, Synthesiser, SynthesiserSound -*/ -class JUCE_API SamplerSound : public SynthesiserSound -{ -public: - //============================================================================== - /** Creates a sampled sound from an audio reader. - - This will attempt to load the audio from the source into memory and store - it in this object. - - @param name a name for the sample - @param source the audio to load. This object can be safely deleted by the - caller after this constructor returns - @param midiNotes the set of midi keys that this sound should be played on. This - is used by the SynthesiserSound::appliesToNote() method - @param midiNoteForNormalPitch the midi note at which the sample should be played - with its natural rate. All other notes will be pitched - up or down relative to this one - @param attackTimeSecs the attack (fade-in) time, in seconds - @param releaseTimeSecs the decay (fade-out) time, in seconds - @param maxSampleLengthSeconds a maximum length of audio to read from the audio - source, in seconds - */ - SamplerSound (const String& name, - AudioFormatReader& source, - const BitArray& midiNotes, - const int midiNoteForNormalPitch, - const double attackTimeSecs, - const double releaseTimeSecs, - const double maxSampleLengthSeconds); - - /** Destructor. */ - ~SamplerSound(); - - //============================================================================== - /** Returns the sample's name */ - const String& getName() const throw() { return name; } - - /** Returns the audio sample data. - This could be 0 if there was a problem loading it. - */ - AudioSampleBuffer* getAudioData() const throw() { return data; } - - - //============================================================================== - bool appliesToNote (const int midiNoteNumber); - bool appliesToChannel (const int midiChannel); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - friend class SamplerVoice; - - String name; - AudioSampleBuffer* data; - double sourceSampleRate; - BitArray midiNotes; - int length, attackSamples, releaseSamples; - int midiRootNote; -}; - - -//============================================================================== -/** - A subclass of SynthesiserVoice that can play a SamplerSound. - - To use it, create a Synthesiser, add some SamplerVoice objects to it, then - give it some SampledSound objects to play. - - @see SamplerSound, Synthesiser, SynthesiserVoice -*/ -class JUCE_API SamplerVoice : public SynthesiserVoice -{ -public: - //============================================================================== - /** Creates a SamplerVoice. - */ - SamplerVoice(); - - /** Destructor. */ - ~SamplerVoice(); - - - //============================================================================== - bool canPlaySound (SynthesiserSound* sound); - - void startNote (const int midiNoteNumber, - const float velocity, - SynthesiserSound* sound, - const int currentPitchWheelPosition); - - void stopNote (const bool allowTailOff); - - void pitchWheelMoved (const int newValue); - void controllerMoved (const int controllerNumber, - const int newValue); - - void renderNextBlock (AudioSampleBuffer& outputBuffer, int startSample, int numSamples); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - double pitchRatio; - double sourceSamplePosition; - float lgain, rgain, attackReleaseLevel, attackDelta, releaseDelta; - bool isInAttack, isInRelease; -}; - - -#endif // __JUCE_SAMPLER_JUCEHEADER__ diff --git a/src/juce_appframework/audio/synthesisers/juce_Synthesiser.cpp b/src/juce_appframework/audio/synthesisers/juce_Synthesiser.cpp deleted file mode 100644 index 489b04d86f..0000000000 --- a/src/juce_appframework/audio/synthesisers/juce_Synthesiser.cpp +++ /dev/null @@ -1,370 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../../../juce_core/basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_Synthesiser.h" -#include "../../../juce_core/threads/juce_ScopedLock.h" - - -//============================================================================== -SynthesiserSound::SynthesiserSound() -{ -} - -SynthesiserSound::~SynthesiserSound() -{ -} - -//============================================================================== -SynthesiserVoice::SynthesiserVoice() - : currentSampleRate (44100.0), - currentlyPlayingNote (-1), - noteOnTime (0), - currentlyPlayingSound (0) -{ -} - -SynthesiserVoice::~SynthesiserVoice() -{ -} - -bool SynthesiserVoice::isPlayingChannel (const int midiChannel) const -{ - return currentlyPlayingSound != 0 - && currentlyPlayingSound->appliesToChannel (midiChannel); -} - -void SynthesiserVoice::setCurrentPlaybackSampleRate (const double newRate) -{ - currentSampleRate = newRate; -} - -void SynthesiserVoice::clearCurrentNote() -{ - currentlyPlayingNote = -1; - currentlyPlayingSound = 0; -} - -//============================================================================== -Synthesiser::Synthesiser() - : voices (2), - sounds (2), - sampleRate (0), - lastNoteOnCounter (0), - shouldStealNotes (true) -{ - for (int i = 0; i < numElementsInArray (lastPitchWheelValues); ++i) - lastPitchWheelValues[i] = 0x2000; -} - -Synthesiser::~Synthesiser() -{ -} - -//============================================================================== -SynthesiserVoice* Synthesiser::getVoice (const int index) const throw() -{ - const ScopedLock sl (lock); - return voices [index]; -} - -void Synthesiser::clearVoices() -{ - const ScopedLock sl (lock); - voices.clear(); -} - -void Synthesiser::addVoice (SynthesiserVoice* const newVoice) -{ - const ScopedLock sl (lock); - voices.add (newVoice); -} - -void Synthesiser::removeVoice (const int index) -{ - const ScopedLock sl (lock); - voices.remove (index); -} - -void Synthesiser::clearSounds() -{ - const ScopedLock sl (lock); - sounds.clear(); -} - -void Synthesiser::addSound (const SynthesiserSound::Ptr& newSound) -{ - const ScopedLock sl (lock); - sounds.add (newSound); -} - -void Synthesiser::removeSound (const int index) -{ - const ScopedLock sl (lock); - sounds.remove (index); -} - -void Synthesiser::setNoteStealingEnabled (const bool shouldStealNotes_) -{ - shouldStealNotes = shouldStealNotes_; -} - -//============================================================================== -void Synthesiser::setCurrentPlaybackSampleRate (const double newRate) -{ - if (sampleRate != newRate) - { - const ScopedLock sl (lock); - - allNotesOff (0, false); - - sampleRate = newRate; - - for (int i = voices.size(); --i >= 0;) - voices.getUnchecked (i)->setCurrentPlaybackSampleRate (newRate); - } -} - -void Synthesiser::renderNextBlock (AudioSampleBuffer& outputBuffer, - const MidiBuffer& midiData, - int startSample, - int numSamples) -{ - // must set the sample rate before using this! - jassert (sampleRate != 0); - - const ScopedLock sl (lock); - - MidiBuffer::Iterator midiIterator (midiData); - midiIterator.setNextSamplePosition (startSample); - MidiMessage m (0xf4, 0.0); - - while (numSamples > 0) - { - int midiEventPos; - const bool useEvent = midiIterator.getNextEvent (m, midiEventPos) - && midiEventPos < startSample + numSamples; - - const int numThisTime = useEvent ? midiEventPos - startSample - : numSamples; - - if (numThisTime > 0) - { - for (int i = voices.size(); --i >= 0;) - voices.getUnchecked (i)->renderNextBlock (outputBuffer, startSample, numThisTime); - } - - if (useEvent) - { - if (m.isNoteOn()) - { - const int channel = m.getChannel(); - - noteOn (channel, - m.getNoteNumber(), - m.getFloatVelocity()); - } - else if (m.isNoteOff()) - { - noteOff (m.getChannel(), - m.getNoteNumber(), - true); - } - else if (m.isAllNotesOff() || m.isAllSoundOff()) - { - allNotesOff (m.getChannel(), true); - } - else if (m.isPitchWheel()) - { - const int channel = m.getChannel(); - const int wheelPos = m.getPitchWheelValue(); - lastPitchWheelValues [channel - 1] = wheelPos; - - handlePitchWheel (channel, wheelPos); - } - else if (m.isController()) - { - handleController (m.getChannel(), - m.getControllerNumber(), - m.getControllerValue()); - } - } - - startSample += numThisTime; - numSamples -= numThisTime; - } -} - -//============================================================================== -void Synthesiser::noteOn (const int midiChannel, - const int midiNoteNumber, - const float velocity) -{ - const ScopedLock sl (lock); - - for (int i = sounds.size(); --i >= 0;) - { - SynthesiserSound* const sound = sounds.getUnchecked(i); - - if (sound->appliesToNote (midiNoteNumber) - && sound->appliesToChannel (midiChannel)) - { - startVoice (findFreeVoice (sound, shouldStealNotes), - sound, midiChannel, midiNoteNumber, velocity); - } - } -} - -void Synthesiser::startVoice (SynthesiserVoice* const voice, - SynthesiserSound* const sound, - const int midiChannel, - const int midiNoteNumber, - const float velocity) -{ - if (voice != 0 && sound != 0) - { - if (voice->currentlyPlayingSound != 0) - voice->stopNote (false); - - voice->startNote (midiNoteNumber, - velocity, - sound, - lastPitchWheelValues [midiChannel - 1]); - - voice->currentlyPlayingNote = midiNoteNumber; - voice->noteOnTime = ++lastNoteOnCounter; - voice->currentlyPlayingSound = sound; - } -} - -void Synthesiser::noteOff (const int midiChannel, - const int midiNoteNumber, - const bool allowTailOff) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (voice->getCurrentlyPlayingNote() == midiNoteNumber) - { - SynthesiserSound* const sound = voice->getCurrentlyPlayingSound(); - - if (sound != 0 - && sound->appliesToNote (midiNoteNumber) - && sound->appliesToChannel (midiChannel)) - { - voice->stopNote (allowTailOff); - - // the subclass MUST call clearCurrentNote() if it's not tailing off! RTFM for stopNote()! - jassert (allowTailOff || (voice->getCurrentlyPlayingNote() < 0 && voice->getCurrentlyPlayingSound() == 0)); - } - } - } -} - -void Synthesiser::allNotesOff (const int midiChannel, - const bool allowTailOff) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel)) - voice->stopNote (allowTailOff); - } -} - -void Synthesiser::handlePitchWheel (const int midiChannel, - const int wheelValue) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel)) - { - voice->pitchWheelMoved (wheelValue); - } - } -} - -void Synthesiser::handleController (const int midiChannel, - const int controllerNumber, - const int controllerValue) -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (midiChannel <= 0 || voice->isPlayingChannel (midiChannel)) - voice->controllerMoved (controllerNumber, controllerValue); - } -} - -//============================================================================== -SynthesiserVoice* Synthesiser::findFreeVoice (SynthesiserSound* soundToPlay, - const bool stealIfNoneAvailable) const -{ - const ScopedLock sl (lock); - - for (int i = voices.size(); --i >= 0;) - if (voices.getUnchecked (i)->getCurrentlyPlayingNote() < 0 - && voices.getUnchecked (i)->canPlaySound (soundToPlay)) - return voices.getUnchecked (i); - - if (stealIfNoneAvailable) - { - // currently this just steals the one that's been playing the longest, but could be made a bit smarter.. - SynthesiserVoice* oldest = 0; - - for (int i = voices.size(); --i >= 0;) - { - SynthesiserVoice* const voice = voices.getUnchecked (i); - - if (voice->canPlaySound (soundToPlay) - && (oldest == 0 || oldest->noteOnTime > voice->noteOnTime)) - oldest = voice; - } - - jassert (oldest != 0); - return oldest; - } - - return 0; -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_appframework/audio/synthesisers/juce_Synthesiser.h b/src/juce_appframework/audio/synthesisers/juce_Synthesiser.h deleted file mode 100644 index e6a49e7827..0000000000 --- a/src/juce_appframework/audio/synthesisers/juce_Synthesiser.h +++ /dev/null @@ -1,484 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_SYNTHESISER_JUCEHEADER__ -#define __JUCE_SYNTHESISER_JUCEHEADER__ - -#include "../dsp/juce_AudioSampleBuffer.h" -#include "../midi/juce_MidiBuffer.h" -#include "../../../juce_core/containers/juce_OwnedArray.h" -#include "../../../juce_core/containers/juce_ReferenceCountedObject.h" -#include "../../../juce_core/containers/juce_ReferenceCountedArray.h" -#include "../../../juce_core/threads/juce_CriticalSection.h" - - -//============================================================================== -/** - Describes one of the sounds that a Synthesiser can play. - - A synthesiser can contain one or more sounds, and a sound can choose which - midi notes and channels can trigger it. - - The SynthesiserSound is a passive class that just describes what the sound is - - the actual audio rendering for a sound is done by a SynthesiserVoice. This allows - more than one SynthesiserVoice to play the same sound at the same time. - - @see Synthesiser, SynthesiserVoice -*/ -class JUCE_API SynthesiserSound : public ReferenceCountedObject -{ -protected: - //============================================================================== - SynthesiserSound(); - -public: - /** Destructor. */ - virtual ~SynthesiserSound(); - - //============================================================================== - /** Returns true if this sound should be played when a given midi note is pressed. - - The Synthesiser will use this information when deciding which sounds to trigger - for a given note. - */ - virtual bool appliesToNote (const int midiNoteNumber) = 0; - - /** Returns true if the sound should be triggered by midi events on a given channel. - - The Synthesiser will use this information when deciding which sounds to trigger - for a given note. - */ - virtual bool appliesToChannel (const int midiChannel) = 0; - - /** - */ - typedef ReferenceCountedObjectPtr Ptr; - - //============================================================================== - juce_UseDebuggingNewOperator -}; - - -//============================================================================== -/** - Represents a voice that a Synthesiser can use to play a SynthesiserSound. - - A voice plays a single sound at a time, and a synthesiser holds an array of - voices so that it can play polyphonically. - - @see Synthesiser, SynthesiserSound -*/ -class JUCE_API SynthesiserVoice -{ -public: - //============================================================================== - /** Creates a voice. */ - SynthesiserVoice(); - - /** Destructor. */ - virtual ~SynthesiserVoice(); - - //============================================================================== - /** Returns the midi note that this voice is currently playing. - - Returns a value less than 0 if no note is playing. - */ - int getCurrentlyPlayingNote() const throw() { return currentlyPlayingNote; } - - /** Returns the sound that this voice is currently playing. - - Returns 0 if it's not playing. - */ - const SynthesiserSound::Ptr getCurrentlyPlayingSound() const throw() { return currentlyPlayingSound; } - - /** Must return true if this voice object is capable of playing the given sound. - - If there are different classes of sound, and different classes of voice, a voice can - choose which ones it wants to take on. - - A typical implementation of this method may just return true if there's only one type - of voice and sound, or it might check the type of the sound object passed-in and - see if it's one that it understands. - */ - virtual bool canPlaySound (SynthesiserSound* sound) = 0; - - /** Called to start a new note. - - This will be called during the rendering callback, so must be fast and thread-safe. - */ - virtual void startNote (const int midiNoteNumber, - const float velocity, - SynthesiserSound* sound, - const int currentPitchWheelPosition) = 0; - - /** Called to stop a note. - - This will be called during the rendering callback, so must be fast and thread-safe. - - If allowTailOff is false or the voice doesn't want to tail-off, then it must stop all - sound immediately, and must call clearCurrentNote() to reset the state of this voice - and allow the synth to reassign it another sound. - - If allowTailOff is true and the voice decides to do a tail-off, then it's allowed to - begin fading out its sound, and it can stop playing until it's finished. As soon as it - finishes playing (during the rendering callback), it must make sure that it calls - clearCurrentNote(). - */ - virtual void stopNote (const bool allowTailOff) = 0; - - /** Called to let the voice know that the pitch wheel has been moved. - - This will be called during the rendering callback, so must be fast and thread-safe. - */ - virtual void pitchWheelMoved (const int newValue) = 0; - - /** Called to let the voice know that a midi controller has been moved. - - This will be called during the rendering callback, so must be fast and thread-safe. - */ - virtual void controllerMoved (const int controllerNumber, - const int newValue) = 0; - - //============================================================================== - /** Renders the next block of data for this voice. - - The output audio data must be added to the current contents of the buffer provided. - Only the region of the buffer between startSample and (startSample + numSamples) - should be altered by this method. - - If the voice is currently silent, it should just return without doing anything. - - If the sound that the voice is playing finishes during the course of this rendered - block, it must call clearCurrentNote(), to tell the synthesiser that it has finished. - - The size of the blocks that are rendered can change each time it is called, and may - involve rendering as little as 1 sample at a time. In between rendering callbacks, - the voice's methods will be called to tell it about note and controller events. - */ - virtual void renderNextBlock (AudioSampleBuffer& outputBuffer, - int startSample, - int numSamples) = 0; - - /** Returns true if the voice is currently playing a sound which is mapped to the given - midi channel. - - If it's not currently playing, this will return false. - */ - bool isPlayingChannel (const int midiChannel) const; - - /** Changes the voice's reference sample rate. - - The rate is set so that subclasses know the output rate and can set their pitch - accordingly. - - This method is called by the synth, and subclasses can access the current rate with - the currentSampleRate member. - */ - void setCurrentPlaybackSampleRate (const double newRate); - - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - //============================================================================== - /** Returns the current target sample rate at which rendering is being done. - - This is available for subclasses so they can pitch things correctly. - */ - double getSampleRate() const throw() { return currentSampleRate; } - - /** Resets the state of this voice after a sound has finished playing. - - The subclass must call this when it finishes playing a note and becomes available - to play new ones. - - It must either call it in the stopNote() method, or if the voice is tailing off, - then it should call it later during the renderNextBlock method, as soon as it - finishes its tail-off. - - It can also be called at any time during the render callback if the sound happens - to have finished, e.g. if it's playing a sample and the sample finishes. - */ - void clearCurrentNote(); - - -private: - //============================================================================== - friend class Synthesiser; - - double currentSampleRate; - int currentlyPlayingNote; - uint32 noteOnTime; - SynthesiserSound::Ptr currentlyPlayingSound; -}; - - -//============================================================================== -/** - Base class for a musical device that can play sounds. - - To create a synthesiser, you'll need to create a subclass of SynthesiserSound - to describe each sound available to your synth, and a subclass of SynthesiserVoice - which can play back one of these sounds. - - Then you can use the addVoice() and addSound() methods to give the synthesiser a - set of sounds, and a set of voices it can use to play them. If you only give it - one voice it will be monophonic - the more voices it has, the more polyphony it'll - have available. - - Then repeatedly call the renderNextBlock() method to produce the audio. Any midi - events that go in will be scanned for note on/off messages, and these are used to - start and stop the voices playing the appropriate sounds. - - While it's playing, you can also cause notes to be triggered by calling the noteOn(), - noteOff() and other controller methods. - - Before rendering, be sure to call the setCurrentPlaybackSampleRate() to tell it - what the target playback rate is. This value is passed on to the voices so that - they can pitch their output correctly. -*/ -class JUCE_API Synthesiser -{ -public: - //============================================================================== - /** Creates a new synthesiser. - - You'll need to add some sounds and voices before it'll make any sound.. - */ - Synthesiser(); - - /** Destructor. */ - virtual ~Synthesiser(); - - //============================================================================== - /** Deletes all voices. */ - void clearVoices(); - - /** Returns the number of voices that have been added. */ - int getNumVoices() const throw() { return voices.size(); } - - /** Returns one of the voices that have been added. */ - SynthesiserVoice* getVoice (const int index) const throw(); - - /** Adds a new voice to the synth. - - All the voices should be the same class of object and are treated equally. - - The object passed in will be managed by the synthesiser, which will delete - it later on when no longer needed. The caller should not retain a pointer to the - voice. - */ - void addVoice (SynthesiserVoice* const newVoice); - - /** Deletes one of the voices. */ - void removeVoice (const int index); - - //============================================================================== - /** Deletes all sounds. */ - void clearSounds(); - - /** Returns the number of sounds that have been added to the synth. */ - int getNumSounds() const throw() { return sounds.size(); } - - /** Returns one of the sounds. */ - SynthesiserSound* getSound (const int index) const throw() { return sounds [index]; } - - /** Adds a new sound to the synthesiser. - - The object passed in is reference counted, so will be deleted when it is removed - from the synthesiser, and when no voices are still using it. - */ - void addSound (const SynthesiserSound::Ptr& newSound); - - /** Removes and deletes one of the sounds. */ - void removeSound (const int index); - - //============================================================================== - /** If set to true, then the synth will try to take over an existing voice if - it runs out and needs to play another note. - - The value of this boolean is passed into findFreeVoice(), so the result will - depend on the implementation of this method. - */ - void setNoteStealingEnabled (const bool shouldStealNotes); - - /** Returns true if note-stealing is enabled. - @see setNoteStealingEnabled - */ - bool isNoteStealingEnabled() const throw() { return shouldStealNotes; } - - //============================================================================== - /** Triggers a note-on event. - - The default method here will find all the sounds that want to be triggered by - this note/channel. For each sound, it'll try to find a free voice, and use the - voice to start playing the sound. - - Subclasses might want to override this if they need a more complex algorithm. - - This method will be called automatically according to the midi data passed into - renderNextBlock(), but may be called explicitly too. - */ - virtual void noteOn (const int midiChannel, - const int midiNoteNumber, - const float velocity); - - /** Triggers a note-off event. - - This will turn off any voices that are playing a sound for the given note/channel. - - If allowTailOff is true, the voices will be allowed to fade out the notes gracefully - (if they can do). If this is false, the notes will all be cut off immediately. - - This method will be called automatically according to the midi data passed into - renderNextBlock(), but may be called explicitly too. - */ - virtual void noteOff (const int midiChannel, - const int midiNoteNumber, - const bool allowTailOff); - - /** Turns off all notes. - - This will turn off any voices that are playing a sound on the given midi channel. - - If midiChannel is 0 or less, then all voices will be turned off, regardless of - which channel they're playing. - - If allowTailOff is true, the voices will be allowed to fade out the notes gracefully - (if they can do). If this is false, the notes will all be cut off immediately. - - This method will be called automatically according to the midi data passed into - renderNextBlock(), but may be called explicitly too. - */ - virtual void allNotesOff (const int midiChannel, - const bool allowTailOff); - - /** Sends a pitch-wheel message. - - This will send a pitch-wheel message to any voices that are playing sounds on - the given midi channel. - - This method will be called automatically according to the midi data passed into - renderNextBlock(), but may be called explicitly too. - - @param midiChannel the midi channel for the event - @param wheelValue the wheel position, from 0 to 0x3fff, as returned by MidiMessage::getPitchWheelValue() - */ - virtual void handlePitchWheel (const int midiChannel, - const int wheelValue); - - /** Sends a midi controller message. - - This will send a midi controller message to any voices that are playing sounds on - the given midi channel. - - This method will be called automatically according to the midi data passed into - renderNextBlock(), but may be called explicitly too. - - @param midiChannel the midi channel for the event - @param controllerNumber the midi controller type, as returned by MidiMessage::getControllerNumber() - @param controllerValue the midi controller value, between 0 and 127, as returned by MidiMessage::getControllerValue() - */ - virtual void handleController (const int midiChannel, - const int controllerNumber, - const int controllerValue); - - //============================================================================== - /** Tells the synthesiser what the sample rate is for the audio it's being used to - render. - - This value is propagated to the voices so that they can use it to render the correct - pitches. - */ - void setCurrentPlaybackSampleRate (const double sampleRate); - - /** Creates the next block of audio output. - - This will process the next numSamples of data from all the voices, and add that output - to the audio block supplied, starting from the offset specified. Note that the - data will be added to the current contents of the buffer, so you should clear it - before calling this method if necessary. - - The midi events in the inputMidi buffer are parsed for note and controller events, - and these are used to trigger the voices. Note that the startSample offset applies - both to the audio output buffer and the midi input buffer, so any midi events - with timestamps outside the specified region will be ignored. - */ - void renderNextBlock (AudioSampleBuffer& outputAudio, - const MidiBuffer& inputMidi, - int startSample, - int numSamples); - - - //============================================================================== - juce_UseDebuggingNewOperator - -protected: - //============================================================================== - /** This is used to control access to the rendering callback and the note trigger methods. */ - CriticalSection lock; - - OwnedArray voices; - ReferenceCountedArray sounds; - - /** The last pitch-wheel values for each midi channel. */ - int lastPitchWheelValues [16]; - - /** Searches through the voices to find one that's not currently playing, and which - can play the given sound. - - Returns 0 if all voices are busy and stealing isn't enabled. - - This can be overridden to implement custom voice-stealing algorithms. - */ - virtual SynthesiserVoice* findFreeVoice (SynthesiserSound* soundToPlay, - const bool stealIfNoneAvailable) const; - - /** Starts a specified voice playing a particular sound. - - You'll probably never need to call this, it's used internally by noteOn(), but - may be needed by subclasses for custom behaviours. - */ - void startVoice (SynthesiserVoice* const voice, - SynthesiserSound* const sound, - const int midiChannel, - const int midiNoteNumber, - const float velocity); - - /** xxx Temporary method here to cause a compiler error - note the new parameters for this method. */ - int findFreeVoice (const bool) const { return 0; } - -private: - double sampleRate; - uint32 lastNoteOnCounter; - bool shouldStealNotes; - - Synthesiser (const Synthesiser&); - const Synthesiser& operator= (const Synthesiser&); -}; - - -#endif // __JUCE_SYNTHESISER_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Atomic.h b/src/juce_core/basics/juce_Atomic.h deleted file mode 100644 index 63299af9be..0000000000 --- a/src/juce_core/basics/juce_Atomic.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_ATOMIC_JUCEHEADER__ -#define __JUCE_ATOMIC_JUCEHEADER__ - -//============================================================================== -// Atomic increment/decrement operations.. - - -//============================================================================== -#if JUCE_MAC && ! DOXYGEN - - #if ! MACOS_10_3_OR_EARLIER - //============================================================================== - forcedinline void atomicIncrement (int& variable) throw() { OSAtomicIncrement32 ((int32_t*) &variable); } - forcedinline int atomicIncrementAndReturn (int& variable) throw() { return OSAtomicIncrement32 ((int32_t*) &variable); } - forcedinline void atomicDecrement (int& variable) throw() { OSAtomicDecrement32 ((int32_t*) &variable); } - forcedinline int atomicDecrementAndReturn (int& variable) throw() { return OSAtomicDecrement32 ((int32_t*) &variable); } - #else - //============================================================================== - forcedinline void atomicIncrement (int& variable) throw() { OTAtomicAdd32 (1, (SInt32*) &variable); } - forcedinline int atomicIncrementAndReturn (int& variable) throw() { return OTAtomicAdd32 (1, (SInt32*) &variable); } - forcedinline void atomicDecrement (int& variable) throw() { OTAtomicAdd32 (-1, (SInt32*) &variable); } - forcedinline int atomicDecrementAndReturn (int& variable) throw() { return OTAtomicAdd32 (-1, (SInt32*) &variable); } - #endif - -#elif JUCE_GCC - //============================================================================== - #if JUCE_USE_GCC_ATOMIC_INTRINSICS - forcedinline void atomicIncrement (int& variable) throw() { __sync_add_and_fetch (&variable, 1); } - forcedinline int atomicIncrementAndReturn (int& variable) throw() { return __sync_add_and_fetch (&variable, 1); } - forcedinline void atomicDecrement (int& variable) throw() { __sync_add_and_fetch (&variable, -1); } - forcedinline int atomicDecrementAndReturn (int& variable) throw() { return __sync_add_and_fetch (&variable, -1); } - #else - //============================================================================== - /** Increments an integer in a thread-safe way. */ - forcedinline void atomicIncrement (int& variable) throw() - { - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock incl (%%rax)" - : - : "a" (&variable) - : "cc", "memory"); - #else - "lock incl %0" - : "=m" (variable) - : "m" (variable)); - #endif - } - - /** Increments an integer in a thread-safe way and returns the incremented value. */ - forcedinline int atomicIncrementAndReturn (int& variable) throw() - { - int result; - - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock xaddl %%ebx, (%%rax) \n\ - incl %%ebx" - : "=b" (result) - : "a" (&variable), "b" (1) - : "cc", "memory"); - #else - "lock xaddl %%eax, (%%ecx) \n\ - incl %%eax" - : "=a" (result) - : "c" (&variable), "a" (1) - : "memory"); - #endif - - return result; - } - - /** Decrememts an integer in a thread-safe way. */ - forcedinline void atomicDecrement (int& variable) throw() - { - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock decl (%%rax)" - : - : "a" (&variable) - : "cc", "memory"); - #else - "lock decl %0" - : "=m" (variable) - : "m" (variable)); - #endif - } - - /** Decrememts an integer in a thread-safe way and returns the incremented value. */ - forcedinline int atomicDecrementAndReturn (int& variable) throw() - { - int result; - - __asm__ __volatile__ ( - #if JUCE_64BIT - "lock xaddl %%ebx, (%%rax) \n\ - decl %%ebx" - : "=b" (result) - : "a" (&variable), "b" (-1) - : "cc", "memory"); - #else - "lock xaddl %%eax, (%%ecx) \n\ - decl %%eax" - : "=a" (result) - : "c" (&variable), "a" (-1) - : "memory"); - #endif - return result; - } - #endif - -#elif JUCE_USE_INTRINSICS - //============================================================================== - #pragma intrinsic (_InterlockedIncrement) - #pragma intrinsic (_InterlockedDecrement) - - /** Increments an integer in a thread-safe way. */ - forcedinline void __fastcall atomicIncrement (int& variable) throw() - { - _InterlockedIncrement (reinterpret_cast (&variable)); - } - - /** Increments an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicIncrementAndReturn (int& variable) throw() - { - return _InterlockedIncrement (reinterpret_cast (&variable)); - } - - /** Decrememts an integer in a thread-safe way. */ - forcedinline void __fastcall atomicDecrement (int& variable) throw() - { - _InterlockedDecrement (reinterpret_cast (&variable)); - } - - /** Decrememts an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicDecrementAndReturn (int& variable) throw() - { - return _InterlockedDecrement (reinterpret_cast (&variable)); - } -#else - //============================================================================== - /** Increments an integer in a thread-safe way. */ - forcedinline void __fastcall atomicIncrement (int& variable) throw() - { - __asm { - mov ecx, dword ptr [variable] - lock inc dword ptr [ecx] - } - } - - /** Increments an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicIncrementAndReturn (int& variable) throw() - { - int result; - - __asm { - mov ecx, dword ptr [variable] - mov eax, 1 - lock xadd dword ptr [ecx], eax - inc eax - mov result, eax - } - - return result; - } - - /** Decrememts an integer in a thread-safe way. */ - forcedinline void __fastcall atomicDecrement (int& variable) throw() - { - __asm { - mov ecx, dword ptr [variable] - lock dec dword ptr [ecx] - } - } - - /** Decrememts an integer in a thread-safe way and returns the incremented value. */ - forcedinline int __fastcall atomicDecrementAndReturn (int& variable) throw() - { - int result; - - __asm { - mov ecx, dword ptr [variable] - mov eax, -1 - lock xadd dword ptr [ecx], eax - dec eax - mov result, eax - } - - return result; - } -#endif - -#endif // __JUCE_ATOMIC_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_DataConversions.h b/src/juce_core/basics/juce_DataConversions.h deleted file mode 100644 index 1478c94f50..0000000000 --- a/src/juce_core/basics/juce_DataConversions.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__ -#define __JUCE_DATACONVERSIONS_JUCEHEADER__ - -#include "juce_PlatformDefs.h" - -#if JUCE_USE_INTRINSICS - #pragma intrinsic (_byteswap_ulong) -#endif - -//============================================================================== -// Endianness conversions.. - -/** Swaps the byte-order in an integer from little to big-endianness or vice-versa. */ -forcedinline uint32 swapByteOrder (uint32 n) throw() -{ -#if JUCE_MAC - // Mac version - return CFSwapInt32 (n); -#elif JUCE_GCC - // Inpenetrable GCC version.. - asm("bswap %%eax" : "=a"(n) : "a"(n)); - return n; -#elif JUCE_USE_INTRINSICS - // Win32 intrinsics version.. - return _byteswap_ulong (n); -#else - // Win32 version.. - __asm { - mov eax, n - bswap eax - mov n, eax - } - return n; -#endif -} - -/** Swaps the byte-order of a 16-bit short. */ -inline uint16 swapByteOrder (const uint16 n) throw() -{ -#if JUCE_USE_INTRINSICSxxx // agh - the MS compiler has an internal error when you try to use this intrinsic! - // Win32 intrinsics version.. - return (uint16) _byteswap_ushort (n); -#else - return (uint16) ((n << 8) | (n >> 8)); -#endif -} - -inline uint64 swapByteOrder (const uint64 value) throw() -{ -#if JUCE_MAC - return CFSwapInt64 (value); -#elif JUCE_USE_INTRINSICS - return _byteswap_uint64 (value); -#else - return (((int64) swapByteOrder ((uint32) value)) << 32) - | swapByteOrder ((uint32) (value >> 32)); -#endif -} - -#if JUCE_LITTLE_ENDIAN - /** Swaps the byte order of a 16-bit int if the CPU is big-endian */ - inline uint16 swapIfBigEndian (const uint16 v) throw() { return v; } - /** Swaps the byte order of a 32-bit int if the CPU is big-endian */ - inline uint32 swapIfBigEndian (const uint32 v) throw() { return v; } - /** Swaps the byte order of a 64-bit int if the CPU is big-endian */ - inline uint64 swapIfBigEndian (const uint64 v) throw() { return v; } - - /** Swaps the byte order of a 16-bit int if the CPU is little-endian */ - inline uint16 swapIfLittleEndian (const uint16 v) throw() { return swapByteOrder (v); } - /** Swaps the byte order of a 32-bit int if the CPU is little-endian */ - inline uint32 swapIfLittleEndian (const uint32 v) throw() { return swapByteOrder (v); } - /** Swaps the byte order of a 64-bit int if the CPU is little-endian */ - inline uint64 swapIfLittleEndian (const uint64 v) throw() { return swapByteOrder (v); } - - /** Turns 4 bytes into a little-endian integer. */ - inline uint32 littleEndianInt (const char* const bytes) throw() { return *(uint32*) bytes; } - /** Turns 2 bytes into a little-endian integer. */ - inline uint16 littleEndianShort (const char* const bytes) throw() { return *(uint16*) bytes; } - - /** Turns 4 bytes into a big-endian integer. */ - inline uint32 bigEndianInt (const char* const bytes) throw() { return swapByteOrder (*(uint32*) bytes); } - /** Turns 2 bytes into a big-endian integer. */ - inline uint16 bigEndianShort (const char* const bytes) throw() { return swapByteOrder (*(uint16*) bytes); } - -#else - /** Swaps the byte order of a 16-bit int if the CPU is big-endian */ - inline uint16 swapIfBigEndian (const uint16 v) throw() { return swapByteOrder (v); } - /** Swaps the byte order of a 32-bit int if the CPU is big-endian */ - inline uint32 swapIfBigEndian (const uint32 v) throw() { return swapByteOrder (v); } - /** Swaps the byte order of a 64-bit int if the CPU is big-endian */ - inline uint64 swapIfBigEndian (const uint64 v) throw() { return swapByteOrder (v); } - - /** Swaps the byte order of a 16-bit int if the CPU is little-endian */ - inline uint16 swapIfLittleEndian (const uint16 v) throw() { return v; } - /** Swaps the byte order of a 32-bit int if the CPU is little-endian */ - inline uint32 swapIfLittleEndian (const uint32 v) throw() { return v; } - /** Swaps the byte order of a 64-bit int if the CPU is little-endian */ - inline uint64 swapIfLittleEndian (const uint64 v) throw() { return v; } - - /** Turns 4 bytes into a little-endian integer. */ - inline uint32 littleEndianInt (const char* const bytes) throw() { return swapByteOrder (*(uint32*) bytes); } - /** Turns 2 bytes into a little-endian integer. */ - inline uint16 littleEndianShort (const char* const bytes) throw() { return swapByteOrder (*(uint16*) bytes); } - - /** Turns 4 bytes into a big-endian integer. */ - inline uint32 bigEndianInt (const char* const bytes) throw() { return *(uint32*) bytes; } - /** Turns 2 bytes into a big-endian integer. */ - inline uint16 bigEndianShort (const char* const bytes) throw() { return *(uint16*) bytes; } -#endif - -/** Converts 3 little-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */ -inline int littleEndian24Bit (const char* const bytes) throw() { return (((int) bytes[2]) << 16) | (((uint32) (uint8) bytes[1]) << 8) | ((uint32) (uint8) bytes[0]); } -/** Converts 3 big-endian bytes into a signed 24-bit value (which is sign-extended to 32 bits). */ -inline int bigEndian24Bit (const char* const bytes) throw() { return (((int) bytes[0]) << 16) | (((uint32) (uint8) bytes[1]) << 8) | ((uint32) (uint8) bytes[2]); } - -/** Copies a 24-bit number to 3 little-endian bytes. */ -inline void littleEndian24BitToChars (const int value, char* const destBytes) throw() { destBytes[0] = (char)(value & 0xff); destBytes[1] = (char)((value >> 8) & 0xff); destBytes[2] = (char)((value >> 16) & 0xff); } -/** Copies a 24-bit number to 3 big-endian bytes. */ -inline void bigEndian24BitToChars (const int value, char* const destBytes) throw() { destBytes[0] = (char)((value >> 16) & 0xff); destBytes[1] = (char)((value >> 8) & 0xff); destBytes[2] = (char)(value & 0xff); } - - -//============================================================================== -/** Fast floating-point-to-integer conversion. - - This is faster than using the normal c++ cast to convert a double to an int, and - it will round the value to the nearest integer, rather than rounding it down - like the normal cast does. - - Note that this routine gets its speed at the expense of some accuracy, and when - rounding values whose floating point component is exactly 0.5, odd numbers and - even numbers will be rounded up or down differently. For a more accurate conversion, - see roundDoubleToIntAccurate(). -*/ -inline int roundDoubleToInt (const double value) throw() -{ - union { int asInt[2]; double asDouble; } n; - n.asDouble = value + 6755399441055744.0; - -#if JUCE_BIG_ENDIAN - return n.asInt [1]; -#else - return n.asInt [0]; -#endif -} - -/** Fast floating-point-to-integer conversion. - - This is a slightly slower and slightly more accurate version of roundDoubleToInt(). It works - fine for values above zero, but negative numbers are rounded the wrong way. -*/ -inline int roundDoubleToIntAccurate (const double value) throw() -{ - return roundDoubleToInt (value + 1.5e-8); -} - -/** Fast floating-point-to-integer conversion. - - This is faster than using the normal c++ cast to convert a float to an int, and - it will round the value to the nearest integer, rather than rounding it down - like the normal cast does. - - Note that this routine gets its speed at the expense of some accuracy, and when - rounding values whose floating point component is exactly 0.5, odd numbers and - even numbers will be rounded up or down differently. -*/ -inline int roundFloatToInt (const float value) throw() -{ - union { int asInt[2]; double asDouble; } n; - n.asDouble = value + 6755399441055744.0; - -#if JUCE_BIG_ENDIAN - return n.asInt [1]; -#else - return n.asInt [0]; -#endif -} - - -#endif // __JUCE_DATACONVERSIONS_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_FileLogger.cpp b/src/juce_core/basics/juce_FileLogger.cpp deleted file mode 100644 index fd36b7ec7e..0000000000 --- a/src/juce_core/basics/juce_FileLogger.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - - -#include "juce_FileLogger.h" -#include "../io/files/juce_FileOutputStream.h" -#include "../io/files/juce_FileInputStream.h" -#include "../threads/juce_ScopedLock.h" -#include "../basics/juce_SystemStats.h" - - -//============================================================================== -FileLogger::FileLogger (const File& logFile_, - const String& welcomeMessage, - const int maxInitialFileSizeBytes) - : logFile (logFile_) -{ - if (maxInitialFileSizeBytes >= 0) - trimFileSize (maxInitialFileSizeBytes); - - if (! logFile_.exists()) - { - // do this so that the parent directories get created.. - logFile_.create(); - } - - logStream = logFile_.createOutputStream (256); - jassert (logStream != 0); - - String welcome; - welcome << "\r\n**********************************************************\r\n" - << welcomeMessage - << "\r\nLog started: " << Time::getCurrentTime().toString (true, true) - << "\r\n"; - - logMessage (welcome); -} - -FileLogger::~FileLogger() -{ - deleteAndZero (logStream); -} - -//============================================================================== -void FileLogger::logMessage (const String& message) -{ - if (logStream != 0) - { - Logger::outputDebugString (message); - - const ScopedLock sl (logLock); - (*logStream) << message << T("\r\n"); - logStream->flush(); - } -} - - -void FileLogger::trimFileSize (int maxFileSizeBytes) const -{ - if (maxFileSizeBytes <= 0) - { - logFile.deleteFile(); - } - else - { - const int64 fileSize = logFile.getSize(); - - if (fileSize > maxFileSizeBytes) - { - FileInputStream* const in = logFile.createInputStream(); - jassert (in != 0); - - if (in != 0) - { - in->setPosition (fileSize - maxFileSizeBytes); - String content; - - { - MemoryBlock contentToSave; - contentToSave.setSize (maxFileSizeBytes + 4); - contentToSave.fillWith (0); - - in->read (contentToSave.getData(), maxFileSizeBytes); - delete in; - - content = contentToSave.toString(); - } - - int newStart = 0; - - while (newStart < fileSize - && content[newStart] != '\n' - && content[newStart] != '\r') - ++newStart; - - logFile.deleteFile(); - logFile.appendText (content.substring (newStart), false, false); - } - } - } -} - -//============================================================================== -FileLogger* FileLogger::createDefaultAppLogger (const String& logFileSubDirectoryName, - const String& logFileName, - const String& welcomeMessage, - const int maxInitialFileSizeBytes) -{ -#if JUCE_MAC - File logFile ("~/Library/Logs"); - logFile = logFile.getChildFile (logFileName); - -#else - File logFile (File::getSpecialLocation (File::userApplicationDataDirectory)); - - if (logFile.isDirectory()) - { - logFile = logFile.getChildFile (logFileSubDirectoryName) - .getChildFile (logFileName); - } -#endif - - return new FileLogger (logFile, welcomeMessage, maxInitialFileSizeBytes); -} - -END_JUCE_NAMESPACE diff --git a/src/juce_core/basics/juce_FileLogger.h b/src/juce_core/basics/juce_FileLogger.h deleted file mode 100644 index c7d673cda2..0000000000 --- a/src/juce_core/basics/juce_FileLogger.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_FILELOGGER_JUCEHEADER__ -#define __JUCE_FILELOGGER_JUCEHEADER__ - -#include "juce_Logger.h" -#include "../io/files/juce_File.h" - - -//============================================================================== -/** - A simple implemenation of a Logger that writes to a file. - - @see Logger -*/ -class JUCE_API FileLogger : public Logger -{ -public: - //============================================================================== - /** Creates a FileLogger for a given file. - - @param fileToWriteTo the file that to use - new messages will be appended - to the file. If the file doesn't exist, it will be created, - along with any parent directories that are needed. - @param welcomeMessage when opened, the logger will write a header to the log, along - with the current date and time, and this welcome message - @param maxInitialFileSizeBytes if this is zero or greater, then if the file already exists - but is larger than this number of bytes, then the start of the - file will be truncated to keep the size down. This prevents a log - file getting ridiculously large over time. The file will be truncated - at a new-line boundary. If this value is less than zero, no size limit - will be imposed; if it's zero, the file will always be deleted. Note that - the size is only checked once when this object is created - any logging - that is done later will be appended without any checking - */ - FileLogger (const File& fileToWriteTo, - const String& welcomeMessage, - const int maxInitialFileSizeBytes = 128 * 1024); - - /** Destructor. */ - ~FileLogger(); - - //============================================================================== - void logMessage (const String& message); - - //============================================================================== - /** Helper function to create a log file in the correct place for this platform. - - On Windows this will return a logger with a path such as: - c:\\Documents and Settings\\username\\Application Data\\[logFileSubDirectoryName]\\[logFileName] - - On the Mac it'll create something like: - ~/Library/Logs/[logFileName] - - The method might return 0 if the file can't be created for some reason. - - @param logFileSubDirectoryName if a subdirectory is needed, this is what it will be called - - it's best to use the something like the name of your application here. - @param logFileName the name of the file to create, e.g. "MyAppLog.txt". Don't just - call it "log.txt" because if it goes in a directory with logs - from other applications (as it will do on the Mac) then no-one - will know which one is yours! - @param welcomeMessage a message that will be written to the log when it's opened. - @param maxInitialFileSizeBytes (see the FileLogger constructor for more info on this) - */ - static FileLogger* createDefaultAppLogger (const String& logFileSubDirectoryName, - const String& logFileName, - const String& welcomeMessage, - const int maxInitialFileSizeBytes = 128 * 1024); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - File logFile; - CriticalSection logLock; - FileOutputStream* logStream; - - void trimFileSize (int maxFileSizeBytes) const; - - FileLogger (const FileLogger&); - const FileLogger& operator= (const FileLogger&); -}; - - -#endif // __JUCE_FILELOGGER_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Initialisation.h b/src/juce_core/basics/juce_Initialisation.h deleted file mode 100644 index b4e6715c0c..0000000000 --- a/src/juce_core/basics/juce_Initialisation.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_INITIALISATION_JUCEHEADER__ -#define __JUCE_INITIALISATION_JUCEHEADER__ - - -//============================================================================== -/** Initialises Juce's GUI classes. - - If you're embedding Juce into an application that uses its own event-loop rather - than using the START_JUCE_APPLICATION macro, call this function before making any - Juce calls, to make sure things are initialised correctly. - - Note that if you're creating a Juce DLL for Windows, you may also need to call the - PlatformUtilities::setCurrentModuleInstanceHandle() method. - - @see shutdownJuce_GUI(), initialiseJuce_NonGUI() -*/ -void JUCE_PUBLIC_FUNCTION initialiseJuce_GUI(); - -/** Clears up any static data being used by Juce's GUI classes. - - If you're embedding Juce into an application that uses its own event-loop rather - than using the START_JUCE_APPLICATION macro, call this function in your shutdown - code to clean up any juce objects that might be lying around. - - @see initialiseJuce_GUI(), initialiseJuce_NonGUI() -*/ -void JUCE_PUBLIC_FUNCTION shutdownJuce_GUI(); - - -//============================================================================== -/** Initialises the core parts of Juce. - - If you're embedding Juce into either a command-line program, call this function - at the start of your main() function to make sure that Juce is initialised correctly. - - Note that if you're creating a Juce DLL for Windows, you may also need to call the - PlatformUtilities::setCurrentModuleInstanceHandle() method. - - @see shutdownJuce_NonGUI, initialiseJuce_GUI -*/ -void JUCE_PUBLIC_FUNCTION initialiseJuce_NonGUI(); - -/** Clears up any static data being used by Juce's non-gui core classes. - - If you're embedding Juce into either a command-line program, call this function - at the end of your main() function if you want to make sure any Juce objects are - cleaned up correctly. - - @see initialiseJuce_NonGUI, initialiseJuce_GUI -*/ -void JUCE_PUBLIC_FUNCTION shutdownJuce_NonGUI(); - - - -#endif // __JUCE_INITIALISATION_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Logger.cpp b/src/juce_core/basics/juce_Logger.cpp deleted file mode 100644 index eefacfbbbb..0000000000 --- a/src/juce_core/basics/juce_Logger.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_Logger.h" - - -//============================================================================== -Logger::Logger() -{ -} - -Logger::~Logger() -{ -} - -//============================================================================== -static Logger* currentLogger = 0; - -void Logger::setCurrentLogger (Logger* const newLogger, - const bool deleteOldLogger) -{ - Logger* const oldLogger = currentLogger; - currentLogger = newLogger; - - if (deleteOldLogger && (oldLogger != 0)) - delete oldLogger; -} - -void Logger::writeToLog (const String& message) -{ - if (currentLogger != 0) - currentLogger->logMessage (message); - else - outputDebugString (message); -} - -#if JUCE_LOG_ASSERTIONS -void JUCE_API juce_LogAssertion (const char* filename, const int lineNum) throw() -{ - String m ("JUCE Assertion failure in "); - m << filename << ", line " << lineNum; - - Logger::writeToLog (m); -} -#endif - -END_JUCE_NAMESPACE diff --git a/src/juce_core/basics/juce_Logger.h b/src/juce_core/basics/juce_Logger.h deleted file mode 100644 index 8662e8f339..0000000000 --- a/src/juce_core/basics/juce_Logger.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_LOGGER_JUCEHEADER__ -#define __JUCE_LOGGER_JUCEHEADER__ - -#include "../text/juce_String.h" - - -//============================================================================== -/** - Acts as an application-wide logging class. - - A subclass of Logger can be created and passed into the Logger::setCurrentLogger - method and this will then be used by all calls to writeToLog. - - The logger class also contains methods for writing messages to the debugger's - output stream. - - @see FileLogger -*/ -class JUCE_API Logger -{ -public: - //============================================================================== - /** Destructor. */ - virtual ~Logger(); - - //============================================================================== - /** Sets the current logging class to use. - - Note that the object passed in won't be deleted when no longer needed. - A null pointer can be passed-in to disable any logging. - - If deleteOldLogger is set to true, the existing logger will be - deleted (if there is one). - */ - static void JUCE_CALLTYPE setCurrentLogger (Logger* const newLogger, - const bool deleteOldLogger = false); - - /** Writes a string to the current logger. - - This will pass the string to the logger's logMessage() method if a logger - has been set. - - @see logMessage - */ - static void JUCE_CALLTYPE writeToLog (const String& message); - - - //============================================================================== - /** Writes a message to the standard error stream. - - This can be called directly, or by using the DBG() macro in - juce_PlatformDefs.h (which will avoid calling the method in non-debug builds). - */ - static void JUCE_CALLTYPE outputDebugString (const String& text) throw(); - - /** Writes a message to the standard error stream. - - This can be called directly, or by using the DBG_PRINTF() macro in - juce_PlatformDefs.h (which will avoid calling the method in non-debug builds). - */ - static void JUCE_CALLTYPE outputDebugPrintf (const tchar* format, ...) throw(); - - -protected: - //============================================================================== - Logger(); - - /** This is overloaded by subclasses to implement custom logging behaviour. - - @see setCurrentLogger - */ - virtual void logMessage (const String& message) = 0; -}; - - -#endif // __JUCE_LOGGER_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_MathsFunctions.h b/src/juce_core/basics/juce_MathsFunctions.h deleted file mode 100644 index 3c0bd63a49..0000000000 --- a/src/juce_core/basics/juce_MathsFunctions.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MATHSFUNCTIONS_JUCEHEADER__ -#define __JUCE_MATHSFUNCTIONS_JUCEHEADER__ - -//============================================================================== -/* - This file sets up some handy mathematical typdefs and functions. -*/ - -//============================================================================== -// Definitions for the int8, int16, int32, int64 and pointer_sized_int types. - -/** A platform-independent 8-bit signed integer type. */ -typedef signed char int8; -/** A platform-independent 8-bit unsigned integer type. */ -typedef unsigned char uint8; -/** A platform-independent 16-bit signed integer type. */ -typedef signed short int16; -/** A platform-independent 16-bit unsigned integer type. */ -typedef unsigned short uint16; -/** A platform-independent 32-bit signed integer type. */ -typedef signed int int32; -/** A platform-independent 32-bit unsigned integer type. */ -typedef unsigned int uint32; - -#if JUCE_MSVC - /** A platform-independent 64-bit integer type. */ - typedef __int64 int64; - /** A platform-independent 64-bit unsigned integer type. */ - typedef unsigned __int64 uint64; - /** A platform-independent macro for writing 64-bit literals, needed because - different compilers have different syntaxes for this. - - E.g. writing literal64bit (0x1000000000) will translate to 0x1000000000LL for - GCC, or 0x1000000000 for MSVC. - */ - #define literal64bit(longLiteral) ((__int64) longLiteral) -#else - /** A platform-independent 64-bit integer type. */ - typedef long long int64; - /** A platform-independent 64-bit unsigned integer type. */ - typedef unsigned long long uint64; - /** A platform-independent macro for writing 64-bit literals, needed because - different compilers have different syntaxes for this. - - E.g. writing literal64bit (0x1000000000) will translate to 0x1000000000LL for - GCC, or 0x1000000000 for MSVC. - */ - #define literal64bit(longLiteral) (longLiteral##LL) -#endif - - -#if JUCE_64BIT - /** A signed integer type that's guaranteed to be large enough to hold a pointer without truncating it. */ - typedef int64 pointer_sized_int; - /** An unsigned integer type that's guaranteed to be large enough to hold a pointer without truncating it. */ - typedef uint64 pointer_sized_uint; -#elif _MSC_VER >= 1300 - /** A signed integer type that's guaranteed to be large enough to hold a pointer without truncating it. */ - typedef _W64 int pointer_sized_int; - /** An unsigned integer type that's guaranteed to be large enough to hold a pointer without truncating it. */ - typedef _W64 unsigned int pointer_sized_uint; -#else - /** A signed integer type that's guaranteed to be large enough to hold a pointer without truncating it. */ - typedef int pointer_sized_int; - /** An unsigned integer type that's guaranteed to be large enough to hold a pointer without truncating it. */ - typedef unsigned int pointer_sized_uint; -#endif - -/** A platform-independent unicode character type. */ -typedef wchar_t juce_wchar; - - -//============================================================================== -// Some indispensible min/max functions - -/** Returns the larger of two values. */ -forcedinline int jmax (const int a, const int b) throw() { return (a < b) ? b : a; } -/** Returns the larger of two values. */ -forcedinline int64 jmax (const int64 a, const int64 b) throw() { return (a < b) ? b : a; } -/** Returns the larger of two values. */ -forcedinline float jmax (const float a, const float b) throw() { return (a < b) ? b : a; } -/** Returns the larger of two values. */ -forcedinline double jmax (const double a, const double b) throw() { return (a < b) ? b : a; } - -/** Returns the larger of three values. */ -inline int jmax (const int a, const int b, const int c) throw() { return (a < b) ? ((b < c) ? c : b) : ((a < c) ? c : a); } -/** Returns the larger of three values. */ -inline int64 jmax (const int64 a, const int64 b, const int64 c) throw() { return (a < b) ? ((b < c) ? c : b) : ((a < c) ? c : a); } -/** Returns the larger of three values. */ -inline float jmax (const float a, const float b, const float c) throw() { return (a < b) ? ((b < c) ? c : b) : ((a < c) ? c : a); } -/** Returns the larger of three values. */ -inline double jmax (const double a, const double b, const double c) throw() { return (a < b) ? ((b < c) ? c : b) : ((a < c) ? c : a); } - -/** Returns the larger of four values. */ -inline int jmax (const int a, const int b, const int c, const int d) throw() { return jmax (a, jmax (b, c, d)); } -/** Returns the larger of four values. */ -inline int64 jmax (const int64 a, const int64 b, const int64 c, const int64 d) throw() { return jmax (a, jmax (b, c, d)); } -/** Returns the larger of four values. */ -inline float jmax (const float a, const float b, const float c, const float d) throw() { return jmax (a, jmax (b, c, d)); } -/** Returns the larger of four values. */ -inline double jmax (const double a, const double b, const double c, const double d) throw() { return jmax (a, jmax (b, c, d)); } - -/** Returns the smaller of two values. */ -inline int jmin (const int a, const int b) throw() { return (a > b) ? b : a; } -/** Returns the smaller of two values. */ -inline int64 jmin (const int64 a, const int64 b) throw() { return (a > b) ? b : a; } -/** Returns the smaller of two values. */ -inline float jmin (const float a, const float b) throw() { return (a > b) ? b : a; } -/** Returns the smaller of two values. */ -inline double jmin (const double a, const double b) throw() { return (a > b) ? b : a; } - -/** Returns the smaller of three values. */ -inline int jmin (const int a, const int b, const int c) throw() { return (a > b) ? ((b > c) ? c : b) : ((a > c) ? c : a); } -/** Returns the smaller of three values. */ -inline int64 jmin (const int64 a, const int64 b, const int64 c) throw() { return (a > b) ? ((b > c) ? c : b) : ((a > c) ? c : a); } -/** Returns the smaller of three values. */ -inline float jmin (const float a, const float b, const float c) throw() { return (a > b) ? ((b > c) ? c : b) : ((a > c) ? c : a); } -/** Returns the smaller of three values. */ -inline double jmin (const double a, const double b, const double c) throw() { return (a > b) ? ((b > c) ? c : b) : ((a > c) ? c : a); } - -/** Returns the smaller of four values. */ -inline int jmin (const int a, const int b, const int c, const int d) throw() { return jmin (a, jmin (b, c, d)); } -/** Returns the smaller of four values. */ -inline int64 jmin (const int64 a, const int64 b, const int64 c, const int64 d) throw() { return jmin (a, jmin (b, c, d)); } -/** Returns the smaller of four values. */ -inline float jmin (const float a, const float b, const float c, const float d) throw() { return jmin (a, jmin (b, c, d)); } -/** Returns the smaller of four values. */ -inline double jmin (const double a, const double b, const double c, const double d) throw() { return jmin (a, jmin (b, c, d)); } - - -//============================================================================== -/** Constrains a value to keep it within a given range. - - This will check that the specified value lies between the lower and upper bounds - specified, and if not, will return the nearest value that would be in-range. Effectively, - it's like calling jmax (lowerLimit, jmin (upperLimit, value)). - - Note that it expects that lowerLimit <= upperLimit. If this isn't true, - the results will be unpredictable. - - @param lowerLimit the minimum value to return - @param upperLimit the maximum value to return - @param valueToConstrain the value to try to return - @returns the closest value to valueToConstrain which lies between lowerLimit - and upperLimit (inclusive) - @see jlimit0To, jmin, jmax -*/ -template -inline Type jlimit (const Type lowerLimit, - const Type upperLimit, - const Type valueToConstrain) throw() -{ - jassert (lowerLimit <= upperLimit); // if these are in the wrong order, results are unpredictable.. - - return (valueToConstrain < lowerLimit) ? lowerLimit - : ((valueToConstrain > upperLimit) ? upperLimit - : valueToConstrain); -} - -//============================================================================== -/** Handy function to swap two values over. -*/ -template -inline void swapVariables (Type& variable1, Type& variable2) throw() -{ - const Type tempVal = variable1; - variable1 = variable2; - variable2 = tempVal; -} - -/** Handy macro for getting the number of elements in a simple const C array. - - E.g. - @code - static int myArray[] = { 1, 2, 3 }; - - int numElements = numElementsInArray (myArray) // returns 3 - @endcode -*/ -#define numElementsInArray(a) ((int) (sizeof (a) / sizeof ((a)[0]))) - -//============================================================================== -// Some useful maths functions that aren't always present with all compilers and build settings. - -#if JUCE_WIN32 || defined (DOXYGEN) - /** Using juce_hypot and juce_hypotf is easier than dealing with all the different - versions of these functions of various platforms and compilers. */ - forcedinline double juce_hypot (double a, double b) { return _hypot (a, b); } - - /** Using juce_hypot and juce_hypotf is easier than dealing with all the different - versions of these functions of various platforms and compilers. */ - forcedinline float juce_hypotf (float a, float b) { return (float) _hypot (a, b); } -#else - /** Using juce_hypot and juce_hypotf is easier than dealing with all the different - versions of these functions of various platforms and compilers. */ - forcedinline double juce_hypot (double a, double b) { return hypot (a, b); } - - /** Using juce_hypot and juce_hypotf is easier than dealing with all the different - versions of these functions of various platforms and compilers. */ - forcedinline float juce_hypotf (float a, float b) { return hypotf (a, b); } -#endif - -inline int64 abs64 (const int64 n) throw() { return (n >= 0) ? n : -n; } - - -//============================================================================== -/** A predefined value for Pi, at double-precision. - - @see float_Pi -*/ -const double double_Pi = 3.1415926535897932384626433832795; - -/** A predefined value for Pi, at sngle-precision. - - @see double_Pi -*/ -const float float_Pi = 3.14159265358979323846f; - - -//============================================================================== -/** The isfinite() method seems to vary greatly between platforms, so this is a - platform-independent macro for it. -*/ -#if JUCE_LINUX - #define juce_isfinite(v) std::isfinite(v) -#elif JUCE_MAC - #if MACOS_10_3_OR_EARLIER - #ifdef isfinite - #define juce_isfinite(v) isfinite(v) - #else - // no idea why the isfinite macro is sometimes impossible to include, so just copy the built-in one.. - static __inline__ int juce_isfinite (double __x) { return __x == __x && __builtin_fabs (__x) != __builtin_inf(); } - #endif - #else - #define juce_isfinite(v) std::isfinite(v) - #endif -#elif JUCE_WIN32 && ! defined (isfinite) - #define juce_isfinite(v) _finite(v) -#else - #define juce_isfinite(v) isfinite(v) -#endif - - -//============================================================================== - -#endif // __JUCE_MATHSFUNCTIONS_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Memory.h b/src/juce_core/basics/juce_Memory.h deleted file mode 100644 index 88e875216f..0000000000 --- a/src/juce_core/basics/juce_Memory.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_MEMORY_JUCEHEADER__ -#define __JUCE_MEMORY_JUCEHEADER__ - -//============================================================================== -/* - This file defines the various juce_malloc(), juce_free() macros that should be used in - preference to the standard calls. -*/ - -#if defined (JUCE_DEBUG) && JUCE_MSVC && JUCE_CHECK_MEMORY_LEAKS - #ifndef JUCE_DLL - //============================================================================== - // Win32 debug non-DLL versions.. - - /** This should be used instead of calling malloc directly. */ - #define juce_malloc(numBytes) _malloc_dbg (numBytes, _NORMAL_BLOCK, __FILE__, __LINE__) - /** This should be used instead of calling calloc directly. */ - #define juce_calloc(numBytes) _calloc_dbg (1, numBytes, _NORMAL_BLOCK, __FILE__, __LINE__) - /** This should be used instead of calling realloc directly. */ - #define juce_realloc(location, numBytes) _realloc_dbg (location, numBytes, _NORMAL_BLOCK, __FILE__, __LINE__) - /** This should be used instead of calling free directly. */ - #define juce_free(location) _free_dbg (location, _NORMAL_BLOCK) - - #else - //============================================================================== - // Win32 debug DLL versions.. - - // For the DLL, we'll define some functions in the DLL that will be used for allocation - that - // way all juce calls in the DLL and in the host API will all use the same allocator. - extern JUCE_API void* juce_DebugMalloc (const int size, const char* file, const int line); - extern JUCE_API void* juce_DebugCalloc (const int size, const char* file, const int line); - extern JUCE_API void* juce_DebugRealloc (void* const block, const int size, const char* file, const int line); - extern JUCE_API void juce_DebugFree (void* const block); - - /** This should be used instead of calling malloc directly. */ - #define juce_malloc(numBytes) JUCE_NAMESPACE::juce_DebugMalloc (numBytes, __FILE__, __LINE__) - /** This should be used instead of calling calloc directly. */ - #define juce_calloc(numBytes) JUCE_NAMESPACE::juce_DebugCalloc (numBytes, __FILE__, __LINE__) - /** This should be used instead of calling realloc directly. */ - #define juce_realloc(location, numBytes) JUCE_NAMESPACE::juce_DebugRealloc (location, numBytes, __FILE__, __LINE__) - /** This should be used instead of calling free directly. */ - #define juce_free(location) JUCE_NAMESPACE::juce_DebugFree (location) - #endif - - #if ! defined (_AFXDLL) - /** This macro can be added to classes to add extra debugging information to the memory - allocated for them, so you can see the type of objects involved when there's a dump - of leaked objects at program shutdown. (Only works on win32 at the moment). - */ - #define juce_UseDebuggingNewOperator \ - static void* operator new (size_t sz) { void* const p = juce_malloc ((int) sz); return (p != 0) ? p : ::operator new (sz); } \ - static void* operator new (size_t sz, void* p) { return ::operator new (sz, p); } \ - static void operator delete (void* p) { juce_free (p); } - #endif - -#elif defined (JUCE_DLL) - //============================================================================== - // Win32 DLL (release) versions.. - - // For the DLL, we'll define some functions in the DLL that will be used for allocation - that - // way all juce calls in the DLL and in the host API will all use the same allocator. - extern JUCE_API void* juce_Malloc (const int size); - extern JUCE_API void* juce_Calloc (const int size); - extern JUCE_API void* juce_Realloc (void* const block, const int size); - extern JUCE_API void juce_Free (void* const block); - - /** This should be used instead of calling malloc directly. */ - #define juce_malloc(numBytes) JUCE_NAMESPACE::juce_Malloc (numBytes) - /** This should be used instead of calling calloc directly. */ - #define juce_calloc(numBytes) JUCE_NAMESPACE::juce_Calloc (numBytes) - /** This should be used instead of calling realloc directly. */ - #define juce_realloc(location, numBytes) JUCE_NAMESPACE::juce_Realloc (location, numBytes) - /** This should be used instead of calling free directly. */ - #define juce_free(location) JUCE_NAMESPACE::juce_Free (location) - - #define juce_UseDebuggingNewOperator \ - static void* operator new (size_t sz) { void* const p = juce_malloc ((int) sz); return (p != 0) ? p : ::operator new (sz); } \ - static void* operator new (size_t sz, void* p) { return ::operator new (sz, p); } \ - static void operator delete (void* p) { juce_free (p); } - -#else - - //============================================================================== - // Mac, Linux and Win32 (release) versions.. - - /** This should be used instead of calling malloc directly. */ - #define juce_malloc(numBytes) malloc (numBytes) - /** This should be used instead of calling calloc directly. */ - #define juce_calloc(numBytes) calloc (1, numBytes) - /** This should be used instead of calling realloc directly. */ - #define juce_realloc(location, numBytes) realloc (location, numBytes) - /** This should be used instead of calling free directly. */ - #define juce_free(location) free (location) - -#endif - -//============================================================================== -/** This macro can be added to classes to add extra debugging information to the memory - allocated for them, so you can see the type of objects involved when there's a dump - of leaked objects at program shutdown. (Only works on win32 at the moment). - - Note that if you create a class that inherits from a class that uses this macro, - your class must also use the macro, otherwise you'll probably get compile errors - because of ambiguous new operators. - - Most of the JUCE classes use it, so see these for examples of where it should go. -*/ -#ifndef juce_UseDebuggingNewOperator - #define juce_UseDebuggingNewOperator -#endif - -//============================================================================== -#if JUCE_MSVC - /** This is a compiler-indenpendent way of declaring a variable as being thread-local. - - E.g. - @code - juce_ThreadLocal int myVariable; - @endcode - */ - #define juce_ThreadLocal __declspec(thread) -#else - #define juce_ThreadLocal __thread -#endif - - -//============================================================================== -/** Clears a block of memory. */ -#define zeromem(memory, numBytes) memset (memory, 0, numBytes) - -/** Clears a reference to a local structure. */ -#define zerostruct(structure) memset (&structure, 0, sizeof (structure)) - -/** A handy macro that calls delete on a pointer if it's non-zero, and - then sets the pointer to null. -*/ -#define deleteAndZero(pointer) { delete (pointer); (pointer) = 0; } - - - -#endif // __JUCE_MEMORY_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_PlatformDefs.h b/src/juce_core/basics/juce_PlatformDefs.h deleted file mode 100644 index 89f49504d2..0000000000 --- a/src/juce_core/basics/juce_PlatformDefs.h +++ /dev/null @@ -1,360 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__ -#define __JUCE_PLATFORMDEFS_JUCEHEADER__ - -//============================================================================== -/* This file figures out which platform is being built, and defines some macros - that the rest of the code can use for OS-specific compilation. - - Macros that will be set here are: - - - One of JUCE_WIN32, JUCE_MAC or JUCE_LINUX. - - Either JUCE_32BIT or JUCE_64BIT, depending on the architecture. - - Either JUCE_LITTLE_ENDIAN or JUCE_BIG_ENDIAN. - - Either JUCE_INTEL or JUCE_PPC - - Either JUCE_GCC or JUCE_MSVC - - It also includes a set of macros for debug console output and assertions. - -*/ - -//============================================================================== -#if (defined (_WIN32) || defined (_WIN64)) - #define JUCE_WIN32 1 -#else - #if defined (LINUX) || defined (__linux__) - #define JUCE_LINUX 1 - #else - #define JUCE_MAC 1 - #endif -#endif - -//============================================================================== -#if JUCE_WIN32 - #ifdef _MSC_VER - #ifdef _WIN64 - #define JUCE_64BIT 1 - #else - #define JUCE_32BIT 1 - #endif - #endif - - #ifdef _DEBUG - #define JUCE_DEBUG 1 - #endif - - /** If defined, this indicates that the processor is little-endian. */ - #define JUCE_LITTLE_ENDIAN 1 - - #define JUCE_INTEL 1 -#endif - -//============================================================================== -#if JUCE_MAC - - #include - - #ifndef NDEBUG - #define JUCE_DEBUG 1 - #endif - - #ifdef __LITTLE_ENDIAN__ - #define JUCE_LITTLE_ENDIAN 1 - #else - #define JUCE_BIG_ENDIAN 1 - #endif - - #if defined (__ppc__) || defined (__ppc64__) - #define JUCE_PPC 1 - #else - #define JUCE_INTEL 1 - #endif - - #ifdef __LP64__ - #define JUCE_64BIT 1 - #else - #define JUCE_32BIT 1 - #endif - - #if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_3) - #error "Building for OSX 10.2 is no longer supported!" - #endif - - #if (! defined (MAC_OS_X_VERSION_10_4)) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4) - #define MACOS_10_3_OR_EARLIER 1 - #endif - - #if (! defined (MAC_OS_X_VERSION_10_5)) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - #define MACOS_10_4_OR_EARLIER 1 - #endif -#endif - -//============================================================================== -#if JUCE_LINUX - - #ifdef _DEBUG - #define JUCE_DEBUG 1 - #endif - - // Allow override for big-endian Linux platforms - #ifndef JUCE_BIG_ENDIAN - #define JUCE_LITTLE_ENDIAN 1 - #endif - - #if defined (__LP64__) || defined (_LP64) - #define JUCE_64BIT 1 - #else - #define JUCE_32BIT 1 - #endif - - #define JUCE_INTEL 1 -#endif - -//============================================================================== -#ifdef JUCE_FORCE_DEBUG - #undef JUCE_DEBUG - - #if JUCE_FORCE_DEBUG - #define JUCE_DEBUG 1 - #endif -#endif - -//============================================================================== -// Compiler type macros. - -#ifdef __GNUC__ - #define JUCE_GCC 1 -#elif defined (_MSC_VER) - #define JUCE_MSVC 1 - - #if _MSC_VER >= 1400 - #define JUCE_USE_INTRINSICS 1 - #endif -#else - #error unknown compiler -#endif - -/** This macro defines the C calling convention used as the standard for Juce calls. */ -#if JUCE_MSVC - #define JUCE_CALLTYPE __stdcall -#else - #define JUCE_CALLTYPE -#endif - -//============================================================================== -// Debugging and assertion macros - -// (For info about JUCE_LOG_ASSERTIONS, have a look in juce_Config.h) -#if JUCE_LOG_ASSERTIONS - #define juce_LogCurrentAssertion juce_LogAssertion (__FILE__, __LINE__); -#elif defined (JUCE_DEBUG) - #define juce_LogCurrentAssertion fprintf (stderr, "JUCE Assertion failure in %s, line %d\n", __FILE__, __LINE__); -#else - #define juce_LogCurrentAssertion -#endif - -#ifdef JUCE_DEBUG - //============================================================================== - // If debugging is enabled.. - - /** Writes a string to the standard error stream. - - This is only compiled in a debug build. - - @see Logger::outputDebugString - */ - #define DBG(dbgtext) Logger::outputDebugString (dbgtext); - - /** Printf's a string to the standard error stream. - - This is only compiled in a debug build. - - @see Logger::outputDebugString - */ - #define DBG_PRINTF(dbgprintf) Logger::outputDebugPrintf dbgprintf; - - //============================================================================== - // Assertions.. - - #if JUCE_WIN32 || DOXYGEN - - #if JUCE_USE_INTRINSICS - #pragma intrinsic (__debugbreak) - - /** This will try to break the debugger if one is currently hosting this app. - @see jassert() - */ - #define juce_breakDebugger __debugbreak(); - - #elif JUCE_GCC - /** This will try to break the debugger if one is currently hosting this app. - @see jassert() - */ - #define juce_breakDebugger asm("int $3"); - #else - /** This will try to break the debugger if one is currently hosting this app. - @see jassert() - */ - #define juce_breakDebugger { __asm int 3 } - #endif - #elif JUCE_MAC - #define juce_breakDebugger Debugger(); - #elif JUCE_LINUX - #define juce_breakDebugger kill (0, SIGTRAP); - #endif - - //============================================================================== - /** This will always cause an assertion failure. - - It is only compiled in a debug build, (unless JUCE_LOG_ASSERTIONS is enabled - in juce_Config.h). - - @see jassert() - */ - #define jassertfalse { juce_LogCurrentAssertion; if (JUCE_NAMESPACE::juce_isRunningUnderDebugger()) juce_breakDebugger; } - - //============================================================================== - /** Platform-independent assertion macro. - - This gets optimised out when not being built with debugging turned on. - - Be careful not to call any functions within its arguments that are vital to - the behaviour of the program, because these won't get called in the release - build. - - @see jassertfalse - */ - #define jassert(expression) { if (! (expression)) jassertfalse } - -#else - //============================================================================== - // If debugging is disabled, these dummy debug and assertion macros are used.. - - #define DBG(dbgtext) - #define DBG_PRINTF(dbgprintf) - - #define jassertfalse { juce_LogCurrentAssertion } - - #if JUCE_LOG_ASSERTIONS - #define jassert(expression) { if (! (expression)) jassertfalse } - #else - #define jassert(a) { } - #endif - -#endif - -//============================================================================== -#ifndef DOXYGEN - template struct JuceStaticAssert; - template <> struct JuceStaticAssert { static void dummy() {} }; -#endif - -/** A compile-time assertion macro. - - If the expression parameter is false, the macro will cause a compile error. -*/ -#define static_jassert(expression) JuceStaticAssert::dummy(); - - -//============================================================================== -#if JUCE_CATCH_UNHANDLED_EXCEPTIONS - - #define JUCE_TRY try - - /** Used in try-catch blocks, this macro will send exceptions to the JUCEApplication - object so they can be logged by the application if it wants to. - */ - #define JUCE_CATCH_EXCEPTION \ - catch (const std::exception& e) \ - { \ - JUCEApplication::sendUnhandledException (&e, __FILE__, __LINE__); \ - } \ - catch (...) \ - { \ - JUCEApplication::sendUnhandledException (0, __FILE__, __LINE__); \ - } - - #define JUCE_CATCH_ALL catch (...) {} - #define JUCE_CATCH_ALL_ASSERT catch (...) { jassertfalse } - -#else - - #define JUCE_TRY - #define JUCE_CATCH_EXCEPTION - #define JUCE_CATCH_ALL - #define JUCE_CATCH_ALL_ASSERT - -#endif - -//============================================================================== -// Macros for inlining. - -#if JUCE_MSVC - /** A platform-independent way of forcing an inline function. - - Use the syntax: @code - forcedinline void myfunction (int x) - @endcode - */ - #ifdef JUCE_DEBUG - #define forcedinline __forceinline - #else - #define forcedinline inline - #endif - - /** A platform-independent way of stopping the compiler inlining a function. - - Use the syntax: @code - juce_noinline void myfunction (int x) - @endcode - */ - #define juce_noinline - -#else - /** A platform-independent way of forcing an inline function. - - Use the syntax: @code - forcedinline void myfunction (int x) - @endcode - */ - #ifndef JUCE_DEBUG - #define forcedinline inline __attribute__((always_inline)) - #else - #define forcedinline inline - #endif - - /** A platform-independent way of stopping the compiler inlining a function. - - Use the syntax: @code - juce_noinline void myfunction (int x) - @endcode - */ - #define juce_noinline __attribute__((noinline)) - -#endif - -#endif // __JUCE_PLATFORMDEFS_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Random.cpp b/src/juce_core/basics/juce_Random.cpp deleted file mode 100644 index 8a3df9976f..0000000000 --- a/src/juce_core/basics/juce_Random.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_Random.h" -#include "juce_Time.h" - - -//============================================================================== -Random::Random (const int64 seedValue) throw() - : seed (seedValue) -{ -} - -Random::~Random() throw() -{ -} - -void Random::setSeed (const int64 newSeed) throw() -{ - seed = newSeed; -} - -void Random::setSeedRandomly() -{ - Random r1 (Time::getMillisecondCounter()); - Random r2 (Time::getHighResolutionTicks()); - Random r3 (Time::getHighResolutionTicksPerSecond()); - Random r4 (Time::currentTimeMillis()); - - setSeed (nextInt64() ^ r1.nextInt64() ^ r2.nextInt64() - ^ r3.nextInt64() ^ r4.nextInt64()); -} - -//============================================================================== -int Random::nextInt() throw() -{ - seed = (seed * literal64bit (0x5deece66d) + 11) & literal64bit (0xffffffffffff); - - return (int) (seed >> 16); -} - -int Random::nextInt (const int maxValue) throw() -{ - jassert (maxValue > 0); - return (nextInt() & 0x7fffffff) % maxValue; -} - -int64 Random::nextInt64() throw() -{ - return (((int64) nextInt()) << 32) | (int64) (uint64) (uint32) nextInt(); -} - -bool Random::nextBool() throw() -{ - return (nextInt() & 0x80000000) != 0; -} - -float Random::nextFloat() throw() -{ - return ((uint32) nextInt()) / (float) 0xffffffff; -} - -double Random::nextDouble() throw() -{ - return ((uint32) nextInt()) / (double) 0xffffffff; -} - -const BitArray Random::nextLargeNumber (const BitArray& maximumValue) throw() -{ - BitArray n; - - do - { - fillBitsRandomly (n, 0, maximumValue.getHighestBit() + 1); - } - while (n.compare (maximumValue) >= 0); - - return n; -} - -void Random::fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw() -{ - arrayToChange.setBit (startBit + numBits - 1, true); // to force the array to pre-allocate space - - while ((startBit & 31) != 0 && numBits > 0) - { - arrayToChange.setBit (startBit++, nextBool()); - --numBits; - } - - while (numBits >= 32) - { - arrayToChange.setBitRangeAsInt (startBit, 32, (unsigned int) nextInt()); - startBit += 32; - numBits -= 32; - } - - while (--numBits >= 0) - arrayToChange.setBit (startBit + numBits, nextBool()); -} - -//============================================================================== -Random& Random::getSystemRandom() throw() -{ - static Random sysRand (1); - return sysRand; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_core/basics/juce_Random.h b/src/juce_core/basics/juce_Random.h deleted file mode 100644 index 8f74d55d7a..0000000000 --- a/src/juce_core/basics/juce_Random.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_RANDOM_JUCEHEADER__ -#define __JUCE_RANDOM_JUCEHEADER__ - -#include "../containers/juce_BitArray.h" - - -//============================================================================== -/** - A simple pseudo-random number generator. -*/ -class JUCE_API Random -{ -public: - //============================================================================== - /** Creates a Random object based on a seed value. - - For a given seed value, the subsequent numbers generated by this object - will be predictable, so a good idea is to set this value based - on the time, e.g. - - new Random (Time::currentTimeMillis()) - */ - Random (const int64 seedValue) throw(); - - /** Destructor. */ - ~Random() throw(); - - /** Returns the next random 32 bit integer. - - @returns a random integer from the full range 0x80000000 to 0x7fffffff - */ - int nextInt() throw(); - - /** Returns the next random number, limited to a given range. - - @returns a random integer between 0 (inclusive) and maxValue (exclusive). - */ - int nextInt (const int maxValue) throw(); - - /** Returns the next 64-bit random number. - - @returns a random integer from the full range 0x8000000000000000 to 0x7fffffffffffffff - */ - int64 nextInt64() throw(); - - /** Returns the next random floating-point number. - - @returns a random value in the range 0 to 1.0 - */ - float nextFloat() throw(); - - /** Returns the next random floating-point number. - - @returns a random value in the range 0 to 1.0 - */ - double nextDouble() throw(); - - /** Returns the next random boolean value. - */ - bool nextBool() throw(); - - /** Returns a BitArray containing a random number. - - @returns a random value in the range 0 to (maximumValue - 1). - */ - const BitArray nextLargeNumber (const BitArray& maximumValue) throw(); - - /** Sets a range of bits in a BitArray to random values. */ - void fillBitsRandomly (BitArray& arrayToChange, int startBit, int numBits) throw(); - - //============================================================================== - /** To avoid the overhead of having to create a new Random object whenever - you need a number, this is a shared application-wide object that - can be used. - - It's not thread-safe though, so threads should use their own Random object. - */ - static Random& getSystemRandom() throw(); - - /** Resets this Random object to a given seed value. */ - void setSeed (const int64 newSeed) throw(); - - /** Reseeds this generator using a value generated from various semi-random system - properties like the current time, etc. - - Because this function convolves the time with the last seed value, calling - it repeatedly will increase the randomness of the final result. - */ - void setSeedRandomly(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - int64 seed; -}; - - -#endif // __JUCE_RANDOM_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_RelativeTime.cpp b/src/juce_core/basics/juce_RelativeTime.cpp deleted file mode 100644 index ac7cec9544..0000000000 --- a/src/juce_core/basics/juce_RelativeTime.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - - -#include "juce_RelativeTime.h" -#include "../text/juce_LocalisedStrings.h" - - -//============================================================================== -RelativeTime::RelativeTime (const double seconds_) throw() - : seconds (seconds_) -{ -} - -RelativeTime::RelativeTime (const RelativeTime& other) throw() - : seconds (other.seconds) -{ -} - -RelativeTime::~RelativeTime() throw() -{ -} - -//============================================================================== -const RelativeTime RelativeTime::milliseconds (const int milliseconds) throw() -{ - return RelativeTime (milliseconds * 0.001); -} - -const RelativeTime RelativeTime::milliseconds (const int64 milliseconds) throw() -{ - return RelativeTime (milliseconds * 0.001); -} - -const RelativeTime RelativeTime::minutes (const double numberOfMinutes) throw() -{ - return RelativeTime (numberOfMinutes * 60.0); -} - -const RelativeTime RelativeTime::hours (const double numberOfHours) throw() -{ - return RelativeTime (numberOfHours * (60.0 * 60.0)); -} - -const RelativeTime RelativeTime::days (const double numberOfDays) throw() -{ - return RelativeTime (numberOfDays * (60.0 * 60.0 * 24.0)); -} - -const RelativeTime RelativeTime::weeks (const double numberOfWeeks) throw() -{ - return RelativeTime (numberOfWeeks * (60.0 * 60.0 * 24.0 * 7.0)); -} - -//============================================================================== -int64 RelativeTime::inMilliseconds() const throw() -{ - return (int64)(seconds * 1000.0); -} - -double RelativeTime::inMinutes() const throw() -{ - return seconds / 60.0; -} - -double RelativeTime::inHours() const throw() -{ - return seconds / (60.0 * 60.0); -} - -double RelativeTime::inDays() const throw() -{ - return seconds / (60.0 * 60.0 * 24.0); -} - -double RelativeTime::inWeeks() const throw() -{ - return seconds / (60.0 * 60.0 * 24.0 * 7.0); -} - -const String RelativeTime::getDescription (const String& returnValueForZeroTime) const throw() -{ - if (seconds < 0.001 && seconds > -0.001) - return returnValueForZeroTime; - - String result; - - if (seconds < 0) - result = T("-"); - - int fieldsShown = 0; - int n = abs ((int) inWeeks()); - if (n > 0) - { - result << n << ((n == 1) ? TRANS(" week ") - : TRANS(" weeks ")); - ++fieldsShown; - } - - n = abs ((int) inDays()) % 7; - if (n > 0) - { - result << n << ((n == 1) ? TRANS(" day ") - : TRANS(" days ")); - ++fieldsShown; - } - - if (fieldsShown < 2) - { - n = abs ((int) inHours()) % 24; - if (n > 0) - { - result << n << ((n == 1) ? TRANS(" hr ") - : TRANS(" hrs ")); - ++fieldsShown; - } - - if (fieldsShown < 2) - { - n = abs ((int) inMinutes()) % 60; - if (n > 0) - { - result << n << ((n == 1) ? TRANS(" min ") - : TRANS(" mins ")); - ++fieldsShown; - } - - if (fieldsShown < 2) - { - n = abs ((int) inSeconds()) % 60; - if (n > 0) - { - result << n << ((n == 1) ? TRANS(" sec ") - : TRANS(" secs ")); - ++fieldsShown; - } - - if (fieldsShown < 1) - { - n = abs ((int) inMilliseconds()) % 1000; - if (n > 0) - { - result << n << TRANS(" ms"); - ++fieldsShown; - } - } - } - } - } - - return result.trimEnd(); -} - -//============================================================================== -const RelativeTime& RelativeTime::operator= (const RelativeTime& other) throw() -{ - seconds = other.seconds; - return *this; -} - -bool RelativeTime::operator== (const RelativeTime& other) const throw() -{ - return seconds == other.seconds; -} - -bool RelativeTime::operator!= (const RelativeTime& other) const throw() -{ - return seconds != other.seconds; -} - -bool RelativeTime::operator> (const RelativeTime& other) const throw() -{ - return seconds > other.seconds; -} - -bool RelativeTime::operator< (const RelativeTime& other) const throw() -{ - return seconds < other.seconds; -} - -bool RelativeTime::operator>= (const RelativeTime& other) const throw() -{ - return seconds >= other.seconds; -} - -bool RelativeTime::operator<= (const RelativeTime& other) const throw() -{ - return seconds <= other.seconds; -} - -//============================================================================== -const RelativeTime RelativeTime::operator+ (const RelativeTime& timeToAdd) const throw() -{ - return RelativeTime (seconds + timeToAdd.seconds); -} - -const RelativeTime RelativeTime::operator- (const RelativeTime& timeToSubtract) const throw() -{ - return RelativeTime (seconds - timeToSubtract.seconds); -} - -const RelativeTime RelativeTime::operator+ (const double secondsToAdd) const throw() -{ - return RelativeTime (seconds + secondsToAdd); -} - -const RelativeTime RelativeTime::operator- (const double secondsToSubtract) const throw() -{ - return RelativeTime (seconds - secondsToSubtract); -} - -//============================================================================== -const RelativeTime& RelativeTime::operator+= (const RelativeTime& timeToAdd) throw() -{ - seconds += timeToAdd.seconds; - return *this; -} - -const RelativeTime& RelativeTime::operator-= (const RelativeTime& timeToSubtract) throw() -{ - seconds -= timeToSubtract.seconds; - return *this; -} - -const RelativeTime& RelativeTime::operator+= (const double secondsToAdd) throw() -{ - seconds += secondsToAdd; - return *this; -} - -const RelativeTime& RelativeTime::operator-= (const double secondsToSubtract) throw() -{ - seconds -= secondsToSubtract; - return *this; -} - -END_JUCE_NAMESPACE diff --git a/src/juce_core/basics/juce_RelativeTime.h b/src/juce_core/basics/juce_RelativeTime.h deleted file mode 100644 index 40a0d5b4b0..0000000000 --- a/src/juce_core/basics/juce_RelativeTime.h +++ /dev/null @@ -1,198 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_RELATIVETIME_JUCEHEADER__ -#define __JUCE_RELATIVETIME_JUCEHEADER__ - -#include "../text/juce_String.h" - - -//============================================================================== -/** A relative measure of time. - - The time is stored as a number of seconds, at double-precision floating - point accuracy, and may be positive or negative. - - If you need an absolute time, (i.e. a date + time), see the Time class. -*/ -class JUCE_API RelativeTime -{ -public: - //============================================================================== - /** Creates a RelativeTime. - - @param seconds the number of seconds, which may be +ve or -ve. - @see milliseconds, minutes, hours, days, weeks - */ - explicit RelativeTime (const double seconds = 0.0) throw(); - - /** Copies another relative time. */ - RelativeTime (const RelativeTime& other) throw(); - - /** Copies another relative time. */ - const RelativeTime& operator= (const RelativeTime& other) throw(); - - /** Destructor. */ - ~RelativeTime() throw(); - - //============================================================================== - /** Creates a new RelativeTime object representing a number of milliseconds. - - @see minutes, hours, days, weeks - */ - static const RelativeTime milliseconds (const int milliseconds) throw(); - - /** Creates a new RelativeTime object representing a number of milliseconds. - - @see minutes, hours, days, weeks - */ - static const RelativeTime milliseconds (const int64 milliseconds) throw(); - - /** Creates a new RelativeTime object representing a number of minutes. - - @see milliseconds, hours, days, weeks - */ - static const RelativeTime minutes (const double numberOfMinutes) throw(); - - /** Creates a new RelativeTime object representing a number of hours. - - @see milliseconds, minutes, days, weeks - */ - static const RelativeTime hours (const double numberOfHours) throw(); - - /** Creates a new RelativeTime object representing a number of days. - - @see milliseconds, minutes, hours, weeks - */ - static const RelativeTime days (const double numberOfDays) throw(); - - /** Creates a new RelativeTime object representing a number of weeks. - - @see milliseconds, minutes, hours, days - */ - static const RelativeTime weeks (const double numberOfWeeks) throw(); - - //============================================================================== - /** Returns the number of milliseconds this time represents. - - @see milliseconds, inSeconds, inMinutes, inHours, inDays, inWeeks - */ - int64 inMilliseconds() const throw(); - - /** Returns the number of seconds this time represents. - - @see inMilliseconds, inMinutes, inHours, inDays, inWeeks - */ - double inSeconds() const throw() { return seconds; } - - /** Returns the number of minutes this time represents. - - @see inMilliseconds, inSeconds, inHours, inDays, inWeeks - */ - double inMinutes() const throw(); - - /** Returns the number of hours this time represents. - - @see inMilliseconds, inSeconds, inMinutes, inDays, inWeeks - */ - double inHours() const throw(); - - /** Returns the number of days this time represents. - - @see inMilliseconds, inSeconds, inMinutes, inHours, inWeeks - */ - double inDays() const throw(); - - /** Returns the number of weeks this time represents. - - @see inMilliseconds, inSeconds, inMinutes, inHours, inDays - */ - double inWeeks() const throw(); - - /** Returns a readable textual description of the time. - - The exact format of the string returned will depend on - the magnitude of the time - e.g. - - "1 min 4 secs", "1 hr 45 mins", "2 weeks 5 days", "140 ms" - - so that only the two most significant units are printed. - - The returnValueForZeroTime value is the result that is returned if the - length is zero. Depending on your application you might want to use this - to return something more relevant like "empty" or "0 secs", etc. - - @see inMilliseconds, inSeconds, inMinutes, inHours, inDays, inWeeks - */ - const String getDescription (const String& returnValueForZeroTime = JUCE_T("0")) const throw(); - - //============================================================================== - - /** Compares two RelativeTimes. */ - bool operator== (const RelativeTime& other) const throw(); - /** Compares two RelativeTimes. */ - bool operator!= (const RelativeTime& other) const throw(); - - /** Compares two RelativeTimes. */ - bool operator> (const RelativeTime& other) const throw(); - /** Compares two RelativeTimes. */ - bool operator< (const RelativeTime& other) const throw(); - /** Compares two RelativeTimes. */ - bool operator>= (const RelativeTime& other) const throw(); - /** Compares two RelativeTimes. */ - bool operator<= (const RelativeTime& other) const throw(); - - //============================================================================== - /** Adds another RelativeTime to this one and returns the result. */ - const RelativeTime operator+ (const RelativeTime& timeToAdd) const throw(); - /** Subtracts another RelativeTime from this one and returns the result. */ - const RelativeTime operator- (const RelativeTime& timeToSubtract) const throw(); - - /** Adds a number of seconds to this RelativeTime and returns the result. */ - const RelativeTime operator+ (const double secondsToAdd) const throw(); - /** Subtracts a number of seconds from this RelativeTime and returns the result. */ - const RelativeTime operator- (const double secondsToSubtract) const throw(); - - /** Adds another RelativeTime to this one. */ - const RelativeTime& operator+= (const RelativeTime& timeToAdd) throw(); - /** Subtracts another RelativeTime from this one. */ - const RelativeTime& operator-= (const RelativeTime& timeToSubtract) throw(); - - /** Adds a number of seconds to this time. */ - const RelativeTime& operator+= (const double secondsToAdd) throw(); - - /** Subtracts a number of seconds from this time. */ - const RelativeTime& operator-= (const double secondsToSubtract) throw(); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - double seconds; -}; - - -#endif // __JUCE_RELATIVETIME_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Singleton.h b/src/juce_core/basics/juce_Singleton.h deleted file mode 100644 index 42a722f46e..0000000000 --- a/src/juce_core/basics/juce_Singleton.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_SINGLETON_JUCEHEADER__ -#define __JUCE_SINGLETON_JUCEHEADER__ - -#include "../threads/juce_ScopedLock.h" - - -//============================================================================== -/** - Macro to declare member variables and methods for a singleton class. - - To use this, add the line juce_DeclareSingleton (MyClass, allowOnlyOneInstance) - to the class's definition. - - If allowOnlyOneInstance == true, it won't allow the object to be created - more than once in the process's lifetime. - - Then put a macro juce_ImplementSingleton (MyClass) along with the class's - implementation code. - - Clients can then call the static MyClass::getInstance() to get a pointer to the - singleton, or MyClass::getInstanceWithoutCreating() which may return 0 if no instance - is currently extant - - it's a very good idea to also add the call clearSingletonInstance() to the - destructor of the class, in case it is deleted by other means than deleteInstance() - - e.g. @code - - class MySingleton - { - public: - MySingleton() - { - } - - ~MySingleton() - { - // this ensures that no dangling pointers are left when the - // singleton is deleted. - clearSingletonInstance(); - } - - juce_DeclareSingleton (MySingleton, false) - }; - - juce_ImplementSingleton (MySingleton) - - - // example of usage: - MySingleton* m = MySingleton::getInstance(); // creates the singleton if there isn't already one. - - ... - - MySingleton::deleteInstance(); // safely deletes the singleton (if it's been created). - - @endcode - - If you know that your object will only be created and deleted by a single thread, you - can use the slightly more efficient juce_DeclareSingleton_SingleThreaded() macro instead - of this one. - - @see juce_ImplementSingleton, juce_DeclareSingleton_SingleThreaded -*/ -#define juce_DeclareSingleton(classname, allowOnlyOneInstance) \ -\ - static classname* _singletonInstance; \ - static JUCE_NAMESPACE::CriticalSection _singletonLock; \ -\ - static classname* getInstance() \ - { \ - if (_singletonInstance == 0) \ - {\ - const JUCE_NAMESPACE::ScopedLock sl (_singletonLock); \ -\ - if (_singletonInstance == 0) \ - { \ - static bool alreadyInside = false; \ - static bool createdOnceAlready = false; \ -\ - const bool problem = alreadyInside || ((allowOnlyOneInstance) && createdOnceAlready); \ - jassert (! problem); \ - if (! problem) \ - { \ - createdOnceAlready = true; \ - alreadyInside = true; \ - classname* newObject = new classname(); /* (use a stack variable to avoid setting the newObject value before the class has finished its constructor) */ \ - alreadyInside = false; \ -\ - _singletonInstance = newObject; \ - } \ - } \ - } \ -\ - return _singletonInstance; \ - } \ -\ - static inline classname* getInstanceWithoutCreating() throw() \ - { \ - return _singletonInstance; \ - } \ -\ - static void deleteInstance() \ - { \ - const JUCE_NAMESPACE::ScopedLock sl (_singletonLock); \ - if (_singletonInstance != 0) \ - { \ - classname* const old = _singletonInstance; \ - _singletonInstance = 0; \ - delete old; \ - } \ - } \ -\ - void clearSingletonInstance() throw() \ - { \ - if (_singletonInstance == this) \ - _singletonInstance = 0; \ - } - - -//============================================================================== -/** This is a counterpart to the juce_DeclareSingleton macro. - - After adding the juce_DeclareSingleton to the class definition, this macro has - to be used in the cpp file. -*/ -#define juce_ImplementSingleton(classname) \ -\ - classname* classname::_singletonInstance = 0; \ - JUCE_NAMESPACE::CriticalSection classname::_singletonLock; - - -//============================================================================== -/** - Macro to declare member variables and methods for a singleton class. - - This is exactly the same as juce_DeclareSingleton, but doesn't use a critical - section to make access to it thread-safe. If you know that your object will - only ever be created or deleted by a single thread, then this is a - more efficient version to use. - - See the documentation for juce_DeclareSingleton for more information about - how to use it, the only difference being that you have to use - juce_ImplementSingleton_SingleThreaded instead of juce_ImplementSingleton. - - @see juce_ImplementSingleton_SingleThreaded, juce_DeclareSingleton, juce_DeclareSingleton_SingleThreaded_Minimal -*/ -#define juce_DeclareSingleton_SingleThreaded(classname, allowOnlyOneInstance) \ -\ - static classname* _singletonInstance; \ -\ - static classname* getInstance() \ - { \ - if (_singletonInstance == 0) \ - { \ - static bool alreadyInside = false; \ - static bool createdOnceAlready = false; \ -\ - const bool problem = alreadyInside || ((allowOnlyOneInstance) && createdOnceAlready); \ - jassert (! problem); \ - if (! problem) \ - { \ - createdOnceAlready = true; \ - alreadyInside = true; \ - classname* newObject = new classname(); /* (use a stack variable to avoid setting the newObject value before the class has finished its constructor) */ \ - alreadyInside = false; \ -\ - _singletonInstance = newObject; \ - } \ - } \ -\ - return _singletonInstance; \ - } \ -\ - static inline classname* getInstanceWithoutCreating() throw() \ - { \ - return _singletonInstance; \ - } \ -\ - static void deleteInstance() \ - { \ - if (_singletonInstance != 0) \ - { \ - classname* const old = _singletonInstance; \ - _singletonInstance = 0; \ - delete old; \ - } \ - } \ -\ - void clearSingletonInstance() throw() \ - { \ - if (_singletonInstance == this) \ - _singletonInstance = 0; \ - } - -//============================================================================== -/** - Macro to declare member variables and methods for a singleton class. - - This is like juce_DeclareSingleton_SingleThreaded, but doesn't do any checking - for recursion or repeated instantiation. It's intended for use as a lightweight - version of a singleton, where you're using it in very straightforward - circumstances and don't need the extra checking. - - Juce use the normal juce_ImplementSingleton_SingleThreaded as the counterpart - to this declaration, as you would with juce_DeclareSingleton_SingleThreaded. - - See the documentation for juce_DeclareSingleton for more information about - how to use it, the only difference being that you have to use - juce_ImplementSingleton_SingleThreaded instead of juce_ImplementSingleton. - - @see juce_ImplementSingleton_SingleThreaded, juce_DeclareSingleton -*/ -#define juce_DeclareSingleton_SingleThreaded_Minimal(classname) \ -\ - static classname* _singletonInstance; \ -\ - static classname* getInstance() \ - { \ - if (_singletonInstance == 0) \ - _singletonInstance = new classname(); \ -\ - return _singletonInstance; \ - } \ -\ - static inline classname* getInstanceWithoutCreating() throw() \ - { \ - return _singletonInstance; \ - } \ -\ - static void deleteInstance() \ - { \ - if (_singletonInstance != 0) \ - { \ - classname* const old = _singletonInstance; \ - _singletonInstance = 0; \ - delete old; \ - } \ - } \ -\ - void clearSingletonInstance() throw() \ - { \ - if (_singletonInstance == this) \ - _singletonInstance = 0; \ - } - - -//============================================================================== -/** This is a counterpart to the juce_DeclareSingleton_SingleThreaded macro. - - After adding juce_DeclareSingleton_SingleThreaded or juce_DeclareSingleton_SingleThreaded_Minimal - to the class definition, this macro has to be used somewhere in the cpp file. -*/ -#define juce_ImplementSingleton_SingleThreaded(classname) \ -\ - classname* classname::_singletonInstance = 0; - - - -#endif // __JUCE_SINGLETON_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_StandardHeader.h b/src/juce_core/basics/juce_StandardHeader.h deleted file mode 100644 index 0ec20b4b26..0000000000 --- a/src/juce_core/basics/juce_StandardHeader.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_STANDARDHEADER_JUCEHEADER__ -#define __JUCE_STANDARDHEADER_JUCEHEADER__ - -//============================================================================== -/** Current Juce version number. - - See also SystemStats::getJUCEVersion() for a string version. -*/ -#define JUCE_MAJOR_VERSION 1 -#define JUCE_MINOR_VERSION 50 - -/** Current Juce version number. - - Bits 16 to 32 = major version. - Bits 8 to 16 = minor version. - Bits 0 to 8 = point release (not currently used). - - See also SystemStats::getJUCEVersion() for a string version. -*/ -#define JUCE_VERSION ((JUCE_MAJOR_VERSION << 16) + (JUCE_MINOR_VERSION << 8)) - - -//============================================================================== -#include "../../../juce_Config.h" - -//============================================================================== -#ifdef JUCE_NAMESPACE - #define BEGIN_JUCE_NAMESPACE namespace JUCE_NAMESPACE { - #define END_JUCE_NAMESPACE } -#else - #define BEGIN_JUCE_NAMESPACE - #define END_JUCE_NAMESPACE -#endif - -//============================================================================== -// This sets up the JUCE_WIN32, JUCE_MAC, or JUCE_LINUX macros -#include "juce_PlatformDefs.h" - -// Now we'll include any OS headers we need.. (at this point we are outside the Juce namespace). -#if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4514 4245 4100) -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if JUCE_USE_INTRINSICS - #include -#endif - -#if JUCE_MAC - #if MACOS_10_3_OR_EARLIER - #include - #else - #include - #endif -#endif - -#if JUCE_LINUX - #include -#endif - -#if JUCE_MSVC && JUCE_DEBUG - #include -#endif - -#if JUCE_MSVC - #pragma warning (pop) -#endif - -//============================================================================== -// DLL building settings on Win32 -#if JUCE_MSVC - #ifdef JUCE_DLL_BUILD - #define JUCE_API __declspec (dllexport) - #pragma warning (disable: 4251) - #elif defined (JUCE_DLL) - #define JUCE_API __declspec (dllimport) - #pragma warning (disable: 4251) - #endif -#elif defined (__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) - #ifdef JUCE_DLL_BUILD - #define JUCE_API __attribute__ ((visibility("default"))) - #endif -#endif - -#ifndef JUCE_API - /** This macro is added to all juce public class declarations. */ - #define JUCE_API -#endif - -/** This macro is added to all juce public function declarations. */ -#define JUCE_PUBLIC_FUNCTION JUCE_API JUCE_CALLTYPE - - -//============================================================================== -// Now include some basics that are needed by most of the Juce classes... -BEGIN_JUCE_NAMESPACE - -extern bool JUCE_API JUCE_CALLTYPE juce_isRunningUnderDebugger() throw(); - -#if JUCE_LOG_ASSERTIONS - extern void JUCE_API juce_LogAssertion (const char* filename, const int lineNum) throw(); -#endif - -#include "juce_Memory.h" -#include "juce_MathsFunctions.h" -#include "juce_DataConversions.h" -#include "juce_Logger.h" - -END_JUCE_NAMESPACE - - -#endif // __JUCE_STANDARDHEADER_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_SystemStats.cpp b/src/juce_core/basics/juce_SystemStats.cpp deleted file mode 100644 index 06ef833363..0000000000 --- a/src/juce_core/basics/juce_SystemStats.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "../text/juce_String.h" -#include "juce_SystemStats.h" -#include "juce_Random.h" -#include "juce_Time.h" -#include "juce_Atomic.h" -#include "../threads/juce_Thread.h" -#include "../text/juce_LocalisedStrings.h" -#include "../../juce_core/misc/juce_PlatformUtilities.h" -void juce_initialiseStrings(); - - -//============================================================================== -const String SystemStats::getJUCEVersion() throw() -{ - return "JUCE v" + String (JUCE_MAJOR_VERSION) + "." + String (JUCE_MINOR_VERSION); -} - - -//============================================================================== -static bool juceInitialisedNonGUI = false; - -void JUCE_PUBLIC_FUNCTION initialiseJuce_NonGUI() -{ - if (! juceInitialisedNonGUI) - { -#if JUCE_MAC - const ScopedAutoReleasePool pool; -#endif - -#ifdef JUCE_DEBUG - // Some simple test code to keep an eye on things and make sure these functions - // work ok on all platforms. Let me know if any of these assertions fail! - int n = 1; - atomicIncrement (n); - jassert (atomicIncrementAndReturn (n) == 3); - atomicDecrement (n); - jassert (atomicDecrementAndReturn (n) == 1); - - jassert (swapByteOrder ((uint32) 0x11223344) == 0x44332211); - - // quick test to make sure the run-time lib doesn't crash on freeing a null-pointer. - SystemStats* nullPointer = 0; - juce_free (nullPointer); - delete[] nullPointer; - delete nullPointer; -#endif - // Now the real initialisation.. - - juceInitialisedNonGUI = true; - - DBG (SystemStats::getJUCEVersion()); - Random::getSystemRandom().setSeedRandomly(); // (calling this more than once improves its randomness) - juce_initialiseStrings(); - SystemStats::initialiseStats(); - Random::getSystemRandom().setSeedRandomly(); // (calling this more than once improves its randomness) - } -} - -#if JUCE_WIN32 - // This is imported from the sockets code.. - typedef int (__stdcall juce_CloseWin32SocketLibCall) (void); - extern juce_CloseWin32SocketLibCall* juce_CloseWin32SocketLib; -#endif - -#if JUCE_DEBUG - extern void juce_CheckForDanglingStreams(); -#endif - -void JUCE_PUBLIC_FUNCTION shutdownJuce_NonGUI() -{ - if (juceInitialisedNonGUI) - { -#if JUCE_MAC - const ScopedAutoReleasePool pool; -#endif - -#if JUCE_WIN32 - // need to shut down sockets if they were used.. - if (juce_CloseWin32SocketLib != 0) - (*juce_CloseWin32SocketLib)(); -#endif - - LocalisedStrings::setCurrentMappings (0); - Thread::stopAllThreads (3000); - -#if JUCE_DEBUG - juce_CheckForDanglingStreams(); -#endif - - juceInitialisedNonGUI = false; - } -} - -//============================================================================== -#ifdef JUCE_DLL - -void* juce_Malloc (const int size) -{ - return malloc (size); -} - -void* juce_Calloc (const int size) -{ - return calloc (1, size); -} - -void* juce_Realloc (void* const block, const int size) -{ - return realloc (block, size); -} - -void juce_Free (void* const block) -{ - free (block); -} - -#if defined (JUCE_DEBUG) && JUCE_MSVC && JUCE_CHECK_MEMORY_LEAKS - -void* juce_DebugMalloc (const int size, const char* file, const int line) -{ - return _malloc_dbg (size, _NORMAL_BLOCK, file, line); -} - -void* juce_DebugCalloc (const int size, const char* file, const int line) -{ - return _calloc_dbg (1, size, _NORMAL_BLOCK, file, line); -} - -void* juce_DebugRealloc (void* const block, const int size, const char* file, const int line) -{ - return _realloc_dbg (block, size, _NORMAL_BLOCK, file, line); -} - -void juce_DebugFree (void* const block) -{ - _free_dbg (block, _NORMAL_BLOCK); -} - -#endif -#endif - - -END_JUCE_NAMESPACE diff --git a/src/juce_core/basics/juce_SystemStats.h b/src/juce_core/basics/juce_SystemStats.h deleted file mode 100644 index b5b45603f5..0000000000 --- a/src/juce_core/basics/juce_SystemStats.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ -#define __JUCE_SYSTEMSTATS_JUCEHEADER__ - - -//============================================================================== -/** - Contains methods for finding out about the current hardware and OS configuration. -*/ -class JUCE_API SystemStats -{ -public: - //============================================================================== - /** Returns the current version of JUCE, - - (just in case you didn't already know at compile-time.) - - See also the JUCE_VERSION, JUCE_MAJOR_VERSION and JUCE_MINOR_VERSION macros. - */ - static const String getJUCEVersion() throw(); - - //============================================================================== - /** The set of possible results of the getOperatingSystemType() method. - */ - enum OperatingSystemType - { - UnknownOS = 0, - - MacOSX = 0x1000, - Linux = 0x2000, - - Win95 = 0x4001, - Win98 = 0x4002, - WinNT351 = 0x4103, - WinNT40 = 0x4104, - Win2000 = 0x4105, - WinXP = 0x4106, - WinVista = 0x4107, - - Windows = 0x4000, /**< To test whether any version of Windows is running, - you can use the expression ((getOperatingSystemType() & Windows) != 0). */ - WindowsNT = 0x0100, /**< To test whether the platform is Windows NT or later (i.e. not Win95 or 98), - you can use the expression ((getOperatingSystemType() & WindowsNT) != 0). */ - }; - - /** Returns the type of operating system we're running on. - - @returns one of the values from the OperatingSystemType enum. - @see getOperatingSystemName - */ - static OperatingSystemType getOperatingSystemType() throw(); - - /** Returns the name of the type of operating system we're running on. - - @returns a string describing the OS type. - @see getOperatingSystemType - */ - static const String getOperatingSystemName() throw(); - - /** Returns true if the OS is 64-bit, or false for a 32-bit OS. - */ - static bool isOperatingSystem64Bit() throw(); - - //============================================================================== - // CPU and memory information.. - - /** Returns the approximate CPU speed. - - @returns the speed in megahertz, e.g. 1500, 2500, 32000 (depending on - what year you're reading this...) - */ - static int getCpuSpeedInMegaherz() throw(); - - /** Returns a string to indicate the CPU vendor. - - Might not be known on some systems. - */ - static const String getCpuVendor() throw(); - - /** Checks whether Intel MMX instructions are available. */ - static bool hasMMX() throw(); - - /** Checks whether Intel SSE instructions are available. */ - static bool hasSSE() throw(); - - /** Checks whether Intel SSE2 instructions are available. */ - static bool hasSSE2() throw(); - - /** Checks whether AMD 3DNOW instructions are available. */ - static bool has3DNow() throw(); - - /** Returns the number of CPUs. - */ - static int getNumCpus() throw(); - - /** Returns a clock-cycle tick counter, if available. - - If the machine can do it, this will return a tick-count - where each tick is one cpu clock cycle - used for profiling - code. - - @returns the tick count, or zero if not available. - */ - static int64 getClockCycleCounter() throw(); - - //============================================================================== - /** Finds out how much RAM is in the machine. - - @returns the approximate number of megabytes of memory, or zero if - something goes wrong when finding out. - */ - static int getMemorySizeInMegabytes() throw(); - - /** Returns the system page-size. - - This is only used by programmers with beards. - */ - static int getPageSize() throw(); - - //============================================================================== - /** Returns a list of MAC addresses found on this machine. - - @param addresses an array into which the MAC addresses should be copied - @param maxNum the number of elements in this array - @param littleEndian the endianness of the numbers to return. Note that - the default values of this parameter are different on - Mac/PC to avoid breaking old software that was written - before this parameter was added (when the two systems - defaulted to using different endiannesses). In newer - software you probably want to specify an explicit value - for this. - @returns the number of MAC addresses that were found - */ - static int getMACAddresses (int64* addresses, int maxNum, -#if JUCE_MAC - const bool littleEndian = true) throw(); -#else - const bool littleEndian = false) throw(); -#endif - - - //============================================================================== - // not-for-public-use platform-specific method gets called at startup to initialise things. - static void initialiseStats() throw(); -}; - - -#endif // __JUCE_SYSTEMSTATS_JUCEHEADER__ diff --git a/src/juce_core/basics/juce_Time.cpp b/src/juce_core/basics/juce_Time.cpp deleted file mode 100644 index ba232b5eb9..0000000000 --- a/src/juce_core/basics/juce_Time.cpp +++ /dev/null @@ -1,523 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifdef _MSC_VER - #pragma warning (disable: 4514) - #pragma warning (push) -#endif - -#include "juce_StandardHeader.h" - -#ifndef JUCE_WIN32 - #include -#else - #include -#endif - -#include - -BEGIN_JUCE_NAMESPACE - - -#include "juce_Time.h" -#include "../threads/juce_Thread.h" -#include "../containers/juce_MemoryBlock.h" -#include "../text/juce_LocalisedStrings.h" - -#ifdef _MSC_VER - #pragma warning (pop) - - #ifdef _INC_TIME_INL - #define USE_NEW_SECURE_TIME_FNS - #endif -#endif - -//============================================================================== -static void millisToLocal (const int64 millis, struct tm& result) throw() -{ - const int64 seconds = millis / 1000; - - if (seconds < literal64bit (86400) || seconds >= literal64bit (2145916800)) - { - // use extended maths for dates beyond 1970 to 2037.. - const int timeZoneAdjustment = 31536000 - (int) (Time (1971, 0, 1, 0, 0).toMilliseconds() / 1000); - const int64 jdm = seconds + timeZoneAdjustment + literal64bit (210866803200); - - const int days = (int) (jdm / literal64bit (86400)); - const int a = 32044 + days; - const int b = (4 * a + 3) / 146097; - const int c = a - (b * 146097) / 4; - const int d = (4 * c + 3) / 1461; - const int e = c - (d * 1461) / 4; - const int m = (5 * e + 2) / 153; - - result.tm_mday = e - (153 * m + 2) / 5 + 1; - result.tm_mon = m + 2 - 12 * (m / 10); - result.tm_year = b * 100 + d - 6700 + (m / 10); - result.tm_wday = (days + 1) % 7; - result.tm_yday = -1; - - int t = (int) (jdm % literal64bit (86400)); - result.tm_hour = t / 3600; - t %= 3600; - result.tm_min = t / 60; - result.tm_sec = t % 60; - result.tm_isdst = -1; - } - else - { - time_t now = (time_t) (seconds); - -#if JUCE_WIN32 - #ifdef USE_NEW_SECURE_TIME_FNS - if (now >= 0 && now <= 0x793406fff) - localtime_s (&result, &now); - else - zeromem (&result, sizeof (result)); - #else - result = *localtime (&now); - #endif -#else - // more thread-safe - localtime_r (&now, &result); -#endif - } -} - -//============================================================================== -Time::Time() throw() - : millisSinceEpoch (0) -{ -} - -Time::Time (const Time& other) throw() - : millisSinceEpoch (other.millisSinceEpoch) -{ -} - -Time::Time (const int64 ms) throw() - : millisSinceEpoch (ms) -{ -} - -Time::Time (const int year, - const int month, - const int day, - const int hours, - const int minutes, - const int seconds, - const int milliseconds, - const bool useLocalTime) throw() -{ - jassert (year > 100); // year must be a 4-digit version - - if (year < 1971 || year >= 2038 || ! useLocalTime) - { - // use extended maths for dates beyond 1970 to 2037.. - const int timeZoneAdjustment = useLocalTime ? (31536000 - (int) (Time (1971, 0, 1, 0, 0).toMilliseconds() / 1000)) - : 0; - const int a = (13 - month) / 12; - const int y = year + 4800 - a; - const int jd = day + (153 * (month + 12 * a - 2) + 2) / 5 - + (y * 365) + (y / 4) - (y / 100) + (y / 400) - - 32045; - - const int64 s = ((int64) jd) * literal64bit (86400) - literal64bit (210866803200); - - millisSinceEpoch = 1000 * (s + (hours * 3600 + minutes * 60 + seconds - timeZoneAdjustment)) - + milliseconds; - } - else - { - struct tm t; - t.tm_year = year - 1900; - t.tm_mon = month; - t.tm_mday = day; - t.tm_hour = hours; - t.tm_min = minutes; - t.tm_sec = seconds; - t.tm_isdst = -1; - - millisSinceEpoch = 1000 * (int64) mktime (&t); - - if (millisSinceEpoch < 0) - millisSinceEpoch = 0; - else - millisSinceEpoch += milliseconds; - } -} - -Time::~Time() throw() -{ -} - -const Time& Time::operator= (const Time& other) throw() -{ - millisSinceEpoch = other.millisSinceEpoch; - return *this; -} - -//============================================================================== -int64 Time::currentTimeMillis() throw() -{ - static uint32 lastCounterResult = 0xffffffff; - static int64 correction = 0; - - const uint32 now = getMillisecondCounter(); - - // check the counter hasn't wrapped (also triggered the first time this function is called) - if (now < lastCounterResult) - { - // double-check it's actually wrapped, in case multi-cpu machines have timers that drift a bit. - if (lastCounterResult == 0xffffffff || now < lastCounterResult - 10) - { - // get the time once using normal library calls, and store the difference needed to - // turn the millisecond counter into a real time. -#if JUCE_WIN32 - struct _timeb t; - #ifdef USE_NEW_SECURE_TIME_FNS - _ftime_s (&t); - #else - _ftime (&t); - #endif - correction = (((int64) t.time) * 1000 + t.millitm) - now; -#else - struct timeval tv; - struct timezone tz; - gettimeofday (&tv, &tz); - correction = (((int64) tv.tv_sec) * 1000 + tv.tv_usec / 1000) - now; -#endif - } - } - - lastCounterResult = now; - - return correction + now; -} - -//============================================================================== -uint32 juce_millisecondsSinceStartup() throw(); -static uint32 lastMSCounterValue = 0; - -uint32 Time::getMillisecondCounter() throw() -{ - const uint32 now = juce_millisecondsSinceStartup(); - - if (now < lastMSCounterValue) - { - // in multi-threaded apps this might be called concurrently, so - // make sure that our last counter value only increases and doesn't - // go backwards.. - if (now < lastMSCounterValue - 1000) - lastMSCounterValue = now; - } - else - { - lastMSCounterValue = now; - } - - return now; -} - -uint32 Time::getApproximateMillisecondCounter() throw() -{ - jassert (lastMSCounterValue != 0); - return lastMSCounterValue; -} - -void Time::waitForMillisecondCounter (const uint32 targetTime) throw() -{ - for (;;) - { - const uint32 now = getMillisecondCounter(); - - if (now >= targetTime) - break; - - const int toWait = targetTime - now; - - if (toWait > 2) - { - Thread::sleep (jmin (20, toWait >> 1)); - } - else - { - // xxx should consider using mutex_pause on the mac as it apparently - // makes it seem less like a spinlock and avoids lowering the thread pri. - for (int i = 10; --i >= 0;) - Thread::yield(); - } - } -} - -//============================================================================== -double Time::highResolutionTicksToSeconds (const int64 ticks) throw() -{ - return ticks / (double) getHighResolutionTicksPerSecond(); -} - -int64 Time::secondsToHighResolutionTicks (const double seconds) throw() -{ - return (int64) (seconds * (double) getHighResolutionTicksPerSecond()); -} - - -//============================================================================== -const Time JUCE_CALLTYPE Time::getCurrentTime() throw() -{ - return Time (currentTimeMillis()); -} - -//============================================================================== -const String Time::toString (const bool includeDate, - const bool includeTime, - const bool includeSeconds, - const bool use24HourClock) const throw() -{ - String result; - - if (includeDate) - { - result << getDayOfMonth() << ' ' - << getMonthName (true) << ' ' - << getYear(); - - if (includeTime) - result << ' '; - } - - if (includeTime) - { - if (includeSeconds) - { - result += String::formatted (T("%d:%02d:%02d "), - (use24HourClock) ? getHours() - : getHoursInAmPmFormat(), - getMinutes(), - getSeconds()); - } - else - { - result += String::formatted (T("%d.%02d"), - (use24HourClock) ? getHours() - : getHoursInAmPmFormat(), - getMinutes()); - } - - if (! use24HourClock) - result << (isAfternoon() ? "pm" : "am"); - } - - return result.trimEnd(); -} - -const String Time::formatted (const tchar* const format) const throw() -{ - tchar buffer[80]; - - struct tm t; - millisToLocal (millisSinceEpoch, t); - - if (CharacterFunctions::ftime (buffer, 79, format, &t) <= 0) - { - int bufferSize = 128; - - for (;;) - { - MemoryBlock mb (bufferSize * sizeof (tchar)); - tchar* const b = (tchar*) mb.getData(); - - if (CharacterFunctions::ftime (b, bufferSize, format, &t) > 0) - return String (b); - - bufferSize += 128; - } - } - - return String (buffer); -} - -//============================================================================== -int Time::getYear() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_year + 1900; -} - -int Time::getMonth() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_mon; -} - -int Time::getDayOfMonth() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_mday; -} - -int Time::getDayOfWeek() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_wday; -} - -int Time::getHours() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_hour; -} - -int Time::getHoursInAmPmFormat() const throw() -{ - const int hours = getHours(); - - if (hours == 0) - return 12; - else if (hours <= 12) - return hours; - else - return hours - 12; -} - -bool Time::isAfternoon() const throw() -{ - return getHours() >= 12; -} - -static int extendedModulo (const int64 value, const int modulo) throw() -{ - return (int) (value >= 0 ? (value % modulo) - : (value - ((value / modulo) + 1) * modulo)); -} - -int Time::getMinutes() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_min; -} - -int Time::getSeconds() const throw() -{ - return extendedModulo (millisSinceEpoch / 1000, 60); -} - -int Time::getMilliseconds() const throw() -{ - return extendedModulo (millisSinceEpoch, 1000); -} - -bool Time::isDaylightSavingTime() const throw() -{ - struct tm t; - millisToLocal (millisSinceEpoch, t); - return t.tm_isdst != 0; -} - -const String Time::getTimeZone() const throw() -{ - String zone[2]; - -#if JUCE_WIN32 - _tzset(); - - #ifdef USE_NEW_SECURE_TIME_FNS - { - char name [128]; - size_t length; - - for (int i = 0; i < 2; ++i) - { - zeromem (name, sizeof (name)); - _get_tzname (&length, name, 127, i); - zone[i] = name; - } - } - #else - const char** const zonePtr = (const char**) _tzname; - zone[0] = zonePtr[0]; - zone[1] = zonePtr[1]; - #endif -#else - tzset(); - const char** const zonePtr = (const char**) tzname; - zone[0] = zonePtr[0]; - zone[1] = zonePtr[1]; -#endif - - if (isDaylightSavingTime()) - { - zone[0] = zone[1]; - - if (zone[0].length() > 3 - && zone[0].containsIgnoreCase (T("daylight")) - && zone[0].contains (T("GMT"))) - zone[0] = "BST"; - } - - return zone[0].substring (0, 3); -} - -const String Time::getMonthName (const bool threeLetterVersion) const throw() -{ - return getMonthName (getMonth(), threeLetterVersion); -} - -const String Time::getWeekdayName (const bool threeLetterVersion) const throw() -{ - return getWeekdayName (getDayOfWeek(), threeLetterVersion); -} - -const String Time::getMonthName (int monthNumber, - const bool threeLetterVersion) throw() -{ - const char* const shortMonthNames[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - const char* const longMonthNames[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; - - monthNumber %= 12; - - return TRANS (threeLetterVersion ? shortMonthNames [monthNumber] - : longMonthNames [monthNumber]); -} - -const String Time::getWeekdayName (int day, - const bool threeLetterVersion) throw() -{ - const char* const shortDayNames[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; - const char* const longDayNames[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; - - day %= 7; - - return TRANS (threeLetterVersion ? shortDayNames [day] - : longDayNames [day]); -} - -END_JUCE_NAMESPACE diff --git a/src/juce_core/basics/juce_Time.h b/src/juce_core/basics/juce_Time.h deleted file mode 100644 index 7fc7bf3bba..0000000000 --- a/src/juce_core/basics/juce_Time.h +++ /dev/null @@ -1,393 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_TIME_JUCEHEADER__ -#define __JUCE_TIME_JUCEHEADER__ - -#include "juce_RelativeTime.h" - - -//============================================================================== -/** - Holds an absolute date and time. - - Internally, the time is stored at millisecond precision. - - @see RelativeTime -*/ -class JUCE_API Time -{ -public: - //============================================================================== - /** Creates a Time object. - - This default constructor creates a time of 1st January 1970, (which is - represented internally as 0ms). - - To create a time object representing the current time, use getCurrentTime(). - - @see getCurrentTime - */ - Time() throw(); - - /** Creates a copy of another Time object. */ - Time (const Time& other) throw(); - - /** Creates a time based on a number of milliseconds. - - The internal millisecond count is set to 0 (1st January 1970). To create a - time object set to the current time, use getCurrentTime(). - - @param millisecondsSinceEpoch the number of milliseconds since the unix - 'epoch' (midnight Jan 1st 1970). - @see getCurrentTime, currentTimeMillis - */ - Time (const int64 millisecondsSinceEpoch) throw(); - - /** Creates a time from a set of date components. - - The timezone is assumed to be whatever the system is using as its locale. - - @param year the year, in 4-digit format, e.g. 2004 - @param month the month, in the range 0 to 11 - @param day the day of the month, in the range 1 to 31 - @param hours hours in 24-hour clock format, 0 to 23 - @param minutes minutes 0 to 59 - @param seconds seconds 0 to 59 - @param milliseconds milliseconds 0 to 999 - @param useLocalTime if true, encode using the current machine's local time; if - false, it will always work in GMT. - */ - Time (const int year, - const int month, - const int day, - const int hours, - const int minutes, - const int seconds = 0, - const int milliseconds = 0, - const bool useLocalTime = true) throw(); - - /** Destructor. */ - ~Time() throw(); - - /** Copies this time from another one. */ - const Time& operator= (const Time& other) throw(); - - //============================================================================== - /** Returns a Time object that is set to the current system time. - - @see currentTimeMillis - */ - static const Time JUCE_CALLTYPE getCurrentTime() throw(); - - /** Returns the time as a number of milliseconds. - - @returns the number of milliseconds this Time object represents, since - midnight jan 1st 1970. - @see getMilliseconds - */ - int64 toMilliseconds() const throw() { return millisSinceEpoch; } - - /** Returns the year. - - A 4-digit format is used, e.g. 2004. - */ - int getYear() const throw(); - - /** Returns the number of the month. - - The value returned is in the range 0 to 11. - @see getMonthName - */ - int getMonth() const throw(); - - /** Returns the name of the month. - - @param threeLetterVersion if true, it'll be a 3-letter abbreviation, e.g. "Jan"; if false - it'll return the long form, e.g. "January" - @see getMonth - */ - const String getMonthName (const bool threeLetterVersion) const throw(); - - /** Returns the day of the month. - - The value returned is in the range 1 to 31. - */ - int getDayOfMonth() const throw(); - - /** Returns the number of the day of the week. - - The value returned is in the range 0 to 6 (0 = sunday, 1 = monday, etc). - */ - int getDayOfWeek() const throw(); - - /** Returns the name of the weekday. - - @param threeLetterVersion if true, it'll return a 3-letter abbreviation, e.g. "Tue"; if - false, it'll return the full version, e.g. "Tuesday". - */ - const String getWeekdayName (const bool threeLetterVersion) const throw(); - - /** Returns the number of hours since midnight. - - This is in 24-hour clock format, in the range 0 to 23. - - @see getHoursInAmPmFormat, isAfternoon - */ - int getHours() const throw(); - - /** Returns true if the time is in the afternoon. - - So it returns true for "PM", false for "AM". - - @see getHoursInAmPmFormat, getHours - */ - bool isAfternoon() const throw(); - - /** Returns the hours in 12-hour clock format. - - This will return a value 1 to 12 - use isAfternoon() to find out - whether this is in the afternoon or morning. - - @see getHours, isAfternoon - */ - int getHoursInAmPmFormat() const throw(); - - /** Returns the number of minutes, 0 to 59. */ - int getMinutes() const throw(); - - /** Returns the number of seconds, 0 to 59. */ - int getSeconds() const throw(); - - /** Returns the number of milliseconds, 0 to 999. - - Unlike toMilliseconds(), this just returns the position within the - current second rather than the total number since the epoch. - - @see toMilliseconds - */ - int getMilliseconds() const throw(); - - /** Returns true if the local timezone uses a daylight saving correction. */ - bool isDaylightSavingTime() const throw(); - - /** Returns a 3-character string to indicate the local timezone. */ - const String getTimeZone() const throw(); - - //============================================================================== - /** Quick way of getting a string version of a date and time. - - For a more powerful way of formatting the date and time, see the formatted() method. - - @param includeDate whether to include the date in the string - @param includeTime whether to include the time in the string - @param includeSeconds if the time is being included, this provides an option not to include - the seconds in it - @param use24HourClock if the time is being included, sets whether to use am/pm or 24 - hour notation. - @see formatted - */ - const String toString (const bool includeDate, - const bool includeTime, - const bool includeSeconds = true, - const bool use24HourClock = false) const throw(); - - /** Converts this date/time to a string with a user-defined format. - - This uses the C strftime() function to format this time as a string. To save you - looking it up, these are the escape codes that strftime uses (other codes might - work on some platforms and not others, but these are the common ones): - - %a is replaced by the locale's abbreviated weekday name. - %A is replaced by the locale's full weekday name. - %b is replaced by the locale's abbreviated month name. - %B is replaced by the locale's full month name. - %c is replaced by the locale's appropriate date and time representation. - %d is replaced by the day of the month as a decimal number [01,31]. - %H is replaced by the hour (24-hour clock) as a decimal number [00,23]. - %I is replaced by the hour (12-hour clock) as a decimal number [01,12]. - %j is replaced by the day of the year as a decimal number [001,366]. - %m is replaced by the month as a decimal number [01,12]. - %M is replaced by the minute as a decimal number [00,59]. - %p is replaced by the locale's equivalent of either a.m. or p.m. - %S is replaced by the second as a decimal number [00,61]. - %U is replaced by the week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. - %w is replaced by the weekday as a decimal number [0,6], with 0 representing Sunday. - %W is replaced by the week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. - %x is replaced by the locale's appropriate date representation. - %X is replaced by the locale's appropriate time representation. - %y is replaced by the year without century as a decimal number [00,99]. - %Y is replaced by the year with century as a decimal number. - %Z is replaced by the timezone name or abbreviation, or by no bytes if no timezone information exists. - %% is replaced by %. - - @see toString - */ - const String formatted (const tchar* const format) const throw(); - - //============================================================================== - /** Adds a RelativeTime to this time and returns the result. */ - const Time operator+ (const RelativeTime& delta) const throw() { return Time (millisSinceEpoch + delta.inMilliseconds()); } - - /** Subtracts a RelativeTime from this time and returns the result. */ - const Time operator- (const RelativeTime& delta) const throw() { return Time (millisSinceEpoch - delta.inMilliseconds()); } - - /** Returns the relative time difference between this time and another one. */ - const RelativeTime operator- (const Time& other) const throw() { return RelativeTime::milliseconds (millisSinceEpoch - other.millisSinceEpoch); } - - /** Compares two Time objects. */ - bool operator== (const Time& other) const throw() { return millisSinceEpoch == other.millisSinceEpoch; } - - /** Compares two Time objects. */ - bool operator!= (const Time& other) const throw() { return millisSinceEpoch != other.millisSinceEpoch; } - - /** Compares two Time objects. */ - bool operator< (const Time& other) const throw() { return millisSinceEpoch < other.millisSinceEpoch; } - - /** Compares two Time objects. */ - bool operator<= (const Time& other) const throw() { return millisSinceEpoch <= other.millisSinceEpoch; } - - /** Compares two Time objects. */ - bool operator> (const Time& other) const throw() { return millisSinceEpoch > other.millisSinceEpoch; } - - /** Compares two Time objects. */ - bool operator>= (const Time& other) const throw() { return millisSinceEpoch >= other.millisSinceEpoch; } - - //============================================================================== - /** Tries to set the computer's clock. - - @returns true if this succeeds, although depending on the system, the - application might not have sufficient privileges to do this. - */ - bool setSystemTimeToThisTime() const throw(); - - //============================================================================== - /** Returns the name of a day of the week. - - @param dayNumber the day, 0 to 6 (0 = sunday, 1 = monday, etc) - @param threeLetterVersion if true, it'll return a 3-letter abbreviation, e.g. "Tue"; if - false, it'll return the full version, e.g. "Tuesday". - */ - static const String getWeekdayName (int dayNumber, - const bool threeLetterVersion) throw(); - - /** Returns the name of one of the months. - - @param monthNumber the month, 0 to 11 - @param threeLetterVersion if true, it'll be a 3-letter abbreviation, e.g. "Jan"; if false - it'll return the long form, e.g. "January" - */ - static const String getMonthName (int monthNumber, - const bool threeLetterVersion) throw(); - - //============================================================================== - // Static methods for getting system timers directly.. - - /** Returns the current system time. - - Returns the number of milliseconds since midnight jan 1st 1970. - - Should be accurate to within a few millisecs, depending on platform, - hardware, etc. - */ - static int64 currentTimeMillis() throw(); - - /** Returns the number of millisecs since system startup. - - Should be accurate to within a few millisecs, depending on platform, - hardware, etc. - - @see getApproximateMillisecondCounter - */ - static uint32 getMillisecondCounter() throw(); - - /** Returns the number of millisecs since system startup. - - Same as getMillisecondCounter(), but returns a more accurate value, using - the high-res timer. - - @see getMillisecondCounter - */ - static double getMillisecondCounterHiRes() throw(); - - /** Waits until the getMillisecondCounter() reaches a given value. - - This will make the thread sleep as efficiently as it can while it's waiting. - */ - static void waitForMillisecondCounter (const uint32 targetTime) throw(); - - /** Less-accurate but faster version of getMillisecondCounter(). - - This will return the last value that getMillisecondCounter() returned, so doesn't - need to make a system call, but is less accurate - it shouldn't be more than - 100ms away from the correct time, though, so is still accurate enough for a - lot of purposes. - - @see getMillisecondCounter - */ - static uint32 getApproximateMillisecondCounter() throw(); - - //============================================================================== - // High-resolution timers.. - - /** Returns the current high-resolution counter's tick-count. - - This is a similar idea to getMillisecondCounter(), but with a higher - resolution. - - @see getHighResolutionTicksPerSecond, highResolutionTicksToSeconds, - secondsToHighResolutionTicks - */ - static int64 getHighResolutionTicks() throw(); - - /** Returns the resolution of the high-resolution counter in ticks per second. - - @see getHighResolutionTicks, highResolutionTicksToSeconds, - secondsToHighResolutionTicks - */ - static int64 getHighResolutionTicksPerSecond() throw(); - - /** Converts a number of high-resolution ticks into seconds. - - @see getHighResolutionTicks, getHighResolutionTicksPerSecond, - secondsToHighResolutionTicks - */ - static double highResolutionTicksToSeconds (const int64 ticks) throw(); - - /** Converts a number seconds into high-resolution ticks. - - @see getHighResolutionTicks, getHighResolutionTicksPerSecond, - highResolutionTicksToSeconds - */ - static int64 secondsToHighResolutionTicks (const double seconds) throw(); - - -private: - //============================================================================== - int64 millisSinceEpoch; -}; - - -#endif // __JUCE_TIME_JUCEHEADER__ diff --git a/src/juce_core/misc/juce_PerformanceCounter.cpp b/src/juce_core/misc/juce_PerformanceCounter.cpp deleted file mode 100644 index 85eeefa345..0000000000 --- a/src/juce_core/misc/juce_PerformanceCounter.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - - -#include "juce_PerformanceCounter.h" -#include "../basics/juce_Time.h" - - -//============================================================================== -PerformanceCounter::PerformanceCounter (const String& name_, - int runsPerPrintout, - const File& loggingFile) - : name (name_), - numRuns (0), - runsPerPrint (runsPerPrintout), - totalTime (0), - outputFile (loggingFile) -{ - if (outputFile != File::nonexistent) - { - String s ("**** Counter for \""); - s << name_ << "\" started at: " - << Time::getCurrentTime().toString (true, true) - << "\r\n"; - - outputFile.appendText (s, false, false); - } -} - -PerformanceCounter::~PerformanceCounter() -{ - printStatistics(); -} - -void PerformanceCounter::start() -{ - started = Time::getHighResolutionTicks(); -} - -void PerformanceCounter::stop() -{ - const int64 now = Time::getHighResolutionTicks(); - - totalTime += 1000.0 * Time::highResolutionTicksToSeconds (now - started); - - if (++numRuns == runsPerPrint) - printStatistics(); -} - -void PerformanceCounter::printStatistics() -{ - if (numRuns > 0) - { - String s ("Performance count for \""); - s << name << "\" - average over " << numRuns << " run(s) = "; - - const int micros = (int) (totalTime * (1000.0 / numRuns)); - - if (micros > 10000) - s << (micros/1000) << " millisecs"; - else - s << micros << " microsecs"; - - s << ", total = " << String (totalTime / 1000, 5) << " seconds"; - - Logger::outputDebugString (s); - - s << "\r\n"; - - if (outputFile != File::nonexistent) - outputFile.appendText (s, false, false); - - numRuns = 0; - totalTime = 0; - } -} - -END_JUCE_NAMESPACE diff --git a/src/juce_core/misc/juce_PerformanceCounter.h b/src/juce_core/misc/juce_PerformanceCounter.h deleted file mode 100644 index 5c7ffa80ad..0000000000 --- a/src/juce_core/misc/juce_PerformanceCounter.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ -#define __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ - -#include "../io/files/juce_File.h" - - -//============================================================================== -/** A timer for measuring performance of code and dumping the results to a file. - - e.g. @code - - PerformanceCounter pc ("fish", 50, "/temp/myfishlog.txt"); - - for (;;) - { - pc.start(); - - doSomethingFishy(); - - pc.stop(); - } - @endcode - - In this example, the time of each period between calling start/stop will be - measured and averaged over 50 runs, and the results printed to a file - every 50 times round the loop. -*/ -class JUCE_API PerformanceCounter -{ -public: - //============================================================================== - /** Creates a PerformanceCounter object. - - @param counterName the name used when printing out the statistics - @param runsPerPrintout the number of start/stop iterations before calling - printStatistics() - @param loggingFile a file to dump the results to - if this is File::nonexistent, - the results are just written to the debugger output - */ - PerformanceCounter (const String& counterName, - int runsPerPrintout = 100, - const File& loggingFile = File::nonexistent); - - /** Destructor. */ - ~PerformanceCounter(); - - //============================================================================== - /** Starts timing. - - @see stop - */ - void start(); - - /** Stops timing and prints out the results. - - The number of iterations before doing a printout of the - results is set in the constructor. - - @see start - */ - void stop(); - - /** Dumps the current metrics to the debugger output and to a file. - - As well as using Logger::outputDebugString to print the results, - this will write then to the file specified in the constructor (if - this was valid). - */ - void printStatistics(); - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - //============================================================================== - String name; - int numRuns, runsPerPrint; - double totalTime; - int64 started; - File outputFile; -}; - -#endif // __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ diff --git a/src/juce_core/misc/juce_PlatformUtilities.h b/src/juce_core/misc/juce_PlatformUtilities.h deleted file mode 100644 index f4c1099da4..0000000000 --- a/src/juce_core/misc/juce_PlatformUtilities.h +++ /dev/null @@ -1,296 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ -#define __JUCE_PLATFORMUTILITIES_JUCEHEADER__ - -#include "../text/juce_StringArray.h" - - -//============================================================================== -/** - A collection of miscellaneous platform-specific utilities. - -*/ -class JUCE_API PlatformUtilities -{ -public: - //============================================================================== - /** Plays the operating system's default alert 'beep' sound. */ - static void beep(); - - static bool launchEmailWithAttachments (const String& targetEmailAddress, - const String& emailSubject, - const String& bodyText, - const StringArray& filesToAttach); - -#if JUCE_MAC || DOXYGEN - //============================================================================== - /** MAC ONLY - Turns a Core CF String into a juce one. */ - static const String cfStringToJuceString (CFStringRef cfString); - - /** MAC ONLY - Turns a juce string into a Core CF one. */ - static CFStringRef juceStringToCFString (const String& s); - - /** MAC ONLY - Turns a file path into an FSRef, returning true if it succeeds. */ - static bool makeFSRefFromPath (FSRef* destFSRef, const String& path); - - /** MAC ONLY - Turns an FSRef into a juce string path. */ - static const String makePathFromFSRef (FSRef* file); - - /** MAC ONLY - Converts any decomposed unicode characters in a string into - their precomposed equivalents. - */ - static const String convertToPrecomposedUnicode (const String& s); - - /** MAC ONLY - Gets the type of a file from the file's resources. */ - static OSType getTypeOfFile (const String& filename); - - /** MAC ONLY - Returns true if this file is actually a bundle. */ - static bool isBundle (const String& filename); - - /** MAC ONLY - Adds an item to the dock */ - static void addItemToDock (const File& file); -#endif - - -#if JUCE_WIN32 || DOXYGEN - //============================================================================== - // Some registry helper functions: - - /** WIN32 ONLY - Returns a string from the registry. - - The path is a string for the entire path of a value in the registry, - e.g. "HKEY_CURRENT_USER\Software\foo\bar" - */ - static const String getRegistryValue (const String& regValuePath, - const String& defaultValue = String::empty); - - /** WIN32 ONLY - Sets a registry value as a string. - - This will take care of creating any groups needed to get to the given - registry value. - */ - static void setRegistryValue (const String& regValuePath, - const String& value); - - /** WIN32 ONLY - Returns true if the given value exists in the registry. */ - static bool registryValueExists (const String& regValuePath); - - /** WIN32 ONLY - Deletes a registry value. */ - static void deleteRegistryValue (const String& regValuePath); - - /** WIN32 ONLY - Deletes a registry key (which is registry-talk for 'folder'). */ - static void deleteRegistryKey (const String& regKeyPath); - - /** WIN32 ONLY - Creates a file association in the registry. - - This lets you set the exe that should be launched by a given file extension. - @param fileExtension the file extension to associate, including the - initial dot, e.g. ".txt" - @param symbolicDescription a space-free short token to identify the file type - @param fullDescription a human-readable description of the file type - @param targetExecutable the executable that should be launched - @param iconResourceNumber the icon that gets displayed for the file type will be - found by looking up this resource number in the - executable. Pass 0 here to not use an icon - */ - static void registerFileAssociation (const String& fileExtension, - const String& symbolicDescription, - const String& fullDescription, - const File& targetExecutable, - int iconResourceNumber); - - /** WIN32 ONLY - This returns the HINSTANCE of the current module. - - In a normal Juce application this will be set to the module handle - of the application executable. - - If you're writing a DLL using Juce and plan to use any Juce messaging or - windows, you'll need to make sure you use the setCurrentModuleInstanceHandle() - to set the correct module handle in your DllMain() function, because - the win32 system relies on the correct instance handle when opening windows. - */ - static void* JUCE_CALLTYPE getCurrentModuleInstanceHandle() throw(); - - /** WIN32 ONLY - Sets a new module handle to be used by the library. - - @see getCurrentModuleInstanceHandle() - */ - static void JUCE_CALLTYPE setCurrentModuleInstanceHandle (void* newHandle) throw(); - - /** WIN32 ONLY - Gets the command-line params as a string. - - This is needed to avoid unicode problems with the argc type params. - */ - static const String JUCE_CALLTYPE getCurrentCommandLineParams() throw(); -#endif - - /** Clears the floating point unit's flags. - - Only has an effect under win32, currently. - */ - static void fpuReset(); - - -#if JUCE_LINUX || JUCE_WIN32 - //============================================================================== - /** Loads a dynamically-linked library into the process's address space. - - @param pathOrFilename the platform-dependent name and search path - @returns a handle which can be used by getProcedureEntryPoint(), or - zero if it fails. - @see freeDynamicLibrary, getProcedureEntryPoint - */ - static void* loadDynamicLibrary (const String& pathOrFilename); - - /** Frees a dynamically-linked library. - - @param libraryHandle a handle created by loadDynamicLibrary - @see loadDynamicLibrary, getProcedureEntryPoint - */ - static void freeDynamicLibrary (void* libraryHandle); - - /** Finds a procedure call in a dynamically-linked library. - - @param libraryHandle a library handle returned by loadDynamicLibrary - @param procedureName the name of the procedure call to try to load - @returns a pointer to the function if found, or 0 if it fails - @see loadDynamicLibrary - */ - static void* getProcedureEntryPoint (void* libraryHandle, - const String& procedureName); -#endif - -#if JUCE_LINUX || DOXYGEN - //============================================================================== - -#endif -}; - - -#if JUCE_MAC - -//============================================================================== -/** A handy C++ wrapper that creates and deletes an NSAutoreleasePool object - using RAII. -*/ -class ScopedAutoReleasePool -{ -public: - ScopedAutoReleasePool(); - ~ScopedAutoReleasePool(); - -private: - void* pool; -}; - -//============================================================================== -/** - A wrapper class for picking up events from an Apple IR remote control device. - - To use it, just create a subclass of this class, implementing the buttonPressed() - callback, then call start() and stop() to start or stop receiving events. -*/ -class JUCE_API AppleRemoteDevice -{ -public: - //============================================================================== - AppleRemoteDevice(); - virtual ~AppleRemoteDevice(); - - //============================================================================== - /** The set of buttons that may be pressed. - @see buttonPressed - */ - enum ButtonType - { - menuButton = 0, /**< The menu button (if it's held for a short time). */ - playButton, /**< The play button. */ - plusButton, /**< The plus or volume-up button. */ - minusButton, /**< The minus or volume-down button. */ - rightButton, /**< The right button (if it's held for a short time). */ - leftButton, /**< The left button (if it's held for a short time). */ - rightButton_Long, /**< The right button (if it's held for a long time). */ - leftButton_Long, /**< The menu button (if it's held for a long time). */ - menuButton_Long, /**< The menu button (if it's held for a long time). */ - playButtonSleepMode, - switched - }; - - //============================================================================== - /** Override this method to receive the callback about a button press. - - The callback will happen on the application's message thread. - - Some buttons trigger matching up and down events, in which the isDown parameter - will be true and then false. Others only send a single event when the - button is pressed. - */ - virtual void buttonPressed (const ButtonType buttonId, const bool isDown) = 0; - - //============================================================================== - /** Starts the device running and responding to events. - - Returns true if it managed to open the device. - - @param inExclusiveMode if true, the remote will be grabbed exclusively for this app, - and will not be available to any other part of the system. If - false, it will be shared with other apps. - @see stop - */ - bool start (const bool inExclusiveMode) throw(); - - /** Stops the device running. - @see start - */ - void stop() throw(); - - /** Returns true if the device has been started successfully. - */ - bool isActive() const throw(); - - /** Returns the ID number of the remote, if it has sent one. - */ - int getRemoteId() const throw() { return remoteId; } - - //============================================================================== - juce_UseDebuggingNewOperator - - /** @internal */ - void handleCallbackInternal(); - -private: - void* device; - void* queue; - int remoteId; - - bool open (const bool openInExclusiveMode) throw(); -}; - -#endif - - -#endif // __JUCE_PLATFORMUTILITIES_JUCEHEADER__ diff --git a/src/juce_core/misc/juce_Uuid.cpp b/src/juce_core/misc/juce_Uuid.cpp deleted file mode 100644 index 9e9252c26b..0000000000 --- a/src/juce_core/misc/juce_Uuid.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#include "../basics/juce_StandardHeader.h" - -BEGIN_JUCE_NAMESPACE - -#include "juce_Uuid.h" -#include "../basics/juce_Random.h" -#include "../basics/juce_Time.h" -#include "../basics/juce_SystemStats.h" - - -//============================================================================== -Uuid::Uuid() -{ - // Mix up any available MAC addresses with some time-based pseudo-random numbers - // to make it very very unlikely that two UUIDs will ever be the same.. - - static int64 macAddresses[2]; - static bool hasCheckedMacAddresses = false; - - if (! hasCheckedMacAddresses) - { - hasCheckedMacAddresses = true; - SystemStats::getMACAddresses (macAddresses, 2); - } - - value.asInt64[0] = macAddresses[0]; - value.asInt64[1] = macAddresses[1]; - - // We'll use both a local RNG that is re-seeded, plus the shared RNG, - // whose seed will carry over between calls to this method. - - Random r (macAddresses[0] ^ macAddresses[1] - ^ Random::getSystemRandom().nextInt64()); - - for (int i = 4; --i >= 0;) - { - r.setSeedRandomly(); // calling this repeatedly improves randomness - value.asInt[i] ^= r.nextInt(); - value.asInt[i] ^= Random::getSystemRandom().nextInt(); - } -} - -Uuid::~Uuid() throw() -{ -} - -Uuid::Uuid (const Uuid& other) - : value (other.value) -{ -} - -Uuid& Uuid::operator= (const Uuid& other) -{ - if (this != &other) - value = other.value; - - return *this; -} - -bool Uuid::operator== (const Uuid& other) const -{ - return memcmp (value.asBytes, other.value.asBytes, 16) == 0; -} - -bool Uuid::operator!= (const Uuid& other) const -{ - return ! operator== (other); -} - -bool Uuid::isNull() const throw() -{ - return (value.asInt64 [0] == 0) && (value.asInt64 [1] == 0); -} - -//============================================================================== -const String Uuid::toString() const -{ - return String::toHexString (value.asBytes, 16, 0); -} - -Uuid::Uuid (const String& uuidString) -{ - operator= (uuidString); -} - -Uuid& Uuid::operator= (const String& uuidString) -{ - int destIndex = 0; - int i = 0; - - for (;;) - { - int byte = 0; - - for (int loop = 2; --loop >= 0;) - { - byte <<= 4; - - for (;;) - { - const tchar c = uuidString [i++]; - - if (c >= T('0') && c <= T('9')) - { - byte |= c - T('0'); - break; - } - else if (c >= T('a') && c <= T('z')) - { - byte |= c - (T('a') - 10); - break; - } - else if (c >= T('A') && c <= T('Z')) - { - byte |= c - (T('A') - 10); - break; - } - else if (c == 0) - { - while (destIndex < 16) - value.asBytes [destIndex++] = 0; - - return *this; - } - } - } - - value.asBytes [destIndex++] = (uint8) byte; - } -} - -//============================================================================== -Uuid::Uuid (const uint8* const rawData) -{ - operator= (rawData); -} - -Uuid& Uuid::operator= (const uint8* const rawData) -{ - if (rawData != 0) - memcpy (value.asBytes, rawData, 16); - else - zeromem (value.asBytes, 16); - - return *this; -} - - -END_JUCE_NAMESPACE diff --git a/src/juce_core/misc/juce_Uuid.h b/src/juce_core/misc/juce_Uuid.h deleted file mode 100644 index 1bc6ecaf96..0000000000 --- a/src/juce_core/misc/juce_Uuid.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-9 by Raw Material Software Ltd. - - ------------------------------------------------------------------------------ - - JUCE can be redistributed and/or modified under the terms of the GNU General - Public License (Version 2), as published by the Free Software Foundation. - A copy of the license is included in the JUCE distribution, or can be found - online at www.gnu.org/licenses. - - JUCE 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. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.rawmaterialsoftware.com/juce for more information. - - ============================================================================== -*/ - -#ifndef __JUCE_UUID_JUCEHEADER__ -#define __JUCE_UUID_JUCEHEADER__ - -#include "../text/juce_String.h" - - -//============================================================================== -/** - A universally unique 128-bit identifier. - - This class generates very random unique numbers based on the system time - and MAC addresses if any are available. It's extremely unlikely that two identical - UUIDs would ever be created by chance. - - The class includes methods for saving the ID as a string or as raw binary data. -*/ -class JUCE_API Uuid -{ -public: - //============================================================================== - /** Creates a new unique ID. */ - Uuid(); - - /** Destructor. */ - ~Uuid() throw(); - - /** Creates a copy of another UUID. */ - Uuid (const Uuid& other); - - /** Copies another UUID. */ - Uuid& operator= (const Uuid& other); - - /** Returns true if the ID is zero. */ - bool isNull() const throw(); - - //============================================================================== - /** Compares two UUIDs. */ - bool operator== (const Uuid& other) const; - - /** Compares two UUIDs. */ - bool operator!= (const Uuid& other) const; - - //============================================================================== - /** Returns a stringified version of this UUID. - - A Uuid object can later be reconstructed from this string using operator= or - the constructor that takes a string parameter. - - @returns a 32 character hex string. - */ - const String toString() const; - - /** Creates an ID from an encoded string version. - - @see toString - */ - Uuid (const String& uuidString); - - /** Copies from a stringified UUID. - - The string passed in should be one that was created with the toString() method. - */ - Uuid& operator= (const String& uuidString); - - - //============================================================================== - /** Returns a pointer to the internal binary representation of the ID. - - This is an array of 16 bytes. To reconstruct a Uuid from its data, use - the constructor or operator= method that takes an array of uint8s. - */ - const uint8* getRawData() const throw() { return value.asBytes; } - - /** Creates a UUID from a 16-byte array. - - @see getRawData - */ - Uuid (const uint8* const rawData); - - /** Sets this UUID from 16-bytes of raw data. */ - Uuid& operator= (const uint8* const rawData); - - - //============================================================================== - juce_UseDebuggingNewOperator - -private: - union - { - uint8 asBytes [16]; - int asInt[4]; - int64 asInt64[2]; - - } value; -}; - - -#endif // __JUCE_UUID_JUCEHEADER__ diff --git a/src/juce_core_includes.h b/src/juce_core_includes.h index 6250709c33..e40206bc51 100644 --- a/src/juce_core_includes.h +++ b/src/juce_core_includes.h @@ -26,221 +26,221 @@ #ifndef __JUCE_JUCE_CORE_INCLUDES_INCLUDEFILES__ #define __JUCE_JUCE_CORE_INCLUDES_INCLUDEFILES__ -#ifndef __JUCE_ATOMIC_JUCEHEADER__ - #include "juce_core/basics/juce_Atomic.h" -#endif -#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__ - #include "juce_core/basics/juce_DataConversions.h" -#endif -#ifndef __JUCE_FILELOGGER_JUCEHEADER__ - #include "juce_core/basics/juce_FileLogger.h" -#endif -#ifndef __JUCE_INITIALISATION_JUCEHEADER__ - #include "juce_core/basics/juce_Initialisation.h" -#endif -#ifndef __JUCE_LOGGER_JUCEHEADER__ - #include "juce_core/basics/juce_Logger.h" -#endif -#ifndef __JUCE_MATHSFUNCTIONS_JUCEHEADER__ - #include "juce_core/basics/juce_MathsFunctions.h" -#endif -#ifndef __JUCE_MEMORY_JUCEHEADER__ - #include "juce_core/basics/juce_Memory.h" -#endif -#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__ - #include "juce_core/basics/juce_PlatformDefs.h" -#endif -#ifndef __JUCE_RANDOM_JUCEHEADER__ - #include "juce_core/basics/juce_Random.h" -#endif -#ifndef __JUCE_RELATIVETIME_JUCEHEADER__ - #include "juce_core/basics/juce_RelativeTime.h" -#endif -#ifndef __JUCE_SINGLETON_JUCEHEADER__ - #include "juce_core/basics/juce_Singleton.h" +#ifndef __JUCE_TIME_JUCEHEADER__ + #include "core/juce_Time.h" #endif #ifndef __JUCE_STANDARDHEADER_JUCEHEADER__ - #include "juce_core/basics/juce_StandardHeader.h" + #include "core/juce_StandardHeader.h" #endif #ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ - #include "juce_core/basics/juce_SystemStats.h" + #include "core/juce_SystemStats.h" #endif -#ifndef __JUCE_TIME_JUCEHEADER__ - #include "juce_core/basics/juce_Time.h" +#ifndef __JUCE_SINGLETON_JUCEHEADER__ + #include "core/juce_Singleton.h" #endif -#ifndef __JUCE_ARRAY_JUCEHEADER__ - #include "juce_core/containers/juce_Array.h" +#ifndef __JUCE_RELATIVETIME_JUCEHEADER__ + #include "core/juce_RelativeTime.h" #endif -#ifndef __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ - #include "juce_core/containers/juce_ArrayAllocationBase.h" +#ifndef __JUCE_PLATFORMDEFS_JUCEHEADER__ + #include "core/juce_PlatformDefs.h" #endif -#ifndef __JUCE_BITARRAY_JUCEHEADER__ - #include "juce_core/containers/juce_BitArray.h" +#ifndef __JUCE_RANDOM_JUCEHEADER__ + #include "core/juce_Random.h" #endif -#ifndef __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ - #include "juce_core/containers/juce_ElementComparator.h" +#ifndef __JUCE_MATHSFUNCTIONS_JUCEHEADER__ + #include "core/juce_MathsFunctions.h" #endif -#ifndef __JUCE_MEMORYBLOCK_JUCEHEADER__ - #include "juce_core/containers/juce_MemoryBlock.h" +#ifndef __JUCE_MEMORY_JUCEHEADER__ + #include "core/juce_Memory.h" #endif -#ifndef __JUCE_OWNEDARRAY_JUCEHEADER__ - #include "juce_core/containers/juce_OwnedArray.h" +#ifndef __JUCE_LOGGER_JUCEHEADER__ + #include "core/juce_Logger.h" #endif -#ifndef __JUCE_PROPERTYSET_JUCEHEADER__ - #include "juce_core/containers/juce_PropertySet.h" +#ifndef __JUCE_INITIALISATION_JUCEHEADER__ + #include "core/juce_Initialisation.h" #endif -#ifndef __JUCE_REFERENCECOUNTEDARRAY_JUCEHEADER__ - #include "juce_core/containers/juce_ReferenceCountedArray.h" +#ifndef __JUCE_FILELOGGER_JUCEHEADER__ + #include "core/juce_FileLogger.h" #endif -#ifndef __JUCE_REFERENCECOUNTEDOBJECT_JUCEHEADER__ - #include "juce_core/containers/juce_ReferenceCountedObject.h" +#ifndef __JUCE_DATACONVERSIONS_JUCEHEADER__ + #include "core/juce_DataConversions.h" #endif -#ifndef __JUCE_SORTEDSET_JUCEHEADER__ - #include "juce_core/containers/juce_SortedSet.h" -#endif -#ifndef __JUCE_SPARSESET_JUCEHEADER__ - #include "juce_core/containers/juce_SparseSet.h" -#endif -#ifndef __JUCE_VARIANT_JUCEHEADER__ - #include "juce_core/containers/juce_Variant.h" -#endif -#ifndef __JUCE_VOIDARRAY_JUCEHEADER__ - #include "juce_core/containers/juce_VoidArray.h" -#endif -#ifndef __JUCE_INPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/juce_InputStream.h" -#endif -#ifndef __JUCE_OUTPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/juce_OutputStream.h" -#endif -#ifndef __JUCE_DIRECTORYITERATOR_JUCEHEADER__ - #include "juce_core/io/files/juce_DirectoryIterator.h" -#endif -#ifndef __JUCE_FILE_JUCEHEADER__ - #include "juce_core/io/files/juce_File.h" -#endif -#ifndef __JUCE_FILEINPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/files/juce_FileInputStream.h" -#endif -#ifndef __JUCE_FILEOUTPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/files/juce_FileOutputStream.h" -#endif -#ifndef __JUCE_FILESEARCHPATH_JUCEHEADER__ - #include "juce_core/io/files/juce_FileSearchPath.h" -#endif -#ifndef __JUCE_NAMEDPIPE_JUCEHEADER__ - #include "juce_core/io/files/juce_NamedPipe.h" -#endif -#ifndef __JUCE_BLOWFISH_JUCEHEADER__ - #include "juce_core/cryptography/juce_BlowFish.h" -#endif -#ifndef __JUCE_MD5_JUCEHEADER__ - #include "juce_core/cryptography/juce_MD5.h" -#endif -#ifndef __JUCE_PRIMES_JUCEHEADER__ - #include "juce_core/cryptography/juce_Primes.h" -#endif -#ifndef __JUCE_RSAKEY_JUCEHEADER__ - #include "juce_core/cryptography/juce_RSAKey.h" -#endif -#ifndef __JUCE_SOCKET_JUCEHEADER__ - #include "juce_core/io/network/juce_Socket.h" -#endif -#ifndef __JUCE_URL_JUCEHEADER__ - #include "juce_core/io/network/juce_URL.h" -#endif -#ifndef __JUCE_BUFFEREDINPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/streams/juce_BufferedInputStream.h" -#endif -#ifndef __JUCE_FILEINPUTSOURCE_JUCEHEADER__ - #include "juce_core/io/streams/juce_FileInputSource.h" -#endif -#ifndef __JUCE_GZIPCOMPRESSOROUTPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/streams/juce_GZIPCompressorOutputStream.h" -#endif -#ifndef __JUCE_GZIPDECOMPRESSORINPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/streams/juce_GZIPDecompressorInputStream.h" -#endif -#ifndef __JUCE_INPUTSOURCE_JUCEHEADER__ - #include "juce_core/io/streams/juce_InputSource.h" -#endif -#ifndef __JUCE_MEMORYINPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/streams/juce_MemoryInputStream.h" -#endif -#ifndef __JUCE_MEMORYOUTPUTSTREAM_JUCEHEADER__ - #include "juce_core/io/streams/juce_MemoryOutputStream.h" -#endif -#ifndef __JUCE_SUBREGIONSTREAM_JUCEHEADER__ - #include "juce_core/io/streams/juce_SubregionStream.h" -#endif -#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ - #include "juce_core/misc/juce_PerformanceCounter.h" -#endif -#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ - #include "juce_core/misc/juce_PlatformUtilities.h" +#ifndef __JUCE_ATOMIC_JUCEHEADER__ + #include "core/juce_Atomic.h" #endif #ifndef __JUCE_UUID_JUCEHEADER__ - #include "juce_core/misc/juce_Uuid.h" + #include "core/juce_Uuid.h" +#endif +#ifndef __JUCE_PERFORMANCECOUNTER_JUCEHEADER__ + #include "core/juce_PerformanceCounter.h" +#endif +#ifndef __JUCE_PLATFORMUTILITIES_JUCEHEADER__ + #include "core/juce_PlatformUtilities.h" +#endif +#ifndef __JUCE_ARRAY_JUCEHEADER__ + #include "containers/juce_Array.h" +#endif +#ifndef __JUCE_ARRAYALLOCATIONBASE_JUCEHEADER__ + #include "containers/juce_ArrayAllocationBase.h" +#endif +#ifndef __JUCE_BITARRAY_JUCEHEADER__ + #include "containers/juce_BitArray.h" +#endif +#ifndef __JUCE_ELEMENTCOMPARATOR_JUCEHEADER__ + #include "containers/juce_ElementComparator.h" +#endif +#ifndef __JUCE_MEMORYBLOCK_JUCEHEADER__ + #include "containers/juce_MemoryBlock.h" +#endif +#ifndef __JUCE_OWNEDARRAY_JUCEHEADER__ + #include "containers/juce_OwnedArray.h" +#endif +#ifndef __JUCE_PROPERTYSET_JUCEHEADER__ + #include "containers/juce_PropertySet.h" +#endif +#ifndef __JUCE_REFERENCECOUNTEDARRAY_JUCEHEADER__ + #include "containers/juce_ReferenceCountedArray.h" +#endif +#ifndef __JUCE_REFERENCECOUNTEDOBJECT_JUCEHEADER__ + #include "containers/juce_ReferenceCountedObject.h" +#endif +#ifndef __JUCE_SORTEDSET_JUCEHEADER__ + #include "containers/juce_SortedSet.h" +#endif +#ifndef __JUCE_SPARSESET_JUCEHEADER__ + #include "containers/juce_SparseSet.h" +#endif +#ifndef __JUCE_VARIANT_JUCEHEADER__ + #include "containers/juce_Variant.h" +#endif +#ifndef __JUCE_VOIDARRAY_JUCEHEADER__ + #include "containers/juce_VoidArray.h" +#endif +#ifndef __JUCE_DIRECTORYITERATOR_JUCEHEADER__ + #include "io/files/juce_DirectoryIterator.h" +#endif +#ifndef __JUCE_FILE_JUCEHEADER__ + #include "io/files/juce_File.h" +#endif +#ifndef __JUCE_FILEINPUTSTREAM_JUCEHEADER__ + #include "io/files/juce_FileInputStream.h" +#endif +#ifndef __JUCE_FILEOUTPUTSTREAM_JUCEHEADER__ + #include "io/files/juce_FileOutputStream.h" +#endif +#ifndef __JUCE_FILESEARCHPATH_JUCEHEADER__ + #include "io/files/juce_FileSearchPath.h" +#endif +#ifndef __JUCE_NAMEDPIPE_JUCEHEADER__ + #include "io/files/juce_NamedPipe.h" #endif #ifndef __JUCE_ZIPFILE_JUCEHEADER__ - #include "juce_core/misc/juce_ZipFile.h" + #include "io/files/juce_ZipFile.h" +#endif +#ifndef __JUCE_BLOWFISH_JUCEHEADER__ + #include "cryptography/juce_BlowFish.h" +#endif +#ifndef __JUCE_MD5_JUCEHEADER__ + #include "cryptography/juce_MD5.h" +#endif +#ifndef __JUCE_PRIMES_JUCEHEADER__ + #include "cryptography/juce_Primes.h" +#endif +#ifndef __JUCE_RSAKEY_JUCEHEADER__ + #include "cryptography/juce_RSAKey.h" +#endif +#ifndef __JUCE_SOCKET_JUCEHEADER__ + #include "io/network/juce_Socket.h" +#endif +#ifndef __JUCE_URL_JUCEHEADER__ + #include "io/network/juce_URL.h" +#endif +#ifndef __JUCE_BUFFEREDINPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_BufferedInputStream.h" +#endif +#ifndef __JUCE_FILEINPUTSOURCE_JUCEHEADER__ + #include "io/streams/juce_FileInputSource.h" +#endif +#ifndef __JUCE_GZIPCOMPRESSOROUTPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_GZIPCompressorOutputStream.h" +#endif +#ifndef __JUCE_GZIPDECOMPRESSORINPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_GZIPDecompressorInputStream.h" +#endif +#ifndef __JUCE_INPUTSOURCE_JUCEHEADER__ + #include "io/streams/juce_InputSource.h" +#endif +#ifndef __JUCE_MEMORYINPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_MemoryInputStream.h" +#endif +#ifndef __JUCE_MEMORYOUTPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_MemoryOutputStream.h" +#endif +#ifndef __JUCE_SUBREGIONSTREAM_JUCEHEADER__ + #include "io/streams/juce_SubregionStream.h" +#endif +#ifndef __JUCE_INPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_InputStream.h" +#endif +#ifndef __JUCE_OUTPUTSTREAM_JUCEHEADER__ + #include "io/streams/juce_OutputStream.h" #endif #ifndef __JUCE_CHARACTERFUNCTIONS_JUCEHEADER__ - #include "juce_core/text/juce_CharacterFunctions.h" + #include "text/juce_CharacterFunctions.h" #endif #ifndef __JUCE_LOCALISEDSTRINGS_JUCEHEADER__ - #include "juce_core/text/juce_LocalisedStrings.h" + #include "text/juce_LocalisedStrings.h" #endif #ifndef __JUCE_STRING_JUCEHEADER__ - #include "juce_core/text/juce_String.h" + #include "text/juce_String.h" #endif #ifndef __JUCE_STRINGARRAY_JUCEHEADER__ - #include "juce_core/text/juce_StringArray.h" + #include "text/juce_StringArray.h" #endif #ifndef __JUCE_STRINGPAIRARRAY_JUCEHEADER__ - #include "juce_core/text/juce_StringPairArray.h" + #include "text/juce_StringPairArray.h" #endif #ifndef __JUCE_XMLDOCUMENT_JUCEHEADER__ - #include "juce_core/text/juce_XmlDocument.h" + #include "text/juce_XmlDocument.h" #endif #ifndef __JUCE_XMLELEMENT_JUCEHEADER__ - #include "juce_core/text/juce_XmlElement.h" + #include "text/juce_XmlElement.h" #endif #ifndef __JUCE_CRITICALSECTION_JUCEHEADER__ - #include "juce_core/threads/juce_CriticalSection.h" + #include "threads/juce_CriticalSection.h" #endif #ifndef __JUCE_INTERPROCESSLOCK_JUCEHEADER__ - #include "juce_core/threads/juce_InterProcessLock.h" + #include "threads/juce_InterProcessLock.h" #endif #ifndef __JUCE_PROCESS_JUCEHEADER__ - #include "juce_core/threads/juce_Process.h" + #include "threads/juce_Process.h" #endif #ifndef __JUCE_READWRITELOCK_JUCEHEADER__ - #include "juce_core/threads/juce_ReadWriteLock.h" + #include "threads/juce_ReadWriteLock.h" #endif #ifndef __JUCE_SCOPEDLOCK_JUCEHEADER__ - #include "juce_core/threads/juce_ScopedLock.h" + #include "threads/juce_ScopedLock.h" #endif #ifndef __JUCE_SCOPEDREADLOCK_JUCEHEADER__ - #include "juce_core/threads/juce_ScopedReadLock.h" + #include "threads/juce_ScopedReadLock.h" #endif #ifndef __JUCE_SCOPEDTRYLOCK_JUCEHEADER__ - #include "juce_core/threads/juce_ScopedTryLock.h" + #include "threads/juce_ScopedTryLock.h" #endif #ifndef __JUCE_SCOPEDWRITELOCK_JUCEHEADER__ - #include "juce_core/threads/juce_ScopedWriteLock.h" + #include "threads/juce_ScopedWriteLock.h" #endif #ifndef __JUCE_THREAD_JUCEHEADER__ - #include "juce_core/threads/juce_Thread.h" + #include "threads/juce_Thread.h" #endif #ifndef __JUCE_THREADPOOL_JUCEHEADER__ - #include "juce_core/threads/juce_ThreadPool.h" + #include "threads/juce_ThreadPool.h" #endif #ifndef __JUCE_TIMESLICETHREAD_JUCEHEADER__ - #include "juce_core/threads/juce_TimeSliceThread.h" + #include "threads/juce_TimeSliceThread.h" #endif #ifndef __JUCE_WAITABLEEVENT_JUCEHEADER__ - #include "juce_core/threads/juce_WaitableEvent.h" + #include "threads/juce_WaitableEvent.h" #endif #endif diff --git a/src/juce_core/text/juce_CharacterFunctions.cpp b/src/text/juce_CharacterFunctions.cpp similarity index 95% rename from src/juce_core/text/juce_CharacterFunctions.cpp rename to src/text/juce_CharacterFunctions.cpp index 505b06c9f9..c2d2478b85 100644 --- a/src/juce_core/text/juce_CharacterFunctions.cpp +++ b/src/text/juce_CharacterFunctions.cpp @@ -28,7 +28,7 @@ #pragma warning (push) #endif -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" #include #include #include diff --git a/src/juce_core/text/juce_CharacterFunctions.h b/src/text/juce_CharacterFunctions.h similarity index 100% rename from src/juce_core/text/juce_CharacterFunctions.h rename to src/text/juce_CharacterFunctions.h diff --git a/src/juce_core/text/juce_LocalisedStrings.cpp b/src/text/juce_LocalisedStrings.cpp similarity index 95% rename from src/juce_core/text/juce_LocalisedStrings.cpp rename to src/text/juce_LocalisedStrings.cpp index 2a6a246d71..4145ff8639 100644 --- a/src/juce_core/text/juce_LocalisedStrings.cpp +++ b/src/text/juce_LocalisedStrings.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/text/juce_LocalisedStrings.h b/src/text/juce_LocalisedStrings.h similarity index 96% rename from src/juce_core/text/juce_LocalisedStrings.h rename to src/text/juce_LocalisedStrings.h index c174cab95a..1cdcabb905 100644 --- a/src/juce_core/text/juce_LocalisedStrings.h +++ b/src/text/juce_LocalisedStrings.h @@ -27,7 +27,7 @@ #define __JUCE_LOCALISEDSTRINGS_JUCEHEADER__ #include "juce_StringPairArray.h" -#include "../basics/juce_Singleton.h" +#include "../core/juce_Singleton.h" #include "../io/files/juce_File.h" diff --git a/src/juce_core/text/juce_String.cpp b/src/text/juce_String.cpp similarity index 96% rename from src/juce_core/text/juce_String.cpp rename to src/text/juce_String.cpp index 1850b650ce..18e30fe81a 100644 --- a/src/juce_core/text/juce_String.cpp +++ b/src/text/juce_String.cpp @@ -29,7 +29,7 @@ #endif #include -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" #if JUCE_MSVC #include @@ -38,7 +38,7 @@ BEGIN_JUCE_NAMESPACE #include "juce_String.h" -#include "../basics/juce_Atomic.h" +#include "../core/juce_Atomic.h" #ifdef _MSC_VER #pragma warning (pop) diff --git a/src/juce_core/text/juce_String.h b/src/text/juce_String.h similarity index 100% rename from src/juce_core/text/juce_String.h rename to src/text/juce_String.h diff --git a/src/juce_core/text/juce_StringArray.cpp b/src/text/juce_StringArray.cpp similarity index 95% rename from src/juce_core/text/juce_StringArray.cpp rename to src/text/juce_StringArray.cpp index 23de3b2c80..1935bf2124 100644 --- a/src/juce_core/text/juce_StringArray.cpp +++ b/src/text/juce_StringArray.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/text/juce_StringArray.h b/src/text/juce_StringArray.h similarity index 100% rename from src/juce_core/text/juce_StringArray.h rename to src/text/juce_StringArray.h diff --git a/src/juce_core/text/juce_StringPairArray.cpp b/src/text/juce_StringPairArray.cpp similarity index 94% rename from src/juce_core/text/juce_StringPairArray.cpp rename to src/text/juce_StringPairArray.cpp index 44952dfcf1..9511caaf1b 100644 --- a/src/juce_core/text/juce_StringPairArray.cpp +++ b/src/text/juce_StringPairArray.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/text/juce_StringPairArray.h b/src/text/juce_StringPairArray.h similarity index 100% rename from src/juce_core/text/juce_StringPairArray.h rename to src/text/juce_StringPairArray.h diff --git a/src/juce_core/text/juce_XmlDocument.cpp b/src/text/juce_XmlDocument.cpp similarity index 96% rename from src/juce_core/text/juce_XmlDocument.cpp rename to src/text/juce_XmlDocument.cpp index 5fa88c6fcd..e8877fa475 100644 --- a/src/juce_core/text/juce_XmlDocument.cpp +++ b/src/text/juce_XmlDocument.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/text/juce_XmlDocument.h b/src/text/juce_XmlDocument.h similarity index 100% rename from src/juce_core/text/juce_XmlDocument.h rename to src/text/juce_XmlDocument.h diff --git a/src/juce_core/text/juce_XmlElement.cpp b/src/text/juce_XmlElement.cpp similarity index 96% rename from src/juce_core/text/juce_XmlElement.cpp rename to src/text/juce_XmlElement.cpp index 20fa617861..5f17fd3872 100644 --- a/src/juce_core/text/juce_XmlElement.cpp +++ b/src/text/juce_XmlElement.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/text/juce_XmlElement.h b/src/text/juce_XmlElement.h similarity index 97% rename from src/juce_core/text/juce_XmlElement.h rename to src/text/juce_XmlElement.h index e8de362c2d..11b302aa95 100644 --- a/src/juce_core/text/juce_XmlElement.h +++ b/src/text/juce_XmlElement.h @@ -27,7 +27,7 @@ #define __JUCE_XMLELEMENT_JUCEHEADER__ #include "juce_String.h" -#include "../io/juce_OutputStream.h" +#include "../io/streams/juce_OutputStream.h" #include "../io/files/juce_File.h" diff --git a/src/juce_core/threads/juce_CriticalSection.h b/src/threads/juce_CriticalSection.h similarity index 100% rename from src/juce_core/threads/juce_CriticalSection.h rename to src/threads/juce_CriticalSection.h diff --git a/src/juce_core/threads/juce_InterProcessLock.cpp b/src/threads/juce_InterProcessLock.cpp similarity index 94% rename from src/juce_core/threads/juce_InterProcessLock.cpp rename to src/threads/juce_InterProcessLock.cpp index 722df24a07..fe6203ddff 100644 --- a/src/juce_core/threads/juce_InterProcessLock.cpp +++ b/src/threads/juce_InterProcessLock.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/threads/juce_InterProcessLock.h b/src/threads/juce_InterProcessLock.h similarity index 100% rename from src/juce_core/threads/juce_InterProcessLock.h rename to src/threads/juce_InterProcessLock.h diff --git a/src/juce_core/threads/juce_Process.h b/src/threads/juce_Process.h similarity index 100% rename from src/juce_core/threads/juce_Process.h rename to src/threads/juce_Process.h diff --git a/src/juce_core/threads/juce_ReadWriteLock.cpp b/src/threads/juce_ReadWriteLock.cpp similarity index 95% rename from src/juce_core/threads/juce_ReadWriteLock.cpp rename to src/threads/juce_ReadWriteLock.cpp index b684a0fb9c..3d7208f9b8 100644 --- a/src/juce_core/threads/juce_ReadWriteLock.cpp +++ b/src/threads/juce_ReadWriteLock.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/threads/juce_ReadWriteLock.h b/src/threads/juce_ReadWriteLock.h similarity index 100% rename from src/juce_core/threads/juce_ReadWriteLock.h rename to src/threads/juce_ReadWriteLock.h diff --git a/src/juce_core/threads/juce_ScopedLock.h b/src/threads/juce_ScopedLock.h similarity index 100% rename from src/juce_core/threads/juce_ScopedLock.h rename to src/threads/juce_ScopedLock.h diff --git a/src/juce_core/threads/juce_ScopedReadLock.h b/src/threads/juce_ScopedReadLock.h similarity index 100% rename from src/juce_core/threads/juce_ScopedReadLock.h rename to src/threads/juce_ScopedReadLock.h diff --git a/src/juce_core/threads/juce_ScopedTryLock.h b/src/threads/juce_ScopedTryLock.h similarity index 100% rename from src/juce_core/threads/juce_ScopedTryLock.h rename to src/threads/juce_ScopedTryLock.h diff --git a/src/juce_core/threads/juce_ScopedWriteLock.h b/src/threads/juce_ScopedWriteLock.h similarity index 100% rename from src/juce_core/threads/juce_ScopedWriteLock.h rename to src/threads/juce_ScopedWriteLock.h diff --git a/src/juce_core/threads/juce_Thread.cpp b/src/threads/juce_Thread.cpp similarity index 95% rename from src/juce_core/threads/juce_Thread.cpp rename to src/threads/juce_Thread.cpp index a8ff9a2bae..de9c1250e1 100644 --- a/src/juce_core/threads/juce_Thread.cpp +++ b/src/threads/juce_Thread.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_Thread.h" #include "juce_ScopedLock.h" -#include "../basics/juce_Time.h" +#include "../core/juce_Time.h" #include "../containers/juce_VoidArray.h" // these functions are implemented in the platform-specific code. diff --git a/src/juce_core/threads/juce_Thread.h b/src/threads/juce_Thread.h similarity index 100% rename from src/juce_core/threads/juce_Thread.h rename to src/threads/juce_Thread.h diff --git a/src/juce_core/threads/juce_ThreadPool.cpp b/src/threads/juce_ThreadPool.cpp similarity index 95% rename from src/juce_core/threads/juce_ThreadPool.cpp rename to src/threads/juce_ThreadPool.cpp index 4ccac426aa..85450a771d 100644 --- a/src/juce_core/threads/juce_ThreadPool.cpp +++ b/src/threads/juce_ThreadPool.cpp @@ -23,13 +23,13 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_ThreadPool.h" -#include "../basics/juce_Time.h" +#include "../core/juce_Time.h" //============================================================================== diff --git a/src/juce_core/threads/juce_ThreadPool.h b/src/threads/juce_ThreadPool.h similarity index 100% rename from src/juce_core/threads/juce_ThreadPool.h rename to src/threads/juce_ThreadPool.h diff --git a/src/juce_core/threads/juce_TimeSliceThread.cpp b/src/threads/juce_TimeSliceThread.cpp similarity index 95% rename from src/juce_core/threads/juce_TimeSliceThread.cpp rename to src/threads/juce_TimeSliceThread.cpp index 6aabd6f2e1..4a310a5815 100644 --- a/src/juce_core/threads/juce_TimeSliceThread.cpp +++ b/src/threads/juce_TimeSliceThread.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_core/threads/juce_TimeSliceThread.h b/src/threads/juce_TimeSliceThread.h similarity index 100% rename from src/juce_core/threads/juce_TimeSliceThread.h rename to src/threads/juce_TimeSliceThread.h diff --git a/src/juce_core/threads/juce_WaitableEvent.h b/src/threads/juce_WaitableEvent.h similarity index 100% rename from src/juce_core/threads/juce_WaitableEvent.h rename to src/threads/juce_WaitableEvent.h diff --git a/src/juce_appframework/application/juce_DeletedAtShutdown.cpp b/src/utilities/juce_DeletedAtShutdown.cpp similarity index 90% rename from src/juce_appframework/application/juce_DeletedAtShutdown.cpp rename to src/utilities/juce_DeletedAtShutdown.cpp index dc3906636f..d48162ae97 100644 --- a/src/juce_appframework/application/juce_DeletedAtShutdown.cpp +++ b/src/utilities/juce_DeletedAtShutdown.cpp @@ -23,14 +23,14 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_DeletedAtShutdown.h" -#include "../../juce_core/containers/juce_VoidArray.h" -#include "../../juce_core/threads/juce_ScopedLock.h" -#include "juce_Application.h" +#include "../containers/juce_VoidArray.h" +#include "../threads/juce_ScopedLock.h" +#include "../application/juce_Application.h" //============================================================================== diff --git a/src/juce_appframework/application/juce_DeletedAtShutdown.h b/src/utilities/juce_DeletedAtShutdown.h similarity index 95% rename from src/juce_appframework/application/juce_DeletedAtShutdown.h rename to src/utilities/juce_DeletedAtShutdown.h index 35310ecef7..e665754a8d 100644 --- a/src/juce_appframework/application/juce_DeletedAtShutdown.h +++ b/src/utilities/juce_DeletedAtShutdown.h @@ -26,7 +26,7 @@ #ifndef __JUCE_DELETEDATSHUTDOWN_JUCEHEADER__ #define __JUCE_DELETEDATSHUTDOWN_JUCEHEADER__ -#include "../../juce_core/containers/juce_Array.h" +#include "../containers/juce_Array.h" //============================================================================== diff --git a/src/juce_appframework/documents/juce_FileBasedDocument.cpp b/src/utilities/juce_FileBasedDocument.cpp similarity index 95% rename from src/juce_appframework/documents/juce_FileBasedDocument.cpp rename to src/utilities/juce_FileBasedDocument.cpp index 267f3470e9..4be283ac0e 100644 --- a/src/juce_appframework/documents/juce_FileBasedDocument.cpp +++ b/src/utilities/juce_FileBasedDocument.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE @@ -31,7 +31,7 @@ BEGIN_JUCE_NAMESPACE #include "../gui/components/mouse/juce_MouseCursor.h" #include "../gui/components/windows/juce_AlertWindow.h" #include "../gui/components/filebrowser/juce_FileChooser.h" -#include "../../juce_core/text/juce_LocalisedStrings.h" +#include "../text/juce_LocalisedStrings.h" //============================================================================== diff --git a/src/juce_appframework/documents/juce_FileBasedDocument.h b/src/utilities/juce_FileBasedDocument.h similarity index 97% rename from src/juce_appframework/documents/juce_FileBasedDocument.h rename to src/utilities/juce_FileBasedDocument.h index bcbbf2392d..a234602351 100644 --- a/src/juce_appframework/documents/juce_FileBasedDocument.h +++ b/src/utilities/juce_FileBasedDocument.h @@ -26,7 +26,7 @@ #ifndef __JUCE_FILEBASEDDOCUMENT_JUCEHEADER__ #define __JUCE_FILEBASEDDOCUMENT_JUCEHEADER__ -#include "../../juce_core/io/files/juce_File.h" +#include "../io/files/juce_File.h" #include "../events/juce_ChangeBroadcaster.h" diff --git a/src/juce_appframework/application/juce_PropertiesFile.cpp b/src/utilities/juce_PropertiesFile.cpp similarity index 92% rename from src/juce_appframework/application/juce_PropertiesFile.cpp rename to src/utilities/juce_PropertiesFile.cpp index 3f089bd658..70ff717a58 100644 --- a/src/juce_appframework/application/juce_PropertiesFile.cpp +++ b/src/utilities/juce_PropertiesFile.cpp @@ -23,20 +23,20 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE #include "juce_PropertiesFile.h" -#include "../../juce_core/io/files/juce_FileInputStream.h" -#include "../../juce_core/io/files/juce_FileOutputStream.h" -#include "../../juce_core/io/streams/juce_BufferedInputStream.h" -#include "../../juce_core/io/streams/juce_SubregionStream.h" -#include "../../juce_core/io/streams/juce_GZIPDecompressorInputStream.h" -#include "../../juce_core/io/streams/juce_GZIPCompressorOutputStream.h" -#include "../../juce_core/basics/juce_SystemStats.h" -#include "../../juce_core/text/juce_XmlDocument.h" +#include "../io/files/juce_FileInputStream.h" +#include "../io/files/juce_FileOutputStream.h" +#include "../io/streams/juce_BufferedInputStream.h" +#include "../io/streams/juce_SubregionStream.h" +#include "../io/streams/juce_GZIPDecompressorInputStream.h" +#include "../io/streams/juce_GZIPCompressorOutputStream.h" +#include "../core/juce_SystemStats.h" +#include "../text/juce_XmlDocument.h" //============================================================================== diff --git a/src/juce_appframework/application/juce_PropertiesFile.h b/src/utilities/juce_PropertiesFile.h similarity index 96% rename from src/juce_appframework/application/juce_PropertiesFile.h rename to src/utilities/juce_PropertiesFile.h index c05e93bc38..d17a192a60 100644 --- a/src/juce_appframework/application/juce_PropertiesFile.h +++ b/src/utilities/juce_PropertiesFile.h @@ -26,8 +26,8 @@ #ifndef __JUCE_PROPERTIESFILE_JUCEHEADER__ #define __JUCE_PROPERTIESFILE_JUCEHEADER__ -#include "../../juce_core/io/files/juce_File.h" -#include "../../juce_core/containers/juce_PropertySet.h" +#include "../io/files/juce_File.h" +#include "../containers/juce_PropertySet.h" #include "../events/juce_Timer.h" #include "../events/juce_ChangeBroadcaster.h" diff --git a/src/juce_appframework/documents/juce_RecentlyOpenedFilesList.cpp b/src/utilities/juce_RecentlyOpenedFilesList.cpp similarity index 95% rename from src/juce_appframework/documents/juce_RecentlyOpenedFilesList.cpp rename to src/utilities/juce_RecentlyOpenedFilesList.cpp index de54febc86..577cc8181a 100644 --- a/src/juce_appframework/documents/juce_RecentlyOpenedFilesList.cpp +++ b/src/utilities/juce_RecentlyOpenedFilesList.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/documents/juce_RecentlyOpenedFilesList.h b/src/utilities/juce_RecentlyOpenedFilesList.h similarity index 96% rename from src/juce_appframework/documents/juce_RecentlyOpenedFilesList.h rename to src/utilities/juce_RecentlyOpenedFilesList.h index c389b2d1d4..32a04dac75 100644 --- a/src/juce_appframework/documents/juce_RecentlyOpenedFilesList.h +++ b/src/utilities/juce_RecentlyOpenedFilesList.h @@ -26,7 +26,7 @@ #ifndef __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ #define __JUCE_RECENTLYOPENEDFILESLIST_JUCEHEADER__ -#include "../../juce_core/io/files/juce_File.h" +#include "../io/files/juce_File.h" #include "../gui/components/menus/juce_PopupMenu.h" diff --git a/src/juce_appframework/documents/juce_SelectedItemSet.h b/src/utilities/juce_SelectedItemSet.h similarity index 100% rename from src/juce_appframework/documents/juce_SelectedItemSet.h rename to src/utilities/juce_SelectedItemSet.h diff --git a/src/juce_appframework/application/juce_SystemClipboard.h b/src/utilities/juce_SystemClipboard.h similarity index 94% rename from src/juce_appframework/application/juce_SystemClipboard.h rename to src/utilities/juce_SystemClipboard.h index 6c2e637700..926dfd1cc9 100644 --- a/src/juce_appframework/application/juce_SystemClipboard.h +++ b/src/utilities/juce_SystemClipboard.h @@ -26,7 +26,7 @@ #ifndef __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ #define __JUCE_SYSTEMCLIPBOARD_JUCEHEADER__ -#include "../../juce_core/text/juce_String.h" +#include "../text/juce_String.h" //============================================================================== diff --git a/src/juce_appframework/documents/juce_UndoManager.cpp b/src/utilities/juce_UndoManager.cpp similarity index 95% rename from src/juce_appframework/documents/juce_UndoManager.cpp rename to src/utilities/juce_UndoManager.cpp index fbe88de833..38685a6699 100644 --- a/src/juce_appframework/documents/juce_UndoManager.cpp +++ b/src/utilities/juce_UndoManager.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#include "../../juce_core/basics/juce_StandardHeader.h" +#include "../core/juce_StandardHeader.h" BEGIN_JUCE_NAMESPACE diff --git a/src/juce_appframework/documents/juce_UndoManager.h b/src/utilities/juce_UndoManager.h similarity index 96% rename from src/juce_appframework/documents/juce_UndoManager.h rename to src/utilities/juce_UndoManager.h index a1d4c6d314..45739ae085 100644 --- a/src/juce_appframework/documents/juce_UndoManager.h +++ b/src/utilities/juce_UndoManager.h @@ -26,9 +26,9 @@ #ifndef __JUCE_UNDOMANAGER_JUCEHEADER__ #define __JUCE_UNDOMANAGER_JUCEHEADER__ -#include "../../juce_core/text/juce_String.h" -#include "../../juce_core/containers/juce_OwnedArray.h" -#include "../../juce_core/text/juce_StringArray.h" +#include "../text/juce_String.h" +#include "../containers/juce_OwnedArray.h" +#include "../text/juce_StringArray.h" #include "../events/juce_ChangeBroadcaster.h" #include "juce_UndoableAction.h" diff --git a/src/juce_appframework/documents/juce_UndoableAction.h b/src/utilities/juce_UndoableAction.h similarity index 100% rename from src/juce_appframework/documents/juce_UndoableAction.h rename to src/utilities/juce_UndoableAction.h