bytedeco/javacv

do we need to call frame.close() after calling FFmpegFrameGrabber.grabImage() ?

Open

#2,175 opened on Jan 25, 2024

View on GitHub
 (3 comments) (0 reactions) (0 assignees)Java (1,583 forks)batch import
help wantedquestion

Repository metrics

Stars
 (6,985 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

i try to get image per second from a video and i notice my java heap keep increasing and eventually causing OOM after processing more than 10 videos.

my sample code

try (FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(inputStream)) {
      frameGrabber.start();
      long lengthInSecond = frameGrabber.getLengthInTime() / NANO_SECONDS;
      for (int i = 0; i < lengthInSecond; i++) {
        frameGrabber.setVideoTimestamp(i * NANO_SECONDS);
        try (Frame frame = frameGrabber.grabImage()) {
          if (frame != null) {
            BufferedImage bufferedImage;
            try (Java2DFrameConverter converter = new Java2DFrameConverter()) {
              if ((bufferedImage = converter.convert(frame)) != null) {
                results.add(getColorHistogram(bufferedImage));
              }
            }
          }
        }
      }
      frameGrabber.stop();
    }

Contributor guide