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