针对android录影编写测试程序
2015-08-06 11:11
375 查看
目前需要尝试不使用android的camera架构来做一个录像和预览的功能。思路是利用libstagefrigt来调用OMX实现录像功能。在实做中发现自己写的私有MediaSource有个BUG,这里记录下。
这个私有MediaSource可以正常录像,但是最后一帧会crash:
这么做的问题是在mGroup已经申请了MediaBuffer,这样会调用addRef, 而只有read函数返回正常才会在OMXCodec::drainInputBuffer里去release这个buffer。
而像这里的写法,read返回的是一个err status, 这会导致buffer已经申请但是没有释放,在没有释放的时候又要去结束这段record,自然就有问题。 Android在MediaBuffer的
管理上运用了引用计数,会在析构这个MediaBuffer的时候运用CHECK_EQ来检查是否这个计数已经为零,既是否所有被申请的buffer已经被使用完成并释放。
这个错误耽误了进度两个多小时,在此记录,引以为戒。
这个私有MediaSource可以正常录像,但是最后一帧会crash:
status_t RecordSource::read(MediaBuffer **buffer, const MediaSource::ReadOptions *options) { status_t err = mGroup.acquire_buffer(buffer); if (err != OK) { return err; } if (mRecordNum == mMaxNumFrames) { return ERROR_END_OF_STREAM; }
这么做的问题是在mGroup已经申请了MediaBuffer,这样会调用addRef, 而只有read函数返回正常才会在OMXCodec::drainInputBuffer里去release这个buffer。
而像这里的写法,read返回的是一个err status, 这会导致buffer已经申请但是没有释放,在没有释放的时候又要去结束这段record,自然就有问题。 Android在MediaBuffer的
管理上运用了引用计数,会在析构这个MediaBuffer的时候运用CHECK_EQ来检查是否这个计数已经为零,既是否所有被申请的buffer已经被使用完成并释放。
这个错误耽误了进度两个多小时,在此记录,引以为戒。
相关文章推荐
- android 管理Bitmap的内存使用
- android RelativeLayout注意
- android图片处理
- Android开源库
- Android SQLite数据库创建和使用实战(一)
- (转)Android自定义View的实现方法,带你一步步深入了解View(四)
- Android Studio xml提示Line 1: PI must not start with xml (position:unknown @1:5) (Show)
- ArcGIS for Android实现地图加载、放大缩小及定位功能
- (转)Android LayoutInflater原理分析,带你一步步深入了解View(一)
- Android学习的一些困惑和方向
- Android静态编译LOCAL_FORCE_STATIC_EXECUTABLE
- 1-Android项目目录结构和常见的英文缩写
- android 缓存Bitmap
- Android——Activity和Intent
- Android——Activity和Intent
- AndroidSDK版本号与对应API
- 调用Android系统设置项
- Android MMS数据库存储说明
- Android虚拟机环境搭建
- 19个实用的Android开发工具