diff options
author | buddy.liong | 2013-11-12 16:02:28 -0600 |
---|---|---|
committer | buddy.liong | 2013-11-15 16:26:38 -0600 |
commit | 2f4b8635e4c6717dfe963ea6d43d5aff000b0e12 (patch) | |
tree | 9638a0a2231f7796c3f6fe543ed6954d01049e4f /test_qnx/dce_enc_test | |
parent | 88e44817f587050b9bcd4f241f8ea10483fc2cf6 (diff) | |
download | hardware-ti-libdce-2f4b8635e4c6717dfe963ea6d43d5aff000b0e12.tar.gz hardware-ti-libdce-2f4b8635e4c6717dfe963ea6d43d5aff000b0e12.tar.xz hardware-ti-libdce-2f4b8635e4c6717dfe963ea6d43d5aff000b0e12.zip |
[LIBDCE] Add non-TILER output buffer for dce_enc_test
Internal reference: DVT OMAPS00302160
To add capability for the QNX dce_enc_test to use buffer
allocated through shmallocator instead of TILER memory on
the output buffer.
For input buffer, based on the TI encoder codec user guide
document, it must be configured as 2D TILER buffer.
Change-Id: I0cdda0ff1ddc607f9df41172bc45b6cf3010b95f
Signed-off-by: buddy.liong <buddy.budiono@ti.com>
Diffstat (limited to 'test_qnx/dce_enc_test')
-rw-r--r-- | test_qnx/dce_enc_test/dce_enc_test.c | 232 |
1 files changed, 108 insertions, 124 deletions
diff --git a/test_qnx/dce_enc_test/dce_enc_test.c b/test_qnx/dce_enc_test/dce_enc_test.c index b3a2594..dabba7a 100644 --- a/test_qnx/dce_enc_test/dce_enc_test.c +++ b/test_qnx/dce_enc_test/dce_enc_test.c | |||
@@ -50,6 +50,8 @@ | |||
50 | #include <ti/sdo/codecs/h264enc/ih264enc.h> | 50 | #include <ti/sdo/codecs/h264enc/ih264enc.h> |
51 | #include <ti/sdo/codecs/mpeg4enc/impeg4enc.h> | 51 | #include <ti/sdo/codecs/mpeg4enc/impeg4enc.h> |
52 | 52 | ||
53 | #include "ti/shmemallocator/SharedMemoryAllocatorUsr.h" | ||
54 | |||
53 | 55 | ||
54 | #define OMAP5 | 56 | #define OMAP5 |
55 | 57 | ||
@@ -69,12 +71,9 @@ | |||
69 | /* align x to next highest multiple of 2^n */ | 71 | /* align x to next highest multiple of 2^n */ |
70 | #define ALIGN2(x, n) (((x) + ((1 << (n)) - 1)) & ~((1 << (n)) - 1)) | 72 | #define ALIGN2(x, n) (((x) + ((1 << (n)) - 1)) & ~((1 << (n)) - 1)) |
71 | 73 | ||
72 | // Profile the init and decode calls | 74 | // Profile the init and encode calls |
73 | //#define PROFILE_TIME | 75 | //#define PROFILE_TIME |
74 | 76 | ||
75 | // NON-TILER OUTPUT configuration | ||
76 | //#define NON_TILER_OUTPUT | ||
77 | |||
78 | enum { | 77 | enum { |
79 | IVAHD_H264_ENCODE, | 78 | IVAHD_H264_ENCODE, |
80 | IVAHD_MPEG4_ENCODE, | 79 | IVAHD_MPEG4_ENCODE, |
@@ -158,52 +157,7 @@ static void *tiler_alloc(int width, int height) | |||
158 | return (bufPtr); | 157 | return (bufPtr); |
159 | } | 158 | } |
160 | 159 | ||
161 | #ifdef NON_TILER_OUTPUT | 160 | static int allocate_nonTiler(shm_buf* shmBuf, int size) |
162 | static XDAS_Int16 | ||
163 | get_mem_type (SSPtr paddr) | ||
164 | { | ||
165 | if((0x60000000 <= paddr) && (paddr < 0x68000000)) { | ||
166 | return (XDM_MEMTYPE_TILED8); | ||
167 | } | ||
168 | if((0x68000000 <= paddr) && (paddr < 0x70000000)) { | ||
169 | return (XDM_MEMTYPE_TILED16); | ||
170 | } | ||
171 | if((0x70000000 <= paddr) && (paddr < 0x78000000)) { | ||
172 | return (XDM_MEMTYPE_TILED32); | ||
173 | } | ||
174 | if((0x78000000 <= paddr) && (paddr < 0x80000000)) { | ||
175 | return (XDM_MEMTYPE_RAW); | ||
176 | } | ||
177 | return (-1); | ||
178 | } | ||
179 | |||
180 | /*! @brief Start address of DDR region for 1GB RAM */ | ||
181 | #define DDR_1G_ADDRESS_START 0x80000000 | ||
182 | /*! @brief End address of DDR region for 1GB RAM */ | ||
183 | #define DDR_1G_ADDRESS_END 0xBFFFFFFF | ||
184 | #define DDR_1G_DUCATI_OFFSET 0x40000000 | ||
185 | |||
186 | /*! @brief Start address of DDR region for 2GB RAM */ | ||
187 | #define DDR_2G_ADDRESS_START 0xC0000000 | ||
188 | /*! @brief End address of DDR region for 2GB RAM */ | ||
189 | #define DDR_2G_ADDRESS_END 0xFFFFFFFF | ||
190 | #define DDR_2G_DUCATI_OFFSET 0xA0000000 | ||
191 | |||
192 | static Int | ||
193 | SysLinkMemUtils_translateAddr (UInt32 physAddr) | ||
194 | { | ||
195 | Int ret = 0; | ||
196 | |||
197 | if( physAddr >= DDR_1G_ADDRESS_START && physAddr <= DDR_1G_ADDRESS_END ) { | ||
198 | ret = physAddr + DDR_1G_DUCATI_OFFSET; | ||
199 | } else if( physAddr >= DDR_2G_ADDRESS_START && physAddr <= DDR_2G_ADDRESS_END ) { | ||
200 | ret = physAddr - DDR_2G_DUCATI_OFFSET; | ||
201 | } | ||
202 | |||
203 | return (ret); | ||
204 | } | ||
205 | |||
206 | static void *output_allocate_nonTiler(int size) | ||
207 | { | 161 | { |
208 | DEBUG(" ----------------- create nonTILER size %d --------------------", size); | 162 | DEBUG(" ----------------- create nonTILER size %d --------------------", size); |
209 | 163 | ||
@@ -212,39 +166,36 @@ static void *output_allocate_nonTiler(int size) | |||
212 | int32_t ret, len = 0; | 166 | int32_t ret, len = 0; |
213 | int64_t paddr = 0; | 167 | int64_t paddr = 0; |
214 | 168 | ||
215 | vaddr = mmap64(0, size, PROT_NOCACHE | PROT_READ | PROT_WRITE, MAP_ANON | MAP_PHYS | MAP_SHARED, NOFD, 0); | 169 | ret = SHM_alloc(size, shmBuf); |
216 | if( vaddr == MAP_FAILED ) { | 170 | if( ret < 0 ) { |
217 | ERROR("Failed to do memory mapping\n"); | 171 | ERROR("Failed to alloc shmem buffer\n"); |
218 | return (NULL); | 172 | return (-ENOMEM); |
219 | } | 173 | } |
174 | vaddr = (uint64_t *) shmBuf->vir_addr; | ||
175 | |||
176 | DEBUG("nonTILER shmBuf->vir_addr =%08x, shmBuf->phy_addr =%08x ", (unsigned int) shmBuf->vir_addr, (unsigned int) shmBuf->phy_addr); | ||
220 | 177 | ||
221 | // Make sure the memory is contiguous | ||
222 | ret = mem_offset64(vaddr, NOFD, (size_t) size, &paddr, (size_t *) &len); | 178 | ret = mem_offset64(vaddr, NOFD, (size_t) size, &paddr, (size_t *) &len); |
223 | if( ret ) { | 179 | if( ret ) { |
224 | ERROR("Failed to check memory contiguous ret %d errno %d\n", ret, errno); | 180 | ERROR("Failed to check memory contiguous ret %d errno %d\n", ret, errno); |
225 | munmap(vaddr, size); | 181 | SHM_release(shmBuf); |
226 | return (NULL); | 182 | return (-ENOMEM); |
227 | } else if( len != (size)) { | 183 | } else if( len != (size)) { |
228 | ERROR("Failed to check len %d != %d\n", len, size); | 184 | ERROR("Failed to check len %d != %d\n", len, size); |
229 | munmap(vaddr, size); | 185 | SHM_release(shmBuf); |
230 | return (NULL); | 186 | return (-ENOMEM); |
231 | } | 187 | } |
232 | 188 | ||
233 | DEBUG("nonTILER buf virtual address =%08x, paddr=%08x return %08x", vaddr, (unsigned int) TilerMem_VirtToPhys(vaddr), SysLinkMemUtils_translateAddr(TilerMem_VirtToPhys(vaddr))); | 189 | DEBUG("shmBuf %p", shmBuf); |
234 | 190 | return 0; | |
235 | // TODO: For IPC 3.x we need to return the virtual address instead of the physical address. | ||
236 | // return (void*) vaddr; | ||
237 | return ((void *) SysLinkMemUtils_translateAddr(TilerMem_VirtToPhys(vaddr))); | ||
238 | |||
239 | } | 191 | } |
240 | 192 | ||
241 | static void output_enc_free(void *vaddr, int size) | 193 | static void free_nonTiler(void *shmBuf) |
242 | { | 194 | { |
243 | munmap(vaddr, size); | 195 | DEBUG("shmBuf %p", shmBuf); |
196 | SHM_release(shmBuf); | ||
244 | } | 197 | } |
245 | 198 | ||
246 | #endif | ||
247 | |||
248 | /* ************************************************************************* */ | 199 | /* ************************************************************************* */ |
249 | /* utilities to allocate/manage 2d input buffers */ | 200 | /* utilities to allocate/manage 2d input buffers */ |
250 | 201 | ||
@@ -377,13 +328,15 @@ uint64_t mark_microsecond(uint64_t *last) | |||
377 | 328 | ||
378 | #endif | 329 | #endif |
379 | 330 | ||
380 | /* decoder body */ | 331 | /* encoder body */ |
381 | int main(int argc, char * *argv) | 332 | int main(int argc, char * *argv) |
382 | { | 333 | { |
383 | Engine_Error ec; | 334 | Engine_Error ec; |
384 | XDAS_Int32 err; | 335 | XDAS_Int32 err; |
385 | char *output = NULL; | 336 | char *output = NULL; |
386 | char *output_mvbuf = NULL; | 337 | char *output_mvbuf = NULL; |
338 | shm_buf output_mvbuf_nonTiler; | ||
339 | shm_buf output_nonTiler; | ||
387 | int output_size = 0; | 340 | int output_size = 0; |
388 | int mvbufinfo_size = 0; | 341 | int mvbufinfo_size = 0; |
389 | char *in_pattern, *out_pattern; | 342 | char *in_pattern, *out_pattern; |
@@ -396,6 +349,7 @@ int main(int argc, char * *argv) | |||
396 | int eof = 0; | 349 | int eof = 0; |
397 | int ivahd_encode_type; | 350 | int ivahd_encode_type; |
398 | char vid_codec[10]; | 351 | char vid_codec[10]; |
352 | char tilerbuffer[10]; | ||
399 | unsigned int codec_switch = 0; | 353 | unsigned int codec_switch = 0; |
400 | int bytesGenerated = 0; | 354 | int bytesGenerated = 0; |
401 | int frames_to_write = 0; | 355 | int frames_to_write = 0; |
@@ -424,11 +378,11 @@ int main(int argc, char * *argv) | |||
424 | oned = FALSE; | 378 | oned = FALSE; |
425 | } | 379 | } |
426 | 380 | ||
427 | if( argc != 9 ) { | 381 | if( argc != 10 ) { |
428 | printf("usage: %s width height frames_to_write inpattern outpattern codec baseline/high level\n", argv[0]); | 382 | printf("usage: %s width height frames_to_write inpattern outpattern codec baseline/high level buffertype\n", argv[0]); |
429 | printf("example: %s 1920 1088 300 in.yuv out.h264 h264 baseline 10\n", argv[0]); | 383 | printf("example: %s 1920 1088 300 in.yuv out.h264 h264 baseline 10 tiler\n", argv[0]); |
430 | printf("example: %s 176 144 300 in.yuv out.m4v mpeg4 simple/baseline 0\n", argv[0]); | 384 | printf("example: %s 176 144 300 in.yuv out.m4v mpeg4 simple/baseline 0 non-tiler\n", argv[0]); |
431 | printf("example: %s 176 144 300 in.yuv out.m4v h263 simple/baseline 0\n", argv[0]); | 385 | printf("example: %s 176 144 300 in.yuv out.m4v h263 simple/baseline 0 tiler\n", argv[0]); |
432 | printf("Currently supported codecs: h264 or mpeg4 or h263\n"); | 386 | printf("Currently supported codecs: h264 or mpeg4 or h263\n"); |
433 | printf("Run this command for help on the use case: use dce_enc_test\n"); | 387 | printf("Run this command for help on the use case: use dce_enc_test\n"); |
434 | return (1); | 388 | return (1); |
@@ -442,8 +396,10 @@ int main(int argc, char * *argv) | |||
442 | strcpy(vid_codec, argv[6]); | 396 | strcpy(vid_codec, argv[6]); |
443 | strcpy(profile, argv[7]); | 397 | strcpy(profile, argv[7]); |
444 | level = atoi(argv[8]); | 398 | level = atoi(argv[8]); |
399 | strcpy(tilerbuffer, argv[9]); | ||
445 | 400 | ||
446 | printf("Selected codec: %s\n", vid_codec); | 401 | printf("Selected codec: %s\n", vid_codec); |
402 | printf("Selected buffer: %s\n", tilerbuffer); | ||
447 | 403 | ||
448 | enum { | 404 | enum { |
449 | DCE_ENC_TEST_H264 = 1, | 405 | DCE_ENC_TEST_H264 = 1, |
@@ -451,6 +407,10 @@ int main(int argc, char * *argv) | |||
451 | DCE_ENC_TEST_H263 = 3 | 407 | DCE_ENC_TEST_H263 = 3 |
452 | }; | 408 | }; |
453 | 409 | ||
410 | /* | ||
411 | * Configuration based on the input parameters | ||
412 | */ | ||
413 | |||
454 | if((!(strcmp(vid_codec, "h264")))) { | 414 | if((!(strcmp(vid_codec, "h264")))) { |
455 | ivahd_encode_type = IVAHD_H264_ENCODE; | 415 | ivahd_encode_type = IVAHD_H264_ENCODE; |
456 | codec_switch = DCE_ENC_TEST_H264; | 416 | codec_switch = DCE_ENC_TEST_H264; |
@@ -576,6 +536,9 @@ int main(int argc, char * *argv) | |||
576 | 536 | ||
577 | DEBUG("Engine_open successful engine=%p", engine); | 537 | DEBUG("Engine_open successful engine=%p", engine); |
578 | 538 | ||
539 | /* | ||
540 | * inBufs handling | ||
541 | */ | ||
579 | DEBUG("input buffer configuration width %d height %d", width, height); | 542 | DEBUG("input buffer configuration width %d height %d", width, height); |
580 | inBufs = dce_alloc(sizeof(IVIDEO2_BufDesc)); | 543 | inBufs = dce_alloc(sizeof(IVIDEO2_BufDesc)); |
581 | 544 | ||
@@ -594,14 +557,6 @@ int main(int argc, char * *argv) | |||
594 | inBufs->topFieldFirstFlag = 0; //Only valid for interlace content. | 557 | inBufs->topFieldFirstFlag = 0; //Only valid for interlace content. |
595 | inBufs->contentType = IVIDEO_PROGRESSIVE; | 558 | inBufs->contentType = IVIDEO_PROGRESSIVE; |
596 | 559 | ||
597 | // NOTE: FOR INTERLACED. | ||
598 | // For contentType = IVIDEO_INTERLACED | ||
599 | // inBufs->contentType = IVIDEO_INTERLACED; | ||
600 | // inBufs->dataLayout = IVIDEO_FIELD_SEPARATED; | ||
601 | // if stereoInfoPreset == IH264_STEREOINFO_DISABLE then | ||
602 | // inBufs->activeFrameRegion.bottomRight.y = height / 2; | ||
603 | // inBufs->imageRegion.bottomRight.y = height / 2; | ||
604 | |||
605 | inBufs->activeFrameRegion.topLeft.x = 0; | 560 | inBufs->activeFrameRegion.topLeft.x = 0; |
606 | inBufs->activeFrameRegion.topLeft.y = 0; | 561 | inBufs->activeFrameRegion.topLeft.y = 0; |
607 | inBufs->activeFrameRegion.bottomRight.x = width; | 562 | inBufs->activeFrameRegion.bottomRight.x = width; |
@@ -625,13 +580,12 @@ int main(int argc, char * *argv) | |||
625 | inBufs->planeDesc[1].bufSize.tileMem.width = width; /* UV interleaved width is same a Y */ | 580 | inBufs->planeDesc[1].bufSize.tileMem.width = width; /* UV interleaved width is same a Y */ |
626 | inBufs->planeDesc[1].bufSize.tileMem.height = height / 2; | 581 | inBufs->planeDesc[1].bufSize.tileMem.height = height / 2; |
627 | 582 | ||
583 | // INPUT BUFFER MUST BE TILED NV12. Encoder codec doesn't support non TILED input buffer. | ||
628 | buf = calloc(sizeof(InputBuffer), 1); | 584 | buf = calloc(sizeof(InputBuffer), 1); |
629 | DEBUG(" ----------------- create INPUT TILER buf 0x%x --------------------", (unsigned int)buf); | 585 | DEBUG(" ----------------- create INPUT TILER buf 0x%x --------------------", (unsigned int)buf); |
630 | buf->buf = tiler_alloc(width, height); | 586 | buf->buf = tiler_alloc(width, height); |
631 | if( buf->buf ) { | 587 | if( buf->buf ) { |
632 | //buf->y = TilerMem_VirtToPhys(buf->buf); | ||
633 | buf->y = (SSPtr)buf->buf; | 588 | buf->y = (SSPtr)buf->buf; |
634 | //buf->uv = TilerMem_VirtToPhys(buf->buf + (height * 4096)); | ||
635 | buf->uv = (SSPtr)buf->buf + (height * 4096); | 589 | buf->uv = (SSPtr)buf->buf + (height * 4096); |
636 | 590 | ||
637 | DEBUG("INPUT TILER buf=%p, buf->buf=%p y=%08x, uv=%08x", buf, buf->buf, buf->y, buf->uv); | 591 | DEBUG("INPUT TILER buf=%p, buf->buf=%p y=%08x, uv=%08x", buf, buf->buf, buf->y, buf->uv); |
@@ -647,6 +601,9 @@ int main(int argc, char * *argv) | |||
647 | 601 | ||
648 | DEBUG("input buffer configuration num_buffers %d width %d height %d", num_buffers, width, height); | 602 | DEBUG("input buffer configuration num_buffers %d width %d height %d", num_buffers, width, height); |
649 | 603 | ||
604 | /* | ||
605 | * inArgs and outArgs configuration for static parameter passed during codec creation. | ||
606 | */ | ||
650 | switch( codec_switch ) { | 607 | switch( codec_switch ) { |
651 | case DCE_ENC_TEST_H264 : | 608 | case DCE_ENC_TEST_H264 : |
652 | inArgs = dce_alloc(sizeof(IH264ENC_InArgs)); | 609 | inArgs = dce_alloc(sizeof(IH264ENC_InArgs)); |
@@ -944,6 +901,9 @@ int main(int argc, char * *argv) | |||
944 | 901 | ||
945 | DEBUG("VIDENC2_create successful codec=%p", codec); | 902 | DEBUG("VIDENC2_create successful codec=%p", codec); |
946 | 903 | ||
904 | /* | ||
905 | * inArgs and outArgs configuration for dynamic parameter passed during codec control. | ||
906 | */ | ||
947 | switch( codec_switch ) { | 907 | switch( codec_switch ) { |
948 | case DCE_ENC_TEST_H264 : | 908 | case DCE_ENC_TEST_H264 : |
949 | dynParams = dce_alloc(sizeof(IH264ENC_DynamicParams)); | 909 | dynParams = dce_alloc(sizeof(IH264ENC_DynamicParams)); |
@@ -1122,40 +1082,60 @@ int main(int argc, char * *argv) | |||
1122 | err = VIDENC2_control(codec, XDM_GETBUFINFO, dynParams, status); | 1082 | err = VIDENC2_control(codec, XDM_GETBUFINFO, dynParams, status); |
1123 | DEBUG("VIDENC2_control - XDM_GETBUFINFO err %d status numOutBuf %d OutBufSize %d MVBufInfo %d", err, status->bufInfo.minNumOutBufs, status->bufInfo.minOutBufSize[0].bytes, status->bufInfo.minOutBufSize[1].bytes); | 1083 | DEBUG("VIDENC2_control - XDM_GETBUFINFO err %d status numOutBuf %d OutBufSize %d MVBufInfo %d", err, status->bufInfo.minNumOutBufs, status->bufInfo.minOutBufSize[0].bytes, status->bufInfo.minOutBufSize[1].bytes); |
1124 | 1084 | ||
1085 | /* | ||
1086 | * outBufs handling | ||
1087 | */ | ||
1125 | outBufs = dce_alloc(sizeof(XDM2_BufDesc)); | 1088 | outBufs = dce_alloc(sizeof(XDM2_BufDesc)); |
1126 | output_size = status->bufInfo.minOutBufSize[0].bytes; | 1089 | output_size = status->bufInfo.minOutBufSize[0].bytes; |
1127 | mvbufinfo_size = status->bufInfo.minOutBufSize[1].bytes; | 1090 | mvbufinfo_size = status->bufInfo.minOutBufSize[1].bytes; |
1128 | 1091 | ||
1129 | DEBUG("Output allocate through tiler 1D"); | 1092 | if (codec_switch == DCE_ENC_TEST_H264) { |
1130 | if( codec_switch == DCE_ENC_TEST_H264 ) { | ||
1131 | outBufs->numBufs = status->bufInfo.minNumOutBufs; // this value is 1 | 1093 | outBufs->numBufs = status->bufInfo.minNumOutBufs; // this value is 1 |
1132 | } else if( codec_switch == DCE_ENC_TEST_MPEG4 || codec_switch == DCE_ENC_TEST_H263 ) { | 1094 | } else if( codec_switch == DCE_ENC_TEST_MPEG4 || codec_switch == DCE_ENC_TEST_H263 ) { |
1133 | outBufs->numBufs = 1; | 1095 | outBufs->numBufs = 1; |
1134 | } | 1096 | } |
1135 | output = tiler_alloc(output_size, 0); | ||
1136 | #ifdef NON_TILER_OUTPUT | ||
1137 | output = output_allocate_nonTiler(output_size); | ||
1138 | #endif | ||
1139 | //outBufs->descs[0].buf = (XDAS_Int8 *)TilerMem_VirtToPhys(output); | ||
1140 | outBufs->descs[0].buf = (XDAS_Int8 *)output; | ||
1141 | 1097 | ||
1098 | if( !(strcmp(tilerbuffer, "tiler"))) { | ||
1099 | DEBUG("Output allocate through TILER 1D"); | ||
1100 | tiler = 1; | ||
1101 | output = tiler_alloc(output_size, 0); | ||
1102 | |||
1103 | } else { | ||
1104 | DEBUG("Output allocate through NON-TILER"); | ||
1105 | tiler = 0; | ||
1106 | err = allocate_nonTiler(&output_nonTiler, output_size); | ||
1107 | if( err < 0 ) { | ||
1108 | ERROR("fail: %d", err); | ||
1109 | goto shutdown; | ||
1110 | } | ||
1111 | output = (char*) output_nonTiler.vir_addr; | ||
1112 | } | ||
1113 | |||
1114 | outBufs->descs[0].buf = (XDAS_Int8 *)output; | ||
1142 | outBufs->descs[0].memType = XDM_MEMTYPE_RAW; | 1115 | outBufs->descs[0].memType = XDM_MEMTYPE_RAW; |
1143 | outBufs->descs[0].bufSize.bytes = output_size; | 1116 | outBufs->descs[0].bufSize.bytes = output_size; |
1144 | 1117 | ||
1145 | DEBUG("outBufs->descs[0].buf %p output %p", outBufs->descs[0].buf, output); | 1118 | DEBUG("Is TILER %d outBufs->descs[0].buf %p output %p output_nonTiler %p mvbufinfo_size %d", tiler, outBufs->descs[0].buf, output, &output_nonTiler, mvbufinfo_size); |
1146 | |||
1147 | if(mvbufinfo_size > 0){ | ||
1148 | #ifdef NON_TILER_OUTPUT | ||
1149 | output_mvbuf = output_allocate_nonTiler(mvbufinfo_size); | ||
1150 | #endif | ||
1151 | 1119 | ||
1152 | output_mvbuf = tiler_alloc(mvbufinfo_size, 0); | 1120 | if (mvbufinfo_size > 0) { |
1121 | if (tiler) { | ||
1122 | output_mvbuf = tiler_alloc(mvbufinfo_size, 0); | ||
1123 | DEBUG("MVBufInfo: TILER outBufs->descs[1].buf %p output_mvbuf %p", outBufs->descs[1].buf, output_mvbuf); | ||
1124 | } | ||
1125 | else { | ||
1126 | err = allocate_nonTiler(&output_mvbuf_nonTiler, mvbufinfo_size); | ||
1127 | if( err < 0 ) { | ||
1128 | ERROR("fail: %d", err); | ||
1129 | goto shutdown; | ||
1130 | } | ||
1131 | output_mvbuf = (char*) output_mvbuf_nonTiler.vir_addr; | ||
1132 | DEBUG("MVBufInfo: NON-TILER outBufs->descs[1].buf %p output_mvbuf %p", outBufs->descs[1].buf, output_mvbuf); | ||
1133 | } | ||
1153 | outBufs->descs[1].buf = (XDAS_Int8 *)output_mvbuf; | 1134 | outBufs->descs[1].buf = (XDAS_Int8 *)output_mvbuf; |
1154 | |||
1155 | outBufs->descs[1].memType = XDM_MEMTYPE_RAW; | 1135 | outBufs->descs[1].memType = XDM_MEMTYPE_RAW; |
1156 | outBufs->descs[1].bufSize.bytes = mvbufinfo_size; | 1136 | outBufs->descs[1].bufSize.bytes = mvbufinfo_size; |
1157 | DEBUG("MVBufInfo: outBufs->descs[1].buf %p output_mvbuf %p", outBufs->descs[1].buf, output_mvbuf); | ||
1158 | } | 1137 | } |
1138 | DEBUG("output_mvbuf %p output_mvbuf_nonTiler %p", output_mvbuf, &output_mvbuf_nonTiler); | ||
1159 | 1139 | ||
1160 | #ifdef DUMPINPUTDATA | 1140 | #ifdef DUMPINPUTDATA |
1161 | char Buff1[100]; | 1141 | char Buff1[100]; |
@@ -1167,7 +1147,9 @@ int main(int argc, char * *argv) | |||
1167 | INFO("total_init_time %llu output_alloc_time %llu actual init time in: %lld us", total_init_time, output_alloc_time, total_init_time - output_alloc_time); | 1147 | INFO("total_init_time %llu output_alloc_time %llu actual init time in: %lld us", total_init_time, output_alloc_time, total_init_time - output_alloc_time); |
1168 | #endif | 1148 | #endif |
1169 | 1149 | ||
1170 | // Handling codec_config | 1150 | /* |
1151 | * codec process | ||
1152 | */ | ||
1171 | while( inBufs->numPlanes && outBufs->numBufs ) { | 1153 | while( inBufs->numPlanes && outBufs->numBufs ) { |
1172 | int n; | 1154 | int n; |
1173 | DEBUG("Looping on reading input inBufs->numPlanes %d outBufs->numBufs %d", inBufs->numPlanes, outBufs->numBufs); | 1155 | DEBUG("Looping on reading input inBufs->numPlanes %d outBufs->numBufs %d", inBufs->numPlanes, outBufs->numBufs); |
@@ -1175,7 +1157,6 @@ int main(int argc, char * *argv) | |||
1175 | //Read the NV12 frame to input buffer to be encoded. | 1157 | //Read the NV12 frame to input buffer to be encoded. |
1176 | n = read_input(in_pattern, in_cnt, buf->buf); | 1158 | n = read_input(in_pattern, in_cnt, buf->buf); |
1177 | 1159 | ||
1178 | |||
1179 | if( n && (n != -1)) { | 1160 | if( n && (n != -1)) { |
1180 | eof = 0; | 1161 | eof = 0; |
1181 | inBufs->planeDesc[0].buf = (XDAS_Int8 *)buf->y; | 1162 | inBufs->planeDesc[0].buf = (XDAS_Int8 *)buf->y; |
@@ -1230,7 +1211,9 @@ int main(int argc, char * *argv) | |||
1230 | } else if( codec_switch == DCE_ENC_TEST_MPEG4 || codec_switch == DCE_ENC_TEST_H263 ) { | 1211 | } else if( codec_switch == DCE_ENC_TEST_MPEG4 || codec_switch == DCE_ENC_TEST_H263 ) { |
1231 | mpeg4enc_inArgs = (IMPEG4ENC_InArgs *) inArgs; | 1212 | mpeg4enc_inArgs = (IMPEG4ENC_InArgs *) inArgs; |
1232 | } | 1213 | } |
1214 | inBufs->planeDesc[0].buf = NULL; | ||
1233 | inBufs->planeDesc[0].bufSize.bytes = 0; | 1215 | inBufs->planeDesc[0].bufSize.bytes = 0; |
1216 | inBufs->planeDesc[1].buf = NULL; | ||
1234 | inBufs->planeDesc[1].bufSize.bytes = 0; | 1217 | inBufs->planeDesc[1].bufSize.bytes = 0; |
1235 | outBufs->descs[0].buf = NULL; | 1218 | outBufs->descs[0].buf = NULL; |
1236 | outBufs->descs[1].buf = NULL; | 1219 | outBufs->descs[1].buf = NULL; |
@@ -1267,10 +1250,11 @@ int main(int argc, char * *argv) | |||
1267 | } else if( codec_switch == DCE_ENC_TEST_MPEG4 || codec_switch == DCE_ENC_TEST_H263 ) { | 1250 | } else if( codec_switch == DCE_ENC_TEST_MPEG4 || codec_switch == DCE_ENC_TEST_H263 ) { |
1268 | mpeg4enc_inArgs = (IMPEG4ENC_InArgs *) inArgs; | 1251 | mpeg4enc_inArgs = (IMPEG4ENC_InArgs *) inArgs; |
1269 | } | 1252 | } |
1253 | inBufs->planeDesc[0].buf = NULL; | ||
1270 | inBufs->planeDesc[0].bufSize.bytes = 0; | 1254 | inBufs->planeDesc[0].bufSize.bytes = 0; |
1255 | inBufs->planeDesc[1].buf = NULL; | ||
1271 | inBufs->planeDesc[1].bufSize.bytes = 0; | 1256 | inBufs->planeDesc[1].bufSize.bytes = 0; |
1272 | outBufs->descs[0].buf = NULL; | 1257 | outBufs->descs[0].buf = NULL; |
1273 | outBufs->descs[1].buf = NULL; | ||
1274 | } | 1258 | } |
1275 | 1259 | ||
1276 | #ifdef DUMPINPUTDATA | 1260 | #ifdef DUMPINPUTDATA |
@@ -1324,10 +1308,6 @@ int main(int argc, char * *argv) | |||
1324 | codec_process_time = mark_microsecond(NULL); | 1308 | codec_process_time = mark_microsecond(NULL); |
1325 | #endif | 1309 | #endif |
1326 | 1310 | ||
1327 | #if 0 | ||
1328 | err = VIDENC2_process(codec, inBufs, outBufs, inArgs, outArgs); | ||
1329 | #endif | ||
1330 | |||
1331 | if( codec_switch == DCE_ENC_TEST_H264 ) { | 1311 | if( codec_switch == DCE_ENC_TEST_H264 ) { |
1332 | err = VIDENC2_process(codec, inBufs, outBufs, (VIDENC2_InArgs *) h264enc_inArgs, (VIDENC2_OutArgs *) h264enc_outArgs); | 1312 | err = VIDENC2_process(codec, inBufs, outBufs, (VIDENC2_InArgs *) h264enc_inArgs, (VIDENC2_OutArgs *) h264enc_outArgs); |
1333 | DEBUG("[DCE_ENC_TEST] VIDENC2_process - err %d", err); | 1313 | DEBUG("[DCE_ENC_TEST] VIDENC2_process - err %d", err); |
@@ -1469,23 +1449,27 @@ out: | |||
1469 | dce_free(outArgs); | 1449 | dce_free(outArgs); |
1470 | } | 1450 | } |
1471 | 1451 | ||
1472 | printf("\nFreeing output %p...\n", output); | 1452 | printf("\nFreeing output %p... output_mvbuf %p...\n", output, output_mvbuf); |
1473 | if( output ) { | 1453 | if (tiler) { |
1474 | MemMgr_Free(output); | 1454 | if( output ) { |
1475 | } | 1455 | MemMgr_Free(output); |
1476 | if(output_mvbuf){ | 1456 | } |
1477 | printf("\nFreeing output %p...\n", output_mvbuf); | 1457 | |
1478 | MemMgr_Free(output_mvbuf); | 1458 | if( output_mvbuf ){ |
1479 | } | 1459 | printf("\nFreeing output %p...\n", output_mvbuf); |
1480 | #ifdef NON_TILER_OUTPUT | 1460 | MemMgr_Free(output_mvbuf); |
1481 | if( output ) { | 1461 | } |
1482 | output_enc_free(output, output_size); | ||
1483 | } | 1462 | } |
1484 | if(output_mvbuf){ | 1463 | else { |
1485 | printf("\nFreeing mvbuf output %p...\n", output_mvbuf); | 1464 | if( output ) { |
1486 | output_enc_free(output_mvbuf, mvbufinfo_size); | 1465 | printf("\nFreeing output_nonTiler %p...\n", &output_nonTiler); |
1466 | free_nonTiler(&output_nonTiler); | ||
1467 | } | ||
1468 | if( output_mvbuf ){ | ||
1469 | printf("\nFreeing output_mvbuf_nonTiler %p...\n", &output_mvbuf_nonTiler); | ||
1470 | free_nonTiler(&output_mvbuf_nonTiler); | ||
1471 | } | ||
1487 | } | 1472 | } |
1488 | #endif | ||
1489 | 1473 | ||
1490 | printf("\nFreeing buf %p...\n", buf); | 1474 | printf("\nFreeing buf %p...\n", buf); |
1491 | if( buf ) { | 1475 | if( buf ) { |