您的位置:首页 > 移动开发 > Android开发

针对android录影编写测试程序

2015-08-06 11:11 375 查看
目前需要尝试不使用android的camera架构来做一个录像和预览的功能。思路是利用libstagefrigt来调用OMX实现录像功能。在实做中发现自己写的私有MediaSource有个BUG,这里记录下。

这个私有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已经被使用完成并释放。

这个错误耽误了进度两个多小时,在此记录,引以为戒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: