[英]Android Kitkat 4.4.2: Adaptive Playback impact on SurfaceFlinger
我在Android
Kitkat
的SO中遇到了有關自適應播放的通用問題 。 但是,我有一些特定的查詢,如下所示:
我能夠理解對codec
和相關框架的影響。 但是,有一點我無法完全理解。
在自適應播放的情況下,編解碼器會在其輸出端口上使用metadata
,該metadata
基本上會抽象並打包基礎緩沖區句柄(很可能是gralloc
句柄)。 如果分辨率發生變化,我認為codec
將直接更新gralloc
句柄屬性,並將緩沖區發送回OMX
客戶端,而無需更改端口設置。
我的第一個問題是:我的理解和假設正確嗎?
如果是這樣, Surfaceflinger
/ SurfaceTexture
如何知道傳入的有效載荷是metadata
格式,以及它如何從底層gralloc
實現中檢索width
和height
?
您能否指出我相關的資源,以幫助我更好地理解這個問題?
提前謝謝了。
sendFormatChange => kWhatOutputFormatChange => MEDIA_SET_VIDEO_SIZE => ... =>本機窗口集_緩沖區大小
只是澄清一下,讓我們使用QC示例,組件識別作物變化-在此處查找OMX_IndexConfigCommonOutputCrop
omx_vdec ,然后ACodec清除mSentFormat
這使ACodec調用sendFormatChange
,后者將kWhatOutputFormatChange
事件發送到NuPlayer,后者將MEDIA_SET_VIDEO_SIZE
發送到媒體播放器。 在搖桿的第二側,您將獲得native_window_set_buffers_geometry
,該值強制Surface::setBuffersDimensions
。
當使用OMX_IndexConfigCommonOutputCrop
接收到的集合mOutputPortSettingsHaveChanged
,最接近的OMXCodec::read
調用將返回INFO_FORMAT_CHANGED
這在AwesomePlayer中將使notifyVideoSize_l
被調用,並且該消息將發送到偵聽器MEDIA_SET_VIDEO_SIZE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.