Package com.omnividea.media.renderer.video

Source Code of com.omnividea.media.renderer.video.OpenGLRenderer

/******************************************************************************
* FOBS Java CrossPlatform JMF PlugIn
* Copyright (c) 2004 Omnividea Multimedia S.L
*
*    This file is part of FOBS.
*
*    FOBS is free software; you can redistribute it and/or modify
*    it under the terms of the GNU Lesser General Public License as
*    published by the Free Software Foundation; either version 2.1
*    of the License, or (at your option) any later version.
*
*    FOBS is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*    GNU Lesser General Public License for more details.
*
*    You should have received a copy of the GNU Lesser General Public
*    License along with FOBS; if not, write to the Free Software
*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
******************************************************************************/

/*
* Created on 06.02.2005 by Robert Binna
* ChangeLog:
*  Jose San Pedro Wandelmer 2005/02/21 - Major changes to code structure
*      - Package changed to fit Fobs package naming
*      - Automatic Generated comments removed
*      - Header included with license information
*      - Jogl animator use have been removed. Explicit calls to display() seems to be more efficient.
*      - The Renderer is generated by the class (FlatRenderer only at the moment)
*      - Thanks to Robert Binna for his contribution to the project!!
*  Robert Hastings 2007/01/04
*      - Native Library Location routines
*      - Improvements to frame buffer management
*/

package com.omnividea.media.renderer.video;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;

import javax.media.Buffer;
import javax.media.Format;
import javax.media.ResourceUnavailableException;
import javax.media.format.RGBFormat;
import javax.media.renderer.VideoRenderer;
import javax.media.control.FrameGrabbingControl;
import javax.media.util.ImageToBuffer;

import net.java.games.jogl.Animator;
import net.java.games.jogl.GLCanvas;
import net.java.games.jogl.GLCapabilities;
import net.java.games.jogl.GLDrawableFactory;
import javax.swing.JPanel;

import com.omnividea.media.renderer.video.opengl.RenderEventListener;
import com.omnividea.media.renderer.video.opengl.FlatRenderer;
import com.omnividea.FobsConfiguration;

public class OpenGLRenderer implements VideoRenderer, FrameGrabbingControl {

    private BufferStrategy strategy;
    private GLCanvas canvas;
    private Animator animator = null;
    private RenderEventListener listener;
    private FlatRenderer flatRenderer = null;
    private JPanel panel = null;
    private Image lastImage;

    public OpenGLRenderer() {
        GLCapabilities capbilities = new GLCapabilities();
        capbilities.setDoubleBuffered(true);
        capbilities.setAlphaBits(8);
        capbilities.setRedBits(8);
        capbilities.setGreenBits(8);
        capbilities.setBlueBits(8);       
        System.out.println("OpenGL Renderer: cons");
        canvas = GLDrawableFactory.getFactory().createGLCanvas(capbilities);
        flatRenderer = new FlatRenderer();
        //flatRenderer.init(canvas);
        addRenderEventListener(flatRenderer);
        panel = new JPanel();
        panel.setIgnoreRepaint(true);
        panel.add(canvas);
    }
   
    public void addRenderEventListener(RenderEventListener listener) {
        System.out.println("OpenGL Renderer: add Render Event");
        this.listener = listener;
        canvas.addGLEventListener(listener);
        canvas.addMouseMotionListener(listener);
    }
   
  private RGBFormat vf;
    private BufferedImage bufferedImage;
    private int []pixels;
    //private int[][] pixels = new int[2][];
   
    private int formatWidth;
    private int formatHeight;
    private int currentIndex = 0;
   
    void setValue(Object aValue,boolean isSelected) {
        System.out.println(aValue.getClass().getName());
    }

    public Format[] getSupportedInputFormats() {
        RGBFormat format = new RGBFormat();
        return new Format[] {  format };
    }

    public Format setInputFormat(Format format) {
        FobsConfiguration.reset();
        FobsConfiguration.videoFrameFormat=FobsConfiguration.YUV420;

/*        vf = (RGBFormat) format;
    this.formatWidth = (int) vf.getSize().getWidth();
      this.formatHeight = (int) vf.getSize().getHeight();
      listener.setFormat(formatWidth,formatHeight);
      pixels[0] = new int[formatWidth * formatHeight];
      pixels[1] = new int[formatWidth * formatHeight];

        FobsConfiguration.videoFrameFormat=FobsConfiguration.RGBA;*/

        vf = (RGBFormat) format;
    int formatWidth = (int) vf.getSize().getWidth();
      int formatHeight = (int) vf.getSize().getHeight();
      listener.setFormat(formatWidth,formatHeight);
       
        /*
        bufferedImage = new BufferedImage(formatWidth,formatHeight, BufferedImage.TYPE_INT_RGB);
        pixels = ( (DataBufferInt) bufferedImage.getRaster().getDataBuffer()).getData();
       
        FobsConfiguration.properties.put("BufferedImage", bufferedImage);
        FobsConfiguration.properties.put("BufferedImageIntBuffer", pixels);
      */
       
      canvas.setSize(new Dimension(formatWidth,formatHeight));
      panel.setPreferredSize(new Dimension(formatWidth,formatHeight));
        return format;
    }

    public void start() {
        /*
        if(animator == null) {
            animator = new Animator(canvas);
            animator.start();
            System.out.println("animator started");
        }*/
       
    }

    public void stop() {
        /*
        if(animator != null) {
            animator.stop();
            animator = null;
        }
        */
    }

    public int process(Buffer buffer) {
       
        /*int[] bufferdata = (int[]) buffer.getData();
        int nextIndex = (currentIndex +1)%2;
        currentIndex = nextIndex;
        */
        /*
        int[] destination = pixels[nextIndex];
        int size = destination.length;
        int offsetSrc = 0;
        int offsetDest = destination.length - formatWidth;
    for(int i=0; i < formatHeight; ++i) {
        for(int j=formatWidth - 1; j >= 0; --j) {
            destination[offsetDest] = (bufferdata[offsetSrc] << 8);
            ++offsetDest;
            ++offsetSrc;
        }
       
        offsetDest -= formatWidth * 2;
    }
   
    if(listener != null) {
        listener.setRenderingData(pixels[currentIndex]);
            canvas.display();
    }
        */
    if(listener != null) {
        listener.setRenderingData(pixels/*bufferdata*/);
            canvas.display();
    }

   
   
    return BUFFER_PROCESSED_OK;
    }

    public String getName() {
        return "Fobs GL Renderer";
    }

    public void open() throws ResourceUnavailableException {
    }

    public void close() {
       
       
    }

    public void reset() {
    }


    public Component getComponent() {
        //return canvas;
        return panel;
    }

    public boolean setComponent(Component arg0) {
        return false;
    }

    public void setBounds(Rectangle arg0) {
        System.out.println("set bounds :: " + arg0);
       
    }

    public Rectangle getBounds() {
        return null;
    }
   
   
   
  // support for FrameGrabbingControl
  public Buffer grabFrame() {
    //BufferedImage bufimg = (BufferedImage)FobsConfiguration.properties.get("BufferedImage");
    Buffer buf = ImageToBuffer.createBuffer(lastImage,(float)0);
    return buf;
  }
  
  // No awt component is needed for FrameGrabbingControl
  public Component getControlComponent() {
    return null;
  }
  
  public Object[] getControls() {
    Object[] obj = { this };
    return obj;
  }
  
  public Object getControl(String arg) {
    Object rc = null;
    if(arg.equals("javax.media.control.FrameGrabbingControl")) rc = this;
    return rc;
  }
  // new code-end
}
TOP

Related Classes of com.omnividea.media.renderer.video.OpenGLRenderer

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.