TI中文支持网
TI专业的中文技术问题搜集分享网站

DM8168中264码流解码重新编码成jpeg,图像出现偏移

各位大牛,本人现在遇到这样一个问题

现在项目有这么个需求,要将接收到的264码流分成两路,一路直接进行显示,一路保存成jpg文件。直接显示那一路没什么问题,保存jpg那一路送到编码器其中一个通道,生成的图像出现向右下角偏移的现象。

正常图片和异常图片分别如下:

link结构大致如下图所示:

接受的码流是双流,selectlink作用是把第一路筛选出来,把selectlink接在encoderlink的第四路,现做过以下尝试:

1、直接把selectlink的输出接显示的话是正常的

2、将编码格式由jpeg改为264,图像也是偏移的

3、编码器第三路是由capturelink采集的数据直接编jpeg,参数设置和第四路一样,图像正常

然后一直不明白问题出在哪,DVRRDK是4.0版本,第三路和第四路jpeg编码link参数设置如下所示:

for (i = 2; i < 4; i++) {
encPrm.chCreateParams[i].format = IVIDEO_MJPEG;//IVIDEO_H264BP; // IVIDEO_H264BP;//IVIDEO_H264HP;
encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE;
encPrm.chCreateParams[i].enableAnalyticinfo = FALSE;
encPrm.chCreateParams[i].enableWaterMarking = FALSE;
encPrm.chCreateParams[i].enableHighSpeed = FALSE;
encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 3000;
encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = 60;
encPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = 1;
encPrm.chCreateParams[i].defaultDynamicParams.qpMin = 20;
encPrm.chCreateParams[i].defaultDynamicParams.qpMax = 50;
encPrm.chCreateParams[i].defaultDynamicParams.rcAlg = 0; //0 vbr //1 cbr
encPrm.chCreateParams[i].defaultDynamicParams.qpInit = -1;
encPrm.chCreateParams[i].defaultDynamicParams.vbrDuration = 8;
encPrm.chCreateParams[i].defaultDynamicParams.vbrSensitivity = 0;
}

解码link参数如下所示:

for (i = 0; i < 2; i++) {
decPrm.chCreateParams[i].format = IVIDEO_H264HP;
decPrm.chCreateParams[i].profile = IH264VDEC_PROFILE_ANY;
decPrm.chCreateParams[i].targetMaxWidth = 1920;
decPrm.chCreateParams[i].targetMaxHeight = 1080;
decPrm.chCreateParams[i].fieldMergeDecodeEnable = FALSE;
decPrm.chCreateParams[i].algCreateStatus =
DEC_LINK_ALG_CREATE_STATUS_CREATE;
if (i < 1) {
decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = 60;
decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 8000
* 1000;
decPrm.chCreateParams[i].numBufPerCh = 16;
} else {
decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = 30;
decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 4000
* 1000;
decPrm.chCreateParams[i].numBufPerCh = 16;
}
}

保存数据的方法是:

Bitstream_BufList fullBufList;

remotejpgfile = fopen("/Web/static/images/remote.jpg","wb");
localjpgfile = fopen("/Web/static/images/local.jpg","wb");

IpcBitsInLink_getFullVideoBitStreamBufs(SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0, &fullBufList);

if ((pFullBuf->fillLength > 0) && (pFullBuf->channelNum == 2))
{
fseek(localjpgfile,0,0);
fwrite((char*)pFullBuf->addr, 1, pFullBuf->fillLength,localjpgfile);
fflush(localjpgfile);
}

if ((pFullBuf->fillLength > 0) && (pFullBuf->channelNum == 3))
{
fseek(remotejpgfile,0,0);
fwrite((char*)pFullBuf->addr, 1, pFullBuf->fillLength,remotejpgfile);
fflush(remotejpgfile);
}

求大拿们帮看下哪里可能出问题,非常感激!

Chris Meng:

你好,

看起来像是编码输入的buffer首地址偏移了,和编码的参数应该没有直接关系。

你看看编码使用的buffer的首地址是在编码link获取的时候就发生变化了,还是在使用的时候?

1990 yang:

回复 Chris Meng:

Chris Meng

你好,

看起来像是编码输入的buffer首地址偏移了,和编码的参数应该没有直接关系。

你看看编码使用的buffer的首地址是在编码link获取的时候就发生变化了,还是在使用的时候?

qinzhan chen:

回复 1990 yang:

您好!

请问您的问题解决了吗?我现在转码也遇到了一样的问题,使用如下LINK的时候:ipc_bits_out_host->ipc_bits_in_video_id->dec->enc->ipc_bits_out_video->ipc_bits_in_host就会出现图像偏移。

1990 yang:

回复 qinzhan chen:

据说和编码器版本有关系,后来我没再关注过这个问题,您看有没有帮助e2echina.ti.com/…/339783

qinzhan chen:

回复 1990 yang:

感谢您的回复。

那您的问题解决了吗?是通过获取新的codec解决的还是用其他方法解决的?

1990 yang:

回复 qinzhan chen:

用的其他方法,因为我不方便拿最新版本的rdk,就直接调第三方库把那个边给裁剪了

赞(0)
未经允许不得转载:TI中文支持网 » DM8168中264码流解码重新编码成jpeg,图像出现偏移
分享到: 更多 (0)