Расчет времени декодирования MediaCodec

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

Спасибо.

startTime...

dequeueInputBuffer();

getInputBuffer();

//   copy frame to input buffer

queueInputBuffer();

dequeueOutputBuffer();

releaseOutputBuffer();

stopTime...

exectime = startTime - StopTime

person MyNameisAwesome    schedule 05.05.2016    source источник


Ответы (1)


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

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

Чего вы пытаетесь достичь?

person fadden    schedule 05.05.2016
comment
Спасибо за ответ. Я пытаюсь сделать потоковое видео в реальном времени (приведенный выше код находится внутри NDK). Просто нужно было посмотреть, сколько времени занимает декодирование, чтобы измерить задержку. Я не уверен, что таймеры запуска и остановки находятся в правильной строке, поскольку ввод поставлен в очередь. - person MyNameisAwesome; 06.05.2016
comment
Время, когда ввод ставится в очередь, не должно иметь значения — вы хотите, чтобы ввод заполнялся как можно полнее. Помните, что некоторые видеоформаты позволяют закодированным кадрам появляться не по порядку... если вы попытаетесь подавать один кадр за раз, он полностью остановится. Вы управляете темпом видео в момент освобождения выходного буфера. Некоторые дополнительные примечания о задержке можно найти в stackoverflow.com/questions/21440820. - person fadden; 06.05.2016