surface教程
唤醒surface三种方式是什么(surface唤醒屏幕教程)
发布时间:2022-03-18 20:47:21 浏览量:447
如果 surface 无法打开,无法唤醒或显示无 surface 徽标的黑屏,你可以尝试一些操作使其恢复正常。
断开配件并确保 Surface 已充电
与 Surface 相连的设备可能是导致其无法打开的原因。下面介绍如何检查是否为该原因:
1、断开所有 U 盘、SD 卡、USB 附件、外接显示器、扩展坞或其他已连接到 Surface 的任何设备。然后尝试将其打开。如果这种方法有用,说明问题可能是配件导致的。
2、如果不起作用,请连接 Surface 附带的电源。
3、通过原装电源线将 Surface 接通电源后,充电 15 分钟。按电源按钮以启动 Surface。
使用键盘和平板电脑快捷方式唤醒
如果重新充电无法唤醒 Surface,可以试试下面的这些方法。
连接键盘或使用集成键盘。然后按 Windows 徽标键 + Ctrl + Shift + B。
如果处于平板模式,请快速按调高音量按钮和调低音量按钮三次。
强制关机
如果为 Surface 充电和键盘或平板电脑快捷方式不起作用,可以尝试强制关机再重启。
Native层的Surface工作方式有:仅在Proxy端、Proxy和Service端协同、仅在Service端工作三种方式(第三种方式有待确认)。前两种方式在Proxy端都有共同的预处理工作要做,如下:
Proxy端
1、创建SurfaceFlinger的本地代理
sp<SurfaceComposerClient> client = new SurfaceComposerClient();
2、创建SurfaceControl的本地代理
sp<SurfaceControl> surfaceControl = client->createSurface(……);
3、获取Surface本地代理
sp<Surface> surface = surfaceControl->getSurface();
拿到Surface本地代理后,就可以利用它进行后续相关操作了
方式一:参照resize.cpp的实现
Proxy端
1、获取Surface的缓冲区
ANativeWindow_Buffer outBuffer;
surface->lock(&outBuffer, NULL);
2、直接操作outBuffer.bits成员
android_memset16((uint16_t*)outBuffer.bits, 0xF800, bpr*outBuffer.height);
3、投送给SurfaceFlinger显示
surface->unlockAndPost();
方式二:参照Camera的实现
Proxy端
1、获取IGraphicBufferProducer本地代理
sp<IGraphicBufferProducer> gbp = surface->getIGraphicBufferProducer();
2、传递给Service端
camera-> setPreviewTarget(gbp);
Service端
3、根据gbp创建新的Surface
sp<ANativeWindow> window = new Surface(gpb, /*controlledByApp*/ true);
4、连接window到对应的api集合(用途???)
result = native_window_api_connect(window.get(), NATIVE_WINDOW_API_CAMERA);
5、使用window的相关接口,如设置队列缓冲区数量为3
window->perform(window, NATIVE_WINDOW_SET_BUFFER_COUNT, 3);
方式三:在Surface的构造函数中有一个参数controlledByApp表示是否由Proxy端使用,如果仅在Service端使用可按默认值创建Surface。在SurfaceMediaSource_test有相关代码:
Native层的Surface工作方式有:仅在Proxy端、Proxy和Service端协同、仅在Service端工作三种方式(第三种方式有待确认)。前两种方式在Proxy端都有共同的预处理工作要做,如下:
Proxy端
1、创建SurfaceFlinger的本地代理
sp<SurfaceComposerClient> client = new SurfaceComposerClient();
2、创建SurfaceControl的本地代理
sp<SurfaceControl> surfaceControl = client->createSurface(……);
3、获取Surface本地代理
sp<Surface> surface = surfaceControl->getSurface();
拿到Surface本地代理后,就可以利用它进行后续相关操作了
方式一:参照resize.cpp的实现
Proxy端
1、获取Surface的缓冲区
ANativeWindow_Buffer outBuffer;
surface->lock(&outBuffer, NULL);
2、直接操作outBuffer.bits成员
android_memset16((uint16_t*)outBuffer.bits, 0xF800, bpr*outBuffer.height);
3、投送给SurfaceFlinger显示
surface->unlockAndPost();
方式二:参照Camera的实现
Proxy端
1、获取IGraphicBufferProducer本地代理
sp<IGraphicBufferProducer> gbp = surface->getIGraphicBufferProducer();
2、传递给Service端
camera-> setPreviewTarget(gbp);
Service端
3、根据gbp创建新的Surface
sp<ANativeWindow> window = new Surface(gpb, /*controlledByApp*/ true);
4、连接window到对应的api集合(用途???)
result = native_window_api_connect(window.get(), NATIVE_WINDOW_API_CAMERA);
5、使用window的相关接口,如设置队列缓冲区数量为3
window->perform(window, NATIVE_WINDOW_SET_BUFFER_COUNT, 3);
方式三:在Surface的构造函数中有一个参数controlledByApp表示是否由Proxy端使用,如果仅在Service端使用可按默认值创建Surface。在SurfaceMediaSource_test有相关代码:

1、创建BufferQueue
sp<BufferQueuem> BufferQueue = new BufferQueue();
2、创建消费者监听器
wp<ConsumerListener> listener = static_cast<ConsumerListener*>(this);
3、创建消费者监听器代理
sp<BufferQueue::ProxyConsumerListener> proxy = new BufferQueue::ProxyConsumerListener(listener);
4、连接消费者到BufferQueue
mBufferQueue->consumerConnect(proxy, false);
5、根据BufferQueue创建新的Surface
sp<IGraphicBufferProducer> sms = mBufferQueue;
sp<Surface> stc = new Surface(sms);
6、使用window的相关接口,如perform()
sp<ANativeWindow> window = stc;
sp<BufferQueuem> BufferQueue = new BufferQueue();
2、创建消费者监听器
wp<ConsumerListener> listener = static_cast<ConsumerListener*>(this);
3、创建消费者监听器代理
sp<BufferQueue::ProxyConsumerListener> proxy = new BufferQueue::ProxyConsumerListener(listener);
4、连接消费者到BufferQueue
mBufferQueue->consumerConnect(proxy, false);
5、根据BufferQueue创建新的Surface
sp<IGraphicBufferProducer> sms = mBufferQueue;
sp<Surface> stc = new Surface(sms);
6、使用window的相关接口,如perform()
sp<ANativeWindow> window = stc;
window->perform(window, NATIVE_WINDOW_SET_BUFFER_COUNT, 3);
以上就是surface维修为您介绍唤醒surface三种方式是什么(surface唤醒屏幕教程),更多相关请电话咨询,相关文章 :surface无线网络突然没有了 surface长时间不用开不了机 如何更改surface屏幕分辨率