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.

dm388,ipnc_rdk_3.8 5MP 和LCD输出的问题



大家好,

我使用DM388开发平台,希望完成以下功能,实现5MP像素图像采集,JPEG编码,1080P LCD图像显示,sensor是IMX172。

我进行了以下尝试:

第一个尝试:在MultiCh_createTriStreamFullFtr()基础上修改

            //在502行,出入以下代码

           //设置sensor 输出分辨率为5MP
            pCameraInstPrm->sensorOutWidth    = 2560;
            pCameraInstPrm->sensorOutHeight = 1920;
            pCameraInstPrm->standard = SYSTEM_STD_5MP_2560_1920;

          //在550行,插入以下代码,

         //设置第一路输出图像分辨率为5MP

          pCameraOutPrm->scOutWidth = 2560;
          pCameraOutPrm->scOutHeight = 1920;

第二个尝试,在MultiCh_createStreamCaptureDisplay()中

         希望第一路CAMERALINK输出5MP图像,然后放入编码LINK,

        第二路CAMERALINK输出1080P图像,放入LCD接口

        但是在displaylink初始化阶段就fail了。

也在lowpower的usercase下进行过尝试(full 模式下运行lowpower 的usercase),也没有成功。

我对TI的解决方案不了解,请大家给一些建议,或者一些参考资料,谢谢啦。

       

  • 你好

    请问你第二路cameralink输出1080p是如何配置的?display link fail有具体打印什么错误么?

    需要实现输出,必须使用full feature,low power 下hdvpss没有打开,没有显示。

  • 您好,Chris Meng,

    非常感谢您的回复!

    我是在full模式下启动的, Vsys_create()中启动自定义的usercase。

    cameraPrm两路输出

    第一路 2560*1920 --->dupLink 1 --->ipcOutVpss --->ipcInVideo  ---->encLink--->ipcBitsOut ---->ipcBitsInHostPrm0

    第二路1920*1080----->dupLink2 --->sclrLinnk (为了以后接低分辨率的屏幕)---->displayLink

    系统运行时,启动一个线程,隔一段时间采用ret = GetAVData(AV_OP_GET_MJPEG_SERIAL, -1, &av_data )抓取jpeg图片。

    但是抓取到的图片都是1080P的,而不是5MP的。

    我怀疑是encLink的初始配置有误,请您指导解决问题的思路或者提供一些参考资料,不胜感激。

    encLink的初始配置,我参考的是full模式下的usercase,配置如下

            /* Video Encoder Link params */
            MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
            {
                EncLink_ChCreateParams *pLinkChPrm;
                EncLink_ChDynamicParams *pLinkDynPrm;
                VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
                VENC_CHN_PARAMS_S *pChPrm;
            
                for (i = 0; i < VENC_PRIMARY_CHANNELS; i++)
                {
                    pLinkChPrm    = &encPrm.chCreateParams[i];
                    pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
            
                    pChPrm        = &gVencModuleContext.vencConfig.encChannelParams[i];
                    pDynPrm     = &pChPrm->dynamicParam;
                    printf("YanHu:codec_combo == %d\n",gUI_mcfw_config.demoCfg.codec_combo);
                    switch(gUI_mcfw_config.demoCfg.codec_combo) {
                        case 0: pLinkChPrm->format = IVIDEO_H264HP; break; //"SINGLE_H264"
                        case 1: pLinkChPrm->format = IVIDEO_MPEG4SP; break; //"SINGLE_MPEG4"
                        case 2: pLinkChPrm->format = IVIDEO_MJPEG; break; //"SINGLE_JPEG"
                        case 3: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_MJPEG; break; //"H264_JPEG"
                        case 4: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MJPEG; break; //"MPEG4_JPEG"
                        case 5: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break; //"DUAL_H264"
                        case 6: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MPEG4SP; break; //"DUAL_MPEG4"
                        case 7: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_MPEG4SP; break;  //"H264_MPEG4"
                        case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break;  //"TRIPLE_H264"
                        case 9: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MPEG4SP; break; //"TRIPLE_MPEG4"
                        default: pLinkChPrm->format = IVIDEO_H264HP;
                    }
            
                    pLinkChPrm->profile                 = gVencModuleContext.vencConfig.h264Profile[i];
                    pLinkChPrm->dataLayout                = IVIDEO_PROGRESSIVE;
                    pLinkChPrm->fieldMergeEncodeEnable    = FALSE;
                    pLinkChPrm->enableAnalyticinfo        = pChPrm->enableAnalyticinfo;
                    pLinkChPrm->maxBitRate                = pChPrm->maxBitRate;
                    pLinkChPrm->encodingPreset            = pChPrm->encodingPreset;
                    pLinkChPrm->rateControlPreset        = IVIDEO_USER_DEFINED; //pChPrm->rcType;
                    pLinkChPrm->enableHighSpeed         = FALSE;
                    pLinkChPrm->enableWaterMarking        = pChPrm->enableWaterMarking;
                    pLinkChPrm->StreamPreset            = gUI_mcfw_config.StreamPreset[i];
            
                    pLinkDynPrm->intraFrameInterval     = pDynPrm->intraFrameInterval;
                    pLinkDynPrm->targetBitRate            = pDynPrm->targetBitRate;
                    pLinkDynPrm->interFrameInterval     = 1;
                    pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
                    pLinkDynPrm->inputFrameRate         = pDynPrm->inputFrameRate;
                    pLinkDynPrm->rcAlg                    = pDynPrm->rcAlg;
                    pLinkDynPrm->qpMin                    = pDynPrm->qpMin;
                    pLinkDynPrm->qpMax                    = pDynPrm->qpMax;
                    pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
                    pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
                    pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;
            
                    encPrm.numBufPerCh[i] = 4;
                    gVencModuleContext.encFormat[i] = pLinkChPrm->format;
                }
            }

                encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30;
                
                encPrm.vsEnable = gUI_mcfw_config.vsEnable;
                
                encPrm.isVaUseCase = 0;

               // for (i = VENC_PRIMARY_CHANNELS; i < (VENC_CHN_MAX - 1); i++)

              for (i =0; i < (VENC_CHN_MAX - 1); i++) 

            强制设置三个编码通道都为JPEG编码
                {
                    encPrm.chCreateParams[i].format = IVIDEO_MJPEG;
                    encPrm.chCreateParams[i].profile = 0;
                    encPrm.chCreateParams[i].dataLayout = IVIDEO_PROGRESSIVE;
                    encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE;
                    encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 0;
                    encPrm.chCreateParams[i].encodingPreset = 0;
                    encPrm.chCreateParams[i].enableAnalyticinfo = 0;
                    encPrm.chCreateParams[i].enableWaterMarking = 0;
                    encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = 30;
                    encPrm.chCreateParams[i].rateControlPreset = 0;
                    encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate =
                        100 * 1000;
                    encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 0;
                    encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = 0;

                    gVencModuleContext.encFormat[i] = encPrm.chCreateParams[i].format;
                }
                encPrm.inQueParams.prevLinkId = ipcInVideoId;
                encPrm.inQueParams.prevLinkQueId = 0;
                encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId;