JavaCV Changelog

What's new in JavaCV 1.5.10

Jan 29, 2024
  • Work around swscale bug in FFmpegFrameGrabber for images with unaligned width (issue #1960)
  • Improve FFmpegFrameGrabber.setTimestamp() further for MPEG-TS streams (pull #2144)
  • Fix module-info.java broken since last release (issue bytedeco/javacpp-presets#1414)
  • Add new AudioSplitMergeHelper sample for processing raw audio frames (pull #2052)
  • Upgrade dependencies for OpenBLAS 0.3.26, OpenCV 4.9.0, FFmpeg 6.1.1, Leptonica 1.84.1, Tesseract 5.3.4

New in JavaCV 1.5.9 (Jun 5, 2023)

  • Add FrameRecorder.videoSideData/audioSideData properties and FFmpegFrameRecorder.setDisplayRotation() for convenience (issue #1976)
  • Fix FFmpegFrameGrabber.grab() not returning audio frames buffered by the codec (issue #1971)
  • Upgrade dependencies for OpenBLAS 0.3.23, OpenCV 4.7.0, FFmpeg 6.0 (issue #1693), librealsense2 2.53.1, Leptonica 1.83.0, Tesseract 5.3.1

New in JavaCV 1.5.8 (Nov 2, 2022)

  • Override FFmpegFrameGrabber.getVideoCodecName()/getAudioCodecName() to return names of opened codecs (pull #1901)
  • Add FrameGrabber.videoDisposition/audioDisposition properties to select streams by disposition (pull #1879)
  • Work around OpenKinect2FrameGrabber failing when provided with a pipeline on some system (pull #1886)
  • Fix FFmpegFrameRecorder.record() incorrectly flushing the video codec on data frames (issue #1858)
  • Improve accuracy of FFmpegFrameGrabber.setFrameNumber() (pull #1851)
  • Add FrameGrabber.resetStartTime() to allow grabAtFrameRate() after operations such as seeking (pull #1846)
  • Add FrameGrabber.videoSideData/audioSideData properties and FFmpegFrameGrabber.getDisplayRotation() for convenience (issue #1361)
  • Add to FFmpegFrameGrabber and FFmpegFrameRecorder constructors taking a URL for convenience and clarity
  • Fix incorrect call to opencv_calib3d.stereoRectify() in ProjectiveDevice (issue #1802)
  • Retry after 10 ms when av_read_frame() returns EAGAIN in FFmpegFrameGrabber.grabFrame() (issue #1784)
  • Append frame_rate=%d/%d input parameter in FFmpegFrameFilter as required by xfade (issue #1776)
  • Update FFmpegStreamingTimeout sample to use timeout instead of stimeout for RTSP (pull #1758)
  • Restore static calls to FFmpegFrameGrabber.tryLoad() and FFmpegFrameRecorder.tryLoad() (issue #1756)
  • Enable by default on RealSense2FrameGrabber.start() all color, depth, and IR streams as videoStream (pull #1750)
  • Upgrade dependencies for OpenBLAS 0.3.21, OpenCV 4.6.0, FFmpeg 5.1.2, Leptonica 1.82.0 (pull #1791), Tesseract 5.2.0

New in JavaCV 1.5.6 (Aug 2, 2021)

  • Enhance audio and video synchronization of JavaFxPlayVideoAndAudio sample (pull #1662)
  • Add FrameGrabber.grabAtFrameRate() to simulate a device or stream when reading from files (pull #1659)
  • Update FFmpegFrameGrabber and FFmpegFrameRecorder with new avcodec API (issue #1498)
  • Add new Similarity sample with PSNR and MSSIM (pull #1622)
  • Avoid crash in FFmpegFrameRecorder.stop() by moving av_write_trailer() out of flush() (issue #1616)
  • Upgrade dependencies for OpenBLAS 0.3.17, OpenCV 4.5.3, FFmpeg 4.4, librealsense2 2.44.0, Leptonica 1.81.1

New in JavaCV 1.5.5 (Mar 8, 2021)

  • Have Frame and FrameConverter implement AutoCloseable to release memory explicitly (issue #1574)
  • Add new YOLONet sample for object detection (pull #1595)
  • Fix crash on FFmpegFrameGrabber.stop() when in ImageMode.RAW (issue #1568)
  • Let FFmpegFrameRecorder.flush() ignore errors from the encoder (issue #1563)
  • Improve FFmpegFrameGrabber.setTimestamp() and fix getAudioFrameRate() (pull #1559)
  • Fix frame rate and aspect ratio on FFmpegFrameRecorder.start(AVFormatContext) (pull #1535)
  • Upgrade dependencies for OpenBLAS 0.3.13, OpenCV 4.5.1, FFmpeg 4.3.2, librealsense2 2.40.0
  • Update unit tests to use codecs available in FFmpeg under LGPL v3 (pull bytedeco/javacpp-presets#950)
  • Add RealSense2FrameGrabber.tryLoad() method and missing entries for librealsense2 (issue bytedeco/procamcalib#25)

New in JavaCV 1.5.4 (Sep 9, 2020)

  • Fix error message thrown from FFmpegFrameRecorder.start() not containing filename (pull #1492)
  • Fix FFmpegFrameFilter.pull() not returning audio/video frames without audio/video filtergraph (issue #1466)
  • Update OpenCVFrameConverter.convertToOrgOpenCvCoreMat() with new API to set the stride (issue #1460)
  • Fix memory leaks and reduce memory fragmentation in FFmpegFrameGrabber and FFmpegFrameRecorder (issue #1366)
  • Use PointerScope in FFmpegFrameFilter, FFmpegFrameGrabber, and FFmpegFrameRecorder to deallocate quickly temporary buffers (issue #1383)
  • Fix FFmpegFrameFilter by calling String.format() with Locale.ROOT (pull #1441)
  • Increase thread safety of FFmpegFrameFilter, FFmpegFrameGrabber, and FFmpegFrameRecorder with synchronized methods (issue #1434)
  • Upgrade dependencies for OpenBLAS 0.3.10, OpenCV 4.4.0, FFmpeg 4.3.1, and Leptonica 1.80.0

New in JavaCV 1.5.3 (Apr 14, 2020)

  • Add FFmpegFrameGrabber.start(boolean findStreamInfo) parameter to minimize startup time (issue #1376)
  • Let FFmpegFrameGrabber.grab() return non-audio/video streams as new Frame.DATA type (pull #1378)
  • Fix crash in FFmpegFrameRecorder.flush() for HLS format and possibly others (pull #1374)
  • Fix "Resetting to invalid mark" IOException thrown on FFmpegFrameGrabber.release() (issue #911)
  • Upgrade dependencies for OpenBLAS 0.3.9, OpenCV 4.3.0, FFmpeg 4.2.2, Leptonica 1.79.0, and Tesseract 4.1.1
  • Add Seekable and SeekableByteArrayOutputStream to be used with FFmpegFrameRecorder (pull #1350)
  • Update RealSense2FrameGrabber with support for sensor options and fix for multiple devices (pull #1348)

New in JavaCV 1.5.2 (Apr 14, 2020)

  • Increase thread safety of FFmpegFrameFilter, FFmpegFrameGrabber, and FFmpegFrameRecorder with volatile boolean started flag (pull #1325)
  • Let FFmpegFrameFilter.push(null) indicate EOF to audio filters as well (issue #1315)
  • Add RealSense2FrameGrabber to capture images with librealsense2 (pull #1316)
  • Disable seek function in FFmpegFrameGrabber when maximumSize <= 0 (issue #1304)
  • Use Pointer.retainReference() to prevent PointerScope from deallocating globally shared callback objects for FFmpeg
  • Fix FFmpegFrameRecorder failing to encode float samples in MP3 (issue #1294)
  • Fix OpenCVFrameConverter error in IPCameraFrameGrabber (pull #1278)
  • Allow setting properties for OpenCVFrameGrabber and OpenCVFrameRecorder with setOption() (issue #1269)
  • Add missing requires java.desktop to module-info.java (issue #1265)
  • Upgrade dependencies for OpenBLAS 0.3.7, OpenCV 4.1.2, FFmpeg 4.2.1, librealsense 1.12.4, and librealsense2 2.29.0

New in JavaCV 1.5.1 (Jul 10, 2019)

  • Work around swscale bug in FFmpegFrameGrabber for images with unaligned width (issue #845)
  • Add support for AVSEEK_SIZE to FFmpegFrameGrabber as required by MPEG-TS (issue #1234)
  • Throw exception on start() for already started FFmpegFrameFilter, FFmpegFrameGrabber, or FFmpegFrameRecorder (issue #1233)
  • Add dependency on OpenBLAS/MKL, now used by OpenCV to accelerate some matrix operations
  • Upgrade dependencies for OpenCV 4.1.0, libdc1394 2.2.6, and Tesseract 4.1.0
  • Add support for Frame.timestamp to FFmpegFrameFilter (issue #1177)

New in JavaCV 1.5 (Apr 10, 2019)

  • Override methods in FFmpegFrameGrabber to get all metadata from streams (issue #1180)
  • Fix sample rate in output of FFmpegFrameRecorder by setting deprecated AVStream.codec.time_base (issue #1179)
  • Add asetpts=N to input of FFmpegFrameFilter to make filters like afade behave as expected (issue #1171)
  • Use AVFormat.format() from Frame.opaque when available in FFmpegFrameFilter and FFmpegFrameRecorder (issue #1173)
  • Enable multithreading for all codecs by default in FFmpegFrameGrabber and FFmpegFrameRecorder (issue #1163)
  • Improve thread safety of FFmpegFrameRecorder and Java2DFrameConverter by relying less on Buffer.position (pull #1166)
  • Use ModiTect to compile module-info.java with JDK 8 and preserve backward compatibility
  • Add FFmpegFrameRecorder.closeOutputStream and FFmpegFrameGrabber.closeInputStream properties to leave streams opened (issue #1149)
  • Add FFmpegFrameRecorder.flush() method that does not release the stream (issue #1149)
  • Readd synchronized blocks for FFmpegFrameGrabber and FFmpegFrameRecorder, but make unsafe methods public (issue #1139)
  • Allocate native memory for Frame using Pointer to allow deallocation with PointerScope (issue #1152)
  • Add module-info.java and depend on modularized JavaCPP Presets to comply with JPMS
  • Upgrade dependencies for FFmpeg 4.1.3, libfreenect 0.5.7, and Leptonica 1.78.0
  • Allow allocation of Frame images with custom strides
  • Take into account Bitmap.getRowBytes() in AndroidFrameConverter.convert(Bitmap) (issue #1143)
  • Add static { Loader.load(); } in LeptonicaFrameConverter and OpenCVFrameConverter to prevent link errors (issue #1128)

New in JavaCV 1.4.4 (Jan 11, 2019)

  • Add FFmpegFrameGrabber(InputStream, int) constructor to set the maximum cache size used for seeking
  • Set pts and dts for AVPacket in FFmpegFrameRecorder.recordPacket() (pull #1097)
  • Prevent premature deallocations with LeptonicaFrameConverter (issue bytedeco/javacpp#272) and OpenCVFrameConverter.IplImage (issue #1101)
  • Fix OpenCVFrameGrabber from crashing when in ImageMode.GRAY
  • Add support for multiple inputs to FFmpegFrameFilter (issue #955)
  • Fix fps in output of FFmpegFrameRecorder by setting deprecated AVStream.codec.time_base (issue #1069)
  • Fix memory leak in FFmpegFrameRecorder on writePacket() (issue #1068)
  • Upgrade dependencies for OpenCV 4.0.1, FFmpeg 4.1, FlyCapture 2.13.3.31, Leptonica 1.77.0, and Tesseract 4.0.0

New in JavaCV 1.4.3 (Oct 15, 2018)

  • Add imageScalingFlags property to FrameGrabber and FrameRecorder, with SWS_BILINEAR as default for FFmpeg (issue #845)
  • Add OpenCVFrameConverter.ToOrgOpenCvCoreMat to easily but efficiently get image data from official Java API of OpenCV (issue bytedeco/javacpp#38)
  • Keep globally shared callback objects for FFmpeg out of PointerScope (issue #911)
  • Upgrade dependencies for OpenCV 3.4.3, FFmpeg 4.0.2, and Tesseract 4.0.0-rc2
  • Update the Demo class to use the C++ API of OpenCV (issue #1042)
  • Add new DeepLearningFaceDetection (pull #1041) and PerspectiveWarpDemo (pull #1066) samples

New in JavaCV 1.4.2 (Jul 18, 2018)

  • Allow FFmpegFrameGrabber to use accelerated decoders with videoCodecName and audioCodecName properties (pull #948)
  • Add new KazemiFacemarkExample and LBFFacemarkExampleWithVideo samples (pull #1030)
  • Expose apiPreference constructor argument of VideoCapture to OpenCVFrameGrabber (pull #1025)
  • Add LeptonicaFrameConverter to easily but efficiently pass image data to Tesseract (issue bytedeco/javacpp-presets#224)
  • Update RecordActivity to fix issue with pixel formats (issue #979)
  • Fix FFmpegFrameFilter to support negative strides returned by "vflip" (pull #977)
  • Fix FFmpegFrameFilter on Mac throwing "Resource temporarily unavailable" (issue #974)
  • Upgrade dependencies for OpenCV 3.4.2, FFmpeg 4.0.1 and Tesseract 4.0.0-beta.3
  • Add initial limited version of JavaFXFrameConverter (pull #969)
  • Revert default behavior of FFmpegFrameGrabber.setTimestamp() to previous version (pull #949)
  • Add support for audio frames to FFmpegFrameFilter (issue #492)
  • Add setpts=N to input of FFmpegFrameFilter to make fade and overlay filters behave as expected (issue #667)
  • Fix crash on FFmpegFrameRecorder.stop() when no audio samples are left to write

New in JavaCV 1.4.1 (Apr 3, 2018)

  • Improve seeking and frame number estimates in FFmpegFrameGrabber (pull #908)
  • Add maxBFrames, trellis, and maxDelay properties to FFmpegFrameRecorder (pull #939)
  • Introduce FFmpegFrameGrabber.maxDelay property (pull #938)
  • Upgrade dependencies for OpenCV 3.4.1, FFmpeg 3.4.2
  • Allow enabling streams with RealSenseFrameGrabber.setFormat() for compatibility (pull #922)
  • Process audio frames after FFmpegFrameGrabber.setTimestamp() to avoid corrupted images (issue #896)
  • Fix FFmpegFrameRecorder not flushing all audio samples properly (pull #886)
  • Give access to pixel format, etc for images returned by FFmpegFrameFilter.pull() (issue #887)

New in JavaCV 0.7 (Apr 11, 2014)

  • Upgraded support to OpenCV 2.4.8
  • Upgraded supported FFmpeg API to the 2.1 release branch
  • Updated freenect to reflect the latest changes of OpenKinect's master branch
  • Updated videoInput to reflect the latest changes in the "update2013" branch
  • Added Frame.opaque field to give access to the raw AVFrame in the case of FFmpegFrameGrabber
  • Added new FFmpegFrameGrabber.grabKeyFrame() method to grab key frames (I-frames) directly
  • VideoInputFrameGrabber now uses 640x480 as default image size to prevent "videoInput.getPixels() Error: Could not get pixels."
  • Fixed FFmpegFrameGrabber.setTimestamp() not working for streams with audio
  • Fixed wrong haarcascade_frontalface_alt.xml file getting downloaded by the Demo class
  • Added a Frame.sampleRate field to allow audio samples to be resampled by FFmpegFrameRecorder
  • Incorporated IPCameraFrameGrabber from Greg Perry
  • Fixed thread safety issues with FFmpeg in FFmpegFrameGrabber and FFmpegFrameRecorder
  • Fixed memory leak in the MotionDetector.java sample file
  • New videoCodecName and audioCodecName properties to allow users of FFmpegFrameRecorder to use codecs such as "libx264rgb"

New in JavaCV 2011-05-11 (May 12, 2011)

  • Removed `CvMat` object pooling in favor of more efficient `ThreadLocal` objects created by `CvMat.createThreadLocal()`
  • Changed `Marker.getCenter()` back to the centroid, because it has better noise averaging properties and gives in practice more accurate results than the actual center
  • Added hack to `OpenCVFrameGrabber.start()` to wait for `cvRetrieveFrame()` to return something else than `null` under Mac OS X
  • FFmpeg now works properly on Windows and Android (issue #63) with newer binaries
  • New `videoInputLib` wrapper and corresponding `VideoInputFrameGrabber` to capture using DirectShow, useful under Windows 7 where OpenCV and FFmpeg can fail to capture using Video for Windows (issue #58)
  • `GeometricCalibrator` now reports the maximum errors in addition to the average (RMS) errors