Когда медиа-рекордер начинает запись видео, перестает работать метод onPreviewFrame в Camera.PreviewCallback - PullRequest
1 голос
/ 29 января 2020

Я пишу код для записи видео после анализа кадра. Если кадр содержит уровень покраснения выше 240, то начинается запись, или покраснение идет ниже 230, прекращают запись видео.

Но проблема в том, что, когда медиа-рекордер начинает запись, чем onPreviewFrame метод Camera.PreviewCallback перестал работать для настроенного android OS MIUI моего android устройство Redmi note 7 pro .

Мой код ниже

private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {

       /**
        * {@inheritDoc}
        */
       @Override
       public void onPreviewFrame(byte[] data, Camera cam) {
           if (data == null) throw new NullPointerException();
           Camera.Size size = cam.getParameters().getPreviewSize();
           if (size == null) throw new NullPointerException();


           int width = size.width;
           int height = size.height;

           // decodeYUV420SPtoRedAvg function to find redness lavel of frame 
           int imgAvg = ImageProcessing.decodeYUV420SPtoRedAvg(data.clone(), height, width);
           Log.i(TAG, "imgAvg=" + imgAvg);
           if (imgAvg == 0 || imgAvg == 255) {
               return;
           }

           if (isRecording) {
               long diffInMs = new Date(System.currentTimeMillis()).getTime() - startTime;
               Log.i(TAG, imgAvg + " imgAvg diffInMs1=" + diffInMs);

               mProgressBar.setProgress((int) diffInMs);
               if (diffInMs >= recordingMS + 1000) {
                   stopRecording();
                   i = 0;
                   mProgressBar.setVisibility(View.GONE);
                   tvStatingCount.setVisibility(View.GONE);
               }
               tvStatingCount.setText(getString(R.string.reading_started_please_hold_your_finger_steady_for_one_minute) + imgAvg);
           } else {
               mProgressBar.setVisibility(View.GONE);
               tvStatingCount.setVisibility(View.VISIBLE);
               tvStatingCount.setText(getString(R.string.please_place_your_finger_over_your_rear_camera_to_start_the_readingt) + imgAvg);
           }

           if (imgAvg > 240) {
               if (!isRecording) {
                   starRecording();
                   i = 0;
                   mProgressBar.setProgress(0);
                   mProgressBar.setVisibility(View.VISIBLE);
                   tvStatingCount.setText(getString(R.string.reading_started_please_hold_your_finger_steady_for_one_minute) + imgAvg);
               }
           } else {
               if (isRecording && imgAvg < 230) {
                   stopRecording();
               }
               /*mProgressBar.setVisibility(View.GONE);
               tvStatingCount.setText(getString(R.string.please_place_your_finger_over_your_rear_camera_to_start_the_readingt, imgAvg));*/
           }
       }
   };

Код работает для собственной версии Android. Проверенный код в мото девайсе Samsung.

чтобы кто-нибудь мог помочь мне найти решение?

...