请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TDA4VM工具/软件:
我正在使用 TDA4VM Linux 或 Linux+RTOS 8.6 SDK。 哪些参数或增补程序可用于启用 I 帧周期和 IDR 帧周期?
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.
在 8.6 SDK 中、Imagination VPU GStreamer 到 V4L2 控件未启用、仅在 9.0 中启用。 您仍然可以通过在 8.6 版驱动程序中对参数进行硬编码来启用 I 帧周期。 对进行了以下修改 vxe_v4l2.c 将 I 帧/IDR 周期设置为 5。
static int vxe_s_ext_ctrls(struct file *file, void *priv,
struct v4l2_ext_controls *ctrls)
{
struct vxe_enc_ctx *ctx = file2ctx(file);
struct device *dev = ctx->dev->dev;
int i;
int ret;
ctrls->reserved[0] = 0;
ctrls->reserved[1] = 0;
if (ctrls->which != V4L2_CTRL_WHICH_CUR_VAL)
return -EINVAL;
/* Verify first with try_ext_ctrls */
ret = vxe_try_ext_ctrls(file, priv, ctrls);
if (ret) {
/* Indicate verification stage error */
ctrls->error_idx = ctrls->count;
return ret;
}
/* Set all values in this set of commands */
for (i = 0; i < ctrls->count; i++) {
ctrls->controls[i].reserved2[0] = 0;
switch (ctrls->controls[i].id) {
case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
ctrls->controls[i].size = 0;
ctx->vparams.idr_period = 5;
break;
case V4L2_CID_MPEG_VIDEO_BITRATE:
ctrls->controls[i].size = 0;
ctx->rc.bits_per_second = ctrls->controls[i].value;
break;
case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:
ctrls->controls[i].size = 0;
ctx->rc.intra_freq = 5;
ctx->vparams.intra_cnt = 5;
break;
default:
dev_err(dev, "%s Invalid control id %#08x\n",
__func__, ctrls->controls[i].id);
ctrls->error_idx = i;
return -EINVAL;
}
}
return 0;
}
由于用户空间 API 未正确实现以由 5.10 (8.6 SDK) 内核中的 GStreamer 控制。 我将附加在 6.1 (9.0 SDK) 内核中创建的补丁、该补丁添加了此实现以从下面的 GStreamer 设置 V4L2 控件:
0268.tiL6.1-1-2-media-img-vxe-vxd-enable-Gstreamer-1.20.5.patch
有了这个补丁、您应该能够避免硬编码以及驱动程序中的值、而只使用 GStreamer 流水线插件。 但是、由于此补丁是在较新的内核上实现的、因此 TI 不确定涉及哪些(如果有)反向移植工作。
此致、
Sarabesh S.