I'm writing a program that uses TI h.264 encoder. The problem is that VIDENC1_process fails and I cannot understand why. The output I have is
15,798,475us: [+0 T:0x41e5e490] ti.sdo.ce.video1.VIDENC1 - VIDENC1_process> Enter (handle=0x4ed78, inBufs=0x41e5db38, outBufs=0x41e5ddf4, inArgs=0x41e5de00, outArgs=0x41e5dca4)
@15,798,682us: [+0 T:0x41e5e490] ti.sdo.ce.video1.VIDENC1 - VIDENC1_process> Exit (handle=0x4ed78, retVal=0xffffffff)
which is meaningless to me.
I'm using MVL 5.0, and in kernel 2.6.18 it's impossible to use USERPTR to provider memory-aligned buffers to the video driver, so after having studied some examples, I used the following code:
memset (&in_buf, 0, sizeof (IVIDEO1_BufDescIn));
in_buf.numBufs = 1;
in_buf.frameWidth = 720;
in_buf.frameHeight = 576;
in_buf.framePitch = 720;
in_buf.bufDesc[0].buf = buffers[buf.index].start;
in_buf.bufDesc[0].bufSize = 576 * 720 * 2;
status = VIDENC1_control (video_enc, XDM_GETBUFINFO, (IVIDENC1_DynamicParams*) &dynamic_video_params, &enc_status);
XDM_BufDesc outputBufDesc;
XDAS_Int8 * pOutputBuf[XDM_MAX_IO_BUFFERS];
XDAS_Int32 pOutputBufSize[XDM_MAX_IO_BUFFERS];
outputBufDesc.bufs = (XDAS_Int8 **) pOutputBuf;
outputBufDesc.bufSizes = pOutputBufSize;
outputBufDesc.numBufs = enc_status.bufInfo.minNumOutBufs;
outputBufDesc.bufs[0] = malloc (1024*1024);
outputBufDesc.bufSizes[0] = enc_status.bufInfo.minOutBufSize[0];
int ii;
for (ii = 0 ; ii < (enc_status.bufInfo.minNumOutBufs -1) ; ii++)
{
outputBufDesc.bufs[ii+1] = outputBufDesc.bufs[ii] + enc_status.bufInfo.minOutBufSize[ii];
outputBufDesc.bufSizes[ii+1] = enc_status.bufInfo.minOutBufSize[ii+1];
}
status = VIDENC1_process (video_enc, &in_buf, &outputBufDesc, (IVIDENC1_InArgs*) &in_args, (IVIDENC1_OutArgs*) &out_args);
I suspect it's an alignment problem, but I'm not sure. Can you give me a hint please?