Package net.sf.fmj.utility

Source Code of net.sf.fmj.utility.PlugInUtility

package net.sf.fmj.utility;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.media.Codec;
import javax.media.Demultiplexer;
import javax.media.Effect;
import javax.media.Format;
import javax.media.Multiplexer;
import javax.media.PlugInManager;
import javax.media.Renderer;
import javax.media.protocol.ContentDescriptor;

/**
* Helper class to register plugins with the PlugInManager, but only requiring the class name.
* The rest is done by reflection/instantiation/querying.
* @author Ken Larson
*
*/
public class PlugInUtility
{
  private static final Logger logger = LoggerSingleton.logger;

  private static final boolean TRACE = false;
 
  public static boolean registerPlugIn(String className)
  {
    final PlugInInfo i = getPlugInInfo(className);
    if (i == null)
      return false;
   
    try
    {
      return PlugInManager.addPlugIn(i.className, i.in, i.out, i.type);
    }
    catch (Throwable e// catch Throwable instead of Exception because some plug-ins load native libraries, and if the native libraries are missing, we can get exceptions not caught by Exception
    {
      logger.fine("PlugInUtility: Unable to register plugin " + className + ": " + e);
      return false;
    }
   
  }
 
  public static PlugInInfo getPlugInInfo(String className)
  {
   
    final Object o;
    try
    {
      final Class clazz = Class.forName(className);
      o = clazz.newInstance();

      if (o instanceof Demultiplexer)
      {
        if (TRACE) logger.fine("PlugInUtility: Registering demultiplexer: " + className);
        final Demultiplexer oCast = (Demultiplexer) o;
        final ContentDescriptor[] contentDescriptors = oCast.getSupportedInputContentDescriptors();
        final Format[] formats = new Format[contentDescriptors.length];
        for (int i = 0; i < contentDescriptors.length; ++i)
        {
          if (TRACE) logger.fine("\t" + contentDescriptors[i]);
          formats[i] = contentDescriptors[i];
        }
       
        return new PlugInInfo(className, formats, new Format[] {}, PlugInManager.DEMULTIPLEXER);
       
      }
      else if (o instanceof Codec)
      {
        if (TRACE) logger.fine("PlugInUtility: Registering codec: " + className);
        final Codec oCast = (Codec) o;
        final Format[] inputFormats = oCast.getSupportedInputFormats();
 
        final Format[] outputFormats = oCast.getSupportedOutputFormats(null)// this is what JMRegistry does
       
        return new PlugInInfo(className, inputFormats, outputFormats, (o instanceof Effect) ? PlugInManager.EFFECT : PlugInManager.CODEC);
   
      }
      else if (o instanceof Renderer)
      {
        if (TRACE) logger.fine("PlugInUtility: Registering renderer: " + className);
        final Renderer oCast = (Renderer) o;
        final Format[] inputFormats = oCast.getSupportedInputFormats();
        return new PlugInInfo(className, inputFormats, new Format[] {}, PlugInManager.RENDERER);
      }
      else if (o instanceof Multiplexer)
      { 
        if (TRACE) logger.fine("PlugInUtility: Registering Multiplexer: " + className);
        final Multiplexer oCast = (Multiplexer) o;
        // JMF Multiplexers always have nothing for the input formats.
        return new PlugInInfo(className, new Format[] {}, oCast.getSupportedOutputContentDescriptors(null), PlugInManager.MULTIPLEXER);
      }
      else
      {
        logger.warning("PlugInUtility: Unknown or unsupported plug-in: " + o.getClass());
        return null;
      }
   
    }
    catch (Throwable e// catch Throwable instead of Exception because some plug-ins load native libraries, and if the native libraries are missing, we can get exceptions not caught by Exception
    {
      logger.log(Level.FINE, "PlugInUtility: Unable to get plugin info for " + className + ": " + e);
      return null;
    }
   
  }
}
TOP

Related Classes of net.sf.fmj.utility.PlugInUtility

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.