]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/omapdrmtest.git/blobdiff - yuvcopytest.c
Added buf_lock and buf_unlock APIs in copycodec and yuvcopy test cases.
[glsdk/omapdrmtest.git] / yuvcopytest.c
index 0820accef08762c099c131cbdf44496d9b85476f..5a892e970ea5d27435fac18dfdcd9bc9a55a93e8 100644 (file)
@@ -69,25 +69,32 @@ usage(char *name)
 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 *
@@ -138,9 +145,9 @@ decoder_open(int argc, char** argv)
                 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;
@@ -162,7 +169,7 @@ decoder_open(int argc, char** argv)
         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");
@@ -189,7 +196,7 @@ decoder_open(int argc, char** argv)
          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,
@@ -199,10 +206,10 @@ decoder_open(int argc, char** argv)
         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,
@@ -218,25 +225,26 @@ decoder_open(int argc, char** argv)
       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;
@@ -271,6 +279,7 @@ decoder_process(struct decoder *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);
@@ -281,6 +290,7 @@ decoder_process(struct decoder *decoder)
                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 */
@@ -290,7 +300,7 @@ decoder_process(struct decoder *decoder)
 
         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++){
@@ -314,11 +324,11 @@ main(int argc, char **argv)
 {
     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)