Cancelbuffer: Bufferqueue был заброшен с помощью Camerax и Android ML KitAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Cancelbuffer: Bufferqueue был заброшен с помощью Camerax и Android ML Kit

Сообщение Anonymous »

Каждый раз, когда я выхожу из камеры сканера или сканирования QR -кода, я получаю это предупреждение:
surfaceview - com.example.myapp /com.example.myapp.mainactivity@a9c00b0@0#0 Cancelbuffer: Bufferqueue был оставлен < /p>
my scanner QR QR -код код хорошо работает: хорошо): < /p> p> pre < /p> < /p> < /p>
QR -код Scanner (все работает хорошо): < /p> < /p>
QR Code (все работает хорошо): < /p>
my scanner QR (все работает хорошо): < /p>
My Scanner QR Code: все работает. class = "Lang-Kotlin PrettyPrint-Override">

Код: Выделить всё

abstract class QrScannerGenericFragment : Fragment() {

// UI
private lateinit var previewView: PreviewView
private lateinit var scannerProgressBar: ProgressBar
private lateinit var scannerTextView: TextView

private lateinit var cameraProvider: ProcessCameraProvider
private lateinit var analysisUseCase: ImageAnalysis

private var rgbaBitmap: Bitmap? = null
private val cameraExecutor by lazy { Executors.newSingleThreadExecutor() }
private val scanner by lazy {
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
BarcodeScanning.getClient(options)
}

// HELPERS
private var scanned = false
private var infoListener: InfoListener? = null

// BINDING
private var _binding: FragmentQrScannerBinding? = null
private val binding get() = _binding!!

override fun onAttach(context: Context) {
super.onAttach(context)
if (context is InfoListener) {
infoListener = context
} else {
throw RuntimeException("$context must implement InfoListener")
}
}

override fun onCreateView(
inflater: LayoutInflater,
parent: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentQrScannerBinding.inflate(inflater, parent, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

previewView = binding.scannerPreviewView
scannerProgressBar = binding.scannerProgressBar
scannerTextView = binding.scannerTextView

previewView.previewStreamState.observe(viewLifecycleOwner) { state ->
when (state) {
PreviewView.StreamState.IDLE -> {
scannerProgressBar.visibility = View.VISIBLE
scannerTextView.visibility = View.GONE
}

PreviewView.StreamState.STREAMING ->  {
scannerProgressBar.visibility = View.GONE
scannerTextView.visibility = View.VISIBLE
}
}
}
startCamera()
}

private fun startCamera() {
scannerProgressBar.visibility = View.VISIBLE
val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())

cameraProviderFuture.addListener({
cameraProvider = cameraProviderFuture.get()

val previewUseCase = Preview.Builder()
.build()
.also { it.setSurfaceProvider(previewView.surfaceProvider) }

analysisUseCase = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.build()
.also { useCase ->
useCase.setAnalyzer(cameraExecutor) { imageProxy ->
processImageProxy(imageProxy)
}
}

val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
viewLifecycleOwner,
cameraSelector,
previewUseCase,
analysisUseCase
)
}, ContextCompat.getMainExecutor(requireContext()))

}

private fun processImageProxy(imageProxy: ImageProxy) {
try {
val width = imageProxy.width
val height = imageProxy.height

if (rgbaBitmap == null
|| rgbaBitmap?.width != width
|| rgbaBitmap?.height != height
) {
rgbaBitmap?.recycle()
rgbaBitmap = createBitmap(width, height)
}

val buffer = imageProxy.planes[0].buffer
buffer.rewind()
rgbaBitmap!!.copyPixelsFromBuffer(buffer)

val inputImage =
InputImage.fromBitmap(rgbaBitmap!!, imageProxy.imageInfo.rotationDegrees)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
if (!scanned) {
barcodes.firstOrNull()?.rawValue?.let { value ->
scanned = true
requireActivity().runOnUiThread {
onQrcodeDetected(value)
}
}
}

}
.addOnFailureListener { e ->
Log.e(LOGCAT_TAG, "Błąd skanowania", e)
}
} catch (e: Exception) {
Log.e(LOGCAT_TAG, "Error processing imageProxy", e)
} finally {
imageProxy.close()
}
}

override fun onResume() {
super.onResume()
scanned = false
}

override fun onStop() {
if (::cameraProvider.isInitialized) {
cameraProvider.unbindAll()
}
super.onStop()
}

override fun onDestroyView() {
super.onDestroyView()

if (::cameraProvider.isInitialized) {
cameraProvider.unbindAll()
}

cameraExecutor.shutdown()
scanner.close()

rgbaBitmap?.run {
if (!isRecycled) recycle()
}
rgbaBitmap = null
_binding = null
}

protected abstract fun onQrcodeDetected(value: String)

companion object {
private const val LOGCAT_TAG = "Debug"
}
}
< /code>
Я реализую методы прослушивателя в mainActivity.kt и расширяется здесь: < /p>
class TrailsQrScannerFragment: QrScannerGenericFragment() {
private var trailsQrScannerListener: TrailsQrScannerListener? = null
override fun onAttach(context: Context) {
super.onAttach(context)
if(context is TrailsQrScannerListener){
trailsQrScannerListener = context
}else {
throw IllegalStateException("$context must implement TrailsQrScannerListener")
}
}
override fun onQrcodeDetected(scannedText:  String) {
trailsQrScannerListener?.onTrailQrcodeDetected(scannedText)
}
}
Спасибо за вашу помощь!


Подробнее здесь: https://stackoverflow.com/questions/796 ... oid-ml-kit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Cancelbuffer: Bufferqueue был заброшен с помощью Camerax и Android ML Kit
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Каков статус com.arthenica: ffmpeg-kit-full: 6.0.lts до настоящего времени от FFMPeg Kit Android? [закрыто]
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • «SurfaceView BufferQueue была заброшена» при использовании CameraxViewFinder Composable с AnimatedVisibubite
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • «SurfaceView BufferQueue была заброшена» при использовании CameraxViewFinder Composable с AnimatedVisibubite
    Anonymous » » в форуме Android
    0 Ответы
    115 Просмотры
    Последнее сообщение Anonymous
  • Запись видео и одновременная обработка кадров в Android с помощью CameraX
    Гость » » в форуме Android
    0 Ответы
    45 Просмотры
    Последнее сообщение Гость

Вернуться в «Android»