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.

[参考译文] CCS/TMS320C6678:有关&quot 的问题;支持自定义量化表"在 C66x 用户手册的 JPEG 基线配置文件编码器(v02.02.03)上、用户指南#39;s 指南[SPRUHB2]

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/601453/ccs-tms320c6678-question-about-supports-custom-quantization-tables-on-jpeg-baseline-profile-encoder-v02-02-03-on-c66x-user-s-guide-spruhb2

器件型号:TMS320C6678

工具/软件:Code Composer Studio

您好,

     我正在使用“C66x_jpegenc_02_02_03_00_ELF\packages/ti\sdo\codecs\jpegenc\lib\jpegg_ti.le66”进行图像 jpeg 处理。  我对这个库有一些问题;

  首先, 文档(SPRUHB2)指出:量化表是用品质因数(1-100)调整量化级别来固定的。  这是否意味着有固定的100个量化表对应于100

  质量因素一一一一一一一而一?  

     我已经做了一些测试。  我将品质因数设置为80。 接下来,我使用5个不同的灰阶图像(这些图像是仅包含 LUMA 的原始图像数据)来使用 C66x_jpegenc_02_02_03_00_ELF 进行 jpeg 编码。

 然后,我得到5个不同的 jpeg 文件。  最后,我发现5个不同 jpeg 文件中的量化表是相同的。   因此,我认为  C66x_jpegenc_02_02_03_00_ELF 所包含的量化表是固定的。

 当我 指定 质量系数时,无论图像内容是什么,lib 使用的量化表都是固定的。  我说得对吗?

  其次 、文档(SPRUHB2)指出: 支持自定义量化表。  

    但是,当我设置 IDMJPEG_TIGEM_DynamicParams 的 quantTable 时,它不会像我所期望的那样工作。  下面是我的代码:


IDMJPGE_TIGEM_CustomQuantTables * IDMJPGE_TIGEM_CustomQuantTablesObj = 0;

无符号短整型 DQT_TABLE [128]={
/* LUMA (Y)*/
16、11、10、16、24、 40、51、61、
12、12、14、19、26、 58、60、55、
14、13、16、24、40、 57、69、56、
14、17、22、29、51、 87、80、62、
18、22、37、56、68、 109、103、77、
24、35、55、64、81、 104、113、92、
49、64、78、87、103、 121、120、101、
72、92、95、98、112、 100、103、99、
/*色度(CB Cr)*/
17、18、24、47、99、 99、99、99、
18、21、26、66、99、 99、99、99、
24、26、56、99、99、 99、99、99、
47、66、99、99、99、 99、99、99、
99、99、99、99、99、 99、99、99、
99、99、99、99、99、 99、99、99、
99、99、99、99、99、 99、99、99、
99、99、99、99、99、 99、99、99
};

(笑声)

IDMJPGE_TIGEM_CustomQuantTablesObj =(IDMJPGE_TIGEM_CustomQuantTables *) malloc (sizeof (IDMJPGE_TIGEM_CustomQuantTables));
对于(ii = 0;ii < 64;i++)

IDMJPGE_TIGEM_CustomQuantTablesObj->LUM_QUANT_TAB[i]= DQT_TABLE[i];
IDMJPGE_TIGEM_CustomQuantTablesObj->CHM_QUANT_TAB[i]= DQT_TAB[i+64];

对于(ii = 0;ii < 7;i++)

JPGEDynamicParams[i].params.size = sizeof (IDMJPGE_TIGEM_DynamicParams);
JPGEDynamicParams[i].params.inputWidth = image_width;
如果(ii = 6)

JPGEDynamicParams[i].params.inputHeight = section_6_height;

其他

JPGEDynamicParams[i].params.inputHeight = section_0_TO_5_height;

JPGEDynamicParams[i].params.inputChromaFormat = XDM_Gray;
JPGEDynamicParams[i].params.qValue = 100;
JPGEDynamicParams[i].params.numAU = XDM_DEFAULT;
JPGEDynamicParams[i].params.captureWidth = 0;


JPGEDynamicParams[i].CaptureHeight = 0;
JPGEDynamicParams[i].DRI_Interval = 0;
JPGEDynamicParams[i].quantTable = IDMJPGE_TIGEM_CustomQuantTablesObj;//NULL
JPGEDynamicParams[i].Thumbnail_Index_App0 = 0;
JPGEDynamicParams[i].Thumbnail_Index_App1 = 0;
JPGEDynamicParams[i].Thumbnail_Index_App13 = 0;
JPGEDynamicParams[i].Thumbnail_H_size_App1 = 0;
JPGEDynamicParams[i].Thumbnail_V_size_App1 = 0;
JPGEDynamicParams[i].Thumbnail_H_size_App0 = 0;
JPGEDynamicParams[i].Thumbnail_V_size_App0 = 0;
JPGEDynamicParams[i].Thumbnail_H_size_App13 = 0;
JPGEDynamicParams[i].Thumbnail_V_size_App13 = 0;
JPGEDynamicParams[i].APPN0_numBufs = 0;
JPGEDynamicParams[i].APPN1_numBufs = 0;
JPGEDynamicParams[i].APPN13_numBufs = 0;
JPGEDynamicParams[i].APPN0_startBuf = 0;
JPGEDynamicParams[i].APPN1_startBuf = 0;
JPGEDynamicParams[i].APPN13_startBuf = 0;
JPGEDynamicParams[i].comment_insert = 0;
JPGEDynamicParams[i].comment_startBuf = 0;

DynamicParams[i]=(IIMGENC1_DynamicParams *)&JPGEDynamicParams[i];

DynamicParams[i]->generateHeader = XDM_encode_AU;

(笑声)

对于(ii = 0;ii < 7;i++)

if ((handle[i]=(IALG_Handle) ALG_create ((IALG_Fxns *)&DMJPGE_TIGEM_IDMJPGE、(IALG_Handle) NULL、(IALG_Params *) params[i])=NULL)

printf("创建实例失败... 正在退出此配置。\n\n");
返回-1;

IIMGENC1fxns =(IIMGENC1_Fxns *) handle[i]->Fxns;
handle[i]->Fxns->algActivate (handle[i]);


IIMGENC1fxns-> CONTROL ((IIMGENC1_Handle) handle[II]、XDM_SETPARAMS、(IIMGENC1_DynamicParams *) DynamicParams[II]、(IIMGENC1_Status *) status[II]);

IIMGENC1fxns-> CONTROL ((IIMGENC1_Handle) handle[II]、XDM_GETBUFINFO、(IIMGENC1_DynamicParams *) DynamicParams[II]、(IIMGENC1_Status *) status[II]);

handle[i]->Fxns->algDeactivate (handle[i]);

cache_wbAll();

(笑声)

  但 结果 jpeg 文件中的量化表与  DQT_table 不同。   自定义量化表似乎对库没有影响。   谁能指出哪里出错?

 

 

 第三、 我遇到了一个问题、我无法找到使用此库执行 IPC 的 jpeg 编码过程时发生的情况。  

     1.将摄像机原始数据捕获到核心0;//数据格式:Y Y Y Y Y Y .

     2.将原始数据拆分为8个部分(垂直方向,例如,如果折纸图像的大小为1024*800,则每个部分的大小为1024*100);

     使用 IPC 将8个数据片段发送到8个内核(一个数据片段对应于一个内核)。

     每个内核都使用自己的数据执行 jpeg 编码任务。   每个内核的质量系数为80。

     5.每个内核使用 IPC 将其结果(jpeg 文件)发送到内核0。

     6.核心0将这些 jpeg 文件合并到一个大的完整 jpeg 文件,然后将其发送到 PC。

  最初、 上述步骤正常工作、但当我更改摄像头 的分辨率时、结果不正确。 例如、内核0生成0.jpg、内核1生成1.jpg 等。

  通常情况下 、这8个 jpeg 文件中的量化表是不同的。  例如,0.jpg、1.jpg、2.jpg,3.jpg、5.jpg、6.jpg,7.jpg 有保存 量化表,4.jpg 有另一 个量化表。  谁能告诉我发生了什么?

 

 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已通知软件团队。 他们的反馈将在此处发布。

    此致、
    Yordan