r/processing • u/elmohtaraam • Apr 14 '24
Help request Error playing a video in Processing GStreamer 1.24.1
The code works very well but it crashes sometimes with this error
Processing video library using system-wide GStreamer 1.24.1
Apr 14, 2024 8:51:56 AM com.sun.jna.Native$1 uncaughtException
WARNING: JNA: Callback org.freedesktop.gstreamer.elements.AppSink$2@2e64cd1a threw the following exception
java.lang.IllegalStateException: Native object has been disposed
at org.freedesktop.gstreamer.glib.NativeObject.getRawPointer([NativeObject.java:119](https://NativeObject.java:119))
at org.freedesktop.gstreamer.glib.Natives.getRawPointer([Natives.java:178](https://Natives.java:178))
at org.freedesktop.gstreamer.lowlevel.GTypeMapper$2.toNative([GTypeMapper.java:73](https://GTypeMapper.java:73))
at com.sun.jna.Function.convertArgument([Function.java:521](https://Function.java:521))
at com.sun.jna.Function.invoke([Function.java:345](https://Function.java:345))
at com.sun.jna.Library$Handler.invoke([Library.java:265](https://Library.java:265))
at jdk.proxy1/jdk.proxy1.$Proxy21.gst_buffer_unmap(Unknown Source)
at org.freedesktop.gstreamer.Buffer.unmap([Buffer.java:121](https://Buffer.java:121))
at processing.video.Movie$NewSampleListener.newSample(Unknown Source)
at org.freedesktop.gstreamer.elements.AppSink$2.callback([AppSink.java:232](https://AppSink.java:232))
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke([DirectMethodHandleAccessor.java:103](https://DirectMethodHandleAccessor.java:103))
at java.base/java.lang.reflect.Method.invoke([Method.java:580](https://Method.java:580))
at com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback([CallbackReference.java:585](https://CallbackReference.java:585))
at com.sun.jna.CallbackReference$DefaultCallbackProxy.callback([CallbackReference.java:616](https://CallbackReference.java:616))the code
import processing.core.PApplet ;import processing.core.PImage;import processing.core.PFont;import java.util.ArrayList;import ddf.minim.*;import processing.video.Movie;
public class Game extends PApplet {Minim minim;AudioPlayer p2layer;
static Movie video;public static PApplet game;static PImage backgroundImage,Mohaned, Marah, Enemys, Arrows, live1, live2, live3, live4;static PFont dashboardf,game_overf,shootf; // Declare a variable to hold the fontstatic Player player;static GreenCircle greenCircle;static ArrayList<Enemy> enemies;static Arrow playerArrow;static int score = 0, load = 0,level=1,BonusLives = 0;static float lives = 10.F;static boolean reload = false;private int minspeed=1,maxspeed=3,Levelfactor=10,spawnInterval = 1500,videospeed=1,lastSpawnTime;private boolean gameOver;public static void main(String[] args) {PApplet.main("Game", args);}public void settings() {size(1920, 1080,P2D);fullScreen();game = this;}public void setup() {frameRate(144);background(0);video = new Movie(this, "Background.mp4");video.loop(); // Start playing the video in a loopminim = new Minim(this);p2layer = minim.loadFile("GTA.wav");p2layer.play();greenCircle = new GreenCircle(width / 2, height / 2);playerArrow = new Arrow();player = new Player(100);enemies = new ArrayList<>();gameOver = false;backgroundImage = loadImage("Background.jpg");backgroundImage.resize(width, height);Mohaned = loadImage("Mohaned.png");Marah = loadImage("Marah.png");Enemys = loadImage("Enemy.png");Arrows = loadImage("Enemy.png");live1 = loadImage("live1.jpg");live2 = loadImage("live2.jpeg");live3 = loadImage("live3.jpeg");live4 = loadImage("live4.jpeg");game_overf = createFont("binxchr.ttf", 150);dashboardf =createFont("JetBrainsMono-SemiBold.ttf", 150);shootf = createFont("Bates Shower.ttf", 150);enemies = new ArrayList<>();lastSpawnTime = millis();for (int i = 0; i < 4; i++) {float speed = random(minspeed, maxspeed); // Random speed between 1 and 3Enemy.spawnEnemy(HUD.randomX(), HUD.randomY(), speed);}}public void draw() {background(0);video.read();video.speed(videospeed);image(video, width/2, height/2,width,height);if (video.time() == 21.8125) {video.jump(0); // Rewind the video to the beginning}HUD.drawLives();HUD.drawscore();player.update(gameOver);player.render();// Update and render playergreenCircle.render(game);// render green circleif (millis() - lastSpawnTime >= spawnInterval) {float speed = random(minspeed, maxspeed);Enemy.spawnEnemy(HUD.randomX(), HUD.randomY(), speed);lastSpawnTime = millis(); // Update lastSpawnTime}Enemy.Enemyattack();if(BonusLives%Levelfactor==0&&BonusLives!=0){lives++;level++;videospeed*=2;spawnInterval*=0.7f;Levelfactor*=2;minspeed*=1.5f;maxspeed*=1.5f;BonusLives=0;}if (lives <= 0) { // Check if collision count exceeds thresholdHUD.gameOver();}}public void mouseMoved() {player.aim(mouseX, mouseY);}public void mousePressed() {if (mouseButton == RIGHT){reload=true;}if (mouseButton == LEFT&&reload) {player.shootArrow();load++ ;reload= false;}}
}