我试着遵循Android Jelly bean 4.2中的wifi显示代码。在wifi显示中,PlaybackSession
类将负责获取数据。最后,它将从一个名为SurfaceMediaSource
的类中获取数据,该类继承自MediaSource
。数据在SurfaceMediaSource
中的BufferQueue
中。但我找不到谁负责将数据写入BufferQueue
。我认为SurfaceFlinger
应该这样做。但是,我找不到任何具体的代码。有人知道它是怎么工作的吗?
检查wfd.cpp
和com.android.server.display.DisplayDevice
中的onDisplayConnected()
调用。两者都将在frameworks/native/libs/gui/SurfaceComposerClient.cpp
中的SurfaceComposerClient::setDisplaySurface()
中结束。
遗憾的是,我不明白DisplayState::eSurfaceChanged
的设置会如何导致显示器在SurfaceMediaSource
中呈现为BufferQueue
。