@@ -44,7 +44,6 @@ public abstract class OpenCVFrameConverter<F> extends FrameConverter<F> {
4444
4545 IplImage img ;
4646 Mat mat ;
47- org .opencv .core .Mat orgOpenCvCoreMat ;
4847
4948 public static class ToIplImage extends OpenCVFrameConverter <IplImage > {
5049 @ Override public Frame convert (IplImage img ) { return super .convert (img ); }
@@ -56,11 +55,6 @@ public static class ToMat extends OpenCVFrameConverter<Mat> {
5655 @ Override public Mat convert (Frame frame ) { return convertToMat (frame ); }
5756 }
5857
59- public static class ToOrgOpenCvCoreMat extends OpenCVFrameConverter <org .opencv .core .Mat > {
60- @ Override public Frame convert (org .opencv .core .Mat mat ) { return super .convert (mat ); }
61- @ Override public org .opencv .core .Mat convert (Frame frame ) { return convertToOrgOpenCvCoreMat (frame ); }
62- }
63-
6458 public static int getFrameDepth (int depth ) {
6559 switch (depth ) {
6660 case IPL_DEPTH_8U : case CV_8U : return Frame .DEPTH_UBYTE ;
@@ -175,64 +169,6 @@ public Frame convert(Mat mat) {
175169 return frame ;
176170 }
177171
178- static boolean isEqual (Frame frame , org .opencv .core .Mat mat ) {
179- return mat != null && frame != null && frame .image != null && frame .image .length > 0
180- && frame .imageWidth == mat .cols () && frame .imageHeight == mat .rows ()
181- && frame .imageChannels == mat .channels () && getMatDepth (frame .imageDepth ) == mat .depth ()
182- && new Pointer (frame .image [0 ].position (0 )).address () == mat .dataAddr ();
183- }
184- public org .opencv .core .Mat convertToOrgOpenCvCoreMat (Frame frame ) {
185- if (frame == null || frame .image == null ) {
186- return null ;
187- } else if (frame .opaque instanceof org .opencv .core .Mat ) {
188- return (org .opencv .core .Mat )frame .opaque ;
189- } else if (!isEqual (frame , mat )) {
190- int depth = getMatDepth (frame .imageDepth );
191- orgOpenCvCoreMat = depth < 0 ? null : new org .opencv .core .Mat (frame .imageHeight , frame .imageWidth ,
192- CV_MAKETYPE (depth , frame .imageChannels ), new BytePointer (new Pointer (frame .image [0 ].position (0 )))
193- .capacity (frame .image [0 ].capacity () * Math .abs (frame .imageDepth ) / 8 ).asByteBuffer (),
194- frame .imageStride * Math .abs (frame .imageDepth ) / 8 );
195- }
196- return orgOpenCvCoreMat ;
197- }
198- public Frame convert (final org .opencv .core .Mat mat ) {
199- if (mat == null ) {
200- return null ;
201- } else if (!isEqual (frame , mat )) {
202- frame = new Frame ();
203- frame .imageWidth = mat .cols ();
204- frame .imageHeight = mat .rows ();
205- frame .imageDepth = getFrameDepth (mat .depth ());
206- frame .imageChannels = mat .channels ();
207- frame .imageStride = (int )mat .step1 ();
208- ByteBuffer byteBuffer = new BytePointer () { { address = mat .dataAddr (); } }.capacity (mat .rows () * mat .step1 () * mat .elemSize1 ()).asByteBuffer ();
209- switch (mat .depth ()) {
210- case CV_8U :
211- case CV_8S :
212- frame .image = new Buffer [] { byteBuffer };
213- break ;
214- case CV_16U :
215- case CV_16S :
216- frame .image = new Buffer [] { byteBuffer .asShortBuffer () };
217- break ;
218- case CV_32F :
219- frame .image = new Buffer [] { byteBuffer .asFloatBuffer () };
220- break ;
221- case CV_32S :
222- frame .image = new Buffer [] { byteBuffer .asIntBuffer () };
223- break ;
224- case CV_64F :
225- frame .image = new Buffer [] { byteBuffer .asDoubleBuffer () };
226- break ;
227- default :
228- frame .image = null ;
229- break ;
230- }
231- }
232- frame .opaque = mat ;
233- return frame ;
234- }
235-
236172 @ Override public void close () {
237173 super .close ();
238174 if (img != null ) {
@@ -243,9 +179,5 @@ public Frame convert(final org.opencv.core.Mat mat) {
243179 mat .releaseReference ();
244180 mat = null ;
245181 }
246- if (orgOpenCvCoreMat != null ) {
247- orgOpenCvCoreMat .release ();
248- orgOpenCvCoreMat = null ;
249- }
250182 }
251183}
0 commit comments