Android Kitkat 4.4.2: влияние адаптивного воспроизведения на SurfaceFlinger
Я столкнулся с этим общим вопросом об адаптивном воспроизведении в Android
Kitkat
в ТАК. Тем не менее, у меня есть несколько конкретных запросов, как показано ниже:
Я могу понять последствия для 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