Surface显示参照源码
frameworks\av\media\libstagefright\colorconversion
frameworks\av\services\camera\libcameraservice
frameworks\native\services\surfaceflinger
frameworks\native\libs\gui
1、setBufferCount failure
native_window_set_buffer_count调用失败,该mNativeWindow已无法使用,确认是否已被销毁
E/BufferQueue( 2188): [SurfaceView] setBufferCount: BufferQueue has been abandoned!
E/Surface (11666): IGraphicBufferProducer::setBufferCount(10) returned No such device
native_window_set_buffer_count调用失败,该mNativeWindow包含一些DEQUEUED Buffer,需确保所有Buffer是QUEUED或Canceld
E/BufferQueue( 2174): [SurfaceView] setBufferCount: client owns some buffers
E/Surface (17172): IGraphicBufferProducer::setBufferCount(10) returned Invalid argument
E/BufferQueue(2170): [SurfaceView] setBufferCount: client owns some buffers
E/Surface(3176): IGraphicBufferProducer::setBufferCount(10) returned Invalid argument
2、queueBuffer failure
queueBuffer调用失败,需确认该Buffer当前的状态,state=2 即QUEUED
E/BufferQueue( 2174): [SurfaceView] queueBuffer: slot 4 is not owned by the client (state=2)
E/Surface (17172): queueBuffer: error queuing buffer to SurfaceTexture, -22
queueBuffer调用失败,需确认该Buffer当前的状态,state=3 即ACQUIRED
E/BufferQueue(2190): [SurfaceView] queueBuffer: slot 0 is not owned by the client (state=3)
E/Surface(7246): queueBuffer: error queuing buffer to SurfaceTexture, -22
3、dequeueBuffer failure
native_window_dequeue_buffer_and_wait调用失败,需提前配置Surface,配置方式native_window_set_buffer_count
E/BufferQueue( 2444): [ScreenshotClient] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
4、cancelBuffer failure
02-01 08:11:52.635: E/Surface(3176): getSlotFromBufferLocked: unknown buffer: 0x63a4f9e0
相关概念
Producer 生产者 应用程序 客户端
Consumer 消费者 BufferQueue 服务端
State | Value | Description |
BufferSlot::FREE | 0 | Buffer当前可用,也就是说可以被dequeued。此时Buffer的owner可认为是BufferQueue |
BufferSlot::DEQUEUED | 1 | Buffer已经被dequeued,还未被queued或canceld。此时Buffer的owner可认为是producer(应用程序),这意味着server端(BufferQueue)不可以对这块缓冲区进行操作 |
BufferSlot::QUEUED | 2 | Buffer已经被客户端queued,除特别情况外此时还不能对它进行dequeue,而可以acquired。此时的owner是BufferQueue |
BufferSlot::ACQUIRED | 3 | Buffer的owner改为consumer,可以released,然后状态又返回FREE |
过程:FREE->DEQUEUED->QUEUED->ACQUIRED->FREE
frameworks\native\libs\FramebufferNativeWindow.cpp
typedef struct ANativeWindowBuffer
{
#ifdef __cplusplus
ANativeWindowBuffer() {
common.magic = ANDROID_NATIVE_BUFFER_MAGIC;
common.version = sizeof(ANativeWindowBuffer);
memset(common.reserved, 0, sizeof(common.reserved));
}
// Implement the methods that sp<ANativeWindowBuffer> expects so that it
// can be used to automatically refcount ANativeWindowBuffer's.
void incStrong(const void* id) const {
common.incRef(const_cast<android_native_base_t*>(&common));
}
void decStrong(const void* id) const {
common.decRef(const_cast<android_native_base_t*>(&common));
}
#endif
struct android_native_base_t common;
int width;
int height;
int stride;
int format;
int usage;
void* reserved[2];
buffer_handle_t handle;
void* reserved_proc[8];
} ANativeWindowBuffer_t;
分享到:
相关推荐
【Android全能视频播放器 VPlayer】是一个专为安卓平台设计的高级视频播放应用程序,它的源码提供了深入理解Android多媒体框架和视频播放技术的机会。通过分析和研究这份源码,开发者可以学习到如何在Android平台上...
《安卓Android源码——DocumentViewer(PDF阅读器)解析》 在移动开发领域,尤其是在安卓平台上,PDF阅读器是常见的应用之一,它允许用户查看、浏览和管理PDF文档。本篇将深入剖析一个名为"DocumentViewer"的开源PDF...
例如,网络连接问题、解码失败、渲染错误等都需要有相应的处理机制,同时,日志记录和调试工具可以帮助定位和解决问题。 以上就是围绕“H264Android”这个主题,关于H264视频编码、Android平台的视频传输、解码及...
10. **错误处理和日志记录**:良好的错误处理和日志系统能够帮助开发者调试和优化播放器。源码中应包含异常捕获和日志输出的代码。 通过深入研究这个源码,开发者可以学习到如何构建一个功能完备、高性能的Android...
`Surface`是Android图形系统中的一个重要组成部分,它提供了一个低延迟的、线程安全的接口,用于在硬件加速的渲染管线中传递图像数据。在视频播放中,`MediaPlayer`会将解码后的视频帧推送到绑定的`Surface`上进行...
在Android平台上,开发一款应用来显示相机预览并利用OpenGL进行自定义渲染是一个技术含量较高的任务。本示例项目"Android-Kamera"是专为此目的而设计的,它使用Kotlin语言编写,提供了完整的源代码供开发者学习和...
12. **错误处理与日志记录**:良好的错误处理机制和日志记录可以帮助开发者在遇到问题时快速定位和解决问题。 以上知识点是构建一个功能完善的"安卓例子视频播放器"所需要掌握的关键技术点。通过这个项目包,开发者...
12. **错误处理和日志记录**:良好的错误处理机制能帮助调试和优化应用。使用Logcat进行日志记录,可以帮助开发者追踪运行时的问题。 通过分析这个"Android应用源码之完整版android视频播放器"的项目,我们可以学习...
确保使用try-catch块,并在日志中记录错误信息以便调试。 7. **代码结构**: 将SurfaceView的创建、初始化和管理封装到单独的类或组件中,以提高代码的可读性和复用性。这样在切换SurfaceView时只需调用对应的组件...
4. **Surface和OpenGL ES**:为了在屏幕上显示解码后的视频,Android使用Surface作为渲染目标。可能需要结合OpenGL ES进行更高级的视频渲染操作,例如滤镜效果、画面调整等。 5. **多媒体数据缓存**:为了提高用户...
源码中会展示如何选择合适的解码器,设置解码参数,以及如何将解码后的数据送入Surface进行渲染。 三、UI设计与交互 播放器的用户界面设计是用户体验的重要部分。YoYoPlayer的源码包含了自定义控件的实现,如进度条...
源码可能会展示如何配置`MediaExtractor`来读取媒体文件,以及如何使用`Surface`进行渲染。 ### 2. 视频流解析与缓冲 在播放过程中,源码会包含如何处理网络传输的视频流,包括HTTP或RTSP协议的使用。它可能使用`...
在Android平台上,截屏是开发者和用户经常需要用到的功能,它能帮助我们记录和分享设备屏幕上的内容。本文将深入探讨两种在Android中实现截屏的方法:通过DecorView的getDrawingCache()方法和使用SurfaceControl的...
9. **错误处理和日志记录**:为了调试和优化,源码中会有错误处理机制,如捕获异常、记录日志,这对于理解程序运行状态和解决问题至关重要。 10. **许可证和开源库**:开源项目通常会包含其他开源库的引用,...
RockPlayer的源码揭示了如何在Android系统上高效处理多媒体文件,包括音频和视频解码、渲染以及用户界面的构建。源码中的关键组件如`MediaPlayer`、`SurfaceView`和`AudioTrack`等,都是Android多媒体框架的核心部分...
11. **错误处理和日志记录**: 视频播放过程中可能会遇到各种问题,如文件损坏、网络中断等,需要良好的错误处理机制,并通过日志记录帮助调试。 通过以上步骤,你可以构建一个基础的Android视频播放器。然而,为了...
10. **错误处理与调试**:良好的错误处理机制和日志记录,方便开发者定位和解决问题。 总的来说,这份源码提供了从网络接收视频流,到本地解码、渲染,并与用户交互的完整流程。通过学习和分析,开发者能够掌握...
对于任何复杂的系统,错误处理和日志记录都是必不可少的。GSYVideoPlayer提供了详细的错误信息和日志输出,方便开发者调试和定位问题。 7. **性能优化** 为了提高性能,GSYVideoPlayer进行了多方面的优化,如内存...
1. **多媒体框架**:了解Android的多媒体框架,如MediaCodec、MediaPlayer、Surface等,以及如何使用它们实现解码和渲染。 2. **硬件加速**:利用硬件编解码器以提高性能和降低功耗,理解如何检测和选择硬件解码器...