Я хочу использовать 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
и освобождающий буфер в CustomOmxDecoder
ProcessNextFrame
после звонка videoDecoder->read()
звонок.
Любое предложение будет замечательным. Спасибо.
Если вы используете 'allocateOutputBuffersfromNativeWindow', вам необходимо проверить' nativeWindow' или 'surface', переданные на создание декодеров. Из вашего комментария, я чувствую, что вы передаете ту же «поверхность» в оба экземпляра декодера, из-за которых вы можете наблюдать неправильные изображения. Можете ли вы проверить, работает ли ваша логика только для одного экземпляра декодера? – Ganesh
Фактически я не пропускаю поверхность в качестве параметра при создании экземпляра omxcodec. и я проверил поверхностные адреса. они разные. даже я сделал еще один тест, в котором я добавил условие в моем методе отображения декодирования в классе customomxdecoder, так что для потока один декодированный буфер отображается на заданной поверхности, а для второго потока кадр будет декодирован, но поверхность будет отображать только черный цвет , в этом случае также изображение получает конфликты на первой поверхности, а вторая - на черном. – sam18
Вы считаете, что метод videoource-> read (& buffer, & option) должен быть включен между автоматической блокировкой/мьютексом? – sam18