diff --git a/yuvcopytest.c b/yuvcopytest.c
index 0820accef08762c099c131cbdf44496d9b85476f..5a892e970ea5d27435fac18dfdcd9bc9a55a93e8 100644 (file)
--- a/yuvcopytest.c
+++ b/yuvcopytest.c
static void
decoder_close(struct decoder *decoder)
{
+ if(!decoder) goto bailout;
/* free output buffers allocated by display */
disp_free_buffers(decoder->disp,decoder->num_outBuf);
+ if (decoder->params) dsp_dce_free(decoder->params);
+ if (decoder->dynParams) dsp_dce_free(decoder->dynParams);
+ if (decoder->status) dsp_dce_free(decoder->status);
+ if (decoder->inBufs)
+ {
+ dsp_dce_buf_unlock(1, &(decoder->inBufs->descs[0].buf));
+ close(decoder->inBufs->descs[0].buf);
+ dsp_dce_free(decoder->inBufs);
+ }
+ if (decoder->outBufs) dsp_dce_free(decoder->outBufs);
+ if (decoder->inArgs) dsp_dce_free(decoder->inArgs);
+ if (decoder->outArgs) dsp_dce_free(decoder->outArgs);
+ if (decoder->outBuffer) dsp_dce_free(decoder->outBuffer);
+ if (decoder->outBufSizes) dsp_dce_free(decoder->outBufSizes);
+ if (decoder->input_bo) omap_bo_del(decoder->input_bo);
if (decoder->codec) VIDDEC2_delete(decoder->codec);
if (decoder->engine) Engine_close(decoder->engine);
- if (dev) dce_deinit(dev);
- if (decoder->params) dce_free(decoder->params);
- if (decoder->dynParams) dce_free(decoder->dynParams);
- if (decoder->status) dce_free(decoder->status);
- if (decoder->inBufs) dce_free(decoder->inBufs);
- if (decoder->outBufs) dce_free(decoder->outBufs);
- if (decoder->inArgs) dce_free(decoder->inArgs);
- if (decoder->outArgs) dce_free(decoder->outArgs);
- if (decoder->outBuffer) dce_free(decoder->outBuffer);
- if (decoder->outBufSizes) dce_free(decoder->outBufSizes);
- if (decoder->input_bo) omap_bo_del(decoder->input_bo);
if (decoder->disp) disp_close(decoder->disp);
-
free(decoder);
+bailout:
+ if (dev) dce_deinit(dev);
+
}
static struct decoder *
argv[i] = NULL;
height = atoi(argv[i+1]);
argv[i+1] = NULL;
- }
+ }
}
-
+
MSG("width = %d, height = %d\n", width, height);
if (check_args(argc, argv) || !infile)
goto usage;
decoder->input = omap_bo_map(decoder->input_bo);
decoder->framebuf = disp_get_fb(decoder->disp);
- MSG("Fill input buffer with yuv luma data\n");
+ MSG("Fill input buffer with yuv luma data\n");
{
FILE *fd;
fd = fopen(infile, "rb");
goto fail;
}
- decoder->params = dce_alloc(sizeof(IVIDDEC2_Params));
+ decoder->params = dsp_dce_alloc(sizeof(IVIDDEC2_Params));
decoder->params->size = sizeof(IVIDDEC2_Params);
decoder->codec = VIDDEC2_create(decoder->engine,
goto fail;
}
- decoder->dynParams = dce_alloc(sizeof(IVIDDEC2_DynamicParams));
+ decoder->dynParams = dsp_dce_alloc(sizeof(IVIDDEC2_DynamicParams));
decoder->dynParams->size = sizeof(IVIDDEC2_DynamicParams);
- decoder->status = dce_alloc(sizeof(IVIDDEC2_Status));
+ decoder->status = dsp_dce_alloc(sizeof(IVIDDEC2_Status));
decoder->status->size = sizeof(IVIDDEC2_Status);
err = VIDDEC2_control(decoder->codec, XDM_SETPARAMS,
if (err) {
ERROR("%p: fail: %d", decoder, err);
goto fail;
- }
+ }
- decoder->outBuffer = dce_alloc(sizeof(XDAS_Int8*) * MAX_IO_BUFS);
- decoder->outBufSizes = dce_alloc(sizeof(XDAS_Int32)* MAX_IO_BUFS);
+ decoder->outBuffer = dsp_dce_alloc(sizeof(XDAS_Int8*) * MAX_IO_BUFS);
+ decoder->outBufSizes = dsp_dce_alloc(sizeof(XDAS_Int32)* MAX_IO_BUFS);
- decoder->inBufs = dce_alloc(sizeof(XDM1_BufDesc));
+ decoder->inBufs = dsp_dce_alloc(sizeof(XDM1_BufDesc));
decoder->inBufs->numBufs = 1;
decoder->inBufs->descs[0].buf = (XDAS_Int8 *)omap_bo_dmabuf(decoder->input_bo);
decoder->inBufs->descs[0].bufSize = omap_bo_size(decoder->input_bo);
+ dsp_dce_buf_lock(1, &(decoder->inBufs->descs[0].buf));
- decoder->outBufs = dce_alloc(sizeof(XDM_BufDesc));
+ decoder->outBufs = dsp_dce_alloc(sizeof(XDM_BufDesc));
decoder->outBufs->numBufs = 2;
decoder->outBufs->bufs = (XDAS_Int8**)decoder->outBuffer;
decoder->outBufs->bufSizes = &decoder->outBufSizes[0];
- decoder->inArgs = dce_alloc(sizeof(IVIDDEC2_InArgs));
+ decoder->inArgs = dsp_dce_alloc(sizeof(IVIDDEC2_InArgs));
decoder->inArgs->size = sizeof(IVIDDEC2_InArgs);
- decoder->outArgs = dce_alloc(sizeof(IVIDDEC2_OutArgs));
+ decoder->outArgs = dsp_dce_alloc(sizeof(IVIDDEC2_OutArgs));
decoder->outArgs->size = sizeof(IVIDDEC2_OutArgs);
return decoder;
decoder->outBuffer[0] = buf->fd[0];
decoder->outBuffer[1] = (buf->multiplanar) ? buf->fd[1]:(XDAS_Int8 *)((decoder->outBuffer[0]));
+ dsp_dce_buf_lock(2,&decoder->outBuffer[0]);
decoder->outBufSizes[0] = decoder->padded_width * decoder->padded_height;
decoder->outBufSizes[1] = decoder->padded_width * (decoder->padded_height/2);
ERROR("%p: process returned error: %d", decoder, err);
return -1;
}
+ dsp_dce_buf_unlock(2, &decoder->outBuffer[0]);
disp_post_vid_buffer(decoder->disp, buf, 0, 0, width, height);
/* Display the output buffer for 10 seconds */
src = (char*)decoder->input;
dst = (char*)omap_bo_map(buf->bo[0]);
-
+
MSG("Comparing output buffer with input buffer\n");
for(i = 0; i < decoder->input_sz; i++){
{
struct decoder *decoder = NULL;
int i;
- for (i = 1; i < argc; i++)
+ for (i = 1; i < argc; i++)
if ( !strcmp(argv[i], "--help")) {
usage(argv[0]);
exit(0);
- }
+ }
decoder = decoder_open(argc,argv);
if(decoder)