Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Query the manager class about the configuration and support of JMF

/* Java Media APIs: Cross-Platform Imaging, Media and Visualization Alejandro Terrazas Sams, Published November 2002,  ISBN 0672320940 */ /*******************************************************************************  * ManagerQuery - Query the manager class about the configuration and support of  * the installed JMF version. ManagerQuery is a text-based application that  * provides a report on the support of the JMF for Players, Processors and  * DataSinks.  *   * Without any command-line arguments ManagerQuery prints a complete (LONG) list  * of Player, Processor, and DataSource classes that support the various  * formats, protocols, and content types.  *   * Alternatively it is possible to provide command-line arguments specifying the  * format or protocol for which support is to be checked. The means of calling  * is as follows: java ManagerQuery [ [-h|-p|-d] support1 support2 ... supportN]  * The -h flag specifies handlers (Players) only. The -p flag specifies  * Processors only. The -d flag specifies DataSources only. Leaving off the flag  * defaults behaviour to checking for Players only.  *   * For instance: java ManagerQuery -h mp3 ulaw would list the classes capable of  * Playing the MP3 (MPEG, Layer 3) and U-Law formats (codecs).  *   * ManagerQuery always prints the version of JMF, caching directory, and hints  * prior to any other output.  *   * @author Spike Barlow  ******************************************************************************/ import javax.media.*; import javax.media.protocol.*; import javax.media.format.*; import java.util.*; public class ManagerQuery {   ///////////////////////////////////////////////////   // Constants to facilitate selection of the   // approprite get*List() method.   ///////////////////////////////////////////////////   public static final int HANDLERS = 1;   public static final int PROCESSORS = 2;   public static final int DATASOURCES = 3;   ///////////////////////////////////////////////////////   // Array containing all the content types that JMF2.1.1   // supports. This is used when the user provides no   // command-line arguments in order to generate a   // complete list of support for all the content types.   /////////////////////////////////////////////////////////   private static final String[] CONTENTS = {       ContentDescriptor.CONTENT_UNKNOWN, ContentDescriptor.MIXED,       ContentDescriptor.RAW, ContentDescriptor.RAW_RTP,       FileTypeDescriptor.AIFF, FileTypeDescriptor.BASIC_AUDIO,       FileTypeDescriptor.GSM, FileTypeDescriptor.MIDI,       FileTypeDescriptor.MPEG, FileTypeDescriptor.MPEG_AUDIO,       FileTypeDescriptor.MSVIDEO, FileTypeDescriptor.QUICKTIME,       FileTypeDescriptor.RMF, FileTypeDescriptor.VIVO,       FileTypeDescriptor.WAVE, VideoFormat.CINEPAK, VideoFormat.H261,       VideoFormat.H263, VideoFormat.H261_RTP, VideoFormat.H263_RTP,       VideoFormat.INDEO32, VideoFormat.INDEO41, VideoFormat.INDEO50,       VideoFormat.IRGB, VideoFormat.JPEG, VideoFormat.JPEG_RTP,       VideoFormat.MJPEGA, VideoFormat.MJPEGB, VideoFormat.MJPG,       VideoFormat.MPEG_RTP, VideoFormat.RGB, VideoFormat.RLE,       VideoFormat.SMC, VideoFormat.YUV, AudioFormat.ALAW,       AudioFormat.DOLBYAC3, AudioFormat.DVI, AudioFormat.DVI_RTP,       AudioFormat.G723, AudioFormat.G723_RTP, AudioFormat.G728,       AudioFormat.G728_RTP, AudioFormat.G729, AudioFormat.G729_RTP,       AudioFormat.G729A, AudioFormat.G729A_RTP, AudioFormat.GSM,       AudioFormat.GSM_MS, AudioFormat.GSM_RTP, AudioFormat.IMA4,       AudioFormat.IMA4_MS, AudioFormat.LINEAR, AudioFormat.MAC3,       AudioFormat.MAC6, AudioFormat.MPEG, AudioFormat.MPEG_RTP,       AudioFormat.MPEGLAYER3, AudioFormat.MSADPCM, AudioFormat.MSNAUDIO,       AudioFormat.MSRT24, AudioFormat.TRUESPEECH, AudioFormat.ULAW,       AudioFormat.ULAW_RTP, AudioFormat.VOXWAREAC10,       AudioFormat.VOXWAREAC16, AudioFormat.VOXWAREAC20,       AudioFormat.VOXWAREAC8, AudioFormat.VOXWAREMETASOUND,       AudioFormat.VOXWAREMETAVOICE, AudioFormat.VOXWARERT29H,       AudioFormat.VOXWARETQ40, AudioFormat.VOXWARETQ60,       AudioFormat.VOXWAREVR12, AudioFormat.VOXWAREVR18 };   ////////////////////////////////////   // The protocols that JMF supports.   ///////////////////////////////////   private static final String[] PROTOCOLS = { "ftp", "file", "rtp", "http" };   /***************************************************************************    * Return a String being a list of all hints settings.    **************************************************************************/   public static String getHints() {     return "\tSecurity: " + Manager.getHint(Manager.MAX_SECURITY)         + "\n\tCaching: " + Manager.getHint(Manager.CACHING)         + "\n\tLightweight Renderer: "         + Manager.getHint(Manager.LIGHTWEIGHT_RENDERER)         + "\n\tPlug-in Player: "         + Manager.getHint(Manager.PLUGIN_PLAYER);   }   /***************************************************************************    * Produce a list of all classes that support the content types or protocols    * passed to the method. The list is returned as a formatted String, while    * the 2nd parameter (which) specifies whether it is Player (Handler),    * Processor, or DataSource classes.    **************************************************************************/   public static String getHandlersOrProcessors(String[] contents, int which) {     String str = "";     Vector classes;     int NUM_PER_LINE = 2;     String LEADING = "\t    ";     String SEPARATOR = "  ";     if (contents == null)       return null;     /////////////////////////////////////////////////////////////////////     // Generate a separate list for each content-type/protocol specified.     /////////////////////////////////////////////////////////////////////     for (int i = 0; i < contents.length; i++) {       str = str + "\t" + contents[i] + ":\n";       if (which == HANDLERS)         classes = Manager.getHandlerClassList(contents[i]);       else if (which == PROCESSORS)         classes = Manager.getProcessorClassList(contents[i]);       else         classes = Manager.getDataSourceList(contents[i]);       if (classes == null)         str = str + "\t    <None>\n";       else         str = str + formatVectorStrings(classes, LEADING, 2, SEPARATOR);     }     return str;   }   /***************************************************************************    * Get a list of all Handler (Player) classes that support each of the    * formats (content types).    **************************************************************************/   public static String getHandlers() {     return getHandlersOrProcessors(CONTENTS, HANDLERS);   }   /***************************************************************************    * Get a list of all Processor classes that support each of the formats    * (content types).    **************************************************************************/   public static String getProcessors() {     return getHandlersOrProcessors(CONTENTS, PROCESSORS);   }   /***************************************************************************    * Get a list of all DataSources classes that support each of the protocols.    **************************************************************************/   public static String getDataSources() {     return getHandlersOrProcessors(PROTOCOLS, DATASOURCES);   }   /***************************************************************************    * Format the Vector of Strings returned by the get*List() methods into a    * single String. A simple formatting method.    **************************************************************************/   public static String formatVectorStrings(Vector vec, String leading,       int count, String separator) {     String str = leading;     for (int i = 0; i < vec.size(); i++) {       str = str + (String) vec.elementAt(i);       if ((i + 1) == vec.size())         str = str + "\n";       else if ((i + 1) % count == 0)         str = str + "\n" + leading;       else         str = str + separator;     }     return str;   }   /***************************************************************************    * Produce a list showing total support (i.e., Player, Processors, and    * DataSinks) for all content types and protocols.    **************************************************************************/   public static void printTotalList() {     System.out.println("\nPlayer Handler Classes:");     System.out.println(getHandlers());     System.out.println("\nProcessor Class List:");     System.out.println(getProcessors());     System.out.println("\nDataSink Class List: ");     System.out.println(getDataSources());   }   /***************************************************************************    * Main method. Produce a version and hints report. Then if no command line    * arguments produce a total class list report. Otherwise process the    * command line arguments and produce a report on their basis only.    **************************************************************************/   public static void main(String args[]) {     System.out.println("JMF: " + Manager.getVersion());     String cacheArea = Manager.getCacheDirectory();     if (cacheArea == null)       System.out.println("No cache directory specified.");     else       System.out.println("Cache Directory: " + cacheArea);     System.out.println("Hints:");     System.out.println(getHints());     // No command-line arguments. Make a toral report.     if (args == null || args.length == 0)       printTotalList();     else {       // Command-line. Process flags and then support to be       // queried upon in order to generate appropriate report.       String header = "";       int whichCategory = 0;       String[] interested;       int i;       int start;       if (args[0].equalsIgnoreCase("-h")) {         header = "\nPlayer Handler Classes: ";         whichCategory = HANDLERS;       } else if (args[0].equalsIgnoreCase("-p")) {         header = "\nProcessor Class List:";         whichCategory = PROCESSORS;       } else if (args[0].equalsIgnoreCase("-d")) {         header = "\nDataSink Class List: ";         whichCategory = DATASOURCES;       }       if (whichCategory == 0) {         whichCategory = HANDLERS;         header = "\nPlayer Handler Classes: ";         interested = new String[args.length];         start = 0;       } else {         interested = new String[args.length - 1];         start = 1;       }       for (i = start; i < args.length; i++)         interested[i - start] = args[i];       System.out.println(header);       System.out.println(getHandlersOrProcessors(interested,           whichCategory));     }   } }