summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerkan Kaba <serkan@gentoo.org>2008-10-29 20:22:21 +0000
committerSerkan Kaba <serkan@gentoo.org>2008-10-29 20:22:21 +0000
commit8777b08195d7271e97cfe4e10323248524bed168 (patch)
treedb980cae76b4852e5c0371e7ea697f6e33995999 /media-video/jubler
parentVersion bump to 2.05 (diff)
downloadgentoo-2-8777b08195d7271e97cfe4e10323248524bed168.tar.gz
gentoo-2-8777b08195d7271e97cfe4e10323248524bed168.tar.bz2
gentoo-2-8777b08195d7271e97cfe4e10323248524bed168.zip
Version bump that works with newer ffmpeg. Fixes bug #218091, #242946. Thanks to Luca Barbato <lu_zero@gentoo.org>, Alexis Ballier <aballier@gentoo.org> for help.
(Portage version: 2.2_rc12/cvs/Linux 2.6.25-gentoo-r7 x86_64)
Diffstat (limited to 'media-video/jubler')
-rw-r--r--media-video/jubler/ChangeLog11
-rw-r--r--media-video/jubler/files/jubler-3.9.6-ffmpegfix.patch155
-rw-r--r--media-video/jubler/files/jubler-3.9.6.patch180
-rw-r--r--media-video/jubler/jubler-3.9.6.ebuild82
4 files changed, 427 insertions, 1 deletions
diff --git a/media-video/jubler/ChangeLog b/media-video/jubler/ChangeLog
index adc2553961aa..53cbbf433f10 100644
--- a/media-video/jubler/ChangeLog
+++ b/media-video/jubler/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for media-video/jubler
# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-video/jubler/ChangeLog,v 1.20 2008/07/18 22:53:23 betelgeuse Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-video/jubler/ChangeLog,v 1.21 2008/10/29 20:22:21 serkan Exp $
+
+*jubler-3.9.6 (29 Oct 2008)
+
+ 29 Oct 2008; Serkan Kaba <serkan@gentoo.org>
+ +files/jubler-3.9.6-ffmpegfix.patch, +files/jubler-3.9.6.patch,
+ +jubler-3.9.6.ebuild:
+ Version bump that works with newer ffmpeg. Fixes bug #218091, #242946.
+ Thanks to Luca Barbato <lu_zero@gentoo.org>, Alexis Ballier
+ <aballier@gentoo.org> for help.
18 Jul 2008; Petteri Räty <betelgeuse@gentoo.org> jubler-3.4.1.ebuild,
jubler-3.9.0.ebuild:
diff --git a/media-video/jubler/files/jubler-3.9.6-ffmpegfix.patch b/media-video/jubler/files/jubler-3.9.6-ffmpegfix.patch
new file mode 100644
index 000000000000..c712cf97dcfc
--- /dev/null
+++ b/media-video/jubler/files/jubler-3.9.6-ffmpegfix.patch
@@ -0,0 +1,155 @@
+--- Jubler-3.9.6/resources/ffdecode/decodeframe.c 2008-08-10 20:15:55.000000000 +0300
++++ jubler/resources/ffdecode/decodeframe.c 2008-10-29 06:46:11.000000000 +0200
+@@ -39,19 +39,23 @@
+ #include "defaults.h"
+ #include "utilities.h"
+
++#define MAXSIZE 16383
++
++
+ AVPicture *decodeFrame(JNIEnv * env, jobject this, const char *input_filename, jlong timepos, jint *width, jint *height, jfloat resize);
+ int file_info(JNIEnv * env, jobject this, char *input_filename);
++void storenumb (jbyte * data, int number);
+
+ static int sws_flags = SWS_BICUBIC;
+
+
+-JNIEXPORT jintArray JNICALL Java_com_panayotis_jubler_media_preview_decoders_FFMPEG_grabFrame(JNIEnv * env, jobject this, jstring video, jlong time, jfloat resize) {
++JNIEXPORT jbyteArray JNICALL Java_com_panayotis_jubler_media_preview_decoders_FFMPEG_grabFrame(JNIEnv * env, jobject this, jstring video, jlong time, jfloat resize) {
+ /* Pointers for c-like strings */
+ const char *video_c;
+
+ /* Here we'll store the frame for java */
+- jintArray matrix = NULL;
+- jint* matrixdata = NULL;
++ jbyteArray matrix = NULL;
++ jbyte* matrixdata = NULL;
+
+ /* Frame raw data */
+ AVPicture* pict;
+@@ -65,18 +69,20 @@
+ if (pict) {
+
+ // make array
+- matrix = (*env)->NewIntArray(env, width*height+2); // 4 bytes per pixel (int) plus picture information
++ matrix = (*env)->NewByteArray(env, width*height*3+4); // 3 bytes per pixel + picture width information (2*2)
+
+ if (matrix) {
+ /* Find pointer for matrix size */
+- matrixdata = (*env)->GetIntArrayElements(env, matrix, 0);
++ matrixdata = (*env)->GetByteArrayElements(env, matrix, 0);
+
+- /* This is a trick: the first 2 elements are not video data but the size of the video */
+- matrixdata[0] = width;
+- matrixdata[1] = height;
+- memcpy(matrixdata+2, pict->data[0], 4*width*height);
++ /* This is a trick: the first 4 bytes are not video data but the size of the video */
++ storenumb(matrixdata, width);
++ storenumb(matrixdata+2, height);
++
++ /* Copy the actual color map to picture buffer */
++ memcpy(matrixdata+4, pict->data[0], 3*width*height);
+ /* Release the matrix data pointer */
+- (*env)->ReleaseIntArrayElements(env, matrix, matrixdata, 0);
++ (*env)->ReleaseByteArrayElements(env, matrix, matrixdata, 0);
+ } else {
+ DEBUG(env, this, "grabFrame", "Can not create array into memory.");
+ }
+@@ -206,14 +212,24 @@
+ av_free_packet(&pkt);
+ }
+ if (retflag != FALSE) {
+- *width = (ccx->width) * resize;
+- *height = (ccx->height) * resize;
++ /* Calculating new picture size and keep aspect ratio */
++ *width = (ccx->width) * resize;
++ *height = (ccx->height) * resize;
++ if (*width > MAXSIZE ) {
++ *height = ( (*height) * MAXSIZE) / (*width);
++ *width = MAXSIZE;
++ }
++ if (*height > MAXSIZE) {
++ *width = ( (*width) * MAXSIZE) / (*height);
++ *height = MAXSIZE;
++ }
++
+ DEBUG(env, this, "decodeFrame", "Resampling from (%i,%i) with resize factor %f to (%i,%i)",ccx->width, ccx->height, resize,*width, *height);
+ // Allocate an AVPicture
+- avpicture_alloc(pict, PIX_FMT_RGBA32, *width, *height);
++ avpicture_alloc(pict, PIX_FMT_RGB24, *width, *height);
+ swsContext = sws_getCachedContext(swsContext,
+ ccx->width, ccx->height, ccx->pix_fmt,
+- *width, *height, PIX_FMT_RGBA32,
++ *width, *height, PIX_FMT_RGB24,
+ sws_flags, NULL, NULL, NULL);
+ if (swsContext == NULL) {
+ DEBUG(env, this, "decodeFrame", "swscale context initialization failed.");
+@@ -264,5 +280,8 @@
+ return 0;
+ }
+
+-
++void storenumb (jbyte * data, int number) {
++ data[0] = number/128;
++ data[1] = number % 128;
++}
+
+--- Jubler-3.9.6/src/com/panayotis/jubler/media/preview/decoders/FFMPEG.java 2008-09-08 18:22:10.000000000 +0300
++++ jubler/src/com/panayotis/jubler/media/preview/decoders/FFMPEG.java 2008-10-29 06:46:03.000000000 +0200
+@@ -56,23 +56,8 @@
+ public final class FFMPEG extends NativeDecoder {
+ private static boolean library_is_present = false;
+
+- private static final int[] bitmasks;
+- private static final ColorModel cmodel;
+-
+-
+ static {
+ library_is_present = SystemFileFinder.loadLibrary("ffdecode");
+-
+- int[] LE_BITMASKS = {0xff0000, 0xff00, 0xff, 0xff000000};
+- int[] BE_BITMASKS = {0xff00, 0xff0000, 0xff000000, 0xff};
+-
+- if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) {
+- bitmasks = LE_BITMASKS;
+- cmodel = ColorModel.getRGBdefault();
+- } else {
+- bitmasks = BE_BITMASKS;
+- cmodel = new DirectColorModel(32, bitmasks[0], bitmasks[1], bitmasks[2], bitmasks[3]);
+- }
+ }
+
+ /** Creates a new instance of FFMPEG */
+@@ -82,13 +67,16 @@
+ if ( vfile==null || (!isDecoderValid()) ) return null;
+
+ time *= 1000000;
+- int[] frame = grabFrame(vfile.getPath(), (long)time, resize);
+- if (frame==null) return null;
+-
+- SinglePixelPackedSampleModel model = new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT,frame[0], frame[1], bitmasks);
+- DataBufferInt buffer = new DataBufferInt(frame, frame[0]*frame[1], 2);
+- WritableRaster ras = Raster.createWritableRaster(model, buffer, null);
+- BufferedImage image = new BufferedImage(cmodel, ras, true, null);
++ byte[] data = grabFrame(vfile.getPath(), (long)time, resize);
++ if (data==null) return null;
++
++ byte[] frame = new byte[data.length-4];
++ int X = data[0] * 128 + data[1];
++ int Y = data[2] * 128 + data[3];
++ System.arraycopy(data, 4, frame, 0, frame.length);
++ BufferedImage image = new BufferedImage(X, Y, BufferedImage.TYPE_3BYTE_BGR);
++ WritableRaster raster = image.getRaster();
++ raster.setDataElements(0, 0, X, Y, frame);
+ return image;
+ }
+
+@@ -152,7 +140,7 @@
+ }
+
+ /* Get the image for this timestamp */
+- private native int[] grabFrame(String video, long time, float resize);
++ private native byte[] grabFrame(String video, long time, float resize);
+
+ /* Create a wav file from the specified time stamps */
+ private native boolean createClip(String audio, String wav, long from, long to);
diff --git a/media-video/jubler/files/jubler-3.9.6.patch b/media-video/jubler/files/jubler-3.9.6.patch
new file mode 100644
index 000000000000..32cbeb3b601f
--- /dev/null
+++ b/media-video/jubler/files/jubler-3.9.6.patch
@@ -0,0 +1,180 @@
+diff -Nur Jubler-3.9.6/build.xml Jubler-3.9.6_patched/build.xml
+--- Jubler-3.9.6/build.xml 2008-09-07 02:05:23.000000000 +0300
++++ Jubler-3.9.6_patched/build.xml 2008-09-22 19:40:36.000000000 +0300
+@@ -69,22 +69,6 @@
+
+
+
+- <!-- Define new ant tasks -->
+-
+- <taskdef name="izpack"
+- onerror="report"
+- classpath="../../Tools/IzPack/standalone-compiler.jar"
+- classname="com.izforge.izpack.ant.IzPackTask"/>
+-
+- <taskdef name="launch4j"
+- onerror="report"
+- classpath="../../Tools/launch4j/launch4j.jar:../TOOLS/launch4j/lib/xstream.jar"
+- classname="net.sf.launch4j.ant.Launch4jTask"/>
+-
+- <taskdef name="jarbundler"
+- onerror="report"
+- classpath="../../Tools/jarbundler/jarbundler-1.9.jar"
+- classname="net.sourceforge.jarbundler.JarBundler" />
+
+
+
+@@ -397,9 +381,6 @@
+
+
+
+- <target name="-pre-compile">
+- <copy todir="src/com"> <fileset dir="resources/system/no_mac"/> </copy>
+- </target>
+ <target name="-post-compile">
+ <delete dir="build/classes/com/apple" failonerror="false"/>
+ <delete dir="src/com/apple" failonerror="false"/>
+diff -Nur Jubler-3.9.6/resources/ffdecode/Makefile Jubler-3.9.6_patched/resources/ffdecode/Makefile
+--- Jubler-3.9.6/resources/ffdecode/Makefile 2008-09-22 11:01:58.000000000 +0300
++++ Jubler-3.9.6_patched/resources/ffdecode/Makefile 2008-09-22 19:41:30.000000000 +0300
+@@ -12,9 +12,6 @@
+ # Name of the produced library
+ PROJ=ffdecode
+
+-# Paths of include files
+-JAVA_HOME=${shell /bin/sh ../system/findjava.sh -j}
+-
+ # Current Path
+ CPATH=${shell pwd}
+
+@@ -106,7 +103,6 @@
+ CCPREF_NOS=${shell echo ${CCPREF} | sed -e 's/-$$//g' }
+ DCONFIG=--with-mp4v2 --host=${CCPREF_NOS}
+
+-CC=${CCPREF}gcc
+ RANLIB=${CCPREF}ranlib
+
+ ifeq (${NOSTRIP},)
+@@ -121,7 +117,7 @@
+ .SUFFIXES:.o .c
+
+ .c.o:
+- ${CC} ${CFLAGS} ${GCCOPTS} -std=c99 -pedantic -O3 -Wall ${INCS} -I${JAVA_HOME}/include -I${JAVA_HOME}/include/${SYSTEM} -c -o $@ $?
++ ${CC} ${CFLAGS} ${GCCOPTS} -std=c99 -pedantic -Wall ${INCS} -I${JAVA_HOME}/include -I${JAVA_HOME}/include/${SYSTEM} -c -o $@ $?
+
+
+ develop:javacheck
+diff -Nur Jubler-3.9.6/src/com/panayotis/jubler/information/HelpBrowser.java Jubler-3.9.6_patched/src/com/panayotis/jubler/information/HelpBrowser.java
+--- Jubler-3.9.6/src/com/panayotis/jubler/information/HelpBrowser.java 2008-09-08 18:22:32.000000000 +0300
++++ Jubler-3.9.6_patched/src/com/panayotis/jubler/information/HelpBrowser.java 2008-09-22 19:42:04.000000000 +0300
+@@ -47,7 +47,7 @@
+
+ history = new ArrayList<String>();
+
+- String initpage = "file:"+SystemFileFinder.getJublerAppPath()+"/help/jubler-faq.html";
++ String initpage = "file:"+SystemFileFinder.getJublerAppPath()+"/../help/jubler-faq.html";
+ setPage(initpage);
+ history.add(initpage);
+
+diff -Nur Jubler-3.9.6/src/com/panayotis/jubler/Main.java Jubler-3.9.6_patched/src/com/panayotis/jubler/Main.java
+--- Jubler-3.9.6/src/com/panayotis/jubler/Main.java 2008-09-16 12:51:40.000000000 +0300
++++ Jubler-3.9.6_patched/src/com/panayotis/jubler/Main.java 2008-09-22 19:42:48.000000000 +0300
+@@ -105,17 +105,9 @@
+ /* Load arguments, in a mac way */
+ SystemDependent.initApplication();
+
+- /* Check current version in a new thread */
+- Thread versioncheck = new Thread() {
+- public void run() {
+- StaticJubler.initVersion();
+- }
+- };
+-
+ new Jubler(); // Display initial Jubler window
+ splash.dispose(); // Hide splash screen
+ loader.start(); // initialize loader
+- versioncheck.start();
+ }
+
+ static private MainSplash splash;
+diff -Nur Jubler-3.9.6/src/com/panayotis/jubler/os/SystemDependent.java Jubler-3.9.6_patched/src/com/panayotis/jubler/os/SystemDependent.java
+--- Jubler-3.9.6/src/com/panayotis/jubler/os/SystemDependent.java 2008-09-20 23:59:27.000000000 +0300
++++ Jubler-3.9.6_patched/src/com/panayotis/jubler/os/SystemDependent.java 2008-09-22 19:43:40.000000000 +0300
+@@ -25,10 +25,6 @@
+
+ import static com.panayotis.jubler.i18n.I18N._;
+
+-import com.apple.eawt.Application;
+-import com.apple.eawt.ApplicationAdapter;
+-import com.apple.eawt.ApplicationEvent;
+-
+ import com.panayotis.jubler.Jubler;
+ import com.panayotis.jubler.Main;
+ import com.panayotis.jubler.StaticJubler;
+@@ -113,10 +109,6 @@
+
+
+ public static void initApplication() {
+- /* In Linux this is a dummy function */
+- if (isMacOSX()) {
+- JublerApp japp = new JublerApp();
+- }
+ }
+
+
+@@ -342,35 +334,3 @@
+ }
+ }
+
+-
+-
+-class JublerApp extends Application {
+- public JublerApp() {
+- setEnabledPreferencesMenu(true);
+- addApplicationListener(new ApplicationHandler());
+- }
+-}
+-
+-class ApplicationHandler extends ApplicationAdapter {
+-
+- public ApplicationHandler() {}
+-
+- public void handleAbout(ApplicationEvent event) {
+- StaticJubler.showAbout();
+- event.setHandled(true);
+- }
+-
+- public void handlePreferences(ApplicationEvent event) {
+- Jubler.prefs.showPreferencesDialog();
+- event.setHandled(true);
+- }
+-
+- public void handleQuit(ApplicationEvent event) {
+- StaticJubler.prepareQuitAll();
+- event.setHandled(false);
+- }
+-
+- public void handleOpenFile(ApplicationEvent event) {
+- Main.asyncAddSubtitle(event.getFilename());
+- }
+-}
+diff -Nur Jubler-3.9.6/src/com/panayotis/jubler/os/SystemFileFinder.java Jubler-3.9.6_patched/src/com/panayotis/jubler/os/SystemFileFinder.java
+--- Jubler-3.9.6/src/com/panayotis/jubler/os/SystemFileFinder.java 2008-09-08 18:22:32.000000000 +0300
++++ Jubler-3.9.6_patched/src/com/panayotis/jubler/os/SystemFileFinder.java 2008-09-22 19:44:30.000000000 +0300
+@@ -58,15 +58,12 @@
+ }
+
+ public static boolean loadLibrary(String name) {
+- File libfile = findFile("lib"+pathseparator+System.mapLibraryName(name));
+- if (libfile!=null) {
+ try {
+- System.load(libfile.getAbsolutePath());
++ System.loadLibrary(name);
+ return true;
+ } catch (UnsatisfiedLinkError e) {
+ e.printStackTrace();
+ }
+- }
+ return false;
+ }
+
diff --git a/media-video/jubler/jubler-3.9.6.ebuild b/media-video/jubler/jubler-3.9.6.ebuild
new file mode 100644
index 000000000000..778688d966d8
--- /dev/null
+++ b/media-video/jubler/jubler-3.9.6.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-video/jubler/jubler-3.9.6.ebuild,v 1.1 2008/10/29 20:22:21 serkan Exp $
+
+inherit gnome2 eutils java-pkg-2 java-ant-2 toolchain-funcs
+
+MY_PN=${PN/#j/J}
+DESCRIPTION="Java subtitle editor"
+HOMEPAGE="http://www.jubler.org/"
+SRC_URI="mirror://sourceforge/${PN}/${MY_PN}-src-${PV}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="mplayer nls spell"
+
+RDEPEND=">=virtual/jre-1.5
+ >=media-video/ffmpeg-0.4.9_p20080326
+ mplayer? ( media-video/mplayer )
+ spell?
+ (
+ app-text/aspell
+ >=dev-java/zemberek-2.0
+ )"
+
+DEPEND=">=virtual/jdk-1.5
+ media-video/ffmpeg
+ app-text/docbook-sgml-utils
+ dev-util/pkgconfig
+ nls? ( sys-devel/gettext )"
+
+S=${WORKDIR}/${MY_PN}-${PV}
+
+pkg_setup() {
+ if use spell && ! built_with_use dev-java/zemberek linguas_tr; then
+ die "Zemberek should be built with Turkish language support"
+ fi
+ if use mplayer && ! built_with_use media-video/mplayer srt; then
+ msg="media-video/mplayer needs to be built with the srt use flag"
+ eerror ${msg}
+ die ${msg}
+ fi
+ java-pkg-2_pkg_setup
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+ epatch "${FILESDIR}/${P}.patch"
+ epatch "${FILESDIR}/${P}-ffmpegfix.patch"
+ chmod +x resources/installers/linux/iconinstall
+}
+
+src_compile() {
+ java-pkg_filter-compiler ecj-3.2
+ eant $(use nls && echo i18n) jar faq || die "eant failed"
+ cp -v dist/help/jubler-faq.html build/classes/help || die "cp failed"
+ cd resources/ffdecode || die
+ CC=$(tc-getCC) NOSTRIP=true emake linuxdyn || die "make failed"
+}
+
+src_install() {
+ java-pkg_dojar dist/Jubler.jar
+ use spell && java-pkg_register-dependency zemberek zemberek2-cekirdek.jar
+ use spell && java-pkg_register-dependency zemberek zemberek2-tr.jar
+ java-pkg_doso resources/ffdecode/libffdecode.so
+ doicon resources/installers/linux/jubler.png
+ domenu resources/installers/linux/jubler.desktop
+
+ DESTDIR="${D}" eant linuxdesktopintegration
+ rm -vr "${D}/usr/share/menu" || die
+
+ java-pkg_dolauncher jubler --main com.panayotis.jubler.Main
+ doman resources/installers/linux/jubler.1
+ insinto /usr/share/jubler/help
+ doins dist/help/*
+}
+
+pkg_preinst() {
+ gnome2_pkg_preinst
+ java-pkg-2_pkg_preinst
+}