Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug in parseCaps #224

Open
clankill3r opened this issue Feb 13, 2024 · 0 comments
Open

bug in parseCaps #224

clankill3r opened this issue Feb 13, 2024 · 0 comments

Comments

@clankill3r
Copy link

I need to get the resolution of the webcam. In the source we have the following:

  // This is a temporary addition until it's decided how to bring back resolution/framerate caps to the official API.
  // The old way of doing things is still listed in the video tutorial:
  // https://processing.org/tutorials/video
  static public String[] getCapabilities(String device) {
    for (int i=0; i < devices.size(); i++) {
      String deviceName = assignDisplayName(devices.get(i), i);
      if (devices.get(i).getDisplayName().equals(device) || devices.get(i).getName().equals(device) || deviceName.equals(device)) {
        return parseCaps(devices.get(i));
      }
    }
    return new String[]{};
  }

The above calls parseCaps which has the following part (this is a piece of it):

      if (0 < indexWidth && 0 < indexHeight && 0 < indexFramerate) {
        stringWidth = cap.substring(indexWidth, cap.indexOf(',', indexWidth));
        stringHeight = cap.substring(indexHeight, cap.indexOf(", format", indexHeight));
        stringFramerate = cap.substring(indexFramerate, cap.indexOf(']', indexFramerate));
      }

An example of the String cap is " video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, framerate=(fraction)10/1, pixel-aspect-ratio=(fraction)1/1".

The problem with the above code is that stringHeight = cap.substring(indexHeight, cap.indexOf(", format", indexHeight)); assumes a certain order of the elements being listed. The assumption being made is wrong resulting in the following error:

java.lang.StringIndexOutOfBoundsException: begin 52, end -1, length 127
        at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4606)
        at java.base/java.lang.String.substring(String.java:2709)
        at processing.video.Capture.parseCaps(Capture.java:791)
        at processing.video.Capture.getCapabilities(Capture.java:768)
        at room_activity.Room_Activity.setup(Room_Activity.java:95)
        at processing.core.PApplet.handleDraw(PApplet.java:2051)
        at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:840)
        at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
        at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
        at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
        at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:797)
        at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
        at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:471)
        at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:245)
        at java.base/java.util.TimerThread.mainLoop(Timer.java:566)
        at java.base/java.util.TimerThread.run(Timer.java:516)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant