📄 jmfextending.html
字号:
</code><a name="105429"> </a>
<a name="105430"> </a><code> supportedRGB = new RGBFormat(null, // size
</code><a name="105431"> </a><code> Format.NOT_SPECIFIED, // maxDataLength
</code><a name="105432"> </a><code> int[].class, // buffer type
</code><a name="105433"> </a><code> Format.NOT_SPECIFIED, // frame rate
</code><a name="105434"> </a><code> 32, // bitsPerPixel
</code><a name="105435"> </a><code> RGBFormat.PACKED, // packed
</code><a name="105436"> </a><code> rMask, gMask, bMask, // component masks
</code><a name="105437"> </a><code> 1, // pixel stride
</code><a name="105438"> </a><code> Format.NOT_SPECIFIED, // line stride
</code><a name="105439"> </a><code> Format.FALSE, // flipped
</code><a name="105440"> </a><code> Format.NOT_SPECIFIED // endian
</code><a name="105441"> </a><code> );
</code><a name="105442"> </a><code> supportedFormats = new VideoFormat[1];
</code><a name="105443"> </a><code> supportedFormats[0] = supportedRGB;
</code><a name="105444"> </a><code> }
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105452"> </a><code> /**
* Controls implementation
</code><a name="105453"> </a><code> **/
</code><a name="105454"> </a><code>
</code><a name="105455"> </a><code> // Returns an array of supported controls
</code><a name="105456"> </a><code>
public Object[] getControls() {
</code><a name="105457"> </a><code> // No controls
</code><a name="105458"> </a><code> return (Object[]) new Control[0];
</code><a name="105459"> </a><code> }
</code><a name="105460"> </a>
<a name="105461"> </a><code> /**
</code><a name="105462"> </a><code> * Return the control based on a control type for the PlugIn.
</code><a name="105463"> </a><code> */
</code><a name="105464"> </a><code> public Object getControl(String controlType) {
</code><a name="105465"> </a><code> try {
</code><a name="105466"> </a><code> Class cls = Class.forName(controlType);
</code><a name="105467"> </a><code> Object cs[] = getControls();
</code><a name="105468"> </a><code> for (int i = 0; i < cs.length; i++) {
</code><a name="105469"> </a><code> if (cls.isInstance(cs[i]))
</code><a name="105470"> </a><code> return cs[i];
</code><a name="105471"> </a><code> }
</code><a name="105472"> </a><code> return null;
</code><a name="105473"> </a><code> } catch (Exception e) { // no such controlType or such control
</code><a name="105474"> </a><code> return null;
</code><a name="105475"> </a><code> }
</code><a name="105476"> </a><code> }
</code><a name="105477"> </a>
<a name="105478"> </a><code> /**
</code><a name="105479"> </a><code> * PlugIn implementation
</code><a name="105480"> </a><code> **/
</code><a name="105481"> </a>
<a name="105482"> </a><code> public String getName() {
</code><a name="105483"> </a><code> return name;
</code><a name="105484"> </a><code> }
</code><a name="105485"> </a><code>
</code><a name="105486"> </a><code> // Opens the plugin
</code><a name="105487"> </a><code> public void open() throws ResourceUnavailableException {
</code><a name="105488"> </a><code> sourceImage = null;
</code><a name="105489"> </a><code> destImage = null;
</code><a name="105490"> </a><code> lastBuffer = null;
</code><a name="105491"> </a><code> }
</code><a name="105497"> </a><code> /** Resets the state of the plug-in. Typically at end of media or
* when media is repositioned.
</code><a name="105498"> </a><code> */
</code><a name="105499"> </a><code> public void reset() {
</code><a name="105500"> </a><code> // Nothing to do
</code><a name="105501"> </a><code> }
</code><a name="105502"> </a>
<a name="105503"> </a><code> public void close() {
</code><a name="105504"> </a><code> // Nothing to do
</code><a name="105505"> </a><code> }
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105514"> </a><code> /**
</code><a name="105515"> </a><code> * Renderer implementation
</code><a name="105516"> </a><code> **/
</code><a name="105517"> </a>
<a name="105518"> </a><code> public void start() {
</code><a name="105519"> </a><code> started = true;
</code><a name="105520"> </a><code> }
</code><a name="105521"> </a>
<a name="105522"> </a><code> public void stop() {
</code><a name="105523"> </a><code> started = false;
</code><a name="105524"> </a><code> }
</code><a name="105525"> </a><code>
</code><a name="105526"> </a><code> // Lists the possible input formats supported by this plug-in.
</code><a name="105527"> </a>
<a name="105528"> </a><code> public Format [] getSupportedInputFormats() {
</code><a name="105529"> </a><code> return supportedFormats;
</code><a name="105530"> </a><code> }
</code><a name="105531"> </a><code> // Set the data input format.
</code><a name="105532"> </a>
<a name="105533"> </a><code> public Format setInputFormat(Format format) {
</code><a name="105534"> </a><code> if ( format != null && format instanceof RGBFormat &&
</code><a name="105535"> </a><code> format.matches(supportedRGB)) {
</code><a name="105536"> </a><code>
</code><a name="105537"> </a><code> inputFormat = (RGBFormat) format;
</code><a name="105538"> </a><code> Dimension size = inputFormat.getSize();
</code><a name="105539"> </a><code> inWidth = size.width;
</code><a name="105540"> </a><code> inHeight = size.height;
</code><a name="105541"> </a><code> return format;
</code><a name="105542"> </a><code> } else
</code><a name="105543"> </a><code> return null;
</code><a name="105544"> </a><code> }
</code><a name="105545"> </a>
<a name="105546"> </a><code> // Processes the data and renders it to a component
</code><a name="105547"> </a>
<a name="105548"> </a><code> public synchronized int process(Buffer buffer) {
</code><a name="105549"> </a><code> if (component == null)
</code><a name="105550"> </a><code> return BUFFER_PROCESSED_FAILED;
</code><a name="105551"> </a>
<a name="105552"> </a><code> Format inf = buffer.getFormat();
</code><a name="105553"> </a><code> if (inf == null)
</code><a name="105566"> </a><code> return BUFFER_PROCESSED_FAILED;
</code><a name="105570"> </a><code> if (inf != inputFormat || !buffer.getFormat().equals(inputFormat))
</code><a name="106113"> </a><code> {
</code><a name="105571"> </a><code> if (setInputFormat(inf) != null)
</code><a name="105572"> </a><code> return BUFFER_PROCESSED_FAILED;
</code><a name="105573"> </a><code> }
</code><a name="105579"> </a>
<a name="105584"> </a><code> Object data = buffer.getData();
</code><a name="105580"> </a><code> if (!(data instanceof int[]))
</code><a name="105581"> </a><code> return BUFFER_PROCESSED_FAILED;
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105595"> </a><code> if (lastBuffer != buffer) {
</code><a name="105596"> </a><code> lastBuffer = buffer;
</code><a name="105597"> </a><code> newImage(buffer);
</code><a name="105598"> </a><code> }
</code><a name="105599"> </a>
<a name="105600"> </a><code> sourceImage.newPixels(0, 0, inWidth, inHeight);
</code><a name="105601"> </a>
<a name="105602"> </a><code> Graphics g = component.getGraphics();
</code><a name="105603"> </a><code> if (g != null) {
</code><a name="105604"> </a><code> if (reqBounds == null) {
</code><a name="105605"> </a><code> bounds = component.getBounds();
</code><a name="105606"> </a><code> bounds.x = 0;
</code><a name="105607"> </a><code> bounds.y = 0;
</code><a name="105608"> </a><code> } else
</code><a name="105609"> </a><code> bounds = reqBounds;
</code><a name="105610"> </a><code> g.drawImage(destImage, bounds.x, bounds.y,
</code><a name="105611"> </a><code> bounds.width, bounds.height,
</code><a name="105612"> </a><code> 0, 0, inWidth, inHeight, component);
</code><a name="105613"> </a><code> }
</code><a name="105614"> </a><code>
</code><a name="105615"> </a><code> return BUFFER_PROCESSED_OK;
</code><a name="105616"> </a><code> }
</code><a name="105617"> </a>
<a name="105618"> </a><code> /**
</code><a name="105619"> </a><code> * VideoRenderer implementation
</code><a name="105620"> </a><code> **/
</code><a name="105621"> </a>
<a name="105622"> </a><code> /**
</code><a name="105623"> </a><code> * Returns an AWT component that it will render to. Returns null
</code><a name="105624"> </a><code> * if it is not rendering to an AWT component.
</code><a name="105625"> </a><code> */
</code><a name="105626"> </a><code> public java.awt.Component getComponent() {
</code><a name="105627"> </a><code> if (component == null) {
</code><a name="105628"> </a><code> component = new Canvas() {
</code><a name="105629"> </a><code> public Dimension getPreferredSize() {
</code><a name="105630"> </a><code> return new Dimension(getInWidth(), getInHeight());
</code><a name="105631"> </a><code> }
</code><a name="105632"> </a>
<a name="105633"> </a><code> public void update(Graphics g) {
</code><a name="105634"> </a><code> }
</code><a name="105635"> </a>
<a name="105636"> </a><code> public void paint(Graphics g) {
</code><a name="105637"> </a><code> // Need to repaint image if the movie is in paused state
</code><a name="105638"> </a><code> }
</code><a name="105639"> </a>
<a name="105640"> </a><code> };
</code><a name="105641"> </a><code> }
</code><a name="105642"> </a>
<a name="105643"> </a><code> return component;
</code><a name="105644"> </a><code> }
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="105727"> </a><code> /**
</code><a name="105728"> </a><code> * Requests the renderer to draw into a specified AWT component.
</code><a name="105729"> </a><code> * Returns false if the renderer cannot draw into the specified
</code><a name="105730"> </a><code> * component.
</code><a name="105731"> </a><code> */
</code><a name="105732"> </a><code> public boolean setComponent(java.awt.Component comp) {
</code><a name="105733"> </a><code> component = comp;
</code><a name="105734"> </a><code> return true;
</code><a name="105735"> </a><code> }
</code><a name="105736"> </a><code>
/**
</code><a name="105737"> </a><code> * Sets the region in the component where the video is to be
</code><a name="105738"> </a><code> * rendered to. Video is to be scaled if necessary. If
* <code>rect</code> is null, then the video occupies the entire
* component.
</code><a name="105739"> </a><code> */
</code><a name="105740"> </a><code> public void setBounds(java.awt.Rectangle rect) {
</code><a name="105741"> </a><code> reqBounds = rect;
</code><a name="105742"> </a><code> }
</code><a name="105743"> </a>
<a name="105744"> </a><code> /**
</code><a name="105745"> </a><code> * Returns the region in the component where the video will be
</code><a name="105746"> </a><code> * rendered to. Returns null if the entire component is being used.
</code><a name="105747"> </a><code> */
</code><a name="105748"> </a><code> public java.awt.Rectangle getBounds() {
</code><a name="105749"> </a><code> return reqBounds;
</code><a name="105750"> </a><code> }
</code><a name="105751"> </a><code>
</code><a name="105752"> </a><code> /**
</code><a name="105753"> </a><code> * Local methods
**/
</code><a name="105754"> </a>
<a name="105755"> </a><code> int getInWidth() {
</code><a name="105756"> </a><code> return inWidth;
</code><a name="105757"> </a><code> }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -