Я использовал кодек G729 в своем приложении VOIP, когда приложение предназначено только для armv7, оно отлично работает. Калли слышит голос. Затем я поворачиваюсь к arm64, вызывающий голос больше не слышит. Я записываю входные данные необработанного голоса до и после кодека G729 как на устройстве armv7, так и на устройстве arm64 со стороны вызывающего абонента, а затем обратно на данные G729. Я считаю, что преобразованный задний голос с устройства armv7 намного лучше, чем устройство arm64.Кодек G729, скомпилированный для iOS arm64, не работает должным образом
ответ
Это зависит от используемой модификации G729, но если вы используете Samuel Vinson's, я считаю, что нашел проблему.
В lpc.c
есть сравнение между результатом и вычитания между двумя значениями на линиях 643 и 698 соответственно:
lpc.c:643 if ((UWord32)(t0 - 0xfe000000L) < 0x01ffffffL - 0xfe000000L)
lpc.c:698 if ((UWord32)(t0 - 0xff000000L) < 0x00ffffffL - 0xff000000L)
Результат 0x00ffffffL - 0xff000000L
является 1ffffff
(33554431
) на 32 бит, но ffffffff01ffffff
(-4261412865
) на 64 бит, поскольку длинный путь больше на 64 бит на ARM-процессоре (я тестирую iPhone 4, armv7, 32 бит и iPhone 5s, arm64, 64 бит).
Таким образом, в основном на 64 бит сравнение всегда будет недействительным, так как второй член всегда отрицательный, а UWord32
всегда будет положительным.
Мое решения использовать жёстко прописанные результаты вычитания на 32 бита, поэтому с помощью 0x3ffffffL
для первых условного и 0x1ffffffL
для второго, устраняет проблему качества голоса для меня:
lpc.c:643 if ((UWord32)(t0 - 0xff000000L) < 0x3ffffffL)
lpc.c:698 if ((UWord32)(t0 - 0xfe000000L) < 0x1ffffffL)
Надеется, что это помогает.
В отличие от сайтов на форуме, мы не используем «Спасибо» или «Любая помощь оценена» или подписи на [so]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be –
может ур ур код? – DareDevil