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.

实现DM368端的Jpg旋转

我已经实现了在DM365端的JPG旋转(0, 90, 180,360),能工作正常

DM365 / MV5.0 / linux-davinci-2.6.18 / dvsdk_2_10_01_18

主要代码参考了DVSDK的Test  IJPEGENC_DynamicParams jpeg_extDynParams;

+++ b/stream_capture/framework/alg/src/alg_jpgEnc.c
@@ -12,6 +12,8 @@
* =========================================================================== */
#include <alg_priv.h>
#include <alg_jpgEnc.h>
+#include <ti/sdo/codecs/jpegenc/ijpegenc.h>
+
typedef struct {

IMGENC1_Handle hEncode;
@@ -167,6 +169,39 @@ int ALG_jpgEncSetQvalue(void *hndl, int qValue)
return OSA_SOK;
}

+int ALG_jpgEncSetRotation(void *hndl, Uint16 rotation)
+{
+ ALG_JpgEncObj *pObj = (ALG_JpgEncObj*)hndl;
+ XDAS_Int32 status;
+ IJPEGENC_DynamicParams jpeg_extDynParams;
+
+ if(pObj == NULL)
+ {
+ return OSA_EFAIL;
+ }
+
+ memcpy(&(jpeg_extDynParams.imgencDynamicParams), &(pObj->dynamicParams),
+ sizeof(IMGENC1_DynamicParams));
+ /* Set other external DynParams*/
+ jpeg_extDynParams.imgencDynamicParams.size = sizeof(IJPEGENC_DynamicParams);/* it is very important */
+ jpeg_extDynParams.rotation = rotation;
+ jpeg_extDynParams.rstInterval = 84;
+ jpeg_extDynParams.disableEOI = XDM_DEFAULT;
+ jpeg_extDynParams.customQ = NULL;

+ pObj->encStatus.size = sizeof(pObj->encStatus);
+ pObj->encStatus.data.buf = NULL;
+
+ status = IMGENC1_control(pObj->hEncode, XDM_SETPARAMS, (IMGENC1_DynamicParams*)(&jpeg_extDynParams),
+ &pObj->encStatus);
+ if (status != IMGENC1_EOK) {
+ g_warning("%s XDM_SETPARAMS failed, status=%ld\n", status);
+ return OSA_EFAIL;
+ }
+
+ return OSA_SOK;
+}

现在想在DM368上实现,主要信息如下

DM368 / CodeSourcery / Linux2.6.32 / ti-dvsdk_dm368-evm_4_02_00_06

1) 按照DM365上的方法,发现编译后的av_server.out无法正常运行, 被Block在 ALG_jpgEncRum()

2) 想测试 ti-dvsdk_dm368-evm_4_02_00_06的Test jpgenc-r,发现无法正常编译

  From e2e发现如下的解释

   These individual codec test applications are not buildable within a DVSDK  3.xx or 4.xx. They are used for module testing under a different tool chain.

请教下,该如何调试JPG Rotation功能,有替代的 jpgenc-r可供测试吗

谢谢

  • 你好,

    请问你只想是从DM365升级到DM368,还是想升级kernel?

    如果是前者,只需要修改ubl,提升各个核的频率就可以了,不需要更新kernel和其他软件。

    如果是后者,我建议在ALG_jpgEncRun()里面的IMGENC1_process前打印一下JPEGenc的动态参数,对比以前和现在版本的参数有什么区别,看看能否找到挂起的原因。

    从你提供的信息,我觉得你应该是使用的IPNC的软件对么?如果是,说明是哪个版本的IPNC软件更让人清楚一些。

  • Hi, Chris,

          1)两款产品分别用到了DM365和DM368, 没有替代,代码均为IPNC,动态参数正常,没有被修改掉

          我测试了  dvsdk_2_10_01_18中的image_encode_io1 (image_encode_io1_dm365.x470MV), 添加了jpg rotation代码,能正常工作

        同样的jpg rotation代码,在ti-dvsdk_dm368-evm_4_02_00_06中测试image_encode_io1 (image_encode_io1_dm368.x470MV), 无法工作

    还是被Block在IMGENC1_process()

        我移植了ti-dvsdk_dm368-evm_4_02_00_06的dmai代码到dvsdk_2_10_01_18中,rotation也能工作起来

       从跟踪上看是应该是codec engine

      不知道哪里的更新导致了了encoder无法实现rotation

      3)

  • 你好,

    从你下面的信息看,在DM368上你们使用的是DVSDK软件,而非IPNC软件。你能使用IPNC软件v5.1么?ipnc v5.1上面使用的kernel版本是2.6.37.

    DM368 / CodeSourcery / Linux2.6.32 / ti-dvsdk_dm368-evm_4_02_00_06

  • Hi Frey,

    我一樣是用DVSDK 4_02_00_06 在EVM365上測試

    請問使用rotation的方式是用IJPEGENC_DynamicParams 替代原本的IMGENC1_DynamicParams傳入Ienc1_create()嗎?

    我這樣試image_encode_io1時也一樣遇到block在IMGENC1_process()的問題

    你說DVSDK 2_10_01_18可以動作

    是不是用較早版本的DVSDK就不會有這個問題?

    祝順利

    多謝!

    Caleb

  • 是的,

    用dma搬吧