[gstreamer-java] fix factory and format plus factor out swt as subpackage

Levente Farkas lfarkas at fedoraproject.org
Sat Aug 7 16:17:20 UTC 2010


commit 04bfbfae8c8ea58b15645c6142640c9f7f8fe77c
Author: Farkas Levente <lfarkas at eagle.lfarkas.org>
Date:   Sat Aug 7 18:16:33 2010 +0200

    fix factory and format plus factor out swt as subpackage

 gstreamer-java-caps.patch    |   10 ++++++
 gstreamer-java-factory.patch |   72 ++++++++++++++++++++++++++++++++++++++++++
 gstreamer-java-format.patch  |   57 +++++++++++++++++++++++++++++++++
 gstreamer-java.spec          |   54 ++++++++++++++++++++++++-------
 sources                      |    2 +-
 5 files changed, 181 insertions(+), 14 deletions(-)
---
diff --git a/gstreamer-java-caps.patch b/gstreamer-java-caps.patch
new file mode 100644
index 0000000..c663fce
--- /dev/null
+++ b/gstreamer-java-caps.patch
@@ -0,0 +1,10 @@
+diff -up ./src/org/gstreamer/lowlevel/GstCapsAPI.java.memory ./src/org/gstreamer/lowlevel/GstCapsAPI.java
+--- ./src/org/gstreamer/lowlevel/GstCapsAPI.java.memory	2009-12-28 15:06:04.000000000 +0100
++++ ./src/org/gstreamer/lowlevel/GstCapsAPI.java	2010-08-01 01:39:45.301853003 +0200
+@@ -106,5 +106,5 @@ public interface GstCapsAPI extends com.
+    
+     GType gst_static_caps_get_type();
+     /* static_caps_get returns a static Caps reference - do not deref */
+-    Caps gst_static_caps_get(GstStaticCapsStruct static_caps);
++    @CallerOwnsReturn Caps gst_static_caps_get(GstStaticCapsStruct static_caps);
+ }
diff --git a/gstreamer-java-factory.patch b/gstreamer-java-factory.patch
new file mode 100644
index 0000000..4e79147
--- /dev/null
+++ b/gstreamer-java-factory.patch
@@ -0,0 +1,72 @@
+diff -up ./src/org/gstreamer/ElementFactory.java.factory ./src/org/gstreamer/ElementFactory.java
+--- ./src/org/gstreamer/ElementFactory.java.factory	2010-08-01 11:27:20.000000000 +0200
++++ ./src/org/gstreamer/ElementFactory.java	2010-08-07 17:44:28.436108250 +0200
+@@ -25,10 +25,12 @@ import java.util.logging.Level;
+ import java.util.logging.Logger;
+ 
+ import org.gstreamer.elements.DecodeBin;
++import org.gstreamer.elements.DecodeBin2;
+ import org.gstreamer.elements.FakeSink;
+ import org.gstreamer.elements.FakeSrc;
+ import org.gstreamer.elements.FileSrc;
+ import org.gstreamer.elements.PlayBin;
++import org.gstreamer.elements.PlayBin2;
+ import org.gstreamer.elements.TypeFind;
+ import org.gstreamer.lowlevel.GstCapsAPI;
+ import org.gstreamer.lowlevel.GstElementFactoryAPI;
+@@ -124,7 +126,9 @@ public class ElementFactory extends Plug
+      * @return The list of {@link StaticPadTemplate}
+      */
+     public List<StaticPadTemplate> getStaticPadTemplates() {
++        logger.entering("ElementFactory", "getStaticPadTemplates");
+         GList glist = gst.gst_element_factory_get_static_pad_templates(this);
++        logger.log(DEBUG, "gst.gst_element_factory_get_static_pad_templates returned: " + glist);
+         List<StaticPadTemplate> templates = new ArrayList<StaticPadTemplate>();
+         GList next = glist;
+         while (next != null) {
+@@ -180,14 +184,16 @@ public class ElementFactory extends Plug
+     @SuppressWarnings("serial")
+     private static final Map<String, Class<? extends Element>> typeMap
+         = new HashMap<String, Class<? extends Element>>() {{
+-        put("playbin", PlayBin.class);
+-        put("decodebin", DecodeBin.class);
+-        put("typefind", TypeFind.class);
+-        put("fakesrc", FakeSrc.class);
+-        put("fakesink", FakeSink.class);
+-        put("filesrc", FileSrc.class);
+-        put("appsrc", AppSrc.class);
+-        put("appsink", AppSink.class);
++            put("appsink",    AppSink.class);
++            put("appsrc",     AppSrc.class);
++            put("decodebin",  DecodeBin.class);
++            put("decodebin2", DecodeBin2.class);
++            put("fakesink",   FakeSink.class);
++            put("fakesrc",    FakeSrc.class);
++            put("filesrc",    FileSrc.class);
++            put("playbin",    PlayBin.class);
++            put("playbin2",   PlayBin2.class);
++            put("typefind",   TypeFind.class);
+     }};
+     @SuppressWarnings("unchecked")
+     private static Element elementFor(Pointer ptr, String factoryName) {
+diff -up ./test/org/gstreamer/ElementFactoryTest.java.factory ./test/org/gstreamer/ElementFactoryTest.java
+--- ./test/org/gstreamer/ElementFactoryTest.java.factory	2010-08-01 11:27:18.000000000 +0200
++++ ./test/org/gstreamer/ElementFactoryTest.java	2010-08-07 17:45:21.646002200 +0200
+@@ -130,8 +130,7 @@ public class ElementFactoryTest {
+         }
+         return ref.get() == null;
+     }
+-    // gst_element_factory_find returns objects with a ref_count of 2, so the proxy never gets GC'd
+-    //@Test
++    @Test
+     public void testGarbageCollection() throws Throwable {
+         ElementFactory factory = ElementFactory.find("fakesrc");
+         assertNotNull("Could not locate fakesrc factory", factory);
+@@ -139,7 +138,6 @@ public class ElementFactoryTest {
+         factory = null;
+         assertTrue("Factory not garbage collected", waitGC(ref));
+     }
+-    
+     @Test
+     public void testMakeGarbageCollection() throws Throwable {
+         Element e = ElementFactory.make("fakesrc", "test");
diff --git a/gstreamer-java-format.patch b/gstreamer-java-format.patch
new file mode 100644
index 0000000..c46058f
--- /dev/null
+++ b/gstreamer-java-format.patch
@@ -0,0 +1,57 @@
+diff -ur /home/lfarkas/rpm/BUILD/gstreamer-java/src/org/gstreamer/elements/RGBDataFileSink.java ./src/org/gstreamer/elements/RGBDataFileSink.java
+--- /home/lfarkas/rpm/BUILD/gstreamer-java/src/org/gstreamer/elements/RGBDataFileSink.java	2010-05-03 16:25:55.000000000 +0200
++++ ./src/org/gstreamer/elements/RGBDataFileSink.java	2010-06-27 22:21:38.249747135 +0200
+@@ -24,6 +24,7 @@
+ import java.util.concurrent.ScheduledExecutorService;
+ import com.sun.jna.Pointer;
+ 
++import org.gstreamer.Format;
+ import org.gstreamer.Gst;
+ import org.gstreamer.ClockTime;
+ import org.gstreamer.Buffer;
+@@ -90,8 +91,18 @@
+ 
+         // Building pipeline.
+         source = (AppSrc)ElementFactory.make("appsrc", "source");
+-        source.set("is-live", true);
+-        source.set("format", 3); // GST_FORMAT_TIME = 3
++        
++        source.setLive(true);
++        
++        // Using either BUFFERS or TIME doesn't seem
++        // to make a difference, but BUFFERS make more
++        // sense with the buffer timestamping. See comments
++        // in pushBuffer() method below.
++        source.setFormat(Format.BUFFERS);
++        //source.setFormat(Format.TIME);
++        
++        source.setLatency(-1, 0);
++        source.setSize(-1);
+         source.setCaps(videoCaps);
+         source.setMaxBytes(QUEUED_FRAMES * sourceWidth * sourceHeight * 4);
+ 
+@@ -259,10 +270,21 @@
+                 Buffer buf = bufferList.remove(0);
+                 frameCount++;
+ 
+-                long f = frameCount * NANOS_PER_FRAME;
+                 buf.setCaps(videoCaps);
+-                buf.setTimestamp(ClockTime.fromNanos(f));
+-                buf.setDuration(ClockTime.fromNanos(NANOS_PER_FRAME));
++                
++                // For some reason this duration and timestamp setting works 
++                // with all encoders I tried so far (theora, x264, dirac),
++                // although doesn't make much sense (frame duration 1 nano?)...
++                buf.setTimestamp(ClockTime.fromNanos(frameCount));
++                buf.setDuration(ClockTime.fromNanos(1));
++                
++                // ... this other one, which is logically correc, doesn't work for
++                // theora (frames are dropped for no apparent reason each 
++                // two seconds):
++                //long f = frameCount * NANOS_PER_FRAME;
++                //buf.setTimestamp(ClockTime.fromNanos(f));
++                //buf.setDuration(ClockTime.fromNanos(NANOS_PER_FRAME));
++                
+                 source.pushBuffer(buf);
+                 buf.dispose();
+             }
diff --git a/gstreamer-java.spec b/gstreamer-java.spec
index 7e4df61..9a3c1e5 100644
--- a/gstreamer-java.spec
+++ b/gstreamer-java.spec
@@ -3,13 +3,16 @@
 Summary:	Java interface to the gstreamer framework
 Name:		gstreamer-java
 Version:	1.4
-Release:	2%{?dist}
+Release:	3%{?dist}
 License:	LGPLv3 and CC-BY-SA
 Group:		System Environment/Libraries
 URL:		http://code.google.com/p/gstreamer-java/
 # zip -r ~/rpm/SOURCES/gstreamer-java-src-1.4.zip gstreamer-java -x \*/.svn*
 Source:		http://gstreamer-java.googlecode.com/files/%{name}-src-%{version}.zip
 Patch1:		%{name}-swt.patch
+Patch10:        %{name}-caps.patch
+Patch11:        %{name}-factory.patch
+Patch12:        %{name}-format.patch
 BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 %if 0%{?fedora} > 12 || 0%{?rhel} > 5
 BuildArch:	noarch
@@ -38,6 +41,17 @@ BuildRequires:	libswt3-gtk2
 An unofficial/alternative set of java bindings for the gstreamer multimedia
 framework.
 
+%ifarch %{arch_with_swt} noarch
+%package swt
+Summary:	SWT support for %{name}
+Group:		System Environment/Libraries
+Requires:	%{name} = %{version}-%{release}
+Requires:	libswt3-gtk2
+
+%description swt
+This package contains SWT support for %{name}.
+%endif
+
 %package javadoc
 Summary:	Javadocs for %{name}
 Group:		Documentation
@@ -50,22 +64,25 @@ This package contains the API documentation for %{name}.
 
 %prep
 %setup -q -n %{name}
+%ifarch %{arch_with_swt} noarch
+%patch1 -p1 -b .swt
+# replace included jar files with the system packaged version SWT
+sed -i -e "s,\(file.reference.swt.jar=\).*,\1$(find %{_libdir} -name swt*.jar 2>/dev/null|sort|head -1)," \
+	nbproject/project.properties
+%endif
+%patch10 -p1 -b .caps
+%patch11 -p1 -b .factory
+%patch12 -p1 -b .format
 cp -p src/org/freedesktop/tango/COPYING COPYING.CC-BY-SA
 
 # remove prebuild binaries
-find . -name '*.jar' -exec rm {} \;
+find . -name '*.jar' -delete
 
-# replace included jar files with the system packaged version (JNA, SWT, GStreamer plugins dir)
+# replace included jar files with the system packaged version JNA and GStreamer plugins dir
 sed -i -e "s,\(file.reference.jna.jar=\).*,\1$(build-classpath jna)," \
-	-e "s,\(run.jvmargs=-Djna.library.path=\).*,\1%{_libdir}:$(pkg-config --variable=pluginsdir gstreamer-0.10)," \
+	-e "s,\(run.jvmargs=-Djna.library.path=\).*,\1%{_libdir}:$(pkg-config --variable=pluginsdir gstreamer-0.10) -Djava.util.logging.config.file=logging.properties," \
 	nbproject/project.properties
 
-%patch1 -p1
-sed -i -e "s,\(file.reference.swt.jar=\).*,\1$(find %{_libdir} -name swt*.jar 2>/dev/null|sort|head -1)," \
-	nbproject/project.properties
-
-
-%build
 # from Fedora-9 we've got ant-1.7.0 and junit4 while on older releases and EPEL
 # have only ant-1.6.5 and junit-3.8.2 therefore on older releases and EPEL we
 # have small hacks like ant-1.6.5 need packagenames for javadoc task
@@ -77,8 +94,10 @@ sed -i -e "s,\(file.reference.junit4.jar=\).*,\1$(build-classpath junit4)," \
 sed -i -e 's,\(<javadoc destdir="${dist.javadoc.dir}" source="${javac.source}"\),\1 packagenames="*",' \
 	build.xml
 %endif
-ant jar
-ant javadoc
+
+
+%build
+ant jar javadoc
 
 
 %if 0%{?fedora} >= 9 || 0%{?rhel} > 5
@@ -102,14 +121,23 @@ rm -rf %{buildroot}
 
 %files
 %defattr(-,root,root,-)
-%{_javadir}/*
+%{_javadir}/%{name}.jar
 %doc CHANGES COPYING* tutorials/*
 
+%ifarch %{arch_with_swt} noarch
+%files swt
+%defattr(-,root,root,-)
+%{_javadir}/%{name}-swt.jar
+%endif
+
 %files javadoc
 %defattr(-,root,root,-)
 %{_javadocdir}/%{name}
 
 %changelog
+* Sat Jul 31 2010 Levente Farkas <lfarkas at lfarkas.org> - 1.4-3
+- add SWT subpackage and disable getStaticPadTemplates test
+
 * Tue Jul 27 2010 Levente Farkas <lfarkas at lfarkas.org> - 1.4-2
 - fix spec file typo
 
diff --git a/sources b/sources
index 19f3153..002d989 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b9fab4acd2bc30507415ec6d84ff0ed3  gstreamer-java-src-1.4.zip
+2da7ff74fcc0aba1b66a01dfb9ac7ff7  gstreamer-java-src-1.4.zip


More information about the scm-commits mailing list