# HG changeset patch # User Yoshiki Yazawa # Date 1267192544 -32400 # Node ID afd25d9ebef64f2323cfbe0b96eb987c1e74443b # Parent 387d18563ef8039e742b81e50bbf9592b9e17a82 output ECM packet so that former workaround is no longer needed. diff -r 387d18563ef8 -r afd25d9ebef6 recpt1/recpt1.c --- a/recpt1/recpt1.c Fri Feb 26 19:46:03 2010 +0900 +++ b/recpt1/recpt1.c Fri Feb 26 22:55:44 2010 +0900 @@ -345,7 +345,7 @@ } - if(use_b25 && use_splitter) { + if(use_splitter) { splitbuf.size = 0; while(buf.size) { @@ -436,7 +436,7 @@ buf = dbuf; } - if(use_b25 && use_splitter) { + if(use_splitter) { /* 分離対象以外をふるい落とす */ code = split_ts(splitter, &buf, &splitbuf); if(code != TSS_SUCCESS) { @@ -1048,15 +1048,10 @@ } /* initialize splitter */ if(use_splitter) { - if(!use_b25) { - fprintf(stderr, "TS splitter does not work without b25 decoder currently.\n"); - } - else { - splitter = split_startup(sid_list); - if(splitter->sid_list == NULL) { - fprintf(stderr, "Cannot start TS splitter\n"); - return 1; - } + splitter = split_startup(sid_list); + if(splitter->sid_list == NULL) { + fprintf(stderr, "Cannot start TS splitter\n"); + return 1; } } diff -r 387d18563ef8 -r afd25d9ebef6 recpt1/tssplitter_lite.c --- a/recpt1/tssplitter_lite.c Fri Feb 26 19:46:03 2010 +0900 +++ b/recpt1/tssplitter_lite.c Fri Feb 26 22:55:44 2010 +0900 @@ -596,6 +596,22 @@ N = ((buf[15] & 0x0F) << 4) + buf[16] + 16 + 1; + // ECM + int p = 17; + while(p < N) { + uint32_t ca_pid; + uint32_t tag; + uint32_t len; + + tag = buf[p]; + len = buf[p+1]; + if(tag == 0x09 && len >= 4 && p+len <= N) { + ca_pid = ((buf[p+4] << 8) | buf[p+5]) & 0x1fff; + sp->pids[ca_pid] = 1; + } + p += len; + } + // ES PID while (N < Nall + 8 - 4) {