Подтвердить что ты не робот

Ошибка Encoder на графическом процессоре Adreno при кодировании с поверхности

Я борюсь с этой проблемой более недели, и, скорее всего, это ошибка в кодере Qualcomm GPU/аппаратного видеокодера. Поскольку мы вынуждены выпускать приложение, и их форумы разработчиков не предоставили никакой обратной связи, я также размещаю его здесь, надеясь, что кто-то сможет предоставить некоторые подсказки или, что еще лучше, обходное решение, так что ошибка в кодере не срабатывает.

Приложение кодируется с поверхности. Когда определенные изображения визуализируются на поверхности, кодер выходит из строя (100%) в одном и том же месте (когда кадр, который в настоящее время кодируется, является ключевым фреймом). Выход Logcat из кодера в точке сбоя (с последними строками, повторяющимися с очень высокой скоростью):

11-26 11:41:33.312: E/OMX-VENC-720p(25949): ERROR: async_msg_process() - Error statuscode = 1
11-26 11:41:33.312: E/ACodec(29317): [OMX.qcom.video.encoder.avc] ERROR(0x80001009)
11-26 11:41:33.312: E/MediaCodec(29317): Codec reported an error. (omx error 0x80001009, internalError -2147483648)
11-26 11:41:33.362: E/OMX-VENC-720p(25949): ERROR: venc_use_buf:set input buffer failed 
11-26 11:41:33.362: E/OMX-VENC-720p(25949): ERROR: in dev_use_buf
11-26 11:41:33.362: E/OMX-VENC-720p(25949): ERROR: empty_buffer_done() failed!
11-26 11:41:33.372: E/OMX-VENC-720p(25949): m_fbd_count at o/p flush = 306
11-26 11:41:33.372: E/OMX-VENC-720p(25949): m_etb_count at i/p flush = 313
11-26 11:41:33.372: E/OMX-VENC-720p(25949): ERROR: ioctl VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER failed
11-26 11:41:33.372: E/OMX-VENC-720p(25949): ERROR: dev_fill_buf() Failed
11-26 11:41:33.372: E/OMX-VENC-720p(25949): ERROR: FTBProxy() failed!

Я могу реплицировать его также на Grafika, просто заменив в приложении Record GL рисование двух геометрических форм с рисунком один из проблематичные изображения, полный экран, в альбомном режиме и изменение битрейта на более высокое значение (7 Мбит/с). Крушение кодера происходит быстрее для увеличения битрейта.

Вот один образ, который, кажется, легко разбивает его и здесь RecordFBOActivity.java с необходимыми изменениями.

С Grafika, я тестировал, и кодер вылетает как на Samsung S4, так и на международной версии, а также на оригинальном Nexus 4. С нашим программным обеспечением, которое немного сложнее, чем простое изображение, оно все равно падает на обоих. Не тестировалось на других устройствах Adreno. На Samsung S3 с графическим процессором Mali 400 он отлично работает.

При скорости 4 Мбит/с кодер в нашем приложении по-прежнему падает как на S4, так и на N4, но позже. Графика падает на N4 в том же месте, но не на S4.

EDIT: согласно комментариям ниже, он может быть воспроизведен также при кодировании одного и того же изображения из буфера. Различные тесты, судя по всему, сужают условия для их воспроизведения на: h264 hw encoder на устройствах Qualcomm, кодируя неподвижное изображение для многих кадров (это определяет очень низкие битрейты в кодере из-за похожих кадров), при появлении ошибки при кодировании ключевого кадра ошибка появляется только при кодировании определенных изображений, которые, как представляется, имеют более подробную информацию, т.е. требуется много бит для внутреннего кодирования).

4b9b3361

Ответ 1

Кажется, это ошибка, о которой говорилось выше.