Я борюсь с этой проблемой более недели, и, скорее всего, это ошибка в кодере 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, кодируя неподвижное изображение для многих кадров (это определяет очень низкие битрейты в кодере из-за похожих кадров), при появлении ошибки при кодировании ключевого кадра ошибка появляется только при кодировании определенных изображений, которые, как представляется, имеют более подробную информацию, т.е. требуется много бит для внутреннего кодирования).