Пример камеры Android NDK в формате JPEG с частотой 30 Гц
Я использовал пример Android NDK Camera, и с его помощью можно читать кадры в формате AIMAGE_FORMAT_YUV_420_888
используя yuvreader_
внутри DrawFrame при 30 Гц. Я подтвердил, что 30 Гц достигается путем записи временной метки в каждом изображении и ее печати. Я использую Samsung Galaxy S9.
Теперь я пытался получить изображения JPEG вместо изображений YUV также с частотой 30 Гц, но пока не получилось, и мне было интересно, может ли кто-нибудь помочь.
Из того, что я понял, сеанс захвата в этом примере создает запрос как для "предварительного просмотра", так и для "все еще захвата", где yuv используется для предварительного просмотра, а jpeg используется для захвата все еще. Что я сделал, чтобы установить jpgReader_
в качестве предварительного просмотра, а затем я проверил метку времени кадров, захваченных в ImageCallback здесь (я прокомментировал шаг записи в файл, и просто вызвал AImage_delete (изображение), чтобы вместо этого очистить буфер). Однако в результате я получаю кадры с интервалами 33, 66, 99 и 133 мс, которые распределены достаточно равномерно, поэтому многие кадры часто пропускаются.
Есть идеи, в чем может быть проблема?
1 ответ
Многие устройства камеры не могут воспроизводить изображения с разрешением 30 jpeg в секунду. Вот почему API камеры явно устанавливает формат YUV (или частный) для предварительного просмотра или видео. Немногие устройства способны создавать 30 JPEG в секунду. Вот почему в типичном сеансе видеозаписи используются кодеры h246 или vp8.