diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..3d47f986c41db29ec6dc0d5036bf760b3a1cf366 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea/ +target/ +.settings/ +*.iml +.project +.classpath \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..242cbd97ba7c376598c40d1cc6c649b403a101bf --- /dev/null +++ b/pom.xml @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <!-- Inherited Icy Parent POM --> + <parent> + <groupId>org.bioimageanalysis.icy</groupId> + <artifactId>parent-pom-plugin</artifactId> + <version>1.0.3</version> + </parent> + + <!-- Project Information --> + <artifactId>jmf</artifactId> + <version>2.1.1</version> + + <packaging>jar</packaging> + + <name>JMF</name> + <description>JMF (JavaMedia Framework) Library for Icy.</description> + <url>http://icy.bioimageanalysis.org/plugin/jave-media-framework-library/</url> + <inceptionYear>2020</inceptionYear> + + <organization> + <name>Institut Pasteur</name> + <url>https://pasteur.fr</url> + </organization> + + <licenses> + <license> + <name>GNU GPLv3</name> + <url>https://www.gnu.org/licenses/gpl-3.0.en.html</url> + <distribution>repo</distribution> + </license> + </licenses> + + <developers> + <developer> + <id>sdallongeville</id> + <name>Stéphane Dallongeville</name> + <url>https://research.pasteur.fr/fr/member/stephane-dallongeville/</url> + <roles> + <role>founder</role> + <role>lead</role> + <role>architect</role> + <role>developer</role> + <role>debugger</role> + <role>tester</role> + <role>maintainer</role> + <role>support</role> + </roles> + </developer> + </developers> + + <!-- Project properties --> + <properties> + + </properties> + + <!-- Project build configuration --> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <version>3.1.1</version> + <executions> + <execution> + <id>${project.artifactId}-fetch</id> + <phase>generate-sources</phase> + <goals> + <goal>unpack-dependencies</goal> + </goals> + <configuration> + <includeArtifactIds>jmf</includeArtifactIds> + <outputDirectory>${project.build.outputDirectory}</outputDirectory> + <stripVersion>true</stripVersion> + <excludeTransitive>true</excludeTransitive> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + + <!-- List of project's dependencies --> + <dependencies> + <!-- The core of Icy --> + <dependency> + <groupId>org.bioimageanalysis.icy</groupId> + <artifactId>icy-kernel</artifactId> + </dependency> + + <dependency> + <groupId>javax.media</groupId> + <artifactId>jmf</artifactId> + <version>2.1.1e</version> + </dependency> + </dependencies> + + <!-- Icy Maven repository (to find parent POM) --> + <repositories> + <repository> + <id>icy</id> + <name>Icy's Nexus</name> + <url>https://icy-nexus.pasteur.fr/repository/Icy/</url> + </repository> + </repositories> +</project> diff --git a/src/main/java/plugins/stef/library/JMFLibraryPlugin.java b/src/main/java/plugins/stef/library/JMFLibraryPlugin.java new file mode 100644 index 0000000000000000000000000000000000000000..1e7cf5ed444dbc36ef37f8076e0fbc76afbaf20b --- /dev/null +++ b/src/main/java/plugins/stef/library/JMFLibraryPlugin.java @@ -0,0 +1,14 @@ +package plugins.stef.library; + +import icy.plugin.abstract_.Plugin; +import icy.plugin.interface_.PluginLibrary; + +/** + * Icy wrapper for the JMF (Java Media Framework) library. + * + * @author Stephane Dallongeville + */ +public class JMFLibraryPlugin extends Plugin implements PluginLibrary +{ + // +} diff --git a/src/main/resources/CustomizerHelp.html b/src/main/resources/CustomizerHelp.html new file mode 100644 index 0000000000000000000000000000000000000000..e99c9828035b5ac473a0afd13a79d96ee2d2a463 --- /dev/null +++ b/src/main/resources/CustomizerHelp.html @@ -0,0 +1,88 @@ + +<a name="1"> +<h3> Main Functionalities </h3> +</a> +This page lists the main functionalities provided by JMF 2.X. With JMF2.X, +one could playback the media coming from stored data, live captured data or +real-time stream received from network. Besides, one could also broadcast +the media over network or export the media to a local file. + +<table border=1> +<tr><td rowspan=3> <b>Media Source</b></td><td>Media files</td><td> source media comes +from stored files.</td></tr> +<tr><td>RTP receive</td><td>source media is the real-time stream received from +network via RTP/RTSP.</td></tr> +<tr><td>Capture</td><td> source media comes from the capture device, e.g., +microphone or camera.</td></tr> +<tr><td rowspan=3> <b>Media Sink</b> </td><td>Play</td><td> playback, rendering +the source media to speaker, monitor, etc. </td></tr> +<tr><td> RTP Transmit</td><td> Broadcast the source media across network via +RTP/RTSP </td></tr> +<tr><td>Transcode</td><td> Export the source media into a file. </td></tr> +<tr><td rowspan=2><b>Optional Component</b></td><td>Player Bean</td><td>JMF player as a java bean component </td></tr> +</tr><td>Demo & Tool</td><td> <b>JMStudio</b> is an application demo bundled in JMF2.X. <b>Please note </b> that JMStudio touches a lot of areas of JMF, once it is selected, it will increase the size of target jar file. <br> <b>JMFRegistry</b> is a useful tool bundled in JMF2.X to manage JMF plugin registry.</td></tr> +</table> +<br><br> + +<b>Option to generate two target jar files </b> is useful if JMF is deployed via <b>JavaWebStart</b>. It will create two target jar files: core_custom.jar contains all the core classes and plugin_custom.jar contains all the plugable classes. Then, you have to include both jar files into your classpath. +<br><br> + + +<a name="2"> +<h3> Protocol </h3> +</a> + +This page lists the protocols supported by JMF2.X. +<table border=1> +<tr><td>javasound</td><td>Protocol for sound capture, which relies on JavaSound/JDK1.3 </td></tr> +<tr><td>VFW</td><td>Video for Window. It is a protocol for video capture on Windows platform </td></tr> +<tr><td>SunVideo</td><td> protocol for video capture on solaris, using SunVideo +capture card. </td></tr> +<tr><td>SunVideo+</td><td>protocol for video capture on solaris, using SunVideo Plus catpure card. </td></tr> +<tr><td>Cloneable/Merging DataSource</td><td>Protocols used to clone data source, and merge multiple tracks</td></tr> +</table> +<br> +<br> + +<a name="3"> +<h3> Stored Media Format </h3> +</a> +This page lists the media formats supported by JMF2.X. +<br> MIDI and RMF rely on JavaSound/JDK1.3. +<br> CDAudio is only supported on Windows platform. +<br> + +<a name="4"> +<h3> Multiplexer </h3> +</a> +This page lists available audio/video multiplexers needed when transcoding. +<br> + +<a name="5"> +<h3> Codec </h3> +</a> +This page lists the Audio/Video codecs supported by JMF2.X. +<table border=1> +<tr><td>IMA4_MS is the Microsoft version of IMA4.</td></tr> +<tr><td>GSM_MS is the Microsoft version of GSM.</td></tr> +<tr><td>JD_xxx means java decoders </td></tr> +<tr><td>ND_xxx means native decoders </td></tr> +<tr><td>JE_xxx means java encoders </td></tr> +<tr><td>NE_xxx means native encoders </td></tr> +<tr><td>DRTP_xxx means depacketizers </td></tr> +<tr><td>PRTP_xxx means packetizers </td></tr> +<tr><td>The IV32 native decoder on windows platform uses VCM interface. </td></tr> +</table> +<br> + + +<a name="6"> +<h3> Renderer </h3> +</a> +This page lists available audio/video renderers needed when playing back. +<br><b>Javasound</b> renderer relies on JavaSound/JDK1.3. +<br><b>XLib</b> and <b>XIL</b> are native renderers on solaris platform. +<br><b>SunRay</b> is a renderer for SunRay device. +<br><b>DirectDraw</b> and <b>GDI</b> are native renderers on Windows platform. +<br> + diff --git a/src/main/resources/javax.sound.midi.spi.MidiDeviceProvider b/src/main/resources/javax.sound.midi.spi.MidiDeviceProvider new file mode 100644 index 0000000000000000000000000000000000000000..dcbd1cc2bc581001d798d0e159c5df0a49a75565 --- /dev/null +++ b/src/main/resources/javax.sound.midi.spi.MidiDeviceProvider @@ -0,0 +1,4 @@ +# Providers for midi devices +com.sun.media.sound.MixerSynthProvider +com.sun.media.sound.MixerSequencerProvider +com.sun.media.sound.MidiOutDeviceProvider diff --git a/src/main/resources/javax.sound.midi.spi.MidiFileReader b/src/main/resources/javax.sound.midi.spi.MidiFileReader new file mode 100644 index 0000000000000000000000000000000000000000..2daf82731a6dd7f0545b827562d256844afd8d72 --- /dev/null +++ b/src/main/resources/javax.sound.midi.spi.MidiFileReader @@ -0,0 +1,3 @@ +# Providers for midi sequences +com.sun.media.sound.StandardMidiFileReader +com.sun.media.sound.RmfFileReader diff --git a/src/main/resources/javax.sound.midi.spi.MidiFileWriter b/src/main/resources/javax.sound.midi.spi.MidiFileWriter new file mode 100644 index 0000000000000000000000000000000000000000..bb74df72e1ae26b8394d9b0d403499b75eb7b1f8 --- /dev/null +++ b/src/main/resources/javax.sound.midi.spi.MidiFileWriter @@ -0,0 +1,2 @@ +# Providers for Midi file writing +com.sun.media.sound.StandardMidiFileWriter diff --git a/src/main/resources/javax.sound.midi.spi.SoundbankReader b/src/main/resources/javax.sound.midi.spi.SoundbankReader new file mode 100644 index 0000000000000000000000000000000000000000..85a8af274f326d2e1d2fb48193685e7b1a608e66 --- /dev/null +++ b/src/main/resources/javax.sound.midi.spi.SoundbankReader @@ -0,0 +1,2 @@ +# Providers for Soundbanks +com.sun.media.sound.HsbParser diff --git a/src/main/resources/javax.sound.sampled.spi.AudioFileReader b/src/main/resources/javax.sound.sampled.spi.AudioFileReader new file mode 100644 index 0000000000000000000000000000000000000000..db1cd3044f69e092066c6ba68e7741f260167124 --- /dev/null +++ b/src/main/resources/javax.sound.sampled.spi.AudioFileReader @@ -0,0 +1,4 @@ +# Providers for audio file reading +com.sun.media.sound.AuFileReader +com.sun.media.sound.AiffFileReader +com.sun.media.sound.WaveFileReader diff --git a/src/main/resources/javax.sound.sampled.spi.AudioFileWriter b/src/main/resources/javax.sound.sampled.spi.AudioFileWriter new file mode 100644 index 0000000000000000000000000000000000000000..bd84a769a3600924b5e515be65f3c0e3dd528f23 --- /dev/null +++ b/src/main/resources/javax.sound.sampled.spi.AudioFileWriter @@ -0,0 +1,4 @@ +# Providers for writing audio files +com.sun.media.sound.AuFileWriter +com.sun.media.sound.AiffFileWriter +com.sun.media.sound.WaveFileWriter diff --git a/src/main/resources/javax.sound.sampled.spi.FormatConversionProvider b/src/main/resources/javax.sound.sampled.spi.FormatConversionProvider new file mode 100644 index 0000000000000000000000000000000000000000..7f452444c64b83700a30ad8d5e0978bb3d675d53 --- /dev/null +++ b/src/main/resources/javax.sound.sampled.spi.FormatConversionProvider @@ -0,0 +1,4 @@ +# Providers for FormatConversion +com.sun.media.sound.UlawCodec +com.sun.media.sound.AlawCodec +com.sun.media.sound.PCMtoPCMCodec diff --git a/src/main/resources/javax.sound.sampled.spi.MixerProvider b/src/main/resources/javax.sound.sampled.spi.MixerProvider new file mode 100644 index 0000000000000000000000000000000000000000..68a0879bfa923936ef4def51f82dbc2d08e9646c --- /dev/null +++ b/src/main/resources/javax.sound.sampled.spi.MixerProvider @@ -0,0 +1,4 @@ +# Provider for the Headspace Mixer +com.sun.media.sound.HeadspaceMixerProvider +com.sun.media.sound.SimpleInputDeviceProvider +com.sun.media.sound.SimpleOutputDeviceProvider diff --git a/src/main/resources/jmf.png b/src/main/resources/jmf.png new file mode 100644 index 0000000000000000000000000000000000000000..f6be9379ecc42be14ca87daa8932f6e3a18b2afd Binary files /dev/null and b/src/main/resources/jmf.png differ