JavaCV Changelog

What's new in JavaCV 0.7

Jan 10, 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` (issue #399)
  • Added new `FFmpegFrameGrabber.grabKeyFrame()` method to grab key frames (I-frames) directly (issue #312)
  • `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 (issue #398)
  • Fixed wrong `haarcascade_frontalface_alt.xml` file getting downloaded by the `Demo` class (issue #402)
  • Added a `Frame.sampleRate` field to allow audio samples to be resampled by `FFmpegFrameRecorder` (issue #388)
  • Incorporated `IPCameraFrameGrabber` from Greg Perry (issue #384)
  • Fixed thread safety issues with FFmpeg in `FFmpegFrameGrabber` and `FFmpegFrameRecorder` (issue #377)
  • Fixed memory leak in the `MotionDetector.java` sample file (issue #372)
  • New `videoCodecName` and `audioCodecName` properties to allow users of `FFmpegFrameRecorder` to use codecs such as "libx264rgb" (issue #369)

New in JavaCV 0.5 (Apr 8, 2013)

  • Upgraded support to OpenCV 2.4.5
  • Upgraded supported FFmpeg API to the 1.2 release branch
  • New methods `FFmpegFrameRecorder.setVideoOption()` and `setAudioOption()` generalize the way to set arbitrary codec options, such as "profile", "preset", "tune", etc. used by the x264 codec
  • Included better format guessing inside `FFmpegFrameRecorder` for protocols like RTP
  • Added support for planar audio formats to `FFmpegFrameGrabber` and `FFmpegFrameRecorder`, as required by newer versions of FFmpeg for at least MP3 and AAC
  • Enhanced `FFmpegFrameRecorder` by making it use the closest supported frame rate for the given codec instead of failing
  • To support variable bitrate (VBR) encoding, appended new `videoQuality` and `audioQuality` properties to `FFmpegFrameRecorder`, which usually have an effective range of [0, 51] and overrides the `videoBitrate` and `audioBitrate` properties

New in JavaCV 0.4 (Mar 4, 2013)

  • `CanvasFrame.waitKey(-1)` now returns without waiting the last `KeyEvent` dispatched since the last call to it
  • Upgraded supported FFmpeg API to the 1.1 release branch
  • Fixed bug in `FaceRecognition.java` sample (issue #276)
  • Included `Sobel()`, `Scharr()`, `Laplacian()`, and `Canny()` from `opencv_imgproc` whose equivalent functions in the C API have missing parameters
  • Extended `OpenKinectFrameGrabber` with `setDepthFormat()` and `setVideoFormat()` methods to be able to set both formats independently (issue #273)
  • Fixed `Blender.blend()` having its `@OutputMat` incorrectly annotated as `@InputMat` (issue #272)
  • Added new `RecordActivity.java` Android sample from Shawn Van Every and Qianliang Zhang
  • Added missing `allocate()` methods for `FunctionPointer` in `AVIOContext` and others, which prevented these FFmpeg callbacks from functioning
  • Fixed infinite loop in `FrameGrabber.Array.grab()` (as used by ProCamCalib in the case of stereo cameras, issue #262) when `FrameGrabber.getTimestamp()` returns an invalid negative value (as with `opencv_highgui`) or when using different types of (unsynchronized) `FrameGrabber` together
  • Fixed `cvQueryHistValue_1D()` and other functions that use a raw `CvArr` object
  • Fixed problem when subclassing `CanvasFrame`

New in JavaCV 0.3 (Nov 6, 2012)

  • Upgraded support to OpenCV 2.4.3 (issue #233)
  • Fixed functions like `Algorithm.getMat()` and `HOGDescriptor.getDefaultPeopleDetector()` returning `null` instead of the expected data
  • Implemented better, more transparent, handling of `cv::Ptr`
  • When allocating an empty `IplImage`, `CvMat`, `CvBGCodeBookModel`, etc. its memory content now gets zeroed out, giving OpenCV a better chance of displaying an error message instead of crashing
  • Upgraded supported FFmpeg API to the 1.0 release branch
  • Appended to `StringVector` and `MatVector` new convenient bulk constructors and `put()` methods taking arrays of `String`, `IplImage`, `CvMat`, etc.
  • Included new `Blobs` module from David Grossman and the corresponding `BlobDemo` sample
  • Added missing `opencv_core.partition()` function (issue #144)
  • Fixed up the samples a bit (issue #229 and issue #230)
  • Switched the majority of `@Adapter` annotations to more concise ones like `@StdVector` as allowed by new capabilities of JavaCPP
  • Fixed `FFmpegFrameGrabber.getLengthInFrames()` and `OpenCVFrameGrabber.getLengthInTime()` (issue #231 and issue #236)
  • Enhanced `FFmpegFrameRecorder` to support conversion between audio sample formats (for the experimental AAC encoder among other things) and to let two different threads call `record(samples)` and `record(image)` simultaneously, plus a couple of other features like `setFrameNumber()`, which lets users skip image frames (achieving variable frame rate)
  • Added a `javacpp.skip` property to `pom.xml`, such that a command like `mvn package -Pall -Djavacpp.skip=true` only recompiles the Java source files, but also added `platform.root` and `compiler.path` properties, which map directly to JavaCPP's for convenience

New in JavaCV 0.2 (Jul 23, 2012)

  • Provided new `javacv-linux-arm.jar` build thanks to Jeremy Nicola (issue #184)
  • Additional default properties inside `pom.xml` make it easier to build JavaCV from source (issue #202), calling `mvn package` now succeeds with only OpenCV and a C++ compiler for JavaCPP
  • Made a few minor updates for OpenCV 2.4.2
  • New `Pointer.limit` property of JavaCPP can now be used to get the `size` of an output parameter, and to specify the maximum `size` on input as well
  • Upgraded supported FFmpeg API to the 0.11 release branch
  • Added audio support to `FFmpegFrameGrabber` (call `grabFrame()` instead of `grab()`) and `FFmpegFrameRecorder` (`setAudioChannels(int)` for int > 0 and `record(Frame)` instead of `record(IplImage)`) (issue #160)
  • Gave better default `FFmpegFrameRecorder` settings to H.263, MPEG-4, etc. codecs and fixed H.264 encoding with libx264 (issue #160)
  • Refined the `FaceApplet` sample
  • Fixed `FlannBasedMatcher` constructor, `FaceRecognizer.train()`, and `Stitcher.stitch()/composePanorama()` (issue #211)
  • Fixed `CanvasFrame` sometimes blanking out under Windows and maybe Linux (issue #212)

New in JavaCV 0.1 (May 28, 2012)

  • Started using version numbers, friendly to tools like Maven, and placing packages in a sort of Maven repository
  • JavaCV can now extract and load native dependent libraries such as libopencv_core.so.2.4, libopencv_core.2.4.dylib, opencv_core240.dll, etc. from Java resources placed inside the com.googlecode.javacv.cpp. package (i.e.: under the /com/googlecode/javacv/cpp// directory of a JAR file in the classpath) (issue #146)
  • Included new FaceApplet sample to demonstrate How to use JavaCV in an applet
  • Added handy IplImage.asCvMat() and CvMat.asIplImage() conversion methods
  • Fixed a few small things with OpenCVFrameGrabber, opencv_contrib, opencv_legacy, and opencv_stitching

New in JavaCV 20120512 (May 14, 2012)

  • Upgraded support to OpenCV 2.4.0 (issue #187)
  • Added `pom.xml` file for Maven support and changed the directory structure of the source code to match Maven's standard directory layout
  • Made it easier to create one massive statically linked native library by passing something like "-Xcompiler -Wl,-static -o javacv" as command line options to JavaCPP, usually from inside `build.xml` or `pom.xml` (issue #146)
  • Moved the source code repository to Git
  • Fixed missing parameter from `CvANN_MLP.create()`
  • Added methods `cvCalcCovarMatrixEx()`, `cvEigenDecomposite()`, and `cvEigenProjection()` taking an `IplImage[]` as argument for convenience
  • `VideoInputFrameGrabber.start()` now accepts a `connection` argument such as `VI_COMPOSITE` to support analog cameras and what not
  • Fixed `FaceRecognition` sample (issue #188)
  • Added a few convenience methods to avoid the need to create empty `CvAttrList`

New in JavaCV 20120329 (Apr 26, 2012)

  • Added missing array allocators and position() methods to KDTree.Node, DefaultRngAuto, CvAffinePose, KeyPoint, BaseKeypoint, ReferenceTrees, DMatch, *.Params, CvFuzzy*, Octree.Node, CvDefParam, Cv*Blob*, Cv*Track*, CvDrawShape, CvVectors, CvParamGrid, Cv*Params, CvSVM*, CvPair16u32s, CvDTree* CvTrainTestSplit, CvMLData, FeatureEvaluator, and *DataMatrixCode
  • Increased versatility of IplImage.createFrom(), copyFrom(), copyTo(), getBufferedImage() by providing a flipChannels parameter, whose effect was previously mistakenly forced onto four-channel images of byte values only ( issue #163 )
  • Fixed a couple of things with CvMat.get()/put() ( issue #167 )
  • In addition to an IplImage, we may now specify the pixel format of the data when calling FFmpegFrameRecorder.record(), but otherwise when IplImage.nChannels == 2, it assumes PIX_FMT_NV21, allowing for easy and efficient encoding of data captured from the camera on Android ( issue #160 ), image objects we can also convert to RGB using cvCvtColor() with CV_YUV420sp2BGR
  • Fixed seeking capabilities of FFmpegFrameGrabber ( issue #162 ) and added getLengthInFrames() and getLengthInTime() methods to query the duration of streams, when known
  • Enhanced IplImage.clone() and create*Compatible() with cloning of their BufferedImage to make it easier to keep color components in the right order ( issue #163 )
  • Refactored FrameGrabber and FrameRecorder a bit to accommodate new createDefault(...) and create(String className, ...) factory methods, offering to users an easier selection method to work around limitations of some APIs ( issue #70 )
  • Adjusted GNImageAligner, ProCamTransformer, etc. to support alignment of only the projector display on textureless surface planes
  • Renamed a few more Settings properties to reflect better their meanings