Фактическое время "nativeGetTimestamp" в "SurfaceTexture" - PullRequest
0 голосов
/ 26 сентября 2018

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

Сначала приложение работает нормально, когда я использовал elapsedRealtime Для вычисления смещения времени:

long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.elapsedRealtime();
long actualTime = timestamp + timeOffset;

Но когда я использовал другое устройство, я обнаружил, что какое-то устройство будет использовать uptimeMillis для SurfaceTexture.timestamp, поэтому код должен быть:

long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.uptimeMillis();
long actualTime = timestamp + timeOffset;

Так что мой вопрос: Есть ли способ узнать, какой источник времени используется устройством для SurfaceTexture ?

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

Есть ли способ узнать это?

1 Ответ

0 голосов
/ 26 сентября 2018

MediaCodec не изобретает метки времени.Буферы, которые возвращает MediaCodec, содержат только те же значения для presentationTimeUs, которые вы передаете в параметре presentationTimeUs для queueInputBuffer, или при использовании ввода Surface, устанавливается на поверхности ввода с помощью eglPresentationTimeANDROID.

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

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