2013-03-15 2 views
1

Я хочу использовать libstagefright.so в телефонах для Android для работы с мультимедиа. Я рассмотрел пример, приведенный на странице this. Я пытался реализовать то же самое. При тестировании этой реализации для нескольких экземпляров OMXCodec конфликт выходных буферов друг с другом.Возможно ли создать несколько экземпляров OMXCodec с использованием stagefright

Я разработал проект андроида в затмении и связал libstagefright под JNI. Я добавил два класса: CustomDataSource (который выводит MediaSource) и CustomOmxDecoder. CustomDataSource класс реализует все виртуальные методы MediaSource. В классе CustomOmxDecoder я звоню OMXCodec::Create метод. Затем я создал два потока, которые имеют индивидуальный экземпляр CustomOmxDecoder. Используя эти экземпляры, я вызываю метод ProcessNextFrame, в котором я вызываю основной метод videoDecoder->read(). Так моя установка.

Теперь, когда я запускаю приложение с вышеупомянутой настройкой. OMXCodec декодирует кадры обоих источников, но когда я визуализирую его на поверхности, это показывает противоречивый результат. Кажется, что декодированный буфер обоих источников каким-то образом зацикливается внутри. Я создаю два h264-декодера одновременно. В чем проблема? Может ли это быть связано с MediaBufferGroup? Я приобретаю буфер в CustomDataSource и освобождающий буфер в CustomOmxDecoderProcessNextFrame после звонка videoDecoder->read() звонок.

Любое предложение будет замечательным. Спасибо.

+1

Если вы используете 'allocateOutputBuffersfromNativeWindow', вам необходимо проверить' nativeWindow' или 'surface', переданные на создание декодеров. Из вашего комментария, я чувствую, что вы передаете ту же «поверхность» в оба экземпляра декодера, из-за которых вы можете наблюдать неправильные изображения. Можете ли вы проверить, работает ли ваша логика только для одного экземпляра декодера? – Ganesh

+0

Фактически я не пропускаю поверхность в качестве параметра при создании экземпляра omxcodec. и я проверил поверхностные адреса. они разные. даже я сделал еще один тест, в котором я добавил условие в моем методе отображения декодирования в классе customomxdecoder, так что для потока один декодированный буфер отображается на заданной поверхности, а для второго потока кадр будет декодирован, но поверхность будет отображать только черный цвет , в этом случае также изображение получает конфликты на первой поверхности, а вторая - на черном. – sam18

+0

Вы считаете, что метод videoource-> read (& buffer, & option) должен быть включен между автоматической блокировкой/мьютексом? – sam18

ответ

2

Я проверил и решил свою проблему, сомневаясь в возможности использования нескольких экземпляров OMXCodec. Проблема была в моем коде. И при исправлении я вижу, что экземпляр mulitple OMXCodec работает стабильно и плавно. Итак, да, Mulitple экземпляры OMXCodec возможно.

Спасибо всем.

 Смежные вопросы

  • Нет связанных вопросов^_^