diff --git a/camera/src/android/camera.java b/camera/src/android/camera.java index b591b38..2b289bc 100644 --- a/camera/src/android/camera.java +++ b/camera/src/android/camera.java @@ -42,9 +42,6 @@ class CameraExtension implements Camera.PreviewCallback { private Camera.Parameters parameters; private SurfaceView surfaceView; - private byte[] previewPixels; - private byte[] picturePixels; - private static CameraExtension instance; private CameraExtension() { @@ -53,7 +50,7 @@ class CameraExtension implements Camera.PreviewCallback { private static CameraExtension getInstance() { if (instance == null) { - Log.v(TAG, "No instance, creating"); + //Log.v(TAG, "No instance, creating"); instance = new CameraExtension(); } return instance; @@ -103,15 +100,15 @@ class CameraExtension implements Camera.PreviewCallback { @Override public void onPreviewFrame(byte[] data, Camera camera) { - Log.v(TAG, "onPreviewFrame " + previewSize.width + "x" + previewSize.height); + //Log.v(TAG, "onPreviewFrame " + previewSize.width + "x" + previewSize.height); if (data != null) { handleCameraFrame(data, previewSize.width, previewSize.height); - surfaceView.setVisibility(View.VISIBLE); - camera.startPreview(); - surfaceView.setVisibility(View.INVISIBLE); + // surfaceView.setVisibility(View.VISIBLE); + // camera.startPreview(); + // surfaceView.setVisibility(View.INVISIBLE); } else { - Log.v(TAG, "onPreviewFrame - data is null"); + //Log.v(TAG, "onPreviewFrame - data is null"); } } @@ -131,7 +128,7 @@ class CameraExtension implements Camera.PreviewCallback { * camera properties. */ private boolean prepareCapture(final Context context, int facing) { - Log.v(TAG, "prepareCapture"); + //Log.v(TAG, "prepareCapture"); if (!hasAllPermissions(context, PERMISSIONS)) { requestPermissions(context, PERMISSIONS); return false; @@ -144,37 +141,34 @@ class CameraExtension implements Camera.PreviewCallback { camera = openFrontCamera(); } if (camera == null) { - Log.v(TAG, "Unable to open camera"); + //Log.v(TAG, "Unable to open camera"); return false; } try { parameters = camera.getParameters(); - for(Camera.Size size : parameters.getSupportedPictureSizes()) { - Log.v(TAG, "Supported picture size: " + size.width + "x" + size.height); - } - for(Camera.Size size : parameters.getSupportedPreviewSizes()) { - Log.v(TAG, "Supported preview size: " + size.width + "x" + size.height); - } - for(int format : parameters.getSupportedPictureFormats()) { - Log.v(TAG, "Supported picture format: " + format); - } - for(int format : parameters.getSupportedPreviewFormats()) { - Log.v(TAG, "Supported preview format: " + format); - } - Log.v(TAG, "Current preview format:" + parameters.getPreviewFormat()); + // for(Camera.Size size : parameters.getSupportedPictureSizes()) { + // Log.v(TAG, "Supported picture size: " + size.width + "x" + size.height); + // } + // for(Camera.Size size : parameters.getSupportedPreviewSizes()) { + // Log.v(TAG, "Supported preview size: " + size.width + "x" + size.height); + // } + // for(int format : parameters.getSupportedPictureFormats()) { + // Log.v(TAG, "Supported picture format: " + format); + // } + // for(int format : parameters.getSupportedPreviewFormats()) { + // Log.v(TAG, "Supported preview format: " + format); + // } + // Log.v(TAG, "Current preview format:" + parameters.getPreviewFormat()); pictureSize = parameters.getPictureSize(); previewSize = getPreferredPreviewSize(); parameters.setPreviewSize(previewSize.width, previewSize.height); - Log.v(TAG, "Camera parameters. picture size: " + pictureSize.width + "x" + pictureSize.height + " preview size: " + previewSize.width + "x" + previewSize.height); + //Log.v(TAG, "Camera parameters. picture size: " + pictureSize.width + "x" + pictureSize.height + " preview size: " + previewSize.width + "x" + previewSize.height); //parameters.setPictureFormat(ImageFormat.RGB_565); //parameters.setPictureSize(previewSize.width, previewSize.height); camera.setParameters(parameters); - previewPixels = new byte[previewSize.width * previewSize.height * 3]; - picturePixels = new byte[pictureSize.width * pictureSize.height * 3]; - //camera.setDisplayOrientation() // use utility function from Google example } catch(Exception e) { @@ -201,14 +195,14 @@ class CameraExtension implements Camera.PreviewCallback { * Start capturing images with the camera */ private void startCapture(final Context context) { - Log.v(TAG, "startCapture"); + //Log.v(TAG, "startCapture"); ((Activity)context).runOnUiThread(new Runnable() { @Override public void run() { - Log.v(TAG, "runOnUiThread"); + //Log.v(TAG, "runOnUiThread"); try { - Log.v(TAG, "Create surface"); + //Log.v(TAG, "Create surface"); surfaceView = new SurfaceView(context); Activity activity = (Activity)context; ViewGroup viewGroup = (ViewGroup)activity.findViewById(android.R.id.content); @@ -218,12 +212,12 @@ class CameraExtension implements Camera.PreviewCallback { surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - Log.v(TAG, "surfaceChanged"); + //Log.v(TAG, "surfaceChanged"); } @Override public void surfaceCreated(SurfaceHolder holder) { - Log.v(TAG, "surfaceCreated"); + //Log.v(TAG, "surfaceCreated"); try { camera.stopPreview(); camera.setPreviewCallback(CameraExtension.this); @@ -239,7 +233,7 @@ class CameraExtension implements Camera.PreviewCallback { @Override public void surfaceDestroyed(SurfaceHolder holder) { - Log.v(TAG, "surfaceDestroyed"); + //Log.v(TAG, "surfaceDestroyed"); } }); @@ -267,27 +261,27 @@ class CameraExtension implements Camera.PreviewCallback { } public static boolean PrepareCapture(final Context context, int facing) { - Log.v(TAG, "PrepareCapture " + facing); + //Log.v(TAG, "PrepareCapture " + facing); return CameraExtension.getInstance().prepareCapture(context, facing); } public static void StartCapture(final Context context) { - Log.v(TAG, "StartCapture"); + //Log.v(TAG, "StartCapture"); CameraExtension.getInstance().startCapture(context); } public static void StopCapture(final Context context) { - Log.v(TAG, "StopCapture"); + //Log.v(TAG, "StopCapture"); CameraExtension.getInstance().stopCapture(); } public static int GetWidth() { - Log.v(TAG, "GetWidth"); + //Log.v(TAG, "GetWidth"); return CameraExtension.getInstance().getWidth(); } public static int GetHeight() { - Log.v(TAG, "GetHeight"); + //Log.v(TAG, "GetHeight"); return CameraExtension.getInstance().getHeight(); } diff --git a/camera/src/camera_android.cpp b/camera/src/camera_android.cpp index 9ec57be..48b00e3 100644 --- a/camera/src/camera_android.cpp +++ b/camera/src/camera_android.cpp @@ -117,12 +117,12 @@ JNIEXPORT void JNICALL Java_com_defold_android_camera_CameraExtension_handleCame B = Y + Cb + (Cb >> 1) + (Cb >> 4) + (Cb >> 5); if(B < 0) B = 0; else if(B > 255) B = 255; - data[0] = R; - data++; - data[0] = G; - data++; - data[0] = B; - data++; + // We get the image in landscape mode, so we flip it to portrait mode + int index = (w-i-1)*height*3 + (h-j-1)*3; + data[index + 0] = R; + data[index + 1] = G; + data[index + 2] = B; + pixPtr++; //data[(pixPtr * 3) + 0] = R; //data[(pixPtr * 3) + 1] = G; @@ -160,6 +160,14 @@ int CameraPlatform_StartCapture(dmBuffer::HBuffer* buffer, CameraType type, Capt jint width = env->CallStaticIntMethod(cls, env->GetStaticMethodID(cls, "GetWidth", "()I")); jint height = env->CallStaticIntMethod(cls, env->GetStaticMethodID(cls, "GetHeight", "()I")); + // currently, we have portrait mode + if (width > height) + { + int tmp = width; + width = height; + height = tmp; + } + // set out parameters and create video buffer outparams.m_Width = (uint32_t)width; outparams.m_Height = (uint32_t)height; diff --git a/main/main.script b/main/main.script index d30a85c..18c4494 100644 --- a/main/main.script +++ b/main/main.script @@ -14,7 +14,7 @@ function init(self) local quality = camera.CAPTURE_QUALITY_HIGH local type = camera.CAMERA_TYPE_FRONT - if sysinfo.system_name == 'iPhone OS' then + if sysinfo.system_name == 'iPhone OS' or sysinfo.system_name == 'Android' then type = camera.CAMERA_TYPE_BACK quality = camera.CAPTURE_QUALITY_MEDIUM end