@ -43,11 +43,13 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
public static class JavaCameraSizeAccessor implements ListItemAccessor {
@Override
public int getWidth ( Object obj ) {
Camera . Size size = ( Camera . Size ) obj ;
return size . width ;
}
@Override
public int getHeight ( Object obj ) {
Camera . Size size = ( Camera . Size ) obj ;
return size . height ;
@ -228,6 +230,8 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
}
}
private boolean mCameraFrameReady = false ;
@Override
protected boolean connectCamera ( int width , int height ) {
@ -239,6 +243,8 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
if ( ! initializeCamera ( width , height ) )
return false ;
mCameraFrameReady = false ;
/* now we can start update thread */
Log . d ( TAG , "Starting processing thread" ) ;
mStopThread = false ;
@ -248,6 +254,7 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
return true ;
}
@Override
protected void disconnectCamera ( ) {
/ * 1 . We need to stop thread which updating the frames
* 2 . Stop camera and release it
@ -270,12 +277,16 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
/* Now release camera */
releaseCamera ( ) ;
mCameraFrameReady = false ;
}
@Override
public void onPreviewFrame ( byte [ ] frame , Camera arg1 ) {
Log . d ( TAG , "Preview Frame received. Frame size: " + frame . length ) ;
synchronized ( this ) {
mFrameChain [ 1 - mChainIdx ] . put ( 0 , 0 , frame ) ;
mFrameChain [ mChainIdx ] . put ( 0 , 0 , frame ) ;
mCameraFrameReady = true ;
this . notify ( ) ;
}
if ( mCamera ! = null )
@ -283,10 +294,12 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
}
private class JavaCameraFrame implements CvCameraViewFrame {
@Override
public Mat gray ( ) {
return mYuvFrameData . submat ( 0 , mHeight , 0 , mWidth ) ;
}
@Override
public Mat rgba ( ) {
Imgproc . cvtColor ( mYuvFrameData , mRgba , Imgproc . COLOR_YUV2RGBA_NV21 , 4 ) ;
return mRgba ;
@ -312,21 +325,25 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
private class CameraWorker implements Runnable {
@Override
public void run ( ) {
do {
synchronized ( JavaCameraView . this ) {
try {
JavaCameraView . this . wait ( ) ;
while ( ! mCameraFrameReady & & ! mStopThread ) {
JavaCameraView . this . wait ( ) ;
}
} catch ( InterruptedException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
if ( mCameraFrameReady )
mChainIdx = 1 - mChainIdx ;
}
if ( ! mStopThread ) {
if ( ! mFrameChain [ mChainIdx ] . empty ( ) )
deliverAndDrawFrame ( mCameraFrame [ mChainIdx ] ) ;
mChainIdx = 1 - mChainIdx ;
if ( ! mStopThread & & mCameraFrameReady ) {
mCameraFrameReady = false ;
if ( ! mFrameChain [ 1 - mChainIdx ] . empty ( ) )
deliverAndDrawFrame ( mCameraFrame [ 1 - mChainIdx ] ) ;
}
} while ( ! mStopThread ) ;
Log . d ( TAG , "Finish processing thread" ) ;