Android Kitkat 4.4.2: влияние адаптивного воспроизведения на SurfaceFlinger

Я столкнулся с этим общим вопросом об адаптивном воспроизведении в AndroidKitkat в ТАК. Тем не менее, у меня есть несколько конкретных запросов, как показано ниже:

Я могу понять последствия для codec и соответствующие рамки. Однако есть один конкретный момент, который я не могу полностью понять.

В случае адаптивного воспроизведения, кодек использует metadata на его выходной порт, который в основном абстрагирует и упаковывает базовый дескриптор буфера (по всей вероятности, gralloc справиться). Если разрешение меняется, я предполагаю codec обновляет gralloc обрабатывать атрибуты напрямую и отправляет буфер обратно OMX Клиент без изменения настроек порта.

Мой первый вопрос: верно ли мое понимание и предположение?

Если да, то как Surfaceflinger/SurfaceTexture знать, что входящий полезный груз находится в metadata формат и как это получить width а также height из основного gralloc реализация?

Не могли бы вы указать мне соответствующие источники, которые помогут мне лучше понять эту проблему?

Спасибо заранее.

1 ответ

Решение

sendFormatChange=>kWhatOutputFormatChange=>MEDIA_SET_VIDEO_SIZE=> ... =>native_window_set_buffers_dimensions

Просто пояснение, давайте использовать пример контроля качества, компонент распознает изменение урожая - ищите OMX_IndexConfigCommonOutputCrop здесь omx_vdec, тогда ACodec очищает mSentFormat это заставляет ACodec звонить sendFormatChange который отправляет kWhatOutputFormatChange событие для NuPlayer, который отправляет MEDIA_SET_VIDEO_SIZE в медиаплеер. На второй стороне палки вы получите native_window_set_buffers_geometry какие силы Surface::setBuffersDimensions,

Пока используется OMXCodec OMX_IndexConfigCommonOutputCrop полученные наборы mOutputPortSettingsHaveChangedближайший вызов OMXCodec::read вернусь INFO_FORMAT_CHANGED это в AwesomePlayer сделает notifyVideoSize_l быть вызванным, и этот отправляет слушателю MEDIA_SET_VIDEO_SIZE

Другие вопросы по тегам