From 424eb7f90976495bfda01b3a95adf116a19c4df5 Mon Sep 17 00:00:00 2001 From: Hicham HAOUARI Date: Thu, 27 Jan 2011 15:21:57 +0000 Subject: [PATCH] Initial import --- .gitignore | 1 + TMatrixFormatConversionProvider.java | 182 +++++++++++++++++++++++++++ sources | 1 + vorbisspi.spec | 84 +++++++++++++ 4 files changed, 268 insertions(+) create mode 100644 TMatrixFormatConversionProvider.java create mode 100644 vorbisspi.spec diff --git a/.gitignore b/.gitignore index e69de29..3c92601 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/vorbisspi1.0.3.tar.gz diff --git a/TMatrixFormatConversionProvider.java b/TMatrixFormatConversionProvider.java new file mode 100644 index 0000000..05dca90 --- /dev/null +++ b/TMatrixFormatConversionProvider.java @@ -0,0 +1,182 @@ +/* + * TMatrixFormatConversionProvider.java + */ + +/* + * Copyright (c) 1999, 2000 by Matthias Pfisterer + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +package org.tritonus.share.sampled.convert; + + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.HashMap; +import java.util.ArrayList; +import java.util.Iterator; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.spi.FormatConversionProvider; + +import org.tritonus.share.sampled.AudioFormats; +import org.tritonus.share.ArraySet; + +/** + * Base class for arbitrary formatConversionProviders. + * + * @author Matthias Pfisterer + */ + + +public abstract class TMatrixFormatConversionProvider + extends TSimpleFormatConversionProvider +{ + /* + * keys: source AudioFormat + * values: collection of possible target encodings + * + * Note that accessing values with get() is not appropriate, + * since the equals() method in AudioFormat is not overloaded. + * The hashtable is just used as a convenient storage + * organization. + */ + private Map m_targetEncodingsFromSourceFormat; + + + /* + * keys: source AudioFormat + * values: a Map that contains a mapping from target encodings + * (keys) to a collection of target formats (values). + * + * Note that accessing values with get() is not appropriate, + * since the equals() method in AudioFormat is not overloaded. + * The hashtable is just used as a convenient storage + * organization. + */ + private Map m_targetFormatsFromSourceFormat; + + + + protected TMatrixFormatConversionProvider( + List sourceFormats, + List targetFormats, + boolean[][] abConversionPossible) + { + super(sourceFormats, + targetFormats); + m_targetEncodingsFromSourceFormat = new HashMap(); + m_targetFormatsFromSourceFormat = new HashMap(); + + for (int nSourceFormat = 0; + nSourceFormat < sourceFormats.size(); + nSourceFormat++) + { + AudioFormat sourceFormat = (AudioFormat) sourceFormats.get(nSourceFormat); + List supportedTargetEncodings = new ArraySet(); + m_targetEncodingsFromSourceFormat.put(sourceFormat, supportedTargetEncodings); + Map targetFormatsFromTargetEncodings = new HashMap(); + m_targetFormatsFromSourceFormat.put(sourceFormat, targetFormatsFromTargetEncodings); + for (int nTargetFormat = 0; + nTargetFormat < targetFormats.size(); + nTargetFormat++) + { + AudioFormat targetFormat = (AudioFormat) targetFormats.get(nTargetFormat); + if (abConversionPossible[nSourceFormat][nTargetFormat]) + { + AudioFormat.Encoding targetEncoding = targetFormat.getEncoding(); + supportedTargetEncodings.add(targetEncoding); + Collection supportedTargetFormats = (Collection) targetFormatsFromTargetEncodings.get(targetEncoding); + if (supportedTargetFormats == null) + { + supportedTargetFormats = new ArraySet(); + targetFormatsFromTargetEncodings.put(targetEncoding, supportedTargetFormats); + } + supportedTargetFormats.add(targetFormat); + } + } + } + } + + + + public AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat) + { + Iterator iterator = m_targetEncodingsFromSourceFormat.entrySet().iterator(); + while (iterator.hasNext()) + { + Map.Entry entry = (Map.Entry) iterator.next(); + AudioFormat format = (AudioFormat) entry.getKey(); + if (AudioFormats.matches(format, sourceFormat)) + { + Collection targetEncodings = (Collection) entry.getValue(); + return (AudioFormat.Encoding[]) targetEncodings.toArray(EMPTY_ENCODING_ARRAY); + } + + } + return EMPTY_ENCODING_ARRAY; + } + + + + // TODO: this should work on the array returned by getTargetEncodings(AudioFormat) +/* + public boolean isConversionSupported(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat) + { + return isAllowedSourceFormat(sourceFormat) && + isTargetEncodingSupported(targetEncoding); + } +*/ + + + + public AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat) + { + Iterator iterator = m_targetFormatsFromSourceFormat.entrySet().iterator(); + while (iterator.hasNext()) + { + Map.Entry entry = (Map.Entry) iterator.next(); + AudioFormat format = (AudioFormat) entry.getKey(); + if (AudioFormats.matches(format, sourceFormat)) + { + Map targetEncodings = (Map) entry.getValue(); + Collection targetFormats = (Collection) targetEncodings.get(targetEncoding); + if (targetFormats != null) + { + return (AudioFormat[]) targetFormats.toArray(EMPTY_FORMAT_ARRAY); + } + else + { + return EMPTY_FORMAT_ARRAY; + } + } + + } + return EMPTY_FORMAT_ARRAY; + } + + +} + + + +/*** TMatrixFormatConversionProvider.java ***/ diff --git a/sources b/sources index e69de29..8a6cfd8 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +636675d1746a4e41e186f2203685a6a0 vorbisspi1.0.3.tar.gz diff --git a/vorbisspi.spec b/vorbisspi.spec new file mode 100644 index 0000000..96e8adf --- /dev/null +++ b/vorbisspi.spec @@ -0,0 +1,84 @@ +Name: vorbisspi +Version: 1.0.3 +Release: 2%{?dist} +Summary: Java Service Provider Interface for the OGG Vorbis audio format + +Group: Development/Libraries +License: LGPLv2+ +URL: http://www.javazoom.net/vorbisspi/vorbisspi.html +Source0: http://www.javazoom.net/%{name}/sources/%{name}%{version}.tar.gz +# Sample class implementation removed from tritonus_share.jar currently shipped by fedora, +# but necessary to build this package +Source1: http://tritonus.cvs.sourceforge.net/viewvc/tritonus/tritonus/src/org/tritonus/share/sampled/convert/TMatrixFormatConversionProvider.java +BuildArch: noarch + +BuildRequires: jpackage-utils +BuildRequires: java-devel >= 1:1.6.0 +BuildRequires: ant +BuildRequires: tritonus +BuildRequires: jorbis + +Requires: jpackage-utils +Requires: java >= 1:1.6.0 +Requires: tritonus +Requires: jorbis + +%description +VorbisSPI is a Java Service Provider Interface that adds OGG Vorbis audio +format support to Java platform. It supports Icecast streaming. It is +based on JOrbis Java libraries. + +OGG Vorbis is a fully Open, non-proprietary, patent-and-royalty-free, +general-purpose compressed audio format for high quality (44.1-48.0kHz, +16+ bit, polyphonic) audio and music at fixed and variable bit rates from +16 to 128 Kbps/channel. This places Vorbis in the same class as audio +representations including MPEG-1 audio layer 3, MPEG-4 audio +(AAC and TwinVQ), and PAC. + +%package javadoc +Summary: Java docs for %{name} +Group: Documentation +Requires: jpackage-utils + +%description javadoc +This package contains the API documentation for %{name}. + +%prep +%setup -q -n VorbisSPI%{version} +# Make sure to remove all prebuilt classes and jars +find . \( -name '*.class' -o -name '*.jar' \) -exec rm -rf '{}' \; +# Remove the docs dir if it is already there +[ -d docs ] && rm -rf docs +# Fix end of line encoding +sed -i 's|\r||g' *.txt + +# Put the sample class where it should be +cp -p %{SOURCE1} src/javazoom/spi/vorbis/sampled/convert + +%build +%ant all -Dtritonusjar=%{_libdir}/tritonus/tritonus_share.jar \ + -Djorbisjar=$(build-classpath jorbis) \ + -Doggjar=$(build-classpath jogg) + +%install +install -Dpm 644 %{name}%{version}.jar $RPM_BUILD_ROOT%{_javadir}/%{name}.jar +mkdir -p $RPM_BUILD_ROOT%{_javadocdir}/%{name} +cp -rp docs $RPM_BUILD_ROOT%{_javadocdir}/%{name} + + +%files +%defattr(-,root,root,-) +%doc LICENSE.txt README.txt +%{_javadir}/%{name}.jar + +%files javadoc +%defattr(-,root,root,-) +%doc LICENSE.txt +%{_javadocdir}/%{name} + +%changelog +* Tue Jan 25 2011 Hicham HAOUARI - 1.0.3-2 +- Spec cleanup per https://bugzilla.redhat.com/show_bug.cgi?id=664615#c2 + +* Mon Dec 20 2010 Hicham HAOUARI - 1.0.3-1 +- Initial package for Fedora