Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main;
- import java.io.File;
- import java.nio.IntBuffer;
- import static org.lwjgl.opengl.GL11.*;
- import static org.lwjgl.opengl.GL12.GL_CLAMP_TO_EDGE;
- import org.gstreamer.Gst;
- import org.gstreamer.State;
- import org.gstreamer.elements.PlayBin2;
- import org.gstreamer.elements.RGBDataSink;
- import org.lwjgl.opengl.Display;
- public class GStreamer_TestPlayer
- {
- private int WIDTH, HEIGHT;
- private int texture;
- private IntBuffer buffer = null;
- private long before, msLength;
- private boolean done = false;
- private PlayBin2 playbin;
- public GStreamer_TestPlayer(int _w, int _h, String strToPlay, long _msLength)
- {
- WIDTH = _w;
- HEIGHT = _h;
- msLength = _msLength;
- texture = glGenTextures();
- glBindTexture(GL_TEXTURE_2D, texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, WIDTH, HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, (IntBuffer)null);
- //Gstreamer stuff
- try { LibraryLoaderImpl.getInstance().load(); } catch (Exception e){e.printStackTrace();}
- Gst.init("VideoPlayer", null);
- playbin = new PlayBin2("VideoPlayer");
- RGBListener listener = new RGBListener();
- playbin.setInputFile(new File(strToPlay));
- RGBDataSink sink = new RGBDataSink(("sink"), listener);
- sink.setPassDirectBuffer(true);
- playbin.setVideoSink(sink);
- Gst.getExecutor().execute(new Runnable()
- {
- public void run()
- {
- // playbin.setState(State.PLAYING)
- playbin.play();
- }
- });
- before = System.currentTimeMillis();
- }
- public boolean isDone() { return done; }
- public void update()
- {
- float scaleFactor = 1.0f;
- if (Display.getWidth() >= Display.getHeight())
- {
- scaleFactor = (float)Display.getHeight()/(float)HEIGHT;
- }
- else
- {
- scaleFactor = (float)Display.getWidth()/(float)WIDTH;
- }
- glClear(GL_COLOR_BUFFER_BIT);
- glBindTexture(GL_TEXTURE_2D, texture);
- if(buffer != null){
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
- }
- float x1, x2, y1, y2;
- y1 = (Display.getHeight()-(HEIGHT*scaleFactor))/2.0f;
- y2 = y1 + HEIGHT*scaleFactor;
- x1 = (Display.getWidth()-(WIDTH*scaleFactor))/2.0f;
- x2 = x1 + WIDTH*scaleFactor;
- glBegin(GL_QUADS);
- {
- glTexCoord2f(0, 0);
- glVertex2f(x1, y1);
- glTexCoord2f(1, 0);
- glVertex2f(x2, y1);
- glTexCoord2f(1, 1);
- glVertex2f(x2, y2);
- glTexCoord2f(0, 1);
- glVertex2f(x1, y2);
- }
- glEnd();
- if (System.currentTimeMillis() >= before+msLength)
- {
- done = true;
- }
- }
- public void destroy()
- {
- }
- private class RGBListener implements RGBDataSink.Listener
- {
- public void rgbFrame(boolean preroll, int width, int height, IntBuffer rgb)
- {
- buffer = rgb;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement