android for त्रुटि: लॉकबफर को प्राप्त करने में असमर्थ, बहुत संभावना वाला क्लाइंट अधिकतम इमेज बफ़र्स से अधिक लॉक करने का प्रयास करता है




बेस्ट कैमरा एप्प (2)

मैं कैमरा 2 एपीआई का इस्तेमाल छवि कैप्चर करने और पतझड़ में प्रदर्शित करने के लिए कर रहा हूं। सभी डिवाइसों में सभी Micromax Q382 ठीक काम कर रही हैं, लेकिन जब Micromax Q382 डिवाइस का इस्तेमाल करते हैं तो पतले रंग में इसका दिखाया काला चित्र प्रदर्शित होता है।

Unable to acquire a lockedBuffer, very likely client tries to lock more than maxImages buffers

मैं कब्जा लयथरन कॉलबैक के लिए नीचे कोड का उपयोग कर रहा हूँ

final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback()
        {

            @Override
            public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                                           TotalCaptureResult result)
            {

                super.onCaptureCompleted(session, request, result);

                startPreview();
            }

        };

        mCameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback()
        {

            @Override
            public void onConfigured(CameraCaptureSession session)
            {

                try {
                    session.capture(captureBuilder.build(), captureListener, backgroudHandler);
                } catch (CameraAccessException e) {
                    AppLogger.exception(myContext, getClass().getSimpleName(), e);
                    // e.printStackTrace();
                }
            }

            @Override
            public void onConfigureFailed(CameraCaptureSession session)
            {

            }
        }, backgroudHandler);

    } catch (CameraAccessException e) {
        AppLogger.exception(myContext, getClass().getSimpleName(), e);
        // e.printStackTrace();
    }

और नीचे दिए गए कोड का उपयोग ऑनइजेज उपलब्ध हैं

ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener()
        {

            @Override
            public void onImageAvailable(ImageReader reader)
            {

                Image image = null;
                try {
                    image = reader.acquireLatestImage();
                    // ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                    // final byte[] bytes = new byte[buffer.capacity()];

                    ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                    final byte[] bytes = new byte[buffer.remaining()];

                    buffer.get(bytes);
                    save(bytes);
                    buffer.clear();
                    runOnUiThread(new Runnable()
                    {

                        @Override
                        public void run()
                        {
                            mThumbnail.setVisibility(View.VISIBLE);
                            filePathLabel.setVisibility(View.VISIBLE);
                            filePathValue.setText(file.getAbsolutePath());

                            Bitmap bmp =
                                    UtilityMethods.getScaledBitmap(CameraImageTestActivityLoliipop.this, bytes);
                            mThumbnail.setImageBitmap(bmp);
                        }
                    });

                } catch (FileNotFoundException e) {
                    AppLogger.exception(myContext, getClass().getSimpleName(), e);
                    // e.printStackTrace();
                } catch (IOException e) {
                    AppLogger.exception(myContext, getClass().getSimpleName(), e);
                    // e.printStackTrace();
                } finally {
                    if (image != null) {
                        image.close();
                    }
                }
            }

अधिकतम इमेज 2 को सेट करने और लैटस्ट इमेज का उपयोग करने के बाद, अगर आप अभी भी इस मुद्दे पर मिल रहे हैं, जहां आप इमेज उपलब्ध कॉलबैक पर रोकना चाहते हैं, तो आप संभवत: प्राप्त करने वाले छवि बफर को रिलीज़ नहीं कर रहे हैं। नवीनतम इमेज (), जब तक आप इमेज नहीं डालते हैं तब तक बफर उपलब्ध नहीं होगा। () उस छवि पर और उसी बफर को पुन: उपयोग करने की अनुमति दें

    Image raw = imageReader.acquireLatestImage();
    raw.close();

यहां दस्तावेज़ के लिए लिंक है: https://developer.android.com/reference/android/media/Image.html#close ()


आप विधि के लिए पैरामीटर maxImages 1 प्रदान कर सकते हैं ImageReader.newInstanceacquireLatestImage acquireNextSurfaceImage छवि केवल एक ही छवि बफर बंद करने से पहले, जो इस चेतावनी को जन्म देती है।

इस मामले में acquireNextImage का उपयोग करें। अगर maxImages 1 से बड़ा है, acquireLatestImage में इस समस्या नहीं है।