Author: michiel
Date: 2009-07-03 09:04:05 +0200 (Fri, 03 Jul 2009)
New Revision: 36532

Added:
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegRecognizer.java
Removed:
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/MimeType.java
Modified:
   mmbase/trunk/applications/streams/Makefile
   
mmbase/trunk/applications/streams/src/main/config/builders/streams/streamsources.fields.xml
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Analyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerLogger.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/ChainedAnalyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Recognizer.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
   
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
   
mmbase/trunk/applications/streams/src/main/resources/org/mmbase/streams/resources/createcaches.xsd
   
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
Log:
in->out, 'recognizer', details

Modified: mmbase/trunk/applications/streams/Makefile
===================================================================
--- mmbase/trunk/applications/streams/Makefile  2009-07-03 07:03:20 UTC (rev 
36531)
+++ mmbase/trunk/applications/streams/Makefile  2009-07-03 07:04:05 UTC (rev 
36532)
@@ -33,7 +33,12 @@
        mkdir -p results
        java org.mmbase.streams.transcoders.FFMpegTranscoder 
samples/mahnamahna.mpg  results/mahnamahna.h264
 
+test.recognize: samples/mahnamahna.mpg
+       java org.mmbase.streams.transcoders.FFMpegRecognizer 
samples/mahnamahna.mpg
+       java org.mmbase.streams.transcoders.FFMpegRecognizer samples/test.mp3
+       java org.mmbase.streams.transcoders.FFMpegRecognizer samples/test.jpeg
 
+
 transcode:
        java Transcode samples/mahnamahna.mpg  -o results/mahnamahna.avi
 

Modified: 
mmbase/trunk/applications/streams/src/main/config/builders/streams/streamsources.fields.xml
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/config/builders/streams/streamsources.fields.xml
 2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/config/builders/streams/streamsources.fields.xml
 2009-07-03 07:04:05 UTC (rev 36532)
@@ -33,6 +33,10 @@
     </datatype>
   </field>
 
+  <field name="mimetype">
+    <datatype base="eline" xmlns="http://www.mmbase.org/xmlns/datatypes"; />
+  </field>
+
   <field name="objecttype" state="virtual">
     <datatype base="objecttype" xmlns="http://www.mmbase.org/xmlns/datatypes";>
       <pattern value="audiostreamsources|videostreamsources|streamsources" />

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
       2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
       2009-07-03 07:04:05 UTC (rev 36532)
@@ -91,9 +91,15 @@
                         for (int i = 0; i <= ellist.getLength(); i++) {
                             if (ellist.item(i) instanceof Element) {
                                 Element el = (Element) ellist.item(i);
-                                if (el.getTagName().equals("transcoder")) {
+                                if (el.getTagName().equals("transcoder") || 
el.getTagName().equals("recognizer")) {
                                     String id = el.getAttribute("id");
-                                    Transcoder transcoder = (Transcoder) 
Instantiator.getInstanceWithSubElement(el, id);
+                                    Transcoder transcoder;
+                                    if (el.getTagName().equals("transcoder")) {
+                                        transcoder = (Transcoder) 
Instantiator.getInstanceWithSubElement(el, id);
+                                    } else {
+                                        Recognizer recognizer = (Recognizer) 
Instantiator.getInstanceWithSubElement(el);
+                                        transcoder = new 
RecognizerTranscoder(recognizer, id);
+                                    }
                                     String in = el.getAttribute("in");
                                     if (in.length() > 0) {
                                         transcoder.setInId(in);
@@ -111,6 +117,9 @@
                                             }
                                         }
                                     }
+                                    if (newList.containsKey(id)) {
+                                        LOG.warn("" + newList + " already 
contains an entry with id " + id);
+                                    }
                                     newList.put(id, def);
                                 } else if 
(el.getTagName().equals("localhost")) {
                                     int max = 
Integer.parseInt(el.getAttribute("max_simultaneous_transcoders"));
@@ -231,7 +240,7 @@
                         thisJob.setThread(Thread.currentThread());
                         int result = 0;
                         try {
-                            LOG.info("Using " + thisJob.clones);
+                            LOG.service("Using " + thisJob.clones);
                             for (final JobDefinition jd : thisJob) {
                                 logger.service("NOW doing " + jd);
                                 URI in = jd.getIn();
@@ -467,10 +476,18 @@
                             if (jd.transcoder.getInId() == null) {
                                 inURI = inFile.toURI();
                             } else {
-                                inURI = 
clones.get(jd.transcoder.getInId()).getOut();
+                                JobDefinition other = 
clones.get(jd.transcoder.getInId());
+                                if (other == null) {
+                                    logger.warn("No job definition with id '" 
+ jd.transcoder.getInId() + "' found");
+                                    inURI = null;
+                                } else {
+                                    inURI = other.getOut();
+                                }
                             }
-                            JobDefinition clone = new JobDefinition(jd, 
resultNode, inFile.toURI(), outFile.toURI());
-                            clones.put(id, clone);
+                            if (inURI != null) {
+                                JobDefinition clone = new JobDefinition(jd, 
resultNode, inURI, outFile.toURI());
+                                clones.put(id, clone);
+                            }
                         } else {
 
                             JobDefinition clone = new JobDefinition(jd, null, 
inFile.toURI(), null);
@@ -497,7 +514,7 @@
                     throw new UnsupportedOperationException();
                 }
                 public JobDefinition next() {
-                    if (current != null) {
+                    if (current != null && current.getResultNode() != null) {
                         File outFile = new File(FileServlet.getDirectory(), 
current.getResultNode().getStringValue("url").replace("/", File.separator));
                         current.getResultNode().setLongValue("filesize", 
outFile.length());
                         current.getResultNode().setIntValue("state",
@@ -524,7 +541,9 @@
                         }
                     }
                     busy++;
-                    current.getResultNode().setIntValue("state", 
State.BUSY.getValue());
+                    if (current.getResultNode() != null) {
+                        current.getResultNode().setIntValue("state", 
State.BUSY.getValue());
+                    }
                     return current;
                 }
 
@@ -560,7 +579,11 @@
                 }
             }
             final NodeManager caches = 
node.getCloud().getNodeManager(node.getNodeManager().getProperty("org.mmbase.streams.cachestype"));
-            return caches.createNode();
+            Node newNode =  caches.createNode();
+            newNode.setNodeValue("id", node);
+            newNode.setStringValue("key", key);
+            newNode.commit();
+            return newNode;
         }
 
 

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
      2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AbstractTranscoder.java
      2009-07-03 07:04:05 UTC (rev 36532)
@@ -11,6 +11,7 @@
 
 import org.mmbase.applications.media.Format;
 import org.mmbase.applications.media.Codec;
+import org.mmbase.applications.media.MimeType;
 import java.net.*;
 import java.lang.reflect.*;
 import java.io.*;

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Analyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Analyzer.java
        2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Analyzer.java
        2009-07-03 07:04:05 UTC (rev 36532)
@@ -28,6 +28,9 @@
      */
     int  getMaxLines();
 
+
+    void addLogger(Logger l);
+
     /**
      * Analyzes a line of logging of
      * @param l This line

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerLogger.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerLogger.java
  2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerLogger.java
  2009-07-03 07:04:05 UTC (rev 36532)
@@ -45,7 +45,7 @@
                 LOG.warn(e.getMessage(), e);
             }
         } else if (! commited) {
-            LOG.info(" " + source.getNumber() + " " + source.getChanged());
+            LOG.service(" " + source.getNumber() + " " + source.getChanged());
             if (source.isChanged()) {
                 source.commit();
             }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
   2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/AnalyzerUtils.java
   2009-07-03 07:04:05 UTC (rev 36532)
@@ -25,14 +25,18 @@
 
 public final class AnalyzerUtils {
 
-    private AnalyzerUtils() {
-        // no instances for this class
+    private static final Logger LOG = 
Logging.getLoggerInstance(AnalyzerUtils.class);
+
+
+    private final ChainedLogger log = new ChainedLogger(LOG);
+    AnalyzerUtils(Logger l) {
+        log.addLogger(l);
     }
 
-    private static final Logger log = 
Logging.getLoggerInstance(AnalyzerUtils.class);
 
 
-    public static  long getLength(String l) {
+
+    public  long getLength(String l) {
         String[] duration = l.split(":");
         int i = duration.length - 1;
         long len = (long) (Float.parseFloat(duration[i]) * 1000L); // secs
@@ -58,16 +62,16 @@
 
     private static final Pattern DURATION = Pattern.compile("\\s*Duration: 
(.*?), start: (.*?), bitrate: (.*?) kb/s.*");
 
-    public static boolean duration(String l, Node source, Node des) {
+    public boolean duration(String l, Node source, Node des) {
         Matcher m = DURATION.matcher(l);
         if (m.matches()) {
             Node fragment = source.getNodeValue("mediafragment");
             long length = getLength(m.group(1));
             source.setLongValue("length", length);
 
-            log.info("Duration: " + m.group(1));
-            log.info("Start: " + m.group(2));
-            log.info("BitRate: " + m.group(3));
+            log.debug("Duration: " + m.group(1));
+            log.debug("Start: " + m.group(2));
+            log.debug("BitRate: " + m.group(3));
             source.setIntValue("bitrate", 1000 * Integer.parseInt(m.group(3)));
             return true;
         } else {
@@ -75,23 +79,43 @@
         }
     }
 
-    public static void toVideo(Node source, Node dest) {
+    public void toVideo(Node source, Node dest) {
         Cloud cloud = source.getCloud();
         if (cloud != null) {
-            log.service("This is video, now converting type. source: " + 
source.getNumber() + " dest:" +  dest.getNumber());
+            log.service("This is video, now converting type. source: " + 
source.getNumber() + (dest != null ? " dest:" +  dest.getNumber() : ""));
             source.setNodeManager(cloud.getNodeManager("videostreamsources"));
-            
dest.setNodeManager(cloud.getNodeManager("videostreamsourcescaches"));
             source.commit();
-            dest.commit();
             assert 
source.getNodeManager().getName().equals("videostreamsources");
-            assert 
dest.getNodeManager().getName().equals("videostreamsourcescaches");
+            if (dest != null) {
+                
dest.setNodeManager(cloud.getNodeManager("videostreamsourcescaches"));
+                dest.commit();
+                assert 
dest.getNodeManager().getName().equals("videostreamsourcescaches");
+
+            }
+
         }
     }
+    public void toAudio(Node source, Node dest) {
+        Cloud cloud = source.getCloud();
+        if (cloud != null) {
+            log.service("This is audio, now converting type. source: " + 
source.getNumber() + (dest != null ? " dest:" +  dest.getNumber() : ""));
+            source.setNodeManager(cloud.getNodeManager("audiostreamsources"));
+            source.commit();
+            assert 
source.getNodeManager().getName().equals("audiostreamsources");
+            if (dest != null) {
+                
dest.setNodeManager(cloud.getNodeManager("audiostreamsourcescaches"));
+                dest.commit();
+                assert 
dest.getNodeManager().getName().equals("audiostreamsourcescaches");
 
+            }
 
+        }
+    }
+
+
     private static final Pattern VIDEO    = Pattern.compile(".*?\\sVideo: .*?, 
.*?, ([0-9]+)x([0-9]+).*?([0-9]+)\\s+kb/s.*");
 
-    public static boolean video(String l, Node source, Node dest) {
+    public boolean video(String l, Node source, Node dest) {
         Matcher m = VIDEO.matcher(l);
         if (m.matches()) {
             toVideo(source, dest);
@@ -104,7 +128,9 @@
             } else if (source.getIntValue("channels") == 1) {
                 source.setIntValue("channels", 2);
             }
-            dest.setIntValue("channels", source.getIntValue("channels"));
+            if (dest != null) {
+                dest.setIntValue("channels", source.getIntValue("channels"));
+            }
             source.setIntValue("width", Integer.parseInt(m.group(1)));
             source.setIntValue("height", Integer.parseInt(m.group(2)));
 

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/ChainedAnalyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/ChainedAnalyzer.java
 2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/ChainedAnalyzer.java
 2009-07-03 07:04:05 UTC (rev 36532)
@@ -33,6 +33,11 @@
             maxLines = a.getMaxLines();
         }
     }
+    public void addLogger(org.mmbase.util.logging.Logger l) {
+        for (Analyzer a : analyzers) {
+            a.addLogger(l);
+        }
+    }
 
     public    int  getMaxLines() {
         return maxLines;

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
   2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpeg2TheoraAnalyzer.java
   2009-07-03 07:04:05 UTC (rev 36532)
@@ -24,7 +24,7 @@
 public class FFMpeg2TheoraAnalyzer implements Analyzer {
 
 
-    private static final Logger log = 
Logging.getLoggerInstance(FFMpeg2TheoraAnalyzer.class);
+    private static final Logger LOG = 
Logging.getLoggerInstance(FFMpeg2TheoraAnalyzer.class);
 
 
     public int getMaxLines() {
@@ -40,15 +40,24 @@
     private double bits = -1;
     private long prevPos = 0;
 
+    private ChainedLogger log = new ChainedLogger(LOG);
 
+    private AnalyzerUtils util = new AnalyzerUtils(log);
+
+    public void addLogger(Logger logger) {
+        log.addLogger(logger);
+    }
+
+
+
     public void analyze(String l, Node source, Node des) {
         Cloud cloud = source.getCloud();
-        if (AnalyzerUtils.duration(l, source, des)) {
+        if (util.duration(l, source, des)) {
             length = source.getLongValue("length");
             log.info("Found length " + source);
             return;
         }
-        if (AnalyzerUtils.video(l, source, des)) {
+        if (util.video(l, source, des)) {
             log.info("Found video " + source);
             return;
         }
@@ -56,7 +65,7 @@
         {
             Matcher m = RESIZE.matcher(l);
             if (m.matches()) {
-                AnalyzerUtils.toVideo(source, des);
+                util.toVideo(source, des);
                 log.info("Found " + m);
                 source.setIntValue("width", Integer.parseInt(m.group(1)));
                 source.setIntValue("height", Integer.parseInt(m.group(2)));
@@ -69,7 +78,7 @@
                 Matcher n = NORESIZE.matcher(l);
                 if (n.matches()) {
                     log.info("Found " + m);
-                    AnalyzerUtils.toVideo(source, des);
+                    util.toVideo(source, des);
                     source.setIntValue("width", Integer.parseInt(n.group(1)));
                     source.setIntValue("height", Integer.parseInt(n.group(2)));
                     source.commit();
@@ -83,7 +92,7 @@
         {
             Matcher m = PROGRESS.matcher(l);
             if (m.matches()) {
-                long pos = AnalyzerUtils.getLength(m.group(1));
+                long pos = util.getLength(m.group(1));
                 long audioBitrate = Integer.parseInt(m.group(2));
                 long videoBitrate = Integer.parseInt(m.group(3));
                 bits += ((double) (audioBitrate + videoBitrate)) * ((double) 
pos - prevPos) * 1000;

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
  2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegAnalyzer.java
  2009-07-03 07:04:05 UTC (rev 36532)
@@ -24,26 +24,43 @@
 public class FFMpegAnalyzer implements Analyzer {
 
 
-    private static final Logger log = 
Logging.getLoggerInstance(FFMpegAnalyzer.class);
+    private static final Logger LOG = 
Logging.getLoggerInstance(FFMpegAnalyzer.class);
 
+    private final ChainedLogger log = new ChainedLogger(LOG);
 
+    private final AnalyzerUtils util = new AnalyzerUtils(log);
+
     public int getMaxLines() {
         return 100;
     }
 
+    public void addLogger(Logger logger) {
+        log.addLogger(logger);
+    }
+
     public void analyze(String l, Node source, Node des) {
         Cloud cloud = source.getCloud();
-        if (AnalyzerUtils.duration(l, source, des)) {
-            log.info("Found length " + source);
+        if (util.duration(l, source, des)) {
+            log.service("Found length " + source);
             return;
         }
-        if (AnalyzerUtils.video(l, source, des)) {
-            log.info("Found video " + source);
+        if (util.video(l, source, des)) {
+            log.service("Found video " + source);
             return;
         }
     }
 
     public void ready(Node sourceNode, Node destNode) {
+        if (sourceNode.isNull("bitrate")) {
+            log.info("This is an image");
+            // have to think of up of something
+        } else if (sourceNode.isNull("width")) {
+            log.info("This is audio");
+            util.toAudio(sourceNode, destNode);
+        } else {
+            log.info("This is video");
+            util.toVideo(sourceNode, destNode);
+        }
         //
     }
 

Added: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegRecognizer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegRecognizer.java
                                (rev 0)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegRecognizer.java
        2009-07-03 07:04:05 UTC (rev 36532)
@@ -0,0 +1,84 @@
+/*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+package org.mmbase.streams.transcoders;
+
+import org.mmbase.applications.media.*;
+import java.net.*;
+import java.io.*;
+import java.util.*;
+import org.mmbase.bridge.util.*;
+import org.mmbase.bridge.*;
+import org.mmbase.util.logging.*;
+import org.mmbase.util.externalprocess.*;
+import org.mmbase.util.WriterOutputStream;
+import java.util.regex.*;
+
+
+/**
+ *
+ * @author Michiel Meeuwissen
+ * @version $Id: FFMpegTranscoder.java 36518 2009-07-02 12:52:01Z michiel $
+ */
+public class FFMpegRecognizer implements Recognizer {
+
+    private static final Logger log = 
Logging.getLoggerInstance(FFMpegRecognizer.class);
+
+    private MimeType mimeType;
+
+    public MimeType getMimeType() {
+        return mimeType;
+    }
+    public void setMimeType(String s) {
+        mimeType = new MimeType(s);
+    }
+
+    public void analyze(URI in, Logger logger) throws Exception {
+        Writer writer = new LoggerWriter(logger, Level.SERVICE);
+        OutputStream outStream = new WriterOutputStream(writer, 
System.getProperty("file.encoding"));
+        //log.service("Calling (" + method + ") " + getCommand() + " " + 
Arrays.asList(getArguments()));
+        File inFile = new File(in.getPath());
+        CommandExecutor.execute(outStream, new CommandExecutor.Method(), 
"ffmpeg", new String[] {
+                "-i", inFile.toString(),
+            }
+            );
+    }
+
+
+    public FFMpegRecognizer clone() {
+        try {
+            return (FFMpegRecognizer) super.clone();
+        } catch (CloneNotSupportedException cnse) {
+            // I hate java
+            return null;
+        }
+    }
+
+    public String toString() {
+        return getClass().getName();
+    }
+
+
+    public static void main(String[] argv) throws Exception {
+        Logger logger = Logging.getLoggerInstance("RECOGNIZER");
+        logger.setLevel(Level.WARN);
+        Recognizer recognizer = new FFMpegRecognizer().clone();
+        Analyzer a = new FFMpegAnalyzer();
+        Node source = AnalyzerUtils.getTestNode();
+        ChainedLogger chain = new ChainedLogger(logger);
+        chain.addLogger(new AnalyzerLogger(a, source, null));
+        recognizer.analyze(new File(argv[0]).toURI(), chain);
+        a.ready(source, null);
+        //chain.addLogger(new AnalyzerLogger(a, source, dest));
+        //chain.setLevel(Level.DEBUG);
+        System.out.println("" + source.getNodeManager() + " " + source);
+
+
+    }
+}

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
        2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/FFMpegTranscoder.java
        2009-07-03 07:04:05 UTC (rev 36532)
@@ -24,12 +24,21 @@
  * @author Michiel Meeuwissen
  * @version $Id$
  */
-...@settings({"format"})
+...@settings({"format", "acodec", "vcodec"})
 public class FFMpegTranscoder extends CommandTranscoder {
 
     private static final Logger log = 
Logging.getLoggerInstance(FFMpegTranscoder.class);
 
+    String acodec = null;
+    String vcodec = null;
 
+    public void setAcodec(String a) {
+        acodec = a;
+    }
+    public void setVcodec(String v) {
+        vcodec = v;
+    }
+
     public FFMpegTranscoder(String id) {
         super(id);
         format = Format.AVI;
@@ -49,10 +58,22 @@
         File inFile = new File(in.getPath());
         File outFile = new File(out.getPath());
 
-        return new String[] { "-y",
-                              "-i", inFile.toString(),
-                              outFile.toString()
-        };
+        List<String> args = new ArrayList<String>();
+        args.add("-y");
+        if (acodec != null) {
+            args.add("-acodec");
+            args.add(acodec);
+        }
+        if (vcodec != null) {
+            args.add("-vcodec");
+            args.add(vcodec);
+        }
+        args.add("-i");
+        args.add(inFile.toString());
+
+        args.add(outFile.toString());
+
+        return args.toArray(new String[args.size()]);
     }
 
     private static final Pattern PROGRESS = Pattern.compile(".*time 
remaining.*");

Deleted: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/MimeType.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/MimeType.java
        2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/MimeType.java
        2009-07-03 07:04:05 UTC (rev 36532)
@@ -1,54 +0,0 @@
-/*
-
-This software is OSI Certified Open Source Software.
-OSI Certified is a certification mark of the Open Source Initiative.
-
-The license (Mozilla version 1.0) can be read at the MMBase site.
-See http://www.MMBase.org/license
-
-*/
-package org.mmbase.streams.transcoders;
-
-import org.mmbase.util.logging.*;
-import org.mmbase.bridge.*;
-
-
-/**
- *
- * @author Michiel Meeuwissen
- */
-
-public class MimeType {
-
-    public static final String STAR = "*";
-    public static final MimeType ANY = new MimeType(STAR, STAR);
-
-    private final String type;
-    private final String subType;
-
-
-    public MimeType(String s) {
-        String[] m = s.split("/", 2);
-        type = m[0];
-        if (m.length > 1) {
-            subType = m[1];
-        } else {
-            subType = STAR;
-        }
-    }
-    public MimeType(String t, String s) {
-        type = t;
-        subType = s;
-    }
-
-    public String getType() {
-        return type;
-    }
-    public String getSubType() {
-        return subType;
-    }
-
-    public String toString() {
-        return type + "/" + subType;
-    }
-}

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Recognizer.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Recognizer.java
      2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Recognizer.java
      2009-07-03 07:04:05 UTC (rev 36532)
@@ -11,6 +11,7 @@
 
 import org.mmbase.util.logging.*;
 import java.net.*;
+import org.mmbase.applications.media.MimeType;
 
 
 /**

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
    2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/RecognizerTranscoder.java
    2009-07-03 07:04:05 UTC (rev 36532)
@@ -9,8 +9,7 @@
 */
 package org.mmbase.streams.transcoders;
 
-import org.mmbase.applications.media.Format;
-import org.mmbase.applications.media.Codec;
+import org.mmbase.applications.media.*;
 import java.net.*;
 import java.lang.reflect.*;
 import java.io.*;
@@ -30,12 +29,14 @@
 public class RecognizerTranscoder implements Transcoder {
 
     final Recognizer recognizer;
-    protected RecognizerTranscoder(Recognizer rec) {
+    final String id;
+    public RecognizerTranscoder(Recognizer rec, String id) {
         recognizer = rec;
+        this.id = id;
     }
 
     public String getId() {
-        return "";
+        return id;
     }
 
     protected boolean clone = false;
@@ -107,6 +108,11 @@
         }
     }
 
+    public String toString() {
+        return recognizer.toString();
+    }
 
 
+
+
 }

Modified: 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
      2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/java/org/mmbase/streams/transcoders/Transcoder.java
      2009-07-03 07:04:05 UTC (rev 36532)
@@ -11,8 +11,7 @@
 
 
 import java.net.*;
-import org.mmbase.applications.media.Format;
-import org.mmbase.applications.media.Codec;
+import org.mmbase.applications.media.*;
 import org.mmbase.util.logging.*;
 
 

Modified: 
mmbase/trunk/applications/streams/src/main/resources/org/mmbase/streams/resources/createcaches.xsd
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/resources/org/mmbase/streams/resources/createcaches.xsd
  2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/resources/org/mmbase/streams/resources/createcaches.xsd
  2009-07-03 07:04:05 UTC (rev 36532)
@@ -20,7 +20,7 @@
           <xsd:element ref="localhost" />
           <xsd:element ref="server"  />
         </xsd:choice>
-        <xsd:element ref="sourceanalyzer"   minOccurs="0" 
maxOccurs="unbounded" />
+        <xsd:element ref="recognizer" minOccurs="0" maxOccurs="unbounded" />
         <xsd:element ref="transcoder" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
       <xsd:attribute name="name"  type="xsd:string" />
@@ -33,7 +33,7 @@
         <xsd:element ref="class" minOccurs="1" maxOccurs="1" />
         <xsd:element ref="loganalyzer" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
-      <xsd:attribute name="id"        type="xsd:string" use="required" />
+      <xsd:attribute name="id"        type="xsd:ID" use="required" />
       <xsd:attribute name="in"        type="xsd:string" />
       <xsd:attribute name="mimetype"  type="xsd:string" />
     </xsd:complexType>

Modified: 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
===================================================================
--- 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
       2009-07-03 07:03:20 UTC (rev 36531)
+++ 
mmbase/trunk/applications/streams/src/main/webapp/mmbase/components/streams/fragment.trs.jspx
       2009-07-03 07:04:05 UTC (rev 36532)
@@ -22,7 +22,10 @@
           <jsp:text>${_.state}</jsp:text>
           ${_.dimension}
         </td>
-        <td><a href="${_.URL}">${_.URL}</a></td>
+        <td>
+          <a href="${_.URL}">${_.URL}</a>
+          ${_.mimeType}
+        </td>
         <c:choose>
           <c:when test="${_.main}">
             <td colspan="2">

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to