Android camera preview displays green screen -


i have implemented camera preview on android >= 4.1.2. on android 5 on galaxy s4 (two different devices) view displays 3 camera previews , green screen:

enter image description here

on galaxy s3 (android 4.3), galaxy s2 (android 4.1.2) , galaxy tab s (android 5.0.1) works correctly.

this code below:

import android.content.context; import android.hardware.camera; import android.view.surfaceholder; import android.view.surfaceview;  import java.util.list;  @suppresswarnings("deprecation") public class cameraview extends surfaceview {      private boolean inpreview = false;     private boolean surfacecreated = false;      private camera camera = null;      private camera.size previewsize = null;      public cameraview(context context) {         super(context);         surfaceholder surfaceholder = getholder();         surfaceholder.callback surfaceholdercallback = new surfaceholder.callback() {              @override             public void surfacecreated(surfaceholder holder) {                 surfacecreated = true;                 try {                     camera = camera.open();                     camera.setpreviewdisplay(holder);                 } catch (exception e) {                     e.printstacktrace();                     camera.release();                     camera = null;                 }             }              @override             public void surfacechanged(surfaceholder holder, int format, int width, int height) {                 if (holder.getsurface() == null || camera == null) {                     return;                 }                 camera.stoppreview();                 list<camera.size> sizes = camera.getparameters().getsupportedpicturesizes();                 previewsize = getoptimalpreviewsize(sizes, width, height);                 startpreview();             }              @override             public void surfacedestroyed(surfaceholder holder) {                 surfacecreated = false;                 if (camera != null) {                     camera.stoppreview();                     camera.release();                     camera = null;                 }             }         };         surfaceholder.addcallback(surfaceholdercallback);         surfaceholder.settype(surfaceholder.surface_type_push_buffers);     }      public void onresume() {         if(!inpreview && camera != null && surfacecreated) {             startpreview();         }     }      public void onpause() {         if(camera != null) {             camera.stoppreview();             inpreview = false;         }     }      private void startpreview() {         camera.parameters parameters = camera.getparameters();         parameters.setpreviewsize(previewsize.width, previewsize.height);         camera.setparameters(parameters);         camera.startpreview();         inpreview = true;     }      private camera.size getoptimalpreviewsize(list<camera.size> sizes, int w, int h) {         final double aspect_tolerance = 0.05;         double targetratio = (double) w / h;         if (sizes == null)             return null;          camera.size optimalsize = null;         double mindiff = double.max_value;          (camera.size size : sizes) {             double ratio = (double) size.width / size.height;             if (math.abs(ratio - targetratio) > aspect_tolerance)                 continue;             if (math.abs(size.height - h) < mindiff) {                 optimalsize = size;                 mindiff = math.abs(size.height - h);             }         }          if (optimalsize == null) {             mindiff = double.max_value;             (camera.size size : sizes) {                 if (math.abs(size.height - h) < mindiff) {                     optimalsize = size;                     mindiff = math.abs(size.height - h);                 }             }         }         return optimalsize;     } } 

usage:

public class mainactivity extends activity {      private cameraview cameraview;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         cameraview = new cameraview(this);         viewgroup.layoutparams params = new viewgroup.layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.match_parent);         cameraview.setlayoutparams(params);         setcontentview(cameraview);     }      @override     protected void onresume() {         super.onresume();         cameraview.onresume();     }      @override     protected void onpause() {         super.onpause();         cameraview.onpause();     } } 

i support landscape mode.


Comments

Popular posts from this blog

searchKeyword not working in AngularJS filter -

sequelize.js - Sequelize: sort by enum cases -

user interface - how to replace an ongoing process of image capture from another process call over the same ImageLabel in python's GUI TKinter -