summaryrefslogtreecommitdiff
authorGong 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)
commit719595fd7c520203b820bf30430d624e811b07fb (patch)
tree8b9204eacf119a270bed5bee837f2a6fb868eed8
parentc3bbd1484d001920e03de6f70abe3ca7af432dea (diff)
downloaddvb-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
Diffstat
-rw-r--r--[-rwxr-xr-x]am_adp/am_userdata/aml/aml.c50
-rwxr-xr-xlib32/libam_ver.so6
-rwxr-xr-xlib64/libam_ver.so5
-rwxr-xr-xlibam_ver.so4
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