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.

Linux/LINUXDVSDK-DM36X: DM368 dvsdk4.02.00.06 Video and Image encoder at the same time?

Part Number: LINUXDVSDK-DM36X

Tool/software: Linux

hi, i am using dvsdk4.02.00.06 to develope my dm368 board.now i want to h264 encoder and jpeg image encoder work at the same time.but i got some error .just h264 encoder or jpeg image encoder independent work better.

the error like below:

1. ti.sdo.ce.alg.Algorithm - Algorithm_create> Assignment of alg resources through RMAN FAILED (0x7).

2. CV - VISA_create2> FAILED to create local codec.

3. ti.sdo.ce.image1.IMGENC1 - IMGENC_create> return (0x0)
 ti.sdo.dmai - [Ienc1] Can't open imaging encode algorithm
Failed to create image encoder: jpegenc

my cfg like below:

/* Load support for the Codec Engine OSAL */

var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global');

osalGlobal.runtimeEnv = osalGlobal.LINUX;

/* Load support for the 'Davinci Multimedia Application Interface' module */

var DMAI = xdc.loadPackage('ti.sdo.dmai');

environment['xdc.cfg.check.fatal'] = 'false';

var RMAN = xdc.useModule('ti.sdo.fc.rman.RMAN');

RMAN.useDSKT2 = false;

RMAN.persistentAllocFxn = "__ALG_allocMemory";

RMAN.persistentFreeFxn = "__ALG_freeMemory";

RMAN.semCreateFxn = "Sem_create";

RMAN.semDeleteFxn = "Sem_delete";

RMAN.semPendFxn = "Sem_pend";

RMAN.semPostFxn = "Sem_post";

RMAN.tableSize = 10;

var EDMA3 = xdc.useModule('ti.sdo.fc.edma3.Settings');
EDMA3.maxRequests = 128;

var vicp = xdc.useModule('ti.sdo.linuxutils.vicp.VICP');

var HDVICP = xdc.useModule('ti.sdo.fc.ires.hdvicp.HDVICP');

var VICP2 = xdc.useModule('ti.sdo.fc.ires.vicp.VICP2');

var VICPSYNC = xdc.useModule('ti.sdo.fc.vicpsync.VICPSYNC');

var HDVICPSYNC = xdc.useModule('ti.sdo.fc.hdvicpsync.HDVICPSYNC');

var MEMUTILS = xdc.useModule('ti.sdo.fc.memutils.MEMUTILS');

var ADDRSPACE = xdc.useModule('ti.sdo.fc.ires.addrspace.ADDRSPACE');

var EDMA3CHAN = xdc.useModule('ti.sdo.fc.ires.edma3chan.EDMA3CHAN');

var EDMA = xdc.useModule('ti.sdo.linuxutils.edma.EDMA');

var CMEM = xdc.useModule('ti.sdo.linuxutils.cmem.CMEM');

var MEMTCM = xdc.useModule('ti.sdo.fc.ires.memtcm.MEMTCM');

MEMTCM.cmemBlockId = 1; //Since we use _1 in our insmod command.

xdc.loadPackage("ti.sdo.ce.video2");

xdc.loadPackage("ti.sdo.fc.hdvicpsync");

/*

 *  ======== Engine Configuration ========

 */

var MPEG4ENC = xdc.useModule('ti.sdo.codecs.mpeg4enc.ce.MPEG4ENC');

var H264ENC = xdc.useModule('ti.sdo.codecs.h264enc.ce.H264ENC');

var MPEG2ENC = xdc.useModule('ti.sdo.codecs.mpeg2enc.ce.MPEG2ENC');

var G711ENC = xdc.useModule('ti.sdo.ce.examples.codecs.g711.G711ENC');

var AACENC = xdc.useModule('ittiam.codecs.aaclc_enc.ce.AACLC_ENC');
var JPEGENC = xdc.useModule('ti.sdo.codecs.jpegenc.ce.JPEGENC');

var Engine = xdc.useModule('ti.sdo.ce.Engine');

var myEngine = Engine.create("encode", [

    {name: "mpeg4enc", mod: MPEG4ENC, local: true, groupId: 1},

    {name: "h264enc", mod: H264ENC, local: true, groupId: 1},

    {name: "mpeg2enc", mod: MPEG2ENC, local: true, groupId: 1},
    {name: "jpegenc", mod: JPEGENC, local: true, groupId: 2},

    {name: "g711enc", mod: G711ENC, local: true},

    {name: "aacenc", mod: AACENC, local: true},

]);

/*

 * Turn cache on while running the AAC encoder to achieve better performance.

 * The rest of the codecs are unaffected.

 */

AACENC.useCache = true;

/*

xdc.loadPackage('ti.sdo.fc.ires.vicp').profile = "debug_trace";

xdc.loadPackage('ti.sdo.fc.ires.edma3chan').profile = "debug_trace";

xdc.loadPackage('ti.sdo.fc.rman').profile = "debug_trace";

xdc.loadPackage('ti.sdo.fc.edma3').profile = "debug_trace";

EDMA3CHAN.trace = true;

EDMA3CHAN.debug = true;

*/

Program.main = null;

are there someone give me some advice?

  • Hi Jery,

    H.264 encoder and JPEG encoder run on two different hardware engines. But they share the same resources like EDMA channels and some memory. Due to this reason, you might have to run it in sequence.

    But if you want to run them parallel,

    1. Use different scratch group id's. scratchGroup Id = 1 for H.264 encoder, scratchGroupId = 2 for JPEG in your .cfg file

    2. Release few EDMA channels. 

    3. set enableDDRbuff = 1 in h264

    Hope your are using latest codecs. Its recomended upgrade to latest from here : http://software-dl.ti.com/dsps/dsps_public_sw/codecs/DM36x/index_FDS.html