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.

板子启动后插入摄像头没有反应,必须重启板子才OK、 DM365+Tvp5158

Other Parts Discussed in Thread: TVP5158

程序不知道改了哪里, 四个视频输入端口,必须在板子启动器插上摄像头,如果在板子启动后插摄像头,则监控没有画面、

for example, 摄像头a插入vin0口,启动板子,监控会有画面,拔掉摄像头a再插到vin0口,仍然能监控,但是如果插入到vin1,则没有监控画面了、怀疑是加载驱动的问题?  但是不知道到程序哪块找了、、、请指个方向~~~~~~~~~~~many many many thanks ~

  • 你尝试一下这个:

    在5158初始化的配置里面设置Output Formatter Control 2

    01 Blue screen out when TVP5158 detects lost lock   或者
    10 Force Blue screen out

    这样的话,会强制输出蓝屏的。

  • 5158初始化的配置里面设置?  没找到地方呢o(╯□╰)o。。。 

  • 你好,

    DM36x的VPFE要求输入的时序是连续不变的。如果输入的时序发生变化,需要复位VPSS。

    如果你插拔视频源,TVP5158的输出时序会有变化,这时候需要复位VPSS。

    如果强制TVP5158输出蓝屏,当你插上视频源后,TVP5158的输出时序仍然会有变化,这时候仍然需要复位VPSS。

     

  • ocean cheng 说:

    程序不知道改了哪里, 四个视频输入端口,必须在板子启动器插上摄像头,如果在板子启动后插摄像头,则监控没有画面、

    for example, 摄像头a插入vin0口,启动板子,监控会有画面,拔掉摄像头a再插到vin0口,仍然能监控,但是如果插入到vin1,则没有监控画面了、怀疑是加载驱动的问题?  但是不知道到程序哪块找了、、、请指个方向~~~~~~~~~~~many many many thanks ~

    如果启动前插入摄像头就是好的,说明驱动是没什么问题的。

    如果按默认的参数在网络发送时也有这个问题,必须先启动接收,再启动发送才正常。

    这些都是由dmai里面的一个参数配置决定的,默认情况下先发一个I帧,然后发一堆P帧,前面的I帧丢了,就不能正常显示,这就是为什么必须先插上摄像头。我找找,稍后发给你

  • 好的,麻烦了哈~~~

  • const VIDENC1_DynamicParams Venc1_DynamicParams_DEFAULT = {
    //sizeof(IVIDENC1_DynamicParams), /* size */
    sizeof(IH264VENC_DynamicParams), /* size */
    720, /* inputHeight */
    1280, /* inputWidth */
    30000, /* refFrameRate */
    30000, /* targetFrameRate */
    6000000, /* targetBitRate */
    30, /* intraFrameInterval */
    XDM_ENCODE_AU, /* generateHeader */
    0, /* captureWidth */
    IVIDEO_NA_FRAME, /* forceFrame */
    1, /* interFrameInterval */
    0 /* mbDataFlag */
    };

    /******************************************************************************
    * Venc1_create
    ******************************************************************************/
    Venc1_Handle Venc1_create(Engine_Handle hEngine, Char *codecName,
    VIDENC1_Params *params,
    VIDENC1_DynamicParams *dynParams)
    {
    Venc1_Handle hVe;
    VIDENC1_Status encStatus;
    XDAS_Int32 status;
    VIDENC1_Handle hEncode;
    IH264VENC_DynamicParams *IH264DynParams;

    if (hEngine == NULL || codecName == NULL ||
    params == NULL || dynParams == NULL) {
    Dmai_err0("Cannot pass null for engine, codec name, params or "
    "dynamic params\n");
    return NULL;
    }

    /* Allocate space for the object */
    hVe = (Venc1_Handle)calloc(1, sizeof(Venc1_Object));

    if (hVe == NULL) {
    Dmai_err0("Failed to allocate space for Venc1 Object\n");
    return NULL;
    }

    Dmai_dbg5("Creating encoder %s for max %dx%d bitrate %d ratectrl %d\n",
    codecName, params->maxWidth, params->maxHeight,
    params->maxBitRate, params->rateControlPreset);

    /* Create video encoder instance */
    hEncode = VIDENC1_create(hEngine, codecName, params);

    if (hEncode == NULL) {
    Dmai_err2("Failed to open video encode algorithm: %s (0x%x)\n",
    codecName, Engine_getLastError(hEngine));
    free(hVe);
    return NULL;
    }

    Dmai_dbg3("Setting dynParams size %dx%d bitrate %d\n",
    dynParams->inputWidth, dynParams->inputHeight,
    dynParams->targetBitRate);

    /* Set video encoder dynamic parameters */
    encStatus.size = sizeof(VIDENC1_Status);
    encStatus.data.buf = NULL;

    IH264DynParams = &H264VENC_TI_IH264VENC_DYNAMICPARAMS;
    memcpy(IH264DynParams, dynParams, sizeof(VIDENC1_DynamicParams) );
    IH264DynParams ->idrFrameInterval = 25;

    //status = VIDENC1_control(hEncode, XDM_SETPARAMS, dynParams, &encStatus);
    status = VIDENC1_control(hEncode, XDM_SETPARAMS, (VIDENC1_DynamicParams*)IH264DynParams, &encStatus);

    ...

    }

  • 目前什么情况,我想知道这个修改在你上面会不会发生作用