It looks like the call's failing before the ARM-side stubs get a chance to send the request to the DSP side. I'm inferring this because I don't see a Comm_alloc() or Comm_put() between the IMGENC_control() enter and exit calls - these Comm messages are how the ARM-side stubs and DSP-side skeletons communicate.
One check that may be failing in the ARM-side stub is if the dynParams and/or status structs are 'too big' (or more likely, the .size fields aren't initialized correctly). If they're 'too big', -1 (IMGENC_EFAIL) will be returned. Can you double-check that the .size fields are correctly set - for both dynParams and status? Chris > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] > ] On Behalf Of Cochrane, Euan > Sent: Friday, November 02, 2007 6:31 AM > To: 'davinci-linux-open-source@linux.davincidsp.com' > Subject: IMENC_control(), can't set dyn params 0x0 > > Hi again! > I bet you're all getting sick of me so I appologise for > bothering you all again. I am trying to convert my project > from a single thread into multiple threads using the encode > demo as a guide. My stucture is almost the same except I have > no writer thread and my video thread captures JPEGs instead > of encoding video (I'll deal with changing the name of the > thread later!). I succesfully modified the video thread > removing anything related to encoding video or interacting > with the writer thread, so essentially all it does for now is > get buffers from the capture thread and send them back. This > runs fine and simply displays the video from the camera on > screen with a slightly modified OSD. The porblem is now when > I try and insert the code responsible for capturing JPEGs > into the video thread. During the initialisation I get the > error "can't set dyn params 0x0" which comes from the > function in bold below: > > /* Reset, load, and start DSP Engine */ > CE = Engine_open(engineName, NULL, NULL); > > if (CE == NULL) { > ERR("Failed to open codec engine %s\n", engineName); > cleanup(THREAD_FAILURE); > } > > DBG("Codec Engine opened in video thread\n"); > > // allocate and initialize image encoder on the engine > enc = IMGENC_create( CE, encoderName, &imgParams ); > if ( enc == NULL ) { > ERR("error: can't open codec %s\n", encoderName); > cleanup(THREAD_FAILURE); > } > > jstatus = IMGENC_control( enc, XDM_SETPARAMS, > (IMGENC_DynamicParams*)(&dynParams), > (IMGENC_Status*)(&imgStatus) ); > if ( jstatus == IALG_EFAIL ) { > ERR("error: can't set dyn params 0x%x\n", > (int)(imgStatus.extendedError) ); > cleanup(THREAD_FAILURE); > } > > This is part of the output I get when running the code: > @0x000b15aa:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_create> return (0x2c398) > > @0x000b1643:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_control> Enter (handle=0x2c398, id=1, params=0x29358, > status=0x299f4 > @0x000b1702:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_control> return (-1) > -- FAILED > > Video Chain Debug: Checking video standard > > Video Chain Error: error: can't set dyn params 0x0 > > This is the same part the output from my project running as a > single thread: > @0x000e07c7:[T:0x402c8568] ti.sdo.ce.image.IMGENC - > IMGENC_create> return (0x282f0) > > @0x000e085f:[T:0x402c8568] ti.sdo.ce.image.IMGENC - > IMGENC_control> Enter (handle=0x282f0, id=1, params=0x25338, > status=0x259d0 > > In both programs the params are set up as below (above the > value shown for params is different in each case, is this the > value or the address where the params are stored?) > // image dynamic parameters > IMGENC_DynamicParams dynParams = { > sizeof(IIMGENC_DynamicParams), // size > 0, // numAU > XDM_YUV_422ILE, // inputChromaFormat > > 480, // inputHeight > 720, // inputWidth > 0, // captureWidth > XDM_ENCODE_AU, // generateHeader > 73 // qValue > }; > > > > Below is the full output when running my app. Can anyone > think why the function might fail like that? There are no > errors or warning when I compile. > Thanks again, > Euan > > > > Video Chain Debug: NTSC selected > > Video Chain started. > > Video Chain Debug: Codec Engine initialized > > Video Chain Debug: Logging not initialized > > @0x000c91d3:[T:0x40ac9b60] OP - daemon> thread created. > > Video Chain Debug: Pause object opened > > Video Chain Debug: Init rendezvous opened for 1 threads > > Video Chain Debug: Cleanup rendezvous opened for 1 threads > > Video Chain Debug: Priming rendezvous opened for 2 threads > > @0x000cba72:[T:0x412c9b60] OM - Memory_getPhysicalAddress> > Enter(virtAddr=0x412ca000) > > @0x000cbb6f:[T:0x412c9b60] OM - Memory__getPhysicalAddress> > Enter(virtAddr=0x412ca000, size=1) > > @0x000cbc1a:[T:0x412c9b60] OM - Memory__getPhysicalAddress> > returning physAddr=0x0 > > @0x000cbcbd:[T:0x412c9b60] OM - Memory_getPhysicalAddress> > return (0x86800000) > Video Chain Debug: Display buffer 0 mapped to 0x412ca000 has > physical address 0x86800000 > > @0x000cdb56:[T:0x412c9b60] OM - Memory_getPhysicalAddress> > Enter(virtAddr=0x413c9000) > > @0x000cdc14:[T:0x412c9b60] OM - Memory__getPhysicalAddress> > Enter(virtAddr=0x413c9000, size=1) > > @0x000cdcb9:[T:0x412c9b60] OM - Memory__getPhysicalAddress> > returning physAddr=0x0 > > @0x000cdd54:[T:0x412c9b60] OM - Memory_getPhysicalAddress> > return (0x868ff000) > Video Chain Debug: Display buffer 1 mapped to 0x413c9000 has > physical address 0x868ff000 > > @0x000cfbd1:[T:0x412c9b60] OM - Memory_getPhysicalAddress> > Enter(virtAddr=0x414c8000) > > @0x000cfc95:[T:0x412c9b60] OM - Memory__getPhysicalAddress> > Enter(virtAddr=0x414c8000, size=1) > > @0x000cfd35:[T:0x412c9b60] OM - Memory__getPhysicalAddress> > returning physAddr=0x0 > > @0x000cfdcf:[T:0x412c9b60] OM - Memory_getPhysicalAddress> > return (0x869fe000) > Video Chain Debug: Display buffer 2 mapped to 0x414c8000 has > physical address 0x869fe000 > > Video Chain Debug: Video display device initialized. > > Video Chain Debug: Display thread created > > Video Chain Debug: captureWidth = 720, captureHeight = 480 > > Video Chain Debug: Capture thread created > > @0x000d0708:[T:0x4265fb60] CE - Engine_open('jpegencdec', > 0x0, 0x4265f554) > @0x000d0819:[T:0x4265fb60] CE - > rserverOpen('./jpegencdecCombo.x64P'), count = 0 > @0x000d08d3:[T:0x4265fb60] OP - Process_create> > Enter(imageName='./jpegencdecCombo.x64P', attrs=0x4265f558) > > Video Chain Debug: Set the capture input to id 0 > > Video Chain Debug: Control thread created > > Video Chain Debug: OSD successfully initialized > > Video Chain Debug: OSD transparency initialized > > @0x000d2897:[T:0x402c8568] CE - Engine_open('jpegencdec', > 0x0, 0xbefff754) > @0x000d29a9:[T:0x40ac9b60] OP - Process_create_d> > Enter(proc=0x2c2d0) > @0x000d2a57:[T:0x40ac9b60] OP - Process_create_d> > Initializing DSP PROC... > @0x000d32f4:[T:0x40ac9b60] OP - Process_create_d> Attaching > to DSP PROC... > @0x000d39cb:[T:0x40ac9b60] OP - Process_create_d> Opening > MSGQ pool... > @0x000d3caf:[T:0x40ac9b60] OP - Process_create_d> Loading > ./jpegencdecCombo.x64P on DSP (1 args)... > > Video Chain Debug: Entering display main loop. > > @0x000de2a5:[T:0x40ac9b60] OP - Process_create_d> Starting > DSP PROC... > @0x000df040:[T:0x40ac9b60] OP - Process_create_d> Opening > remote transport... > @0x000df2cb:[T:0x40ac9b60] OP - Process_create_d> return (1) > > @0x000df43d:[T:0x4265fb60] OP - Process_create> return > (0x2c2d0) > @0x000df4f5:[T:0x4265fb60] CE - > rserverOpen('./jpegencdecCombo.x64P'): 0x2966c done. > > @0x000df5d9:[T:0x4265fb60] OC - Comm_create> > Enter(queueName='jpegencdec', queue=0x2c2b0, attrs=0x0) > > @0x000df84d:[T:0x4265fb60] OC - Comm_create> return (0x2c338) > > @0x000df91b:[T:0x4265fb60] OC - Comm_alloc> Enter(poolId=0x0, > msg=0x2c2bc, size=576) > > @0x000dfa13:[T:0x4265fb60] OC - Comm_alloc> msg=0x427f6900, > returning (0) > @0x000dfab9:[T:0x4265fb60] OC - Comm_locate> > Enter(queueName='rmsq', queue=0x2c2ac) > > @0x000e1a0f:[T:0x4265fb60] OC - Comm_locate> return (0) > > @0x000e1ad7:[T:0x4265fb60] CE - checkServer(0x2c2a0) > > @0x000e1ba9:[T:0x4265fb60] OC - Comm_put> Enter(queue=0x0, > msg=0x427f6900) > @0x000e1c7e:[T:0x4265fb60] OC - Comm_put> return (0) > > @0x000e1d5b:[T:0x4265fb60] OC - Comm_get> > Enter(queue=0x10000, msg=0x4265f550, timeout=-1) > > @0x000e1e22:[T:0x4265fb60] OC - Comm_get> return (0) > > Video Chain Debug: Codec Engine opened in video thread > > @0x000e1f15:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_create> Enter (server=0x2c2a0, name='jpegenc', > params=0x29378) > @0x000e1ff2:[T:0x4265fb60] CV - VISA_create(0x2c2a0, > 'jpegenc', 0x29378, 0x828, 'ti.sdo.ce.image.IIMGENC') > > @0x000e20e2:[T:0x4265fb60] CE - Engine_createNode(0x2c2a0, > 'jpegenc', 828, 0x29378) > > @0x000e2191:[T:0x4265fb60] OC - Comm_create> > Enter(queueName='gppfromnode', queue=0x2c3c0, attrs=0x0) > > @0x000e23f6:[T:0x4265fb60] OC - Comm_create> return (0x2c3e0) > > @0x000e250b:[T:0x4265fb60] OC - Comm_put> Enter(queue=0x0, > msg=0x427f6900) > @0x000e25f1:[T:0x4265fb60] OC - Comm_put> return (0) > > @0x000e26b2:[T:0x4265fb60] OC - Comm_get> > Enter(queue=0x10000, msg=0x4265f504, timeout=-1) > > @0x000e27c3:[T:0x4265fb60] OC - Comm_get> return (0) > > @0x000e2856:[T:0x4265fb60] OC - Comm_put> Enter(queue=0x0, > msg=0x427f6900) > @0x000e2914:[T:0x4265fb60] OC - Comm_put> return (0) > > @0x000e29e4:[T:0x4265fb60] OC - Comm_get> > Enter(queue=0x10000, msg=0x4265f504, timeout=-1) > > @0x000e2ab0:[T:0x4265fb60] OC - Comm_get> return (0) > > @0x000e2b3a:[T:0x4265fb60] CE - Engine_createNode> created > node(stdIn=0x2, stdOut=0x10001, msgq=0x2c3e0, > algName='jpegenc', rmsNode=0x8fa46480, algHandle=0x8fa46560) > > > @0x000e2c37:[T:0x4265fb60] CE - Engine_createNode> Returning > 0x2c3b8 > @0x00136193:[T:0x4265fb60] OC - Comm_alloc> Enter(poolId=0x0, > msg=0x2c3a4, size=828) > > @0x00136290:[T:0x4265fb60] OC - Comm_alloc> msg=0x427f7900, > returning (0) > @0x00136351:[T:0x4265fb60] CV - VISA_create> remote codec > created (name='jpegenc', localQueueID=0x10001, > remoteQueueID=0x0002) > @0x00136424:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_create> return (0x2c398) > > @0x001364bf:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_control> Enter (handle=0x2c398, id=1, params=0x29358, > status=0x299f4 > @0x0013657d:[T:0x4265fb60] ti.sdo.ce.image.IMGENC - > IMGENC_control> return (-1) > -- FAILED > > Video Chain Debug: Checking video standard > > Video Chain Error: error: can't set dyn params 0x0 > > @0x00136929:[T:0x402c8568] CE - > rserverOpen('./jpegencdecCombo.x64P'), count = 1 > @0x00136a12:[T:0x402c8568] CE - > rserverOpen('./jpegencdecCombo.x64P'): 0x2966c done. > > @0x00136acb:[T:0x402c8568] OC - Comm_create> > Enter(queueName='jpegencdec', queue=0x2c308, attrs=0x0) > > @0x00136e7b:[T:0x402c8568] OC - Comm_create> return (0x2c3f0) > > @0x00136f43:[T:0x402c8568] OC - Comm_alloc> Enter(poolId=0x0, > msg=0x2c314, size=576) > > @0x00137012:[T:0x402c8568] OC - Comm_alloc> msg=0x427f8900, > returning (0) > @0x001370ad:[T:0x402c8568] OC - Comm_locate> > Enter(queueName='rmsq', queue=0x2c304) > > Video Chain Debug: NTSC camera detected > > @0x00139743:[T:0x402c8568] OC - Comm_locate> return (0) > > @0x00139808:[T:0x402c8568] CE - checkServer(0x2c2f8) > > @0x001398ce:[T:0x402c8568] OC - Comm_put> Enter(queue=0x0, > msg=0x427f8900) > @0x0013999d:[T:0x402c8568] OC - Comm_put> return (0) > > @0x00139b2e:[T:0x402c8568] OC - Comm_get> > Enter(queue=0x10002, msg=0xbefff750, timeout=-1) > > @0x00139c08:[T:0x402c8568] OC - Comm_get> return (0) > > Video Chain Debug: Codec Engine opened in control thread > > Video Chain Debug: Setting capture cropping (720x480) > > Capturing 720x480 video (cropped to 720x480) > > Video Chain Debug: 3 capture buffers were successfully > allocated. > Video Chain Debug: Capture driver buffer 0 at physical > address 1116102656 mapped to virtual address 0x86e00000 > > Video Chain Debug: Capture driver buffer 1 at physical > address 1116987392 mapped to virtual address 0x86f00000 > > Video Chain Debug: Capture driver buffer 2 at physical > address 1117872128 mapped to virtual address 0x86400000 > > Video Chain Debug: Video capture initialized and started > > Video Chain Debug: Entering capture main loop. > > Video Chain Debug: MSP430 library initialized > > Video Chain Debug: User interface created > > Command [ 'help' for usage ] > Video Chain Debug: Entering > control main loop. > @0x0016f942:[T:0x402c8568] CE - Engine_close(0x2c2f8) > > @0x0016f9eb:[T:0x402c8568] OC - Comm_free> Enter > (msg=0x427f8900) > @0x0016faa3:[T:0x402c8568] OC - Comm_free> return (0) > > @0x0016fb48:[T:0x402c8568] OC - Comm_delete> Enter > (comm=0x2c3f0) > @0x0016fddb:[T:0x402c8568] OC - Comm_delete> return > > @0x0016fe96:[T:0x402c8568] OC - Comm_release> > Enter(queue=0x0) > @0x0016ff42:[T:0x402c8568] OC - Comm_release> return (0) > > @0x0016ffd0:[T:0x402c8568] CE - rserverClose(0x2966c), count > = 2 > @0x00170059:[T:0x402c8568] CE - rserverClose(0x2966c) done. > > @0x0017057f:[T:0x40ac9b60] OP - daemon> thread terminating > > @0x00170735:[T:0x402c8568] OT - Thread_join> Enter > (task=0x2c0c8) > @0x001707fe:[T:0x402c8568] OT - Thread_join> Exit (task=0x2c0c8) > _______________________________________________ > Davinci-linux-open-source mailing list > Davinci-linux-open-source@linux.davincidsp.com > http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source > _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source