aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'libdce.c')
-rw-r--r--libdce.c90
1 files changed, 40 insertions, 50 deletions
diff --git a/libdce.c b/libdce.c
index 1f2746a..349b6ab 100644
--- a/libdce.c
+++ b/libdce.c
@@ -515,6 +515,7 @@ static XDAS_Int32 process(void *codec, void *inBufs, void *outBufs,
515 515
516#ifdef BUILDOS_ANDROID 516#ifdef BUILDOS_ANDROID
517 int32_t inbuf_offset[MAX_INPUT_BUF]; 517 int32_t inbuf_offset[MAX_INPUT_BUF];
518 int32_t outbuf_offset[MAX_OUTPUT_BUF];
518#endif 519#endif
519 520
520 _ASSERT(codec != NULL, DCE_EINVALID_INPUT); 521 _ASSERT(codec != NULL, DCE_EINVALID_INPUT);
@@ -564,58 +565,44 @@ static XDAS_Int32 process(void *codec, void *inBufs, void *outBufs,
564 for( count = 0, total_count = 0; count < numInBufs; count++, total_count++ ) { 565 for( count = 0, total_count = 0; count < numInBufs; count++, total_count++ ) {
565 if( codec_id == OMAP_DCE_VIDDEC3 ) { 566 if( codec_id == OMAP_DCE_VIDDEC3 ) {
566 data_buf = (void * *)(&(((XDM2_BufDesc *)inBufs)->descs[count].buf)); 567 data_buf = (void * *)(&(((XDM2_BufDesc *)inBufs)->descs[count].buf));
567#ifdef BUILDOS_ANDROID
568 /* the decoder input buffer filled by the parsers, have an offset */
569 /* for the actual data. the offset within the input buffer is provided */
570 /* via memheader offset field. Hence the buf ptr needs to be advanced with the offset */
571 inbuf_offset[count] = P2H(*data_buf)->offset;
572 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX,
573 MmRpc_OFFSET((int32_t)inBufs, (int32_t)data_buf),(size_t)P2H(*data_buf),
574 (size_t)memplugin_share((void *)*data_buf));
575
576 *data_buf += inbuf_offset[count];
577#else
578 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX,
579 MmRpc_OFFSET((int32_t)inBufs, (int32_t)data_buf),
580 (size_t)*data_buf, (size_t)*data_buf);
581#endif
582 } else if( codec_id == OMAP_DCE_VIDENC2 ) { 568 } else if( codec_id == OMAP_DCE_VIDENC2 ) {
583 data_buf = (void * *)(&(((IVIDEO2_BufDesc *)inBufs)->planeDesc[count].buf)); 569 data_buf = (void * *)(&(((IVIDEO2_BufDesc *)inBufs)->planeDesc[count].buf));
584 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX,
585 MmRpc_OFFSET((int32_t)inBufs, (int32_t)data_buf),
586 (size_t)*data_buf, (size_t)*data_buf);
587
588 } else if( codec_id == OMAP_DCE_VIDDEC2 ) { 570 } else if( codec_id == OMAP_DCE_VIDDEC2 ) {
589 data_buf = (void * *)(&(((XDM1_BufDesc *)inBufs)->descs[count].buf)); 571 data_buf = (void * *)(&(((XDM1_BufDesc *)inBufs)->descs[count].buf));
572 }
590#ifdef BUILDOS_ANDROID 573#ifdef BUILDOS_ANDROID
591 /* the decoder input buffer filled by the parsers, have an offset */ 574 inbuf_offset[count] = ((MemHeader*)(*data_buf))->offset;
592 /* for the actual data. the offset within the input buffer is provided */ 575 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX, MmRpc_OFFSET((int32_t)inBufs,
593 /* via memheader offset field. Hence the buf ptr needs to be advanced with the offset */ 576 (int32_t)data_buf), (size_t)(*data_buf),
594 inbuf_offset[count] = P2H(*data_buf)->offset; 577 (size_t)(((MemHeader*)(*data_buf))->dma_buf_fd));
595 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX, 578 *data_buf += inbuf_offset[count];
596 MmRpc_OFFSET((int32_t)inBufs, (int32_t)data_buf),(size_t)P2H(*data_buf),
597 (size_t)memplugin_share((void *)*data_buf));
598
599 *data_buf += inbuf_offset[count];
600#else 579#else
601 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX, 580 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), INBUFS_INDEX,
602 MmRpc_OFFSET((int32_t)inBufs, (int32_t)data_buf), 581 MmRpc_OFFSET((int32_t)inBufs, (int32_t)data_buf),
603 (size_t)*data_buf, (size_t)*data_buf); 582 (size_t)*data_buf, (size_t)*data_buf);
604#endif 583#endif
605 } 584 }
606}
607 585
608 /* Output Buffers */ 586 /* Output Buffers */
609 for( count = 0; count < numOutBufs; count++, total_count++ ) { 587 for( count = 0; count < numOutBufs; count++, total_count++ ) {
610 if(codec_id == OMAP_DCE_VIDENC2 || codec_id == OMAP_DCE_VIDDEC3) { 588 if(codec_id == OMAP_DCE_VIDENC2 || codec_id == OMAP_DCE_VIDDEC3) {
611 if(((XDM2_BufDesc *)outBufs)->descs[LUMA_BUF].buf != ((XDM2_BufDesc *)outBufs)->descs[CHROMA_BUF].buf ) { 589 if(((XDM2_BufDesc *)outBufs)->descs[LUMA_BUF].buf != ((XDM2_BufDesc *)outBufs)->descs[CHROMA_BUF].buf ) {
612 /* Either Encode usecase or MultiPlanar Buffers for Decode usecase */ 590 /* Either Encode usecase or MultiPlanar Buffers for Decode usecase */
613 data_buf = (void * *)(&(((XDM2_BufDesc *)outBufs)->descs[count].buf)); 591 data_buf = (void * *)(&(((XDM2_BufDesc *)outBufs)->descs[count].buf));
614 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), OUTBUFS_INDEX, 592#ifdef BUILDOS_ANDROID
615 MmRpc_OFFSET((int32_t)outBufs, (int32_t)data_buf), 593 outbuf_offset[count] = ((MemHeader*)(*data_buf))->offset;
616 (size_t)*data_buf, (size_t)*data_buf); 594 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), OUTBUFS_INDEX, MmRpc_OFFSET((int32_t)outBufs,
595 (int32_t)data_buf), (size_t)(*data_buf),
596 (size_t)(((MemHeader*)(*data_buf))->dma_buf_fd));
597 *data_buf += outbuf_offset[count];
598
599#else
600 Fill_MmRpc_fxnCtx_Xlt_Array(&(fxnCtx.xltAry[total_count]), OUTBUFS_INDEX,
601 MmRpc_OFFSET((int32_t)outBufs, (int32_t)data_buf),
602 (size_t)*data_buf, (size_t)*data_buf);
603#endif
617 } 604 }
618#if defined(BUILDOS_LINUX) || defined(BUILDOS_ANDROID) 605#if defined(BUILDOS_LINUX)
619 else { 606 else {
620 /* SinglePlanar Buffers for Decode usecase*/ 607 /* SinglePlanar Buffers for Decode usecase*/
621 data_buf = (void * *)(&(((XDM2_BufDesc *)outBufs)->descs[count].buf)); 608 data_buf = (void * *)(&(((XDM2_BufDesc *)outBufs)->descs[count].buf));
@@ -672,15 +659,18 @@ static XDAS_Int32 process(void *codec, void *inBufs, void *outBufs,
672 659
673#ifdef BUILDOS_ANDROID 660#ifdef BUILDOS_ANDROID
674 for( count = 0; count < numInBufs; count++ ) { 661 for( count = 0; count < numInBufs; count++ ) {
675 if( codec_id == OMAP_DCE_VIDDEC3 ) { 662 if( codec_id == OMAP_DCE_VIDDEC3 ) {
676 /* restore the actual buf ptr before returing to the mmf */ 663 /* restore the actual buf ptr before returing to the mmf */
677 data_buf = (void * *)(&(((XDM2_BufDesc *)inBufs)->descs[count].buf)); 664 data_buf = (void * *)(&(((XDM2_BufDesc *)inBufs)->descs[count].buf));
678 *data_buf -= inbuf_offset[count]; 665 } else if( codec_id == OMAP_DCE_VIDDEC2 ) {
679 } else if( codec_id == OMAP_DCE_VIDDEC2 ) { 666 /* restore the actual buf ptr before returing to the mmf */
680 /* restore the actual buf ptr before returing to the mmf */ 667 data_buf = (void * *)(&(((XDM1_BufDesc *)inBufs)->descs[count].buf));
681 data_buf = (void * *)(&(((XDM1_BufDesc *)inBufs)->descs[count].buf)); 668 }
682 *data_buf -= inbuf_offset[count]; 669 *data_buf -= inbuf_offset[count];
683 } 670 }
671 for (count = 0; count < numOutBufs; count++){
672 data_buf = (void * *)(&(((XDM2_BufDesc *)outBufs)->descs[count].buf));
673 *data_buf -= outbuf_offset[count];
684 } 674 }
685#endif 675#endif
686 676