针对android录影编写测试程序

目前需要尝试不使用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已经被使用完成并释放。


这个错误耽误了进度两个多小时,在此记录,引以为戒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值