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