Я пишу код для записи видео после анализа кадра. Если кадр содержит уровень покраснения выше 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.
чтобы кто-нибудь мог помочь мне найти решение?