Как вручную отображать кадры из Camera.PreviewCallback после обработки, без Camera.Preview - PullRequest
2 голосов
/ 03 декабря 2010

Я создал приложение для обнаружения лиц, в котором я получаю кадры из onPreviewFrame, выполняю обнаружение лиц, а затем рисую круг на холсте над моим SurfaceView.Проблема заключается в том, что кадры автоматически отображаются с использованием потока SurfaceView при запуске Camera.StartPreview ().Это очевидно необходимо для запуска PreviewCallback. Поскольку обработка, обнаружение лица и рисование выполняются в отдельном потоке (я предполагаю здесь), между отображаемым кадром и результатом этого кадра есть 2-секундная задержкаобрабатывается и рисуется на холсте.

Что я хочу сделать, так это остановить предварительный просмотр камеры, отображающий кадры, и отобразить их сам после обработки.Я считаю, что это имеет три преимущества:

Задержка с исчезновением.

Я могу рисовать прямо на растровом изображении, а не на холсте, который бесполезен, так как вы не можете отменить то, что сделали.

Это поможет сохранить низкое потребление памяти за счет отсутствия двух потоков, использующих одно и то же изображение.

Я читал, что можно отображать кадры из PreviewCallback, кто-нибудь знает, как и какостановить отображение кадров автоматически?

Заранее большое спасибо.

1 Ответ

1 голос
/ 06 декабря 2010

Джеймс, Здесь я нашел решение, если вы хотите остановить предварительный просмотр камеры, просто закомментируйте линии буксировки (я полагаю, вы использовали CameraPreview.java в качестве начала) // Camera.setPreviewDisplay (holder);// setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);Это означает, что камера не будет использовать поверхность для отображения предварительного просмотра, поэтому вы можете использовать данные обратного вызова для непосредственного отображения, но эффективность очень низкая, на эмуляторе всего 1 кадр / с, но, тем не менее, я думаю, что это решение, изатем вы можете подумать о том, как более эффективно рисовать кадры.

Удачи, и я хочу знать, нормально ли это для вас после этого решения:)

...