author | Gong Ke <ke.gong@amlogic.com> | 2017-12-27 05:16:02 (GMT) |
---|---|---|
committer | Gong Ke <ke.gong@amlogic.com> | 2017-12-27 05:16:02 (GMT) |
commit | 719595fd7c520203b820bf30430d624e811b07fb (patch) | |
tree | 8b9204eacf119a270bed5bee837f2a6fb868eed8 | |
parent | c3bbd1484d001920e03de6f70abe3ca7af432dea (diff) | |
download | dvb-719595fd7c520203b820bf30430d624e811b07fb.zip dvb-719595fd7c520203b820bf30430d624e811b07fb.tar.gz dvb-719595fd7c520203b820bf30430d624e811b07fb.tar.bz2 |
am_userdata: fixed h264 fmt cc show error [1/1]
PD# 156679
1. fixed h264 fmt cc show error.
2. get poc io need used before read user data.
Change-Id: Ic4d032fd4ea86d8b91013a6630689e59d844f84f
-rw-r--r--[-rwxr-xr-x] | am_adp/am_userdata/aml/aml.c | 50 | ||||
-rwxr-xr-x | lib32/libam_ver.so | 6 | ||||
-rwxr-xr-x | lib64/libam_ver.so | 5 | ||||
-rwxr-xr-x | libam_ver.so | 4 |
4 files changed, 45 insertions, 20 deletions
diff --git a/am_adp/am_userdata/aml/aml.c b/am_adp/am_userdata/aml/aml.c index 5d57fd8..6735d91 100755..100644 --- a/am_adp/am_userdata/aml/aml.c +++ b/am_adp/am_userdata/aml/aml.c @@ -119,6 +119,21 @@ const AM_USERDATA_Driver_t aml_ud_drv = { .close = aml_close, }; +static void dump_cc_data(char *who, int poc, uint8_t *buff, int size) +{ + int i; + char buf[4096]; + + if (size > 1024) + size = 1024; + for (i=0; i<size; i++) + { + sprintf(buf+i*3, "%02x ", buff[i]); + } + + AM_DEBUG(0, "CC DUMP:who:%s poc: %d :%s", who, poc, buf); +} + static void aml_free_cc_data (AM_CCData *cc) { if (cc->buf) @@ -189,7 +204,7 @@ static void aml_flush_cc_data(AM_USERDATA_Device_t *dev) } } - AM_DEBUG(1, "CC decode:%s", buf); + //AM_DEBUG(1, "CC decode:%s", buf); dev->write_package(dev, cc->buf, cc->size); @@ -211,7 +226,15 @@ static void aml_add_cc_data(AM_USERDATA_Device_t *dev, int poc, int type, uint8_ int left = sizeof(buf), i, pr; if (ud->cc_num >= MAX_CC_NUM) { - aml_flush_cc_data(dev); + //aml_flush_cc_data(dev); + cc = ud->cc_list; + //dump_cc_data("add cc ",cc->poc,cc->buf, cc->size); + dev->write_package(dev, cc->buf, cc->size); + + ud->cc_list = cc->next; + cc->next = ud->free_list; + ud->free_list = cc; + ud->cc_num --; } for (i = 0; i < len; i ++) { @@ -361,7 +384,7 @@ static int aml_process_mpeg_userdata(AM_USERDATA_Device_t *dev, uint8_t *data, i return r; } -static int aml_process_h264_userdata(AM_USERDATA_Device_t *dev, uint8_t *data, int len) +static int aml_process_h264_userdata(AM_USERDATA_Device_t *dev, uint8_t *data, int len, int poc) { AM_UDDrvData *ud = dev->drv_data; int fd = ud->fd; @@ -373,24 +396,22 @@ static int aml_process_h264_userdata(AM_USERDATA_Device_t *dev, uint8_t *data, i if (IS_H264(pd) || IS_DIRECTV(pd) || IS_AVS(pd)) { int hdr = (ud->format == H264_CC_TYPE) ? 3 : 0; int pl; - userdata_poc_info_t poc_block; int r; pd += hdr; pl = 8 + (pd[5] & 0x1f) * 3; - if (pl + hdr > left) + if (pl + hdr > left) { break; + } - memset(&poc_block, 0, sizeof(userdata_poc_info_t)); - ioctl(fd, AMSTREAM_IOC_UD_POC, &poc_block); - - if (poc_block.poc_number == 0) { + //AM_DEBUG(0, "CC poc_number:%x hdr:%d pl:%d", poc, hdr, pl); + if (poc == 0) { aml_flush_cc_data(dev); } - - aml_add_cc_data(dev, poc_block.poc_number, I_TYPE, pd, pl); + //dump_cc_data("process h264:", poc, pd, pl); + aml_add_cc_data(dev, poc, I_TYPE, pd, pl); pd += pl; left -= pl + hdr; @@ -421,12 +442,17 @@ static void* aml_userdata_thread (void *arg) pfd.fd = fd; while (ud->running) { + userdata_poc_info_t poc_block; + r = poll(&pfd, 1, USERDATA_POLL_TIMEOUT); if (r != 1) continue; if (!(pfd.revents & POLLIN)) continue; + memset(&poc_block, 0, sizeof(userdata_poc_info_t)); + ioctl(fd, AMSTREAM_IOC_UD_POC, &poc_block); + r = read(fd, data + left, sizeof(data) - left); if (flush) { ioctl(fd, AMSTREAM_IOC_UD_FLUSH_USERDATA, NULL); @@ -456,7 +482,7 @@ static void* aml_userdata_thread (void *arg) if (ud->format == MPEG_CC_TYPE) { r = aml_process_mpeg_userdata(dev, pd, left); } else if (ud->format != INVALID_TYPE) { - r = aml_process_h264_userdata(dev, pd, left); + r = aml_process_h264_userdata(dev, pd, left, poc_block.poc_number); } else { r = 0; } diff --git a/lib32/libam_ver.so b/lib32/libam_ver.so index 85d94a2..7bb8dea 100755 --- a/lib32/libam_ver.so +++ b/lib32/libam_ver.so @@ -1,4 +1,4 @@ -ELF +ELF 0å3ÿ/áÐKâ @@ -97,8 +97,8 @@ B¿&¼ñ óÿ°°¬€:óÿ°°°€8óÿ°°¨€Nóÿ°„€Xóÿ°°°€xóÿ°„€üóÿ°°ª€€ôÿ°°°€˜ôÿ°„€4õÿ°« -€˜ùÿ°°¬€Ôùÿ°°°€þÿ +€˜ùÿ°°¬€Ôùÿ°°°€þÿ A -"&Dlibam_ver.so +"&Dlibam_ver.so diff --git a/lib64/libam_ver.so b/lib64/libam_ver.so index 0c07b7f..737dc28 100755 --- a/lib64/libam_ver.so +++ b/lib64/libam_ver.so @@ -1,3 +1,2 @@ -ELF -ÙUlÒñËŸ}fr;± - +ELF + diff --git a/libam_ver.so b/libam_ver.so index 527005b..cc54e7a 100755 --- a/libam_ver.so +++ b/libam_ver.so @@ -1,6 +1,6 @@ ELF -0å3ÿ/áÐKâ +0å3ÿ/áÐKâ A -"Dlibam_ver.so +"Dlibam_ver.so |