⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmfextending.html

📁 奉献给多媒体java编程者们。JMF2.1.1最新版本的用户指南。JMF是java用于基于实时多媒体的开发工具
💻 HTML
📖 第 1 页 / 共 5 页
字号:
</code><br></font>


<h4>
  <a name="104796"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">Implementing a Codec or Effect Plug-In</font>
</h4>


<p>
  <a name="94855"> </a><font face="Palatino, Times New Roman, Times, serif"><code>Codec</code> plug-ins are used to decode compressed media data, convert media data from one format to another, or encode raw media data into a compressed format. You might want to implement a <code>Codec</code> to provide performance enhancements over existing solutions, support new compressed or uncompressed data formats, or convert data from a custom format to a standard format that can be easily processed and rendered. </font>
</p>


<p>
  <a name="94856"> </a><font face="Palatino, Times New Roman, Times, serif">A <code>Codec</code> is a single-input, single-output processing component. It reads data for an individual track, processes the data, and outputs the results. </font>
</p>


<p>
  <a name="94857"> </a><font face="Palatino, Times New Roman, Times, serif">A <code>Codec</code> plug-in can enable the user to control the processing it performs through <code>EncodingControl</code> or <code>DecodingControl</code> objects. These controls provide a way to adjust attributes such as the frame rate, bit rate, and compression ratio. Codec controls are accessed through the <code>getControls</code> method. If a particular <code>CodecControl</code> provides a user-interface component, its accessed by calling <code>getControlComponent</code>. </font>
</p>


<p>
  <a name="94858"> </a><font face="Palatino, Times New Roman, Times, serif">When you implement a <code>Codec</code>, you need to:</font>
</p>

<ol type="1">
  <li value="1"><a name="94859"> </a><font face="Palatino, Times New Roman, Times, serif">Implement <code>getSupportedInputFormats</code> and <code>getSupportedOutputFormats</code> to advertise what input and output formats the codec supports.</font>
  <li value="2"><a name="94860"> </a><font face="Palatino, Times New Roman, Times, serif">Enable the selection of those formats by implementing <code>setInputFormat</code> and <code>setOutputFormat</code>.</font>
  <li value="3"><a name="94861"> </a><font face="Palatino, Times New Roman, Times, serif">Implement <code>process</code> to actually perform the compression or decompression of the input <code>Track</code>.</font>
</ol>

<h5>
  <a name="94862"> </a><i><font color="#003366" face="Palatino, Times New Roman, Times, serif">Effect Plug-ins</font></i>
</h5>


<p>
  <a name="94863"> </a><font face="Palatino, Times New Roman, Times, serif">An <code>Effect</code> plug-in is actually a specialized type of <code>Codec</code> that performs some processing on the input <code>Track</code> other than compression or decompression. For example, you might implement a gain effect that adjusts the volume of an audio track. Like a <code>Codec</code>, an <code>Effect</code> is a single-input, single-output processing component and the data manipulation that the <code>Effect</code> performs is implemented in the <code>process</code> method.</font>
</p>


<p>
  <a name="94864"> </a><font face="Palatino, Times New Roman, Times, serif">An <code>Effect</code> plug-in can be used as either a pre-processing effect or a post-processing effect. For example, if a <code>Processor</code> is being used to render a compressed media stream, the <code>Effect</code> would typically be used as a post-processing effect and applied after the stream has been decoded. Conversely, if the <code>Processor</code> was being used to output a compressed media stream, the <code>Effect</code> would typically be applied as a pre-processing effect before the stream is encoded. </font>
</p>


<p>
  <a name="95264"> </a><font face="Palatino, Times New Roman, Times, serif">When you implement an <code>Effect</code>, you need to:</font>
</p>

<ol type="1">
  <li value="1"><a name="95265"> </a><font face="Palatino, Times New Roman, Times, serif">Implement <code>getSupportedInputFormats</code> and <code>getSupportedOutputFormats</code> to advertise what input and output formats the effect supports.</font>
  <li value="2"><a name="95266"> </a><font face="Palatino, Times New Roman, Times, serif">Enable the selection of those formats by implementing <code>setInputFormat</code> and <code>setOutputFormat</code>.</font>
  <li value="3"><a name="95267"> </a><font face="Palatino, Times New Roman, Times, serif">Implement <code>process</code> to actually perform the effect processing.</font>
</ol>

<p>
  <a name="95283"> </a><font face="Palatino, Times New Roman, Times, serif">Note that there's no mechanism for specifying what a particular <code>Effect</code> does--the name of an <code>Effect</code> plug-in class should provide some indication of its intended use. </font>
</p>


<h5>
  <a name="95527"> </a><i><font color="#003366" face="Palatino, Times New Roman, Times, serif">Example: GainEffect Plug-In</font></i>
</h5>


<p>
  <a name="96446"> </a><font face="Palatino, Times New Roman, Times, serif">In this example, the <code>Effect</code> interface is implemented to create an effect that adjusts the gain on the incoming audio data and outputs the modified data. By default, the <code>GainEffect</code> <code>process</code> method increases the gain by a factor of 2.</font>
</p>


<a name="104905"> </a><font  size="1" face="Palatino, Times New Roman, Times, serif">

<table border="1" bordercolorlight="#FFFFFF" bordercolordark="#000000"
       cellpadding="5" cellspacing="0">
  <caption><b><i><font face="Palatino, Times New Roman, Times, serif"><a name="104911"> </a>Example 6-4:  Implementing a gain effect plug-in  (1 of 5)</font></i></b></caption>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105271"> </a><code>import javax.media.*;
</code><a name="105272"> </a><code>import javax.media.format.*;
</code><a name="104925"> </a><code>import javax.media.format.audio.*;
</code><a name="104934"> </a>
<a name="104955"> </a><code>public class GainEffect implements Effect {
</code><a name="104935"> </a>
<a name="104936"> </a><code>    /** The effect name **/
</code><a name="104937"> </a><code>    private static String EffectName="GainEffect";
</code><a name="104938"> </a>
<a name="104939"> </a><code>    /** chosen input Format **/
</code><a name="104940"> </a><code>    protected AudioFormat inputFormat;
</code><a name="104941"> </a>
<a name="104942"> </a><code>    /** chosen output Format **/
</code><a name="104943"> </a><code>    protected AudioFormat outputFormat;
</code><a name="104944"> </a>
<a name="104945"> </a><code>    /** supported input Formats **/
</code><a name="104946"> </a><code>    protected Format[] supportedInputFormats=new Format[0];
</code><a name="104947"> </a>
<a name="104948"> </a><code>    /** supported output Formats **/
</code><a name="104949"> </a><code>    protected Format[] supportedOutputFormats=new Format[0];
</code><a name="104950"> </a>
<a name="104951"> </a><code>    /** selected Gain **/
</code><a name="104952"> </a><code>    protected float gain = 2.0F;
</code><a name="104959"> </a><code>    /** initialize the formats **/
</code><a name="104960"> </a><code>    public GainEffect() {
</code><a name="104961"> </a><code>        supportedInputFormats = new Format[] {
</code><a name="104962"> </a><code>	     new AudioFormat(
</code><a name="104963"> </a><code>	         AudioFormat.LINEAR,
</code><a name="104964"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="104965"> </a><code>                16,
</code><a name="104966"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="104967"> </a><code>                AudioFormat.LITTLE_ENDIAN,
</code><a name="104968"> </a><code>                AudioFormat.SIGNED,
</code><a name="104969"> </a><code>                16,
</code><a name="104970"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="104971"> </a><code>                Format.byteArray
</code><a name="104972"> </a><code>	     )
</code><a name="104973"> </a><code>	 };
</code><a name="104979"> </a><code>        supportedOutputFormats = new Format[] {
</code><a name="104980"> </a><code>	     new AudioFormat(
</code><a name="104981"> </a><code>	         AudioFormat.LINEAR,
</code><a name="104982"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="104983"> </a><code>                16,
</code><a name="104984"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="104985"> </a><code>                AudioFormat.LITTLE_ENDIAN,
</code><a name="104986"> </a><code>                AudioFormat.SIGNED,
</code><a name="104987"> </a><code>                16,
</code><a name="104988"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="105278"> </a><code>                Format.byteArray
</code><a name="105279"> </a><code>	     )
</code><a name="105298"> </a><code>	 };
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105289"> </a><code>    }
</code><a name="105000"> </a><code>    /** get the resources needed by this effect **/
</code><a name="105001"> </a><code>    public void open() throws ResourceUnavailableException {
</code><a name="105002"> </a><code>    }
</code><a name="105003"> </a>
<a name="105004"> </a><code>    /** free the resources allocated by this codec **/
</code><a name="105005"> </a><code>    public void close() {
</code><a name="105006"> </a><code>    }
</code><a name="105007"> </a>
<a name="105008"> </a><code>    /** reset the codec **/
</code><a name="105009"> </a><code>    public void reset() {
</code><a name="105010"> </a><code>    }
</code><a name="105011"> </a>
<a name="105012"> </a><code>    /** no controls for this simple effect **/
</code><a name="105013"> </a><code>    public Object[] getControls() {
</code><a name="105014"> </a><code>        return (Object[]) new Control[0];
</code><a name="105015"> </a><code>    }
</code><a name="105016"> </a>
<a name="105017"> </a><code>    /**
</code><a name="105018"> </a><code>     * Return the control based on a control type for the effect.
</code><a name="105019"> </a><code>     **/
</code><a name="105020"> </a><code>    public Object getControl(String controlType) {
</code><a name="105021"> </a><code>        try {
</code><a name="105022"> </a><code>            Class cls = Class.forName(controlType);
</code><a name="105023"> </a><code>            Object cs[] = getControls();
</code><a name="105024"> </a><code>            for (int i = 0; i &lt; cs.length; i++) {
</code><a name="105025"> </a><code>                if (cls.isInstance(cs[i]))
</code><a name="105026"> </a><code>                return cs[i];
</code><a name="105027"> </a><code>            }
</code><a name="105028"> </a><code>            return null;
</code><a name="105029"> </a><code>        } catch (Exception e) { // no such controlType or such control
</code><a name="105030"> </a><code>            return null;
</code><a name="105031"> </a><code>        }
</code><a name="105032"> </a><code>    }
</code><a name="105033"> </a><code>    /************** format methods *************/
</code><a name="105034"> </a><code>    /** set the input format **/
</code><a name="105035"> </a><code>    public Format setInputFormat(Format input) {
</code><a name="105036"> </a><code>        // the following code assumes valid Format
</code><a name="105037"> </a><code>        inputFormat = (AudioFormat)input;
</code><a name="105038"> </a><code>        return (Format)inputFormat;
</code><a name="105039"> </a><code>    }
</code><a name="105045"> </a><code>    /** set the output format **/
</code><a name="105046"> </a><code>    public Format setOutputFormat(Format output) {
</code><a name="105047"> </a><code>        // the following code assumes valid Format
</code><a name="105048"> </a><code>        outputFormat = (AudioFormat)output;
</code><a name="105049"> </a><code>        return (Format)outputFormat;
</code><a name="105050"> </a><code>    }
</code><a name="105056"> </a><code>    /** get the input format **/
</code><a name="105057"> </a><code>    protected Format getInputFormat() {
</code><a name="105058"> </a><code>        return inputFormat;
</code><a name="105059"> </a><code>    }
</code></pre>
</font></td>
  </tr>
  <tr>
    <td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105067"> </a><code>    /** get the output format **/
</code><a name="105068"> </a><code>    protected Format getOutputFormat() {
</code><a name="105069"> </a><code>        return outputFormat;
</code><a name="105070"> </a><code>    }
</code><a name="105071"> </a>
<a name="105072"> </a><code>    /** supported input formats **/
</code><a name="105073"> </a><code>    public Format [] getSupportedInputFormats() {
</code><a name="105074"> </a><code>        return supportedInputFormats;
</code><a name="105075"> </a><code>    }
</code><a name="105076"> </a>
<a name="105077"> </a><code>    /** output Formats for the selected input format **/
</code><a name="105078"> </a><code>    public Format [] getSupportedOutputFormats(Format in) {
</code><a name="105079"> </a><code>        if (! (in instanceof AudioFormat) )
</code><a name="105080"> </a><code>            return new Format[0];
</code><a name="105081"> </a>
<a name="105082"> </a><code>        AudioFormat iaf=(AudioFormat) in;
</code><a name="105083"> </a>
<a name="105084"> </a><code>        if (!iaf.matches(supportedInputFormats[0]))
</code><a name="105085"> </a><code>            return new Format[0];
</code><a name="105086"> </a>
<a name="105087"> </a><code>	 AudioFormat oaf= new AudioFormat(
</code><a name="105088"> </a><code>	         AudioFormat.LINEAR,
</code><a name="105089"> </a><code>                iaf.getSampleRate(),
</code><a name="105090"> </a><code>                16,
</code><a name="105091"> </a><code>                iaf.getChannels(),
</code><a name="105092"> </a><code>                AudioFormat.LITTLE_ENDIAN,
</code><a name="105093"> </a><code>                AudioFormat.SIGNED,
</code><a name="105094"> </a><code>                16,
</code><a name="105095"> </a><code>                Format.NOT_SPECIFIED,
</code><a name="105096"> </a><code>                Format.byteArray
</code><a name="105097"> </a><code>        );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -