Невозможно использовать класс MediaCodec платформы Android в разделе «Поверхностный ввод» Режим

Я пытаюсь написать простой видеокодер, который использует платформу Android MediaCodec класс в режиме «ввода поверхности».

Вот шаги, которые я выполняю (поддержка кода для краткости опущена):

mediaCodec = MediaCodec::CreateByType(looper, "video/avc", true);
mediaCodec->configure(config, NULL, NULL, CONFIGURE_FLAG_ENCODE);
mediaCodec->createInputSurface(&inputSurface);
mediaCodec->start();

После этого я пытаюсь удалить буфер из созданной входной поверхности (которая является IGraphiBufferProducer интерфейс объекта), но это не с NO_INIT ошибка:

inputSurface->dequeueBuffer(&slot, &fence, w, h, format, 0);

Сообщение об ошибке в журнале ADB:

BufferQueueProducer: [GraphicBufferSource] dequeueBuffer: BufferQueue has no connected producer

Есть идеи, почему в очереди на буфер нет подключенного производителя? Я бы предположил, что MediaCodec Класс будет обрабатывать создание очереди буфера, а также подключение производителя и потребителей к очереди.

Я использую Android API уровня 26 (7.1.2). Я использую библиотеки уровня платформы, потому что мой вариант использования требует доступа к GraphicBuffer объекты.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Общая идея заключается в следующем:

  • Буферы удаления из входной поверхности & заполните их.
  • Поставить в очередь заполненные буферы обратно на входную поверхность (что, вероятно, вызовет экземпляр медиакодека (видеокодера), которому принадлежит эта поверхность
    к).
  • Исключить выходные буферы (содержащие необработанные данные потока битов H.264) из экземпляра медиа-кодека и записать его в файл.
  • Освободить выходные буферы обратно в экземпляр медиа-кодека.

0

Решение

От IGraphiBufferProducer документация:

// * NO_INIT - the buffer queue has been abandoned or the producer is not
//             connected.

Я предполагаю, что часть, которая отсутствует в вашем коде, это «соединение».

IGraphiBufferProducer есть такой метод, вы используете его?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]