android - How to turn on flash on camera2 api correctly? -


i use standard google sample canera2api

and here try tenr on control_ae_mode_on_always_flash

how doing it, changed line

private void capturestillpicture() {     try {         final activity activity = getactivity();         if (null == activity || null == mcameradevice) {             return;         }         // capturerequest.builder use take picture.         final capturerequest.builder capturebuilder =                 mcameradevice.createcapturerequest(cameradevice.template_still_capture);         capturebuilder.addtarget(mimagereader.getsurface());          // use same ae , af modes preview.         capturebuilder.set(capturerequest.control_af_mode,                 capturerequest.control_af_mode_continuous_picture);    ---->>>>    ---- //            setautoflash(capturebuilder);   ---->>>>   ++++    capturebuilder.set(capturerequest.control_ae_mode, camerametadata.control_ae_mode_on_always_flash);             // orientation         int rotation = activity.getwindowmanager().getdefaultdisplay().getrotation();         capturebuilder.set(capturerequest.jpeg_orientation, getorientation(rotation));          cameracapturesession.capturecallback capturecallback                 = new cameracapturesession.capturecallback() {              @override             public void oncapturecompleted(@nonnull cameracapturesession session,                                            @nonnull capturerequest request,                                            @nonnull totalcaptureresult result) {                 showtoast("saved: " + mfile);                 log.d(tag, mfile.tostring());                 unlockfocus();             }         };          mcapturesession.stoprepeating();         mcapturesession.capture(capturebuilder.build(), capturecallback, null);     } catch (cameraaccessexception e) {         e.printstacktrace();     } } 

then here

private void unlockfocus() {     try {         // reset auto-focus trigger         mpreviewrequestbuilder.set(capturerequest.control_af_trigger,                 camerametadata.control_af_trigger_cancel);   ---->>>> ----  //            setautoflash(mpreviewrequestbuilder); ---->>>> ++++        mpreviewrequestbuilder.set(capturerequest.control_ae_mode, camerametadata.control_ae_mode_on_always_flash);            mcapturesession.capture(mpreviewrequestbuilder.build(), mcapturecallback,                 mbackgroundhandler);         // after this, camera go normal state of preview.         mstate = state_preview;         mcapturesession.setrepeatingrequest(mpreviewrequest, mcapturecallback,                 mbackgroundhandler);     } catch (cameraaccessexception e) {         e.printstacktrace();     } } 

and here

mcameradevice.createcapturesession(arrays.aslist(surface, mimagereader.getsurface()),                 new cameracapturesession.statecallback() {                      @override                     public void onconfigured(@nonnull cameracapturesession cameracapturesession) {                         // camera closed                         if (null == mcameradevice) {                             return;                         }                          // when session ready, start displaying preview.                         mcapturesession = cameracapturesession;                         try {                             // auto focus should continuous camera preview.                             mpreviewrequestbuilder.set(capturerequest.control_af_mode,                                     capturerequest.control_af_mode_continuous_picture);                             // flash automatically enabled when necessary.   ---->>>> ----  //                                setautoflash(mpreviewrequestbuilder);                              ---->>>> ++++  mpreviewrequestbuilder.set(capturerequest.control_ae_mode, camerametadata.control_ae_mode_on_always_flash);                                // finally, start displaying camera preview.                             mpreviewrequest = mpreviewrequestbuilder.build();                             mcapturesession.setrepeatingrequest(mpreviewrequest,                                     mcapturecallback, mbackgroundhandler);                         } catch (cameraaccessexception e) {                             e.printstacktrace();                         }                     }                      @override                     public void onconfigurefailed(                             @nonnull cameracapturesession cameracapturesession) {                         showtoast("failed");                     }                 }, null         ); 

and if launch app such configuration work , flash bern everytime, if lauch app on samsung s6 got stack on preview after flash berned.

it weird why device work , issue...

but have tried fix figered out next if chenge 1 parametr in capturestillpicture() method here

private void capturestillpicture() {     try {         final activity activity = getactivity();         if (null == activity || null == mcameradevice) {             return;         }         // capturerequest.builder use take picture.         final capturerequest.builder capturebuilder =                 mcameradevice.createcapturerequest(cameradevice.template_still_capture);         capturebuilder.addtarget(mimagereader.getsurface());          // use same ae , af modes preview.         capturebuilder.set(capturerequest.control_af_mode,                 capturerequest.control_af_mode_continuous_picture);    ---->>>> ---- //            setautoflash(capturebuilder); ---->>>> ---- //            capturebuilder.set(capturerequest.control_ae_mode, camerametadata.control_ae_mode_on_always_flash); ---->>>> ++++        capturebuilder.set(capturerequest.control_ae_mode, camerametadata.control_ae_mode_on_auto_flash);          // orientation         int rotation = activity.getwindowmanager().getdefaultdisplay().getrotation();         capturebuilder.set(capturerequest.jpeg_orientation, getorientation(rotation));          cameracapturesession.capturecallback capturecallback                 = new cameracapturesession.capturecallback() {              @override             public void oncapturecompleted(@nonnull cameracapturesession session,                                            @nonnull capturerequest request,                                            @nonnull totalcaptureresult result) {                 showtoast("saved: " + mfile);                 log.d(tag, mfile.tostring());                 unlockfocus();             }         };          mcapturesession.stoprepeating();         mcapturesession.capture(capturebuilder.build(), capturecallback, null);     } catch (cameraaccessexception e) {         e.printstacktrace();     } } 

i have changed control_ae_mode_on_always_flash control_ae_mode_on_auto_flash , configuration works on samsung s6 perfectly, stop working device...

finally have 2 different configuration if apply 1 devices support , works perfectly, devices don't... , vise versa...

what doing wrong?


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -