# RCP und JMF PlugIn Registrierung



## freaksta (9. Sep 2008)

Hallo zusammen!

ich arbeite an einer Videoschnittsoftware die auf der RCP basiert. Dabei verwende ich zur Medienverarbeitung JMF. Dieses hat eine Schwachstelle, denn es kann nicht wirklich viele Codecs verwenden. Um diese Lücke zu schließen, gibt es diverse PlugIns (FOBS4JMF und MP3 PlugIn bspw). In allen Installationsanleitungen heisst es, dass man diese Plugins mittels JMStudio systemweit bekannt machen kann und JMF dann den Einsatz der gleichen handhabt. Soweit so gut und funktioniert prima.

Leider ignoriert mir die RCP diese Geschichten. JMF ist bisher als PlugIn aus den betreffenden JAR´s definiert worden und lässt sich auch einwandfrei ansprechen. Nun versuche ich im Moment, dass ich das FOBS4JMF Plugin innerhalb der RCP zum laufen zu bekomme. Der Gedanke war nun folgender: Aus der Source von FOBS4JMF wiederum ein Plugin definieren und es dann mittels dem JMF PlugInManager bekannt machen. Irgendwie komme ich dabei aber auf keinen grünen Ast...

...hat das schonmal jemand in irgendeiner Art und Weise getestet / probiert und wenn möglich geschafft?!


----------



## foobar (9. Sep 2008)

Benutz doch FMJ, das lässt sich bestimmt leichter integrieren: http://fmj-sf.net/


----------



## freaksta (9. Sep 2008)

Hm, eine Umstellung auf FMJ ist glaube ich nicht so sinnvoll...zum einen ist das Projekt noch in der Entwicklung, und zum anderen ist das ja nur eine Problemverschiebung, weil ich auch da mal in die Lage kommen kann zusätzliche PlugIns reinzuladen...

...also JMF als Basis sollte schon beibehalten werden.


----------



## foobar (9. Sep 2008)

Hm, bekommt du denn eine ClassloadException oder was passiert?

Ich kenne den JMF PluginManager nicht, aber würde mal versuchen die abhängigen Libpugins als register-buddy zu deklarieren.
http://wiki.eclipse.org/index.php/Context_Class_Loader_Enhancements


----------



## freaksta (10. Sep 2008)

Hm, das wäre wohl auch mal eine Idee...im Moment verscuhe ich halt die betreffenden Teile, die in der jmf.properties hinzugefügt werden (ersichtlich in der Anwendung JMF Registry) per Hand hinzuzufügen, und zwar diese hier:

"com.omnividea.media.codec.video.NativeDecoder"
"com.omnividea.media.codec.video.JavaDecoder"
"com.omnividea.media.codec.audio.NativeDecoder"
"com.omnividea.media.renderer.videpenGLRenderer"
"com.omnividea.media.renderer.video.Java2DRenderer"
"com.omnividea.media.parser.video.Parser"

mit:


```
String[] clazzez = new String[] {
				"com.omnividea.media.codec.video.NativeDecoder",
				"com.omnividea.media.codec.video.JavaDecoder",
				"com.omnividea.media.codec.audio.NativeDecoder" };
		for (String clazz : clazzez) {
			Codec codec = (Codec)Class.forName(clazz).newInstance();
			Format[] in = codec.getSupportedInputFormats();
			Format[] out = codec.getSupportedOutputFormats(null);
			PlugInManager.addPlugIn(clazz, in, out, PlugInManager.CODEC);
			PlugInManager.commit();
		}
		
		String[] clazzez2 = new String[] {
				"com.omnividea.media.renderer.video.OpenGLRenderer",
				"com.omnividea.media.renderer.video.Java2DRenderer"};
		for (String clazz : clazzez2) {
			Renderer renderer = (Renderer)Class.forName(clazz).newInstance();
			Format[] in = renderer.getSupportedInputFormats();
			PlugInManager.addPlugIn(clazz, in, null, PlugInManager.RENDERER);
			PlugInManager.commit();
		}
		
		String[] clazzez3 = new String[] {
				"com.omnividea.media.parser.video.Parser"};
		for (String clazz : clazzez3) {
			Demultiplexer demux = (Demultiplexer)Class.forName(clazz).newInstance();
			Format[] in = demux.getSupportedInputContentDescriptors();
			PlugInManager.addPlugIn(clazz, in, null, PlugInManager.DEMULTIPLEXER);
			PlugInManager.commit();
		}
```

and this sysout:


```
//sysout before the exception...
Fobs4JMF - Native shared library found
Little Endian
AVCODEC: Constructor
OpenGL Renderer: cons
Fobs4JMF - Native shared library found
OpenGL Renderer: add Render Event
AVCODEC: close

//the file i want to play
file:/C:/sample.mpg
//foramt sysout
video.mpeg
//calling the manager to build the Player
javax.media.NoPlayerException: Cannot find a Player for: javax.media.protocol.URLDataSource@1082823
```


----------



## foobar (10. Sep 2008)

Das kann nicht funktionieren denn jedes Bundle hat seinen eigenen Classloader. Siehe meinen link oben.


----------



## freaksta (10. Sep 2008)

hm, ok, ich werd mir das dann nochmal vornehmen! danke dir auf jedenfall schonmal!


----------

