现象我想改变8148rdk中编码帧率,不知道要改动哪些地方,哪位老师能不能给我指点一下,小弟不胜感激
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在mcfw层可以调用下面函数:
/**
\brief Set Encoder Channel specific dynamic parameters
The parameters that are applied depend on the value of 'veParamId'
\param vencChnId [IN] Channel ID to which this applies
\param vencStrmID [IN] Channel ID to which this applies
\param ptEncDynamicParam [IN] Values for the various dynamic parameters
\param veParamId [IN] Parameter on which to apply the change
\return ERROR_NONE on success
*/
Int32 Venc_setDynamicParam(VENC_CHN vencChnId, VENC_STRM vencStrmID, VENC_CHN_DYNAMIC_PARAM_S *ptEncDynamicParam, VENC_PARAM_E veParamId);
调用时,veParamId 选择VENC_FRAMERATE;可以参照demo_encode.c来学习如何使用。
需要注意的是,输出帧率设置不可以大于输入帧率。
在demo中,主码流输入帧率一般为30(NTSC)或者25(PAL),所以输出帧率设置要小于这个值。
这个函数具体的使用,建议跑一下demo,在encoding setting里有改变帧率的选项,试着用一下。
在更改后,可以通过打印编码通道详细信息(也在 encoding setting里)来查看更改是否成功。
你说的是Vcap_....??
Vcap_setFrameRate 设置的是采集后的帧率,实际上是控制DEI模块输出帧率的。
Vcap_setDynamicParamChn 设置的是capture link中的一些动态参数,具体可以配置哪些,参见VCAP_PARAMS_E定义
请问一下怎样打印编码通道的详细信息,还有在调试的时候怎样输出调试信息?查看当前程序运行到哪一步的时候 都是是通过printf()函数输出的方法?还是有其他的方法??谢谢!!!
打印编码通道详细信息:Venc_getDynamicParam(chId, 0, ¶ms, VENC_ALL); 其实在串口上,demo-->encode settings--> i. Print Encode Parameters就可以。
调试程序,还可以使用CCS做单步跟踪。
Haijun Guo 老师,我按照你提供的方法,调用Venc_setDynamicParam函数,修改帧率,修改后却出现了一个问题,例如:我将帧率修改为20,但是利用我们公司的客户端的实时视频上帧率却显示只有9,但是我调用Venc_getDynamicParam函数查看帧率却显示为20,公司的客户端实时视频上显示的帧率总比我设置的帧率要小点,不知道这是什么原因??另外我参考以前我们公司368的代码,发现以前修改帧率时不仅对编码venc帧率进行了修改,也对采集capture帧率也进行了修改,他们的修改帧率是自己写的 ,是通过抽帧的思想做的,
首先要确定的是,通过Venc_setDynamicParam函数,修改帧率,是否有效果,比如更改帧率,实际输出的帧率的确会改变。
如果修改有效果,不过不准确,这时就要看一下编码器的输入帧率了。如果输入帧率为30,你通过Venc_setDynamicParam函数修改帧率为20,输出帧率就会是20.如果实际的输入帧率只有25,则按照比例关系,实际输出的帧率会是25x(20/30)=16.
所以这里要看一下输入帧率是多少,在Demo里,这个输入帧率就是DEI的输出帧率,请确认。
如果在运行Demo,在Demo下串口有一个“i: Print detailed system information”命令,你可以把运行这个命令后的log附上来。
十分感谢Haijun Guo老师,确实是这样的 ,我通过Venc_getDynamicParam函数打印编码器帧率 ,发现是60 ,而我的sensor只能采集到25帧,所以当我将帧率设置为20时,帧率只有20*25/60,只有8到9帧 ,当帧率设置为25时,只有25*25/60。 现在我的问题是,如果我希望显示的帧率就是我实实在在设置的帧率,在函数里面我做了一个简单的数学处理 ,就是给设置的帧率*60/25,但是总觉得应该还有更好的方法 ,不知道您能不能给点建议我?另外,我改变帧率后发现,码流也有变化 ,不知道和设置帧率有没有关系,?
你的问题是,实际输入帧率与设置输入帧率不符,注意是输入帧率。所以,可以通过Int32 Venc_setInputFrameRate(VENC_CHN vencChnId, Int32 veFrameRate);设置正确的输入帧率。这样你的输出帧率就可以直接设置期望帧率了。
另外,你说的码流也有变化指的是什么意思?