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