Mercurial > pt1
comparison recpt1/tssplitter_lite.c @ 125:a910b49dfbee
work in progress improvement:
- fix bugs around cond_timedwait
- try to avoid sticking in PMT analysis
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Tue, 21 Feb 2012 15:46:04 +0900 |
parents | 38091ff0c8ed |
children | 8e0f7191b92e |
comparison
equal
deleted
inserted
replaced
124:f2ae5ddeed7e | 125:a910b49dfbee |
---|---|
225 while(length - index - LENGTH_PACKET > 0) { | 225 while(length - index - LENGTH_PACKET > 0) { |
226 pid = GetPid(sbuf->data + index + 1); | 226 pid = GetPid(sbuf->data + index + 1); |
227 // PAT | 227 // PAT |
228 if(0x0000 == pid) { | 228 if(0x0000 == pid) { |
229 result = AnalyzePat(sp, sbuf->data + index); | 229 result = AnalyzePat(sp, sbuf->data + index); |
230 if(TSS_SUCCESS != result) { | 230 if(result != TSS_SUCCESS) { |
231 /* 下位の関数内部でmalloc error発生 */ | 231 /* 下位の関数内部でmalloc error発生 */ |
232 return result; | 232 return result; |
233 } | 233 } |
234 } | 234 } |
235 | 235 |
236 // PMT | 236 // PMT |
237 /* 残すpmt_pidである場合には、pmtに書かれている | 237 /* 残すpmt_pidである場合には、pmtに書かれている |
238 * 残すべきPCR/AUDIO/VIDEO PIDを取得する */ | 238 * 残すべきPCR/AUDIO/VIDEO PIDを取得する */ |
239 if(sp->pmt_pids[pid] == 1) { | 239 if(sp->pmt_pids[pid] == 1) { |
240 /* この中にはPMT毎に一度しか入らないようにしておく */ | 240 /* この中にはPMT毎に一度しか入らないようにしておく */ |
241 AnalyzePmt(sp, sbuf->data + index); | 241 result = AnalyzePmt(sp, sbuf->data + index); |
242 if(result != TSS_SUCCESS) { | |
243 return result; | |
244 } | |
242 sp->pmt_pids[pid]++; | 245 sp->pmt_pids[pid]++; |
243 sp->pmt_counter += 1; | 246 sp->pmt_counter += 1; |
244 } | 247 } |
245 /* 録画する全てのPMTについて、中にあるPCR/AUDIO/VIDEOのPIDを | 248 /* 録画する全てのPMTについて、中にあるPCR/AUDIO/VIDEOのPIDを |
246 * 得る */ | 249 * 得る */ |
585 { | 588 { |
586 unsigned char Nall; | 589 unsigned char Nall; |
587 unsigned char N; | 590 unsigned char N; |
588 int pcr; | 591 int pcr; |
589 int epid; | 592 int epid; |
593 int retry_count = 0; | |
590 | 594 |
591 Nall = ((buf[6] & 0x0F) << 4) + buf[7]; | 595 Nall = ((buf[6] & 0x0F) << 4) + buf[7]; |
592 if(Nall > LENGTH_PACKET) | 596 if(Nall > LENGTH_PACKET) |
593 Nall = LENGTH_PACKET - 8; /* xxx workaround --yaz */ | 597 Nall = LENGTH_PACKET - 8; /* xxx workaround --yaz */ |
594 | 598 |
625 epid = GetPid(&buf[N + 1]); | 629 epid = GetPid(&buf[N + 1]); |
626 | 630 |
627 sp->pids[epid] = 1; | 631 sp->pids[epid] = 1; |
628 } | 632 } |
629 N += 4 + (((buf[N + 3]) & 0x0F) << 4) + buf[N + 4] + 1; | 633 N += 4 + (((buf[N + 3]) & 0x0F) << 4) + buf[N + 4] + 1; |
634 retry_count++; | |
635 if(retry_count > Nall) { | |
636 return TSS_ERROR; | |
637 } | |
630 } | 638 } |
631 | 639 |
632 return TSS_SUCCESS; | 640 return TSS_SUCCESS; |
633 } | 641 } |
634 | 642 |