LINUX.ORG.RU

отставание видео от звука в CedarX

 


0

1

коллеги, помогите с одной проблемой: есть китайская экшн камера (аналог F60B) на Allwinner V3. пытаюсь поднять битрейт и частоту записи аудиодорожки (изначально битрейт 12200 и 8000Гц). Allwinner использует свой фреймворк CedarX.

Я нашел (гидрой, спасибо анб) в libcedarx.so где поменять значения битрейта и частоты (в функции reset), поднял до 51200 и 44100.

звук улучшился, но теперь видео отстает от аудио.

проблема в том что я никогда не занимался вопросами записи аудио-видео и даже не знаю что искать.

это дизассемблерный код: https://cloud.mail.ru/public/2BYN/5B3kFHHqE

исходников библиотеки CedarX у меня нет (да и китайцы признались что контроль за ними давно утерян). наиболее похожий файл на дизассемблерный нашел вот тут https://github.com/mixtile/mixtile-android-device/blob/master/loftq/sun6i/aw/CedarX-Projects/CedarXAndroid/IceCreamSandwich/CedarXRecorder.cpp

в общем, помогите, если кто может.

Ответ на: комментарий от deep-purple

врядли. я пишу в режиме 1080, а железо тянет до 4к. после увеличения битрейта размер файл вырос очень незначительно (было 30мин 3.29Гб, стало 3.31Гб) то есть там основная нагрузка создается видео, а не аудио

mskfire ()
Ответ на: комментарий от deep-purple

битрейт 51200 я взял из media_profiles.xml , из секции: <AudioEncoderCap name=«aac» enabled=«true» minBitRate=«12200» maxBitRate=«51200»

насчет семплрейта сейчас попробую, но в принципе, в audio_conf.xml частота 44100 описана: audio_hw_modules { primary { inputs { primary { sampling_rates 8000|11025|16000|22050|24000|32000|44100|48000

mskfire ()
Ответ на: комментарий от mskfire

да, поиграйся значениями, попробуй мин и макс одинаковые поставить, короче подтвердишь или опровергнешь мое предположение из самого первого ответа - и если что бум думать дальше.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

опытным путем выяснил что повышение битрейта не дает отставания видео, а повышение частоты - дает (причем я пробовал со значением 32000, т.е. кратным 8000).

я в принципе догадывался что все как-то завязано с буфером ввода, то есть при увеличении частоты видимо аудио буфер заполняется быстрее, и поэтому получается рассинхрон.

и видимо это происходит только в момент запуска, потому что за 30минут записи рассинхрон не увеличивается.

но где именно это происходит я не могу понять, базовых знаний по видео-аудио вводу не хватает.

в файле CedarXRecorder.cpp (см ссылку в топике) есть две функции, prepare() и start()

в prepare() происходит подготовка и запуск потоков ввода аудио и видео, которые сразу тормозятся мютексами - так делается потому что процедуры инициализации ввода аудио и ввода видео не мгновенные, на этом этапе может возникнуть рассинхрон. поэтому создается инициализируется поток для видео (видимо он и тут же тормозится), потом для аудио (и тоже тормозится). так что тут вроде рассинхрона не должно возникнуть.

в start() эти мутексы просто разблокируют - эта операция делается почти мгновенно поэтому потоки аудио и видео ввода начинают работать практически одновременно. тут вроде больше ничего.

дальше в колбек-функциях CedarXReadAudioBuffer и readMediaBufferCallback читаются данные по аудио и видео. больше в общем-то ничего интересного.

в итоге вроде все норм, но где-то возникает рассинхрон

mskfire ()
Ответ на: комментарий от deep-purple

они тут не при чем, они вообще не используются в обычной работе камеры. эти дефайны используются только если библиотеку вызвал системный процесс «com.android.cts.media» или «com.android.cts.mediastress» - это какие-то андроидные компоненты для тестов на совместимость железа (Compatibility Test Suite)

mskfire ()
Ответ на: комментарий от mskfire

ну я хз тогда что еще там крутить, но мы кажись верное направление нащупали. у меня нет много времени изучить жтот вопрос глубже - жди кто подскажет если использовал, но и сам ковырять не щабывай - ищуший да обрящет.

кста на стековерфлоу задай этот вопрос!

deep-purple ★★★★★ ()