Как точно вычислить FPS аппаратного декодирования на iOS 8?

Здесь есть новые методы декодирования hardwrare от iOS8,

мы можем использовать « VTDecompressionSessionDecodeFrame » для декодирования h264 с iOS8,

Я пытаюсь кодировать программу, которая умеет печатать fps аппаратного декодирования,

но здесь есть проблема, обратный вызов асинхронно,

так как я могу вычислить fps точно?

Я нашел метод « VTDecompressionSessionWaitForAsynchronousFrames »

Это то, чего я хочу?

Функция декодирования

- (void)render:(CMSampleBufferRef)sampleBuffer { if (_isDecoding == NO) { _isDecoding = YES; _lastTime = [NSDate date]; } VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression; VTDecodeInfoFlags flagOut; VTDecompressionSessionDecodeFrame(_decompression, sampleBuffer, flags, NULL, &flagOut); VTDecompressionSessionWaitForAsynchronousFrames(_decompression); if (_gotFrame == YES) { _gotFrame = NO; _isDecoding = NO; } CFRelease(sampleBuffer); } 

Декодировать функцию обратного вызова

 void didDecompress( void *decompressionOutputRefCon, void *sourceFrameRefCon, OSStatus status, VTDecodeInfoFlags infoFlags, CVImageBufferRef imageBuffer, CMTime presentationTimeStamp, CMTime presentationDuration ){ VideoView* THIS = (__bridge VideoView*)decompressionOutputRefCon; THIS->_gotFrame = YES; NSDate* currentTime = [NSDate date]; NSTimeInterval runTime = currentTime.timeIntervalSince1970 - THIS->_lastTime.timeIntervalSince1970; THIS->_totalTime += runTime; THIS->_counts++; THIS->_lastTime = currentTime; } 

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

void * sourceFrameRefCon в VTDecompressionSessionDecodeFrame

 VTDecompressionSessionDecodeFrame( VTDecompressionSessionRef session, CMSampleBufferRef sampleBuffer, VTDecodeFrameFlags decodeFlags, // bit 0 is enableAsynchronousDecompression void * sourceFrameRefCon, VTDecodeInfoFlags *infoFlagsOut /* may be NULL */ ) 

Метод декодирования

 - (void)render:(CMSampleBufferRef)sampleBuffer { VTDecodeFrameFlags flags = kVTDecodeFrame_EnableAsynchronousDecompression; VTDecodeInfoFlags flagOut; NSDate* currentTime = [NSDate date]; VTDecompressionSessionDecodeFrame(_decompression, sampleBuffer, flags, (void*)CFBridgingRetain(currentTime), &flagOut); CFRelease(sampleBuffer); } 

Способ декодирования обратного вызова

 void didDecompress( void *decompressionOutputRefCon, void *sourceFrameRefCon, OSStatus status, VTDecodeInfoFlags infoFlags, CVImageBufferRef imageBuffer, CMTime presentationTimeStamp, CMTime presentationDuration ){ NSDate* currentTime = (__bridge NSDate *)sourceFrameRefCon; if (currentTime != nil) { //Do something } } 
  • UIAlertController - изменение размера текстовых полей и добавление пространства между ними
  • iCloud для сохранения аудиофайлов - несколько вопросов
  • Панель быстрого доступа iOS: добавьте пользовательское предложение
  • Обнаруживать синий индикатор состояния в программном обеспечении ios
  • Целевые семейства целевых устройств AppCode недействительны (iPad iOS 8.1)
  • Извлечь данные GPS с фото
  • hidesBarsOnSwipe для childView
  • Параметры маршрута
  • Рендеринг PDF в UIWebView iOS 8, вызывает черную рамку вокруг PDF
  • Извлечение пользователя google из расширения ios
  • Подписка без обновления Уже приобретенный предупреждающий трек
  • Interesting Posts

    Функция UIDocument «Сохранить как»

    Создание статической библиотеки iOS

    Перейдите по быстрому на основе логики

    Поиск координат касания жестов с использованием locationOfTouch

    iOS 11 UITableView удаляет строки анимации

    максимальное количество вкладок для UITabBarController без moreViewController

    NSString для обработки «обычных английских алфавитов» и символов, похожих на emoji или japanese, равномерно

    Новый организатор сбоя XCode не отображает файлы .xccrashpoint

    Как найти бесполезную ссылку, которая предотвращает dealloc в объекте-c / Xcode?

    Лучший способ запроса ссылок в CloudKit?

    Внедрение intrinsicContentSize правильно для размеров, зависящих от разрешенной внутренней компоновки

    Что такое простой способ управления исходными файлами, которые совместно используются для разных проектов Xcode?

    Мои файлы проекта не отображаются в навигаторе проекта внутри xcode после настройки cocoapods

    Как объединить два UIImages разностного размера без изменения их первоначальных пропорций?

    Socket.io выдает дубликаты данных после обновления браузера

    Давайте будем гением компьютера.