Author: michiel
Date: 2009-05-15 16:15:34 +0200 (Fri, 15 May 2009)
New Revision: 35200
Added:
speeltuin/mihxil/streams/src/docbook/
speeltuin/mihxil/streams/src/main/
speeltuin/mihxil/streams/src/main/java/
speeltuin/mihxil/streams/src/main/java/Transcode.java
speeltuin/mihxil/streams/src/main/java/org/
speeltuin/mihxil/streams/src/main/resources/
speeltuin/mihxil/streams/src/main/resources/org/
speeltuin/mihxil/streams/src/main/resources/org/mmbase/
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/
speeltuin/mihxil/streams/src/main/webapp/
speeltuin/mihxil/streams/src/main/webapp/mmbase/
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
Removed:
speeltuin/mihxil/streams/blocks/
speeltuin/mihxil/streams/config/
speeltuin/mihxil/streams/documentation/
speeltuin/mihxil/streams/src/Transcode.java
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
speeltuin/mihxil/streams/src/org/
Log:
Converted to standard maven directory structure
Deleted: speeltuin/mihxil/streams/src/Transcode.java
===================================================================
--- speeltuin/mihxil/streams/src/Transcode.java 2009-05-15 14:10:49 UTC (rev
35199)
+++ speeltuin/mihxil/streams/src/Transcode.java 2009-05-15 14:15:34 UTC (rev
35200)
@@ -1,746 +0,0 @@
-/*
- * @(#)Transcode.java 1.6 01/03/13
- *
- * Copyright (c) 1999-2001 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
- * modify and redistribute this software in source and binary code form,
- * provided that i) this copyright notice and license appear on all copies of
- * the software; and ii) Licensee does not utilize the software in a manner
- * which is disparaging to Sun.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
- * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
- * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
- * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
- * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
- * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
- * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
- * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
- * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGES.
- *
- * This software is not designed or intended for use in on-line control of
- * aircraft, air traffic, aircraft navigation or aircraft communications; or in
- * the design, construction, operation or maintenance of any nuclear
- * facility. Licensee represents and warrants that it will not use or
- * redistribute the Software for such purposes.
- */
-
-import java.awt.*;
-import java.util.Vector;
-import java.io.File;
-import javax.media.*;
-import javax.media.control.TrackControl;
-import javax.media.control.QualityControl;
-import javax.media.Format;
-import javax.media.format.*;
-import javax.media.datasink.*;
-import javax.media.protocol.*;
-import javax.media.protocol.DataSource;
-import java.io.IOException;
-import com.sun.media.format.WavAudioFormat;
-
-
-/**
- * A sample program to transcode an input source to an output location
- * with different data formats.
- */
-public class Transcode implements ControllerListener, DataSinkListener {
-
- /**
- * Given a source media locator, destination media locator and
- * an array of formats, this method will transcode the source to
- * the dest into the specified formats.
- */
- public boolean doIt(MediaLocator inML, MediaLocator outML, Format fmts[],
- int start, int end) {
-
- Processor p;
-
- try {
- System.err.println("- create processor for: " + inML);
- p = Manager.createProcessor(inML);
- } catch (Exception e) {
- System.err.println("Yikes! Cannot create a processor from the
given url: " + e);
- return false;
- }
-
- p.addControllerListener(this);
-
- // Put the Processor into configured state.
- p.configure();
- if (!waitForState(p, p.Configured)) {
- System.err.println("Failed to configure the processor.");
- return false;
- }
-
- // Set the output content descriptor based on the media locator.
- setContentDescriptor(p, outML);
-
- // Program the tracks to the given output formats.
- if (!setTrackFormats(p, fmts))
- return false;
-
- // We are done with programming the processor. Let's just
- // realize the it.
- p.realize();
- if (!waitForState(p, p.Realized)) {
- System.err.println("Failed to realize the processor.");
- return false;
- }
-
- // Set the JPEG quality to .5.
- setJPEGQuality(p, 0.5f);
-
- // Now, we'll need to create a DataSink.
- DataSink dsink;
- if ((dsink = createDataSink(p, outML)) == null) {
- System.err.println("Failed to create a DataSink for the given
output MediaLocator: " + outML);
- return false;
- }
-
- dsink.addDataSinkListener(this);
- fileDone = false;
-
- // Set the start time if there's one set.
- if (start > 0)
- p.setMediaTime(new Time((double)start));
-
- // Set the stop time if there's one set.
- if (end > 0)
- p.setStopTime(new Time((double)end));
-
- System.err.println("start transcoding...");
-
- // OK, we can now start the actual transcoding.
- try {
- p.start();
- dsink.start();
- } catch (IOException e) {
- System.err.println("IO error during transcoding");
- return false;
- }
-
- // Wait for EndOfStream event.
- waitForFileDone();
-
- // Cleanup.
- try {
- dsink.close();
- } catch (Exception e) {}
- p.removeControllerListener(this);
-
- System.err.println("...done transcoding.");
-
- return true;
- }
-
-
- /**
- * Set the content descriptor based on the given output MediaLocator.
- */
- void setContentDescriptor(Processor p, MediaLocator outML) {
-
- ContentDescriptor cd;
-
- // If the output file maps to a content type,
- // we'll try to set it on the processor.
-
- if ((cd = fileExtToCD(outML.getRemainder())) != null) {
-
- System.err.println("- set content descriptor to: " + cd);
-
- if ((p.setContentDescriptor(cd)) == null) {
-
- // The processor does not support the output content
- // type. But we can set the content type to RAW and
- // see if any DataSink supports it.
-
- p.setContentDescriptor(new
ContentDescriptor(ContentDescriptor.RAW));
- }
- }
- }
-
-
- /**
- * Set the target transcode format on the processor.
- */
- boolean setTrackFormats(Processor p, Format fmts[]) {
-
- if (fmts.length == 0)
- return true;
-
- TrackControl tcs[];
-
- if ((tcs = p.getTrackControls()) == null) {
- // The processor does not support any track control.
- System.err.println("The Processor cannot transcode the tracks to
the given formats");
- return false;
- }
-
- for (int i = 0; i < fmts.length; i++) {
-
- System.err.println("- set track format to: " + fmts[i]);
-
- if (!setEachTrackFormat(p, tcs, fmts[i])) {
- System.err.println("Cannot transcode any track to: " + fmts[i]);
- return false;
- }
- }
-
- return true;
- }
-
-
- /**
- * We'll loop through the tracks and try to find a track
- * that can be converted to the given format.
- */
- boolean setEachTrackFormat(Processor p, TrackControl tcs[], Format fmt) {
-
- Format supported[];
- Format f;
-
- for (int i = 0; i < tcs.length; i++) {
-
- supported = tcs[i].getSupportedFormats();
-
- if (supported == null)
- continue;
-
- for (int j = 0; j < supported.length; j++) {
-
- if (fmt.matches(supported[j]) &&
- (f = fmt.intersects(supported[j])) != null &&
- tcs[i].setFormat(f) != null) {
-
- // Success.
- return true;
- }
- }
- }
-
- return false;
- }
-
-
- /**
- * Setting the encoding quality to the specified value on the JPEG encoder.
- * 0.5 is a good default.
- */
- void setJPEGQuality(Player p, float val) {
-
- Control cs[] = p.getControls();
- QualityControl qc = null;
- VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
-
- // Loop through the controls to find the Quality control for
- // the JPEG encoder.
- for (int i = 0; i < cs.length; i++) {
-
- if (cs[i] instanceof QualityControl &&
- cs[i] instanceof Owned) {
- Object owner = ((Owned)cs[i]).getOwner();
-
- // Check to see if the owner is a Codec.
- // Then check for the output format.
- if (owner instanceof Codec) {
- Format fmts[] =
((Codec)owner).getSupportedOutputFormats(null);
- for (int j = 0; j < fmts.length; j++) {
- if (fmts[j].matches(jpegFmt)) {
- qc = (QualityControl)cs[i];
- qc.setQuality(val);
- System.err.println("- Set quality to " +
- val + " on " + qc);
- break;
- }
- }
- }
- if (qc != null)
- break;
- }
- }
- }
-
-
- /**
- * Create the DataSink.
- */
- DataSink createDataSink(Processor p, MediaLocator outML) {
-
- DataSource ds;
-
- if ((ds = p.getDataOutput()) == null) {
- System.err.println("Something is really wrong: the processor does
not have an output DataSource");
- return null;
- }
-
- DataSink dsink;
-
- try {
- System.err.println("- create DataSink for: " + outML);
- dsink = Manager.createDataSink(ds, outML);
- dsink.open();
- } catch (Exception e) {
- System.err.println("Cannot create the DataSink: " + e);
- return null;
- }
-
- return dsink;
- }
-
-
- Object waitSync = new Object();
- boolean stateTransitionOK = true;
-
- /**
- * Block until the processor has transitioned to the given state.
- * Return false if the transition failed.
- */
- boolean waitForState(Processor p, int state) {
- synchronized (waitSync) {
- try {
- while (p.getState() < state && stateTransitionOK)
- waitSync.wait();
- } catch (Exception e) {}
- }
- return stateTransitionOK;
- }
-
-
- /**
- * Controller Listener.
- */
- public void controllerUpdate(ControllerEvent evt) {
-
- if (evt instanceof ConfigureCompleteEvent ||
- evt instanceof RealizeCompleteEvent ||
- evt instanceof PrefetchCompleteEvent) {
- synchronized (waitSync) {
- stateTransitionOK = true;
- waitSync.notifyAll();
- }
- } else if (evt instanceof ResourceUnavailableEvent) {
- synchronized (waitSync) {
- stateTransitionOK = false;
- waitSync.notifyAll();
- }
- } else if (evt instanceof EndOfMediaEvent) {
- evt.getSourceController().close();
- } else if (evt instanceof MediaTimeSetEvent) {
- System.err.println("- mediaTime set: " +
- ((MediaTimeSetEvent)evt).getMediaTime().getSeconds());
- } else if (evt instanceof StopAtTimeEvent) {
- System.err.println("- stop at time: " +
- ((StopAtTimeEvent)evt).getMediaTime().getSeconds());
- evt.getSourceController().close();
- }
- }
-
-
- Object waitFileSync = new Object();
- boolean fileDone = false;
- boolean fileSuccess = true;
-
- /**
- * Block until file writing is done.
- */
- boolean waitForFileDone() {
- System.err.print(" ");
- synchronized (waitFileSync) {
- try {
- while (!fileDone) {
- waitFileSync.wait(1000);
- System.err.print(".");
- }
- } catch (Exception e) {}
- }
- System.err.println("");
- return fileSuccess;
- }
-
-
- /**
- * Event handler for the file writer.
- */
- public void dataSinkUpdate(DataSinkEvent evt) {
-
- if (evt instanceof EndOfStreamEvent) {
- synchronized (waitFileSync) {
- fileDone = true;
- waitFileSync.notifyAll();
- }
- } else if (evt instanceof DataSinkErrorEvent) {
- synchronized (waitFileSync) {
- fileDone = true;
- fileSuccess = false;
- waitFileSync.notifyAll();
- }
- }
- }
-
-
- /**
- * Convert a file name to a content type. The extension is parsed
- * to determine the content type.
- */
- ContentDescriptor fileExtToCD(String name) {
-
- String ext;
- int p;
-
- // Extract the file extension.
- if ((p = name.lastIndexOf('.')) < 0)
- return null;
-
- ext = (name.substring(p + 1)).toLowerCase();
-
- String type;
-
- // Use the MimeManager to get the mime type from the file extension.
- if ( ext.equals("mp3")) {
- type = FileTypeDescriptor.MPEG_AUDIO;
- } else {
- if ((type = com.sun.media.MimeManager.getMimeType(ext)) == null)
- return null;
- type = ContentDescriptor.mimeTypeToPackageName(type);
- }
-
- return new FileTypeDescriptor(type);
- }
-
-
- /**
- * Main program
- */
- public static void main(String [] args) {
-
- String inputURL = null, outputURL = null;
- int mediaStart = -1, mediaEnd = -1;
- Vector audFmt = new Vector(), vidFmt = new Vector();
-
- if (args.length == 0)
- prUsage();
-
- // Parse the arguments.
- int i = 0;
- while (i < args.length) {
-
- if (args[i].equals("-v")) {
- i++;
- if (i >= args.length)
- prUsage();
- vidFmt.addElement(args[i]);
- } else if (args[i].equals("-a")) {
- i++;
- if (i >= args.length)
- prUsage();
- audFmt.addElement(args[i]);
- } else if (args[i].equals("-o")) {
- i++;
- if (i >= args.length)
- prUsage();
- outputURL = args[i];
- } else if (args[i].equals("-s")) {
- i++;
- if (i >= args.length)
- prUsage();
- Integer integer = Integer.valueOf(args[i]);
- if (integer != null)
- mediaStart = integer.intValue();
- } else if (args[i].equals("-e")) {
- i++;
- if (i >= args.length)
- prUsage();
- Integer integer = Integer.valueOf(args[i]);
- if (integer != null)
- mediaEnd = integer.intValue();
- } else {
- inputURL = args[i];
- }
- i++;
- }
-
- if (inputURL == null) {
- System.err.println("No input url is specified");
- prUsage();
- }
-
- if (outputURL == null) {
- System.err.println("No output url is specified");
- prUsage();
- }
-
- int j = 0;
- Format fmts[] = new Format[audFmt.size() + vidFmt.size()];
- Format fmt;
-
- // Parse the audio format spec. into real AudioFormat's.
- for (i = 0; i < audFmt.size(); i++) {
-
- if ((fmt = parseAudioFormat((String)audFmt.elementAt(i))) == null) {
- System.err.println("Invalid audio format specification: " +
- (String)audFmt.elementAt(i));
- prUsage();
- }
- fmts[j++] = fmt;
- }
-
- // Parse the video format spec. into real VideoFormat's.
- for (i = 0; i < vidFmt.size(); i++) {
-
- if ((fmt = parseVideoFormat((String)vidFmt.elementAt(i))) == null) {
- System.err.println("Invalid video format specification: " +
- (String)vidFmt.elementAt(i));
- prUsage();
- }
- fmts[j++] = fmt;
- }
-
- // Generate the input and output media locators.
- MediaLocator iml, oml;
-
- if ((iml = createMediaLocator(inputURL)) == null) {
- System.err.println("Cannot build media locator from: " + inputURL);
- System.exit(0);
- }
-
- if ((oml = createMediaLocator(outputURL)) == null) {
- System.err.println("Cannot build media locator from: " + outputURL);
- System.exit(0);
- }
-
- // Trancode with the specified parameters.
- Transcode transcode = new Transcode();
-
- if (!transcode.doIt(iml, oml, fmts, mediaStart, mediaEnd)) {
- System.err.println("Transcoding failed");
- }
-
- System.exit(0);
- }
-
-
- /**
- * Create a media locator from the given string.
- */
- static MediaLocator createMediaLocator(String url) {
-
- MediaLocator ml;
-
- if (url.indexOf(":") > 0 && (ml = new MediaLocator(url)) != null)
- return ml;
-
- if (url.startsWith(File.separator)) {
- if ((ml = new MediaLocator("file:" + url)) != null)
- return ml;
- } else {
- String file = "file:" + System.getProperty("user.dir") +
File.separator + url;
- if ((ml = new MediaLocator(file)) != null)
- return ml;
- }
-
- return null;
- }
-
-
- /**
- * Parse the audio format specifier and generate an AudioFormat.
- * A valid audio format specifier is of the form:
- * [encoding]:[rate]:[sizeInBits]:[channels]:[big|little]:[signed|unsigned]
- */
- static Format parseAudioFormat(String fmtStr) {
-
- int rate, bits, channels, endian, signed;
-
- String encodeStr = null, rateStr = null,
- bitsStr = null, channelsStr = null,
- endianStr = null, signedStr = null;
-
- // Parser the media locator to extract the requested format.
-
- if (fmtStr != null && fmtStr.length() > 0) {
- while (fmtStr.length() > 1 && fmtStr.charAt(0) == ':')
- fmtStr = fmtStr.substring(1);
-
- // Now see if there's a encode rate specified.
- int off = fmtStr.indexOf(':');
- if (off == -1) {
- if (!fmtStr.equals(""))
- encodeStr = fmtStr;
- } else {
- encodeStr = fmtStr.substring(0, off);
- fmtStr = fmtStr.substring(off + 1);
- // Now see if there's a sample rate specified
- off = fmtStr.indexOf(':');
- if (off == -1) {
- if (!fmtStr.equals(""))
- rateStr = fmtStr;
- } else {
- rateStr = fmtStr.substring(0, off);
- fmtStr = fmtStr.substring(off + 1);
- // Now see if there's a size specified
- off = fmtStr.indexOf(':');
- if (off == -1) {
- if (!fmtStr.equals(""))
- bitsStr = fmtStr;
- } else {
- bitsStr = fmtStr.substring(0, off);
- fmtStr = fmtStr.substring(off + 1);
- // Now see if there's channels specified.
- off = fmtStr.indexOf(':');
- if (off == -1) {
- if (!fmtStr.equals(""))
- channelsStr = fmtStr;
- } else {
- channelsStr = fmtStr.substring(0, off);
- fmtStr = fmtStr.substring(off + 1);
- // Now see if there's endian specified.
- off = fmtStr.indexOf(':');
- if (off == -1) {
- if (!fmtStr.equals(""))
- endianStr = fmtStr.substring(off + 1);
- } else {
- endianStr = fmtStr.substring(0, off);
- if (!fmtStr.equals(""))
- signedStr = fmtStr.substring(off + 1);
- }
- }
- }
- }
- }
- }
-
- // Sample Rate
- rate = AudioFormat.NOT_SPECIFIED;
- if (rateStr != null) {
- try {
- Integer integer = Integer.valueOf(rateStr);
- if (integer != null)
- rate = integer.intValue();
- } catch (Throwable t) { }
- }
-
- // Sample Size
- bits = AudioFormat.NOT_SPECIFIED;
- if (bitsStr != null) {
- try {
- Integer integer = Integer.valueOf(bitsStr);
- if (integer != null)
- bits = integer.intValue();
- } catch (Throwable t) { }
- }
-
- // # of channels
- channels = AudioFormat.NOT_SPECIFIED;
- if (channelsStr != null) {
- try {
- Integer integer = Integer.valueOf(channelsStr);
- if (integer != null)
- channels = integer.intValue();
- } catch (Throwable t) { }
- }
-
- // Endian
- endian = AudioFormat.NOT_SPECIFIED;
- if (endianStr != null) {
- if (endianStr.equalsIgnoreCase("big"))
- endian = AudioFormat.BIG_ENDIAN;
- else if (endianStr.equalsIgnoreCase("little"))
- endian = AudioFormat.LITTLE_ENDIAN;
- }
-
- // Signed
- signed = AudioFormat.NOT_SPECIFIED;
- if (signedStr != null) {
- if (signedStr.equalsIgnoreCase("signed"))
- signed = AudioFormat.SIGNED;
- else if (signedStr.equalsIgnoreCase("unsigned"))
- signed = AudioFormat.UNSIGNED;
- }
-
- return new AudioFormat(encodeStr, rate, bits, channels, endian, signed);
- }
-
-
- /**
- * Parse the video format specifier and generate an VideoFormat.
- * A valid video format specifier is of the form:
- * [encoding]:[widthXheight]
- */
- static Format parseVideoFormat(String fmtStr) {
-
- String encodeStr = null, sizeStr = null;
-
- // Parser the media locator to extract the requested format.
-
- if (fmtStr != null && fmtStr.length() > 0) {
- while (fmtStr.length() > 1 && fmtStr.charAt(0) == ':')
- fmtStr = fmtStr.substring(1);
-
- // Now see if there's a encode rate specified.
- int off = fmtStr.indexOf(':');
- if (off == -1) {
- if (!fmtStr.equals(""))
- encodeStr = fmtStr;
- } else {
- encodeStr = fmtStr.substring(0, off);
- sizeStr = fmtStr.substring(off + 1);
- }
- }
-
- if (encodeStr == null || encodeStr.equals(""))
- prUsage();
-
- if (sizeStr == null)
- return new VideoFormat(encodeStr);
-
- int width = 320, height = 240;
-
- int off = sizeStr.indexOf('X');
- if (off == -1)
- off = sizeStr.indexOf('x');
-
- if (off == -1) {
- System.err.println("Video dimension is not correctly specified: " +
sizeStr);
- prUsage();
- } else {
- String widthStr = sizeStr.substring(0, off);
- String heightStr = sizeStr.substring(off + 1);
-
- try {
- Integer integer = Integer.valueOf(widthStr);
- if (integer != null)
- width = integer.intValue();
- integer = Integer.valueOf(heightStr);
- if (integer != null)
- height = integer.intValue();
- } catch (Throwable t) {
- prUsage();
- }
-
- return new VideoFormat(encodeStr,
- new Dimension(width, height),
- VideoFormat.NOT_SPECIFIED, // maxDataLen
- null, // data class
- VideoFormat.NOT_SPECIFIED // FrameRate
- );
- }
-
- return null;
- }
-
-
- static void prUsage() {
- System.err.println("Usage: java Transcode -o <output> -a <audio format>
-v <video format> -s <start time> -e <end time> <input>");
- System.err.println(" <output>: input URL or file name");
- System.err.println(" <input>: output URL or file name");
- System.err.println(" <audio format>:
[encoding]:[rate]:[sizeInBits]:[channels]:[big|little]:[signed|unsigned]");
- System.err.println(" <video format>: [encoding]:[widthXheight]");
- System.err.println(" <start time>: start time in seconds");
- System.err.println(" <end time>: end time in seconds");
- System.exit(0);
- }
-}
Copied: speeltuin/mihxil/streams/src/docbook (from rev 35197,
speeltuin/mihxil/streams/documentation)
Property changes on: speeltuin/mihxil/streams/src/docbook
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: speeltuin/mihxil/streams/src/main/java/Transcode.java (from rev 35197,
speeltuin/mihxil/streams/src/Transcode.java)
===================================================================
--- speeltuin/mihxil/streams/src/main/java/Transcode.java
(rev 0)
+++ speeltuin/mihxil/streams/src/main/java/Transcode.java 2009-05-15
14:15:34 UTC (rev 35200)
@@ -0,0 +1,746 @@
+/*
+ * @(#)Transcode.java 1.6 01/03/13
+ *
+ * Copyright (c) 1999-2001 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
+ * modify and redistribute this software in source and binary code form,
+ * provided that i) this copyright notice and license appear on all copies of
+ * the software; and ii) Licensee does not utilize the software in a manner
+ * which is disparaging to Sun.
+ *
+ * This software is provided "AS IS," without a warranty of any kind. ALL
+ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
+ * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
+ * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
+ * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
+ * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
+ * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
+ * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
+ * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * This software is not designed or intended for use in on-line control of
+ * aircraft, air traffic, aircraft navigation or aircraft communications; or in
+ * the design, construction, operation or maintenance of any nuclear
+ * facility. Licensee represents and warrants that it will not use or
+ * redistribute the Software for such purposes.
+ */
+
+import java.awt.*;
+import java.util.Vector;
+import java.io.File;
+import javax.media.*;
+import javax.media.control.TrackControl;
+import javax.media.control.QualityControl;
+import javax.media.Format;
+import javax.media.format.*;
+import javax.media.datasink.*;
+import javax.media.protocol.*;
+import javax.media.protocol.DataSource;
+import java.io.IOException;
+import com.sun.media.format.WavAudioFormat;
+
+
+/**
+ * A sample program to transcode an input source to an output location
+ * with different data formats.
+ */
+public class Transcode implements ControllerListener, DataSinkListener {
+
+ /**
+ * Given a source media locator, destination media locator and
+ * an array of formats, this method will transcode the source to
+ * the dest into the specified formats.
+ */
+ public boolean doIt(MediaLocator inML, MediaLocator outML, Format fmts[],
+ int start, int end) {
+
+ Processor p;
+
+ try {
+ System.err.println("- create processor for: " + inML);
+ p = Manager.createProcessor(inML);
+ } catch (Exception e) {
+ System.err.println("Yikes! Cannot create a processor from the
given url: " + e);
+ return false;
+ }
+
+ p.addControllerListener(this);
+
+ // Put the Processor into configured state.
+ p.configure();
+ if (!waitForState(p, p.Configured)) {
+ System.err.println("Failed to configure the processor.");
+ return false;
+ }
+
+ // Set the output content descriptor based on the media locator.
+ setContentDescriptor(p, outML);
+
+ // Program the tracks to the given output formats.
+ if (!setTrackFormats(p, fmts))
+ return false;
+
+ // We are done with programming the processor. Let's just
+ // realize the it.
+ p.realize();
+ if (!waitForState(p, p.Realized)) {
+ System.err.println("Failed to realize the processor.");
+ return false;
+ }
+
+ // Set the JPEG quality to .5.
+ setJPEGQuality(p, 0.5f);
+
+ // Now, we'll need to create a DataSink.
+ DataSink dsink;
+ if ((dsink = createDataSink(p, outML)) == null) {
+ System.err.println("Failed to create a DataSink for the given
output MediaLocator: " + outML);
+ return false;
+ }
+
+ dsink.addDataSinkListener(this);
+ fileDone = false;
+
+ // Set the start time if there's one set.
+ if (start > 0)
+ p.setMediaTime(new Time((double)start));
+
+ // Set the stop time if there's one set.
+ if (end > 0)
+ p.setStopTime(new Time((double)end));
+
+ System.err.println("start transcoding...");
+
+ // OK, we can now start the actual transcoding.
+ try {
+ p.start();
+ dsink.start();
+ } catch (IOException e) {
+ System.err.println("IO error during transcoding");
+ return false;
+ }
+
+ // Wait for EndOfStream event.
+ waitForFileDone();
+
+ // Cleanup.
+ try {
+ dsink.close();
+ } catch (Exception e) {}
+ p.removeControllerListener(this);
+
+ System.err.println("...done transcoding.");
+
+ return true;
+ }
+
+
+ /**
+ * Set the content descriptor based on the given output MediaLocator.
+ */
+ void setContentDescriptor(Processor p, MediaLocator outML) {
+
+ ContentDescriptor cd;
+
+ // If the output file maps to a content type,
+ // we'll try to set it on the processor.
+
+ if ((cd = fileExtToCD(outML.getRemainder())) != null) {
+
+ System.err.println("- set content descriptor to: " + cd);
+
+ if ((p.setContentDescriptor(cd)) == null) {
+
+ // The processor does not support the output content
+ // type. But we can set the content type to RAW and
+ // see if any DataSink supports it.
+
+ p.setContentDescriptor(new
ContentDescriptor(ContentDescriptor.RAW));
+ }
+ }
+ }
+
+
+ /**
+ * Set the target transcode format on the processor.
+ */
+ boolean setTrackFormats(Processor p, Format fmts[]) {
+
+ if (fmts.length == 0)
+ return true;
+
+ TrackControl tcs[];
+
+ if ((tcs = p.getTrackControls()) == null) {
+ // The processor does not support any track control.
+ System.err.println("The Processor cannot transcode the tracks to
the given formats");
+ return false;
+ }
+
+ for (int i = 0; i < fmts.length; i++) {
+
+ System.err.println("- set track format to: " + fmts[i]);
+
+ if (!setEachTrackFormat(p, tcs, fmts[i])) {
+ System.err.println("Cannot transcode any track to: " + fmts[i]);
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+
+ /**
+ * We'll loop through the tracks and try to find a track
+ * that can be converted to the given format.
+ */
+ boolean setEachTrackFormat(Processor p, TrackControl tcs[], Format fmt) {
+
+ Format supported[];
+ Format f;
+
+ for (int i = 0; i < tcs.length; i++) {
+
+ supported = tcs[i].getSupportedFormats();
+
+ if (supported == null)
+ continue;
+
+ for (int j = 0; j < supported.length; j++) {
+
+ if (fmt.matches(supported[j]) &&
+ (f = fmt.intersects(supported[j])) != null &&
+ tcs[i].setFormat(f) != null) {
+
+ // Success.
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Setting the encoding quality to the specified value on the JPEG encoder.
+ * 0.5 is a good default.
+ */
+ void setJPEGQuality(Player p, float val) {
+
+ Control cs[] = p.getControls();
+ QualityControl qc = null;
+ VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
+
+ // Loop through the controls to find the Quality control for
+ // the JPEG encoder.
+ for (int i = 0; i < cs.length; i++) {
+
+ if (cs[i] instanceof QualityControl &&
+ cs[i] instanceof Owned) {
+ Object owner = ((Owned)cs[i]).getOwner();
+
+ // Check to see if the owner is a Codec.
+ // Then check for the output format.
+ if (owner instanceof Codec) {
+ Format fmts[] =
((Codec)owner).getSupportedOutputFormats(null);
+ for (int j = 0; j < fmts.length; j++) {
+ if (fmts[j].matches(jpegFmt)) {
+ qc = (QualityControl)cs[i];
+ qc.setQuality(val);
+ System.err.println("- Set quality to " +
+ val + " on " + qc);
+ break;
+ }
+ }
+ }
+ if (qc != null)
+ break;
+ }
+ }
+ }
+
+
+ /**
+ * Create the DataSink.
+ */
+ DataSink createDataSink(Processor p, MediaLocator outML) {
+
+ DataSource ds;
+
+ if ((ds = p.getDataOutput()) == null) {
+ System.err.println("Something is really wrong: the processor does
not have an output DataSource");
+ return null;
+ }
+
+ DataSink dsink;
+
+ try {
+ System.err.println("- create DataSink for: " + outML);
+ dsink = Manager.createDataSink(ds, outML);
+ dsink.open();
+ } catch (Exception e) {
+ System.err.println("Cannot create the DataSink: " + e);
+ return null;
+ }
+
+ return dsink;
+ }
+
+
+ Object waitSync = new Object();
+ boolean stateTransitionOK = true;
+
+ /**
+ * Block until the processor has transitioned to the given state.
+ * Return false if the transition failed.
+ */
+ boolean waitForState(Processor p, int state) {
+ synchronized (waitSync) {
+ try {
+ while (p.getState() < state && stateTransitionOK)
+ waitSync.wait();
+ } catch (Exception e) {}
+ }
+ return stateTransitionOK;
+ }
+
+
+ /**
+ * Controller Listener.
+ */
+ public void controllerUpdate(ControllerEvent evt) {
+
+ if (evt instanceof ConfigureCompleteEvent ||
+ evt instanceof RealizeCompleteEvent ||
+ evt instanceof PrefetchCompleteEvent) {
+ synchronized (waitSync) {
+ stateTransitionOK = true;
+ waitSync.notifyAll();
+ }
+ } else if (evt instanceof ResourceUnavailableEvent) {
+ synchronized (waitSync) {
+ stateTransitionOK = false;
+ waitSync.notifyAll();
+ }
+ } else if (evt instanceof EndOfMediaEvent) {
+ evt.getSourceController().close();
+ } else if (evt instanceof MediaTimeSetEvent) {
+ System.err.println("- mediaTime set: " +
+ ((MediaTimeSetEvent)evt).getMediaTime().getSeconds());
+ } else if (evt instanceof StopAtTimeEvent) {
+ System.err.println("- stop at time: " +
+ ((StopAtTimeEvent)evt).getMediaTime().getSeconds());
+ evt.getSourceController().close();
+ }
+ }
+
+
+ Object waitFileSync = new Object();
+ boolean fileDone = false;
+ boolean fileSuccess = true;
+
+ /**
+ * Block until file writing is done.
+ */
+ boolean waitForFileDone() {
+ System.err.print(" ");
+ synchronized (waitFileSync) {
+ try {
+ while (!fileDone) {
+ waitFileSync.wait(1000);
+ System.err.print(".");
+ }
+ } catch (Exception e) {}
+ }
+ System.err.println("");
+ return fileSuccess;
+ }
+
+
+ /**
+ * Event handler for the file writer.
+ */
+ public void dataSinkUpdate(DataSinkEvent evt) {
+
+ if (evt instanceof EndOfStreamEvent) {
+ synchronized (waitFileSync) {
+ fileDone = true;
+ waitFileSync.notifyAll();
+ }
+ } else if (evt instanceof DataSinkErrorEvent) {
+ synchronized (waitFileSync) {
+ fileDone = true;
+ fileSuccess = false;
+ waitFileSync.notifyAll();
+ }
+ }
+ }
+
+
+ /**
+ * Convert a file name to a content type. The extension is parsed
+ * to determine the content type.
+ */
+ ContentDescriptor fileExtToCD(String name) {
+
+ String ext;
+ int p;
+
+ // Extract the file extension.
+ if ((p = name.lastIndexOf('.')) < 0)
+ return null;
+
+ ext = (name.substring(p + 1)).toLowerCase();
+
+ String type;
+
+ // Use the MimeManager to get the mime type from the file extension.
+ if ( ext.equals("mp3")) {
+ type = FileTypeDescriptor.MPEG_AUDIO;
+ } else {
+ if ((type = com.sun.media.MimeManager.getMimeType(ext)) == null)
+ return null;
+ type = ContentDescriptor.mimeTypeToPackageName(type);
+ }
+
+ return new FileTypeDescriptor(type);
+ }
+
+
+ /**
+ * Main program
+ */
+ public static void main(String [] args) {
+
+ String inputURL = null, outputURL = null;
+ int mediaStart = -1, mediaEnd = -1;
+ Vector audFmt = new Vector(), vidFmt = new Vector();
+
+ if (args.length == 0)
+ prUsage();
+
+ // Parse the arguments.
+ int i = 0;
+ while (i < args.length) {
+
+ if (args[i].equals("-v")) {
+ i++;
+ if (i >= args.length)
+ prUsage();
+ vidFmt.addElement(args[i]);
+ } else if (args[i].equals("-a")) {
+ i++;
+ if (i >= args.length)
+ prUsage();
+ audFmt.addElement(args[i]);
+ } else if (args[i].equals("-o")) {
+ i++;
+ if (i >= args.length)
+ prUsage();
+ outputURL = args[i];
+ } else if (args[i].equals("-s")) {
+ i++;
+ if (i >= args.length)
+ prUsage();
+ Integer integer = Integer.valueOf(args[i]);
+ if (integer != null)
+ mediaStart = integer.intValue();
+ } else if (args[i].equals("-e")) {
+ i++;
+ if (i >= args.length)
+ prUsage();
+ Integer integer = Integer.valueOf(args[i]);
+ if (integer != null)
+ mediaEnd = integer.intValue();
+ } else {
+ inputURL = args[i];
+ }
+ i++;
+ }
+
+ if (inputURL == null) {
+ System.err.println("No input url is specified");
+ prUsage();
+ }
+
+ if (outputURL == null) {
+ System.err.println("No output url is specified");
+ prUsage();
+ }
+
+ int j = 0;
+ Format fmts[] = new Format[audFmt.size() + vidFmt.size()];
+ Format fmt;
+
+ // Parse the audio format spec. into real AudioFormat's.
+ for (i = 0; i < audFmt.size(); i++) {
+
+ if ((fmt = parseAudioFormat((String)audFmt.elementAt(i))) == null) {
+ System.err.println("Invalid audio format specification: " +
+ (String)audFmt.elementAt(i));
+ prUsage();
+ }
+ fmts[j++] = fmt;
+ }
+
+ // Parse the video format spec. into real VideoFormat's.
+ for (i = 0; i < vidFmt.size(); i++) {
+
+ if ((fmt = parseVideoFormat((String)vidFmt.elementAt(i))) == null) {
+ System.err.println("Invalid video format specification: " +
+ (String)vidFmt.elementAt(i));
+ prUsage();
+ }
+ fmts[j++] = fmt;
+ }
+
+ // Generate the input and output media locators.
+ MediaLocator iml, oml;
+
+ if ((iml = createMediaLocator(inputURL)) == null) {
+ System.err.println("Cannot build media locator from: " + inputURL);
+ System.exit(0);
+ }
+
+ if ((oml = createMediaLocator(outputURL)) == null) {
+ System.err.println("Cannot build media locator from: " + outputURL);
+ System.exit(0);
+ }
+
+ // Trancode with the specified parameters.
+ Transcode transcode = new Transcode();
+
+ if (!transcode.doIt(iml, oml, fmts, mediaStart, mediaEnd)) {
+ System.err.println("Transcoding failed");
+ }
+
+ System.exit(0);
+ }
+
+
+ /**
+ * Create a media locator from the given string.
+ */
+ static MediaLocator createMediaLocator(String url) {
+
+ MediaLocator ml;
+
+ if (url.indexOf(":") > 0 && (ml = new MediaLocator(url)) != null)
+ return ml;
+
+ if (url.startsWith(File.separator)) {
+ if ((ml = new MediaLocator("file:" + url)) != null)
+ return ml;
+ } else {
+ String file = "file:" + System.getProperty("user.dir") +
File.separator + url;
+ if ((ml = new MediaLocator(file)) != null)
+ return ml;
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Parse the audio format specifier and generate an AudioFormat.
+ * A valid audio format specifier is of the form:
+ * [encoding]:[rate]:[sizeInBits]:[channels]:[big|little]:[signed|unsigned]
+ */
+ static Format parseAudioFormat(String fmtStr) {
+
+ int rate, bits, channels, endian, signed;
+
+ String encodeStr = null, rateStr = null,
+ bitsStr = null, channelsStr = null,
+ endianStr = null, signedStr = null;
+
+ // Parser the media locator to extract the requested format.
+
+ if (fmtStr != null && fmtStr.length() > 0) {
+ while (fmtStr.length() > 1 && fmtStr.charAt(0) == ':')
+ fmtStr = fmtStr.substring(1);
+
+ // Now see if there's a encode rate specified.
+ int off = fmtStr.indexOf(':');
+ if (off == -1) {
+ if (!fmtStr.equals(""))
+ encodeStr = fmtStr;
+ } else {
+ encodeStr = fmtStr.substring(0, off);
+ fmtStr = fmtStr.substring(off + 1);
+ // Now see if there's a sample rate specified
+ off = fmtStr.indexOf(':');
+ if (off == -1) {
+ if (!fmtStr.equals(""))
+ rateStr = fmtStr;
+ } else {
+ rateStr = fmtStr.substring(0, off);
+ fmtStr = fmtStr.substring(off + 1);
+ // Now see if there's a size specified
+ off = fmtStr.indexOf(':');
+ if (off == -1) {
+ if (!fmtStr.equals(""))
+ bitsStr = fmtStr;
+ } else {
+ bitsStr = fmtStr.substring(0, off);
+ fmtStr = fmtStr.substring(off + 1);
+ // Now see if there's channels specified.
+ off = fmtStr.indexOf(':');
+ if (off == -1) {
+ if (!fmtStr.equals(""))
+ channelsStr = fmtStr;
+ } else {
+ channelsStr = fmtStr.substring(0, off);
+ fmtStr = fmtStr.substring(off + 1);
+ // Now see if there's endian specified.
+ off = fmtStr.indexOf(':');
+ if (off == -1) {
+ if (!fmtStr.equals(""))
+ endianStr = fmtStr.substring(off + 1);
+ } else {
+ endianStr = fmtStr.substring(0, off);
+ if (!fmtStr.equals(""))
+ signedStr = fmtStr.substring(off + 1);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Sample Rate
+ rate = AudioFormat.NOT_SPECIFIED;
+ if (rateStr != null) {
+ try {
+ Integer integer = Integer.valueOf(rateStr);
+ if (integer != null)
+ rate = integer.intValue();
+ } catch (Throwable t) { }
+ }
+
+ // Sample Size
+ bits = AudioFormat.NOT_SPECIFIED;
+ if (bitsStr != null) {
+ try {
+ Integer integer = Integer.valueOf(bitsStr);
+ if (integer != null)
+ bits = integer.intValue();
+ } catch (Throwable t) { }
+ }
+
+ // # of channels
+ channels = AudioFormat.NOT_SPECIFIED;
+ if (channelsStr != null) {
+ try {
+ Integer integer = Integer.valueOf(channelsStr);
+ if (integer != null)
+ channels = integer.intValue();
+ } catch (Throwable t) { }
+ }
+
+ // Endian
+ endian = AudioFormat.NOT_SPECIFIED;
+ if (endianStr != null) {
+ if (endianStr.equalsIgnoreCase("big"))
+ endian = AudioFormat.BIG_ENDIAN;
+ else if (endianStr.equalsIgnoreCase("little"))
+ endian = AudioFormat.LITTLE_ENDIAN;
+ }
+
+ // Signed
+ signed = AudioFormat.NOT_SPECIFIED;
+ if (signedStr != null) {
+ if (signedStr.equalsIgnoreCase("signed"))
+ signed = AudioFormat.SIGNED;
+ else if (signedStr.equalsIgnoreCase("unsigned"))
+ signed = AudioFormat.UNSIGNED;
+ }
+
+ return new AudioFormat(encodeStr, rate, bits, channels, endian, signed);
+ }
+
+
+ /**
+ * Parse the video format specifier and generate an VideoFormat.
+ * A valid video format specifier is of the form:
+ * [encoding]:[widthXheight]
+ */
+ static Format parseVideoFormat(String fmtStr) {
+
+ String encodeStr = null, sizeStr = null;
+
+ // Parser the media locator to extract the requested format.
+
+ if (fmtStr != null && fmtStr.length() > 0) {
+ while (fmtStr.length() > 1 && fmtStr.charAt(0) == ':')
+ fmtStr = fmtStr.substring(1);
+
+ // Now see if there's a encode rate specified.
+ int off = fmtStr.indexOf(':');
+ if (off == -1) {
+ if (!fmtStr.equals(""))
+ encodeStr = fmtStr;
+ } else {
+ encodeStr = fmtStr.substring(0, off);
+ sizeStr = fmtStr.substring(off + 1);
+ }
+ }
+
+ if (encodeStr == null || encodeStr.equals(""))
+ prUsage();
+
+ if (sizeStr == null)
+ return new VideoFormat(encodeStr);
+
+ int width = 320, height = 240;
+
+ int off = sizeStr.indexOf('X');
+ if (off == -1)
+ off = sizeStr.indexOf('x');
+
+ if (off == -1) {
+ System.err.println("Video dimension is not correctly specified: " +
sizeStr);
+ prUsage();
+ } else {
+ String widthStr = sizeStr.substring(0, off);
+ String heightStr = sizeStr.substring(off + 1);
+
+ try {
+ Integer integer = Integer.valueOf(widthStr);
+ if (integer != null)
+ width = integer.intValue();
+ integer = Integer.valueOf(heightStr);
+ if (integer != null)
+ height = integer.intValue();
+ } catch (Throwable t) {
+ prUsage();
+ }
+
+ return new VideoFormat(encodeStr,
+ new Dimension(width, height),
+ VideoFormat.NOT_SPECIFIED, // maxDataLen
+ null, // data class
+ VideoFormat.NOT_SPECIFIED // FrameRate
+ );
+ }
+
+ return null;
+ }
+
+
+ static void prUsage() {
+ System.err.println("Usage: java Transcode -o <output> -a <audio format>
-v <video format> -s <start time> -e <end time> <input>");
+ System.err.println(" <output>: input URL or file name");
+ System.err.println(" <input>: output URL or file name");
+ System.err.println(" <audio format>:
[encoding]:[rate]:[sizeInBits]:[channels]:[big|little]:[signed|unsigned]");
+ System.err.println(" <video format>: [encoding]:[widthXheight]");
+ System.err.println(" <start time>: start time in seconds");
+ System.err.println(" <end time>: end time in seconds");
+ System.exit(0);
+ }
+}
Property changes on: speeltuin/mihxil/streams/src/main/java/Transcode.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:mergeinfo
+
Copied: speeltuin/mihxil/streams/src/main/java/org (from rev 35197,
speeltuin/mihxil/streams/src/org)
Property changes on: speeltuin/mihxil/streams/src/main/java/org
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: speeltuin/mihxil/streams/src/main/resources/org/mmbase/config (from rev
35197, speeltuin/mihxil/streams/config)
Property changes on:
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams
(from rev 35197, speeltuin/mihxil/streams/blocks)
Property changes on:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams
___________________________________________________________________
Name: svn:mergeinfo
+
Deleted:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
===================================================================
--- speeltuin/mihxil/streams/blocks/admin.jspx 2009-05-15 13:29:01 UTC (rev
35197)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
2009-05-15 14:15:34 UTC (rev 35200)
@@ -1,41 +0,0 @@
-<div
- class="mm_c c_streams b_admin ${requestScope.componentClassName}"
- id="${requestScope.componentId}"
- xmlns:c="http://java.sun.com/jsp/jstl/core"
- xmlns:mm-res="urn:jsptagdir:/WEB-INF/tags/mm/resources"
- xmlns:fn="http://java.sun.com/jsp/jstl/functions"
- xmlns:jsp="http://java.sun.com/JSP/Page"
- xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
- <jsp:output omit-xml-declaration="true" />
- <mm:cloud rank="basic user">
-
<h3>${mm:string(requestScope['org.mmbase.framework.state'].renderer.block.title)}</h3>
-
<p>${mm:string(requestScope['org.mmbase.framework.state'].renderer.block.description)}</p>
-
- <mm:import from="request" externid="trigger" />
- <mm:listnodescontainer type="streamsources" id="q" >
- SIZE <mm:size /> (${q.sql})
- <mm:listnodes>
- BLa
- <mm:field name="number" />
- <div class="stream" title="">
- <h4>
-
-
- </h4>
-
- URL: <mm:function name="url" />
- <mm:present referid="trigger">
- <mm:voidfunction name="trigger" />
- Triggered conversion
- </mm:present>
- <mm:present referid="trigger" inverse="true">
- <mm:link>
- <mm:param name="trigger" />
- <a href="${_}">Trigger</a>
- </mm:link>
- </mm:present>
- </div>
- </mm:listnodes>
- </mm:listnodescontainer>
- </mm:cloud>
-</div>
Copied:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
(from rev 35199, speeltuin/mihxil/streams/blocks/admin.jspx)
===================================================================
---
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
(rev 0)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/admin.jspx
2009-05-15 14:15:34 UTC (rev 35200)
@@ -0,0 +1,43 @@
+<div
+ class="mm_c c_streams b_admin ${requestScope.componentClassName}"
+ id="${requestScope.componentId}"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:mm-res="urn:jsptagdir:/WEB-INF/tags/mm/resources"
+ xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+ xmlns:jsp="http://java.sun.com/JSP/Page"
+ xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
+ <jsp:output omit-xml-declaration="true" />
+ <mm:cloud rank="basic user">
+
<h3>${mm:string(requestScope['org.mmbase.framework.state'].renderer.block.title)}</h3>
+
<p>${mm:string(requestScope['org.mmbase.framework.state'].renderer.block.description)}</p>
+
+ <mm:import from="request" externid="trigger" />
+ <mm:listnodescontainer type="streamsources" id="q" >
+ SIZE <mm:size /> (${q.sql})
+ <mm:listnodes>
+ BLa
+ <mm:field name="number" />
+ <div class="stream" title="">
+ <h4>
+
+
+ </h4>
+
+ URL:
+ <mm:function name="url" />
+ <c:choose>
+ <c:when test="${trigger eq _node.number}">
+ <mm:voidfunction name="trigger" />
+ <jsp:text>Triggered conversion</jsp:text>
+ </c:when>
+ <c:otherwise>
+ <mm:link referids="_n...@trigger">
+ <a href="${_}">Trigger</a>
+ </mm:link>
+ </c:otherwise>
+ </c:choose>
+ </div>
+ </mm:listnodes>
+ </mm:listnodescontainer>
+ </mm:cloud>
+</div>
Deleted:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
===================================================================
--- speeltuin/mihxil/streams/blocks/myjobs.jspx 2009-05-15 13:29:01 UTC (rev
35197)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
2009-05-15 14:15:34 UTC (rev 35200)
@@ -1,32 +0,0 @@
-<div
- class="mm_c c_streams b_myfragments ${requestScope.componentClassName}"
- id="${requestScope.componentId}"
- xmlns:c="http://java.sun.com/jsp/jstl/core"
- xmlns:mm-res="urn:jsptagdir:/WEB-INF/tags/mm/resources"
- xmlns:fn="http://java.sun.com/jsp/jstl/functions"
- xmlns:jsp="http://java.sun.com/JSP/Page"
- xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
- <jsp:output omit-xml-declaration="true" />
-
-
- <ul>
- <mm:listfunction set="streams" name="myJobs">
- <li>
- <span>${_.transcoder} (${_.progress})</span>
- <p>
- <span class="in">${_.transcoder.in}</span>
- <jsp:text> -&gt; </jsp:text>
- <span class="out">${_.transcoder.out}</span>
- </p>
- <div class="log">
- ${_.logger}
- <pre>
- ${_.logger.debugList}
- </pre>
- </div>
- </li>
- </mm:listfunction>
- </ul>
-
-
-</div>
Copied:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
(from rev 35199, speeltuin/mihxil/streams/blocks/myjobs.jspx)
===================================================================
---
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
(rev 0)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
2009-05-15 14:15:34 UTC (rev 35200)
@@ -0,0 +1,31 @@
+<div
+ class="mm_c c_streams b_myjobs ${requestScope.componentClassName}"
+ id="${requestScope.componentId}"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:mm-res="urn:jsptagdir:/WEB-INF/tags/mm/resources"
+ xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+ xmlns:jsp="http://java.sun.com/JSP/Page"
+ xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
+
+ <jsp:output omit-xml-declaration="true" />
+
+ <ul>
+ <mm:listfunction set="streams" name="myJobs">
+ <li>
+ <span>${_.transcoder} (${_.progress})</span>
+ <p>
+ <span class="in">${_.transcoder.in}</span>
+ <jsp:text> -&gt; </jsp:text>
+ <span class="out">${_.transcoder.out}</span>
+ </p>
+ <div class="log">
+ <pre>
+ <jsp:text>${_.logger.debugList}</jsp:text>
+ </pre>
+ </div>
+ </li>
+ </mm:listfunction>
+ </ul>
+
+
+</div>
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs