Здравствуйте! Может сможете подсказать:
процессор imx6S(D) buildroot-2016
Есть видеоввод, поддерживается разрешение до 4096х3000
В плагине imxvpuenc_mjpeg исправлено разрешение до 4096х4096 . При этом получается вводить кадры с разрешением до 4096х2902 или 3960х3000 (размер кадра примерно одинаковый). При увеличении разрешения по X или Y (размера кадра) получаем ошибку
нашел, что надо явно указать для imxv4l2videosrc queue-size=5 или меньше. по умолчанию 6 и не хватает памяти. Вопрос - где ограничение на размер памяти под буферы. Общая 1 гБ не загружена
нашел, что надо явно указать для imxv4l2videosrc queue-size=5 или меньше. по умолчанию 6 и не хватает памяти. Вопрос - где ограничение на размер памяти под буферы. Общая 1 гБ не загружена
память для буферов DMA резервируется через CMA-аллокатор. Можно проверить сколько зарезервировано на работающей системе
dmesg | grep cma
в конфиге ядра можно изменить
make linux-menuconfig
Device Drivers --->
Generic Driver Options --->
*** Default contiguous memory area size: *** (320) Size in Mega Bytes
можно через командную строку ядра установить, например добавить в параметры
cma=512M
возможно у вас так и установлено и поэтому не меняется через конфиг, посмотреть параметры
cat /proc/cmdline
меняется в DTS.
Теперь другая засада - наткнулись на ограничения по размеру компрессированного кадра - где-то около 1040000 байт. для аппаратного кодека. программный работает нормально.
GST_PADS gstpad.c:3798:push_sticky:<imxv4l2videosrc0:src> [00m event segment marked received
basesrc gstbasesrc.c:2843:gst_base_src_loop:<imxv4l2videosrc0> [00m marking pending DISCONT
GST_SCHEDULING gstpad.c:4186:gst_pad_chain_data_unchecked:<imxvpuencodermjpeg0:sink> [00m calling chainfunction &gst_video_encoder_chain with buffer buffer: 0x1241648, pts 0:00:06.030922334, dts 99:99:99.999999999, dur 0:00:01.000000000, size 18432000, offset none, offset_end none, flags 0x4040
imxvpuapi imxvpuapi_vpulib.c:3861:imx_vpu_enc_encode: [00m timeout after waiting 500 ms for frame completion
imxvpuapi imxvpuapi_vpulib.c:3861:imx_vpu_enc_encode: [00m timeout after waiting 500 ms for frame completion
imxvpuapi imxvpuapi_vpulib.c:3861:imx_vpu_enc_encode: [00m timeout after waiting 500 ms for frame completion
imxvpuapi imxvpuapi_vpulib.c:3861:imx_vpu_enc_encode: [00m timeout after waiting 500 ms for frame completion
imxvpuapi imxvpuapi_vpulib.c:3879:imx_vpu_enc_encode: [00m could not get output information: wrong call sequence
imxvpuencoderbase encoder_base.c:684:gst_imx_vpu_encoder_base_handle_frame:<imxvpuencodermjpeg0> [00m failed to encode frame: wrong call sequence
GST_SCHEDULING gstpad.c:4192:gst_pad_chain_data_unchecked:<imxvpuencodermjpeg0:sink> [00m called chainfunction &gst_video_encoder_chain with buffer 0x1241648, returned error
basesrc gstbasesrc.c:2856:gst_base_src_loop:<imxv4l2videosrc0> [00m pausing after gst_pad_push() = error
basesrc gstbasesrc.c:2899:gst_base_src_loop:<imxv4l2videosrc0> [00m pausing task, reason error
GST_PADS gstpad.c:6027:gst_pad_pause_task:<imxv4l2videosrc0:src> [00m pause task
Вопрос собственно - можете помочь понять характер ограничения - библиотеки , firmware или аппаратура
можно попробовать обновить фирмварь и библиотеки - скиньте куда нибуть buildroot с которым работаете
Ещё вопрос - у вас там одновременно с двух камер 4096х3000 ? Аппаратные ограничения на битрейт VPU описаны в документации на процессор.
Сегодня попробовал buildroot-2021.08-sk на базе ядра 5.10.9 для i.mx6 quad/dual/sol , картина та же. библиотеки там наверное актуальные. Поток с одной камеры, битрейт роли не играет, там 3-4 fps, даже если один кадр сжать результат такой же Проблема именно в размере выходного jpeg кадра. Если еще актуально скинуть наш билдрут - попробую