Mercurial > pt1
annotate recpt1/tssplitter_lite.c @ 127:8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
<tos@fa2.so-net.ne.jp>. The original patch can be obtained
from http://www.castanet.homeip.net/~tos/wiki/index.php
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 12 Mar 2012 22:22:27 +0900 |
parents | a910b49dfbee |
children | 9e9dbb17b70f |
rev | line source |
---|---|
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
1 /* -*- tab-width: 4; indent-tabs-mode: t -*- */ |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
2 /* tssplitter_lite.c -- split TS stream. |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
3 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
4 Copyright 2009 querulous |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
5 Copyright 2010 Naoya OYAMA <naoya.oyama@gmail.com> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
6 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
7 This program is free software: you can redistribute it and/or modify |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
10 (at your option) any later version. |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
11 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
12 This program is distributed in the hope that it will be useful, |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
15 GNU General Public License for more details. |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
16 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
19 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
20 #include <stdlib.h> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
21 #include <stdio.h> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
22 #include <string.h> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
23 #include <ctype.h> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
24 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
25 #include <fcntl.h> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
26 #include <sys/stat.h> |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
27 #include "decoder.h" |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
28 #include "recpt1.h" |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
29 #include "tssplitter_lite.h" |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
30 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
31 /* prototypes */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
32 static int ReadTs(splitter *sp, ARIB_STD_B25_BUFFER *sbuf); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
33 static int AnalyzePat(splitter *sp, unsigned char *buf); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
34 static int RecreatePat(splitter *sp, unsigned char *buf, int *pos); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
35 static char** AnalyzeSid(char *sid); |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
36 static int AnalyzePmt(splitter *sp, unsigned char *buf, unsigned char mark); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
37 static int GetCrc32(unsigned char *data, int len); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
38 static int GetPid(unsigned char *data); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
39 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
40 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
41 * サービスID解析 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
42 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
43 static char** AnalyzeSid( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
44 char* sid) // [in] サービスID(カンマ区切りテキスト) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
45 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
46 int i = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
47 char** sid_list = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
48 char* p; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
49 int CommaNum = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
50 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
51 /* sid は次の形式の引数を許容する */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
52 /* 指定無し */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
53 /* SID[0] */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
54 /* SID[0],SID[1],...,SID[N-1],SID[N] */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
55 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
56 /*カンマの数を数える*/ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
57 p = sid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
58 while(*p != '\0') |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
59 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
60 if( *p == C_CHAR_COMMA ){ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
61 CommaNum++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
62 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
63 p++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
64 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
65 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
66 /* sid_listの数はカンマの数+2(NULL止めするから) */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
67 sid_list = malloc(sizeof(char*)*(CommaNum+2)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
68 if ( sid_list == NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
69 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
70 fprintf(stderr, "AnalyzeSid() malloc error.\n"); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
71 return NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
72 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
73 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
74 /* sidが空である場合 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
75 p = sid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
76 if ( strlen(p) == 0 ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
77 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
78 sid_list[0] = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
79 return sid_list; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
80 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
81 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
82 /* カンマ無し */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
83 if ( CommaNum == 0 ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
84 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
85 sid_list[0] = sid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
86 sid_list[1] = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
87 return sid_list; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
88 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
89 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
90 /* カンマ区切りで複数指定時 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
91 i=0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
92 p = sid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
93 /* 文字列端に到達するか、カンマ数が数えた数に達したら終了 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
94 while((*p != '\0') || i < CommaNum) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
95 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
96 /* 現在の処理位置をsid_list[i]にセット */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
97 /* このタイミングの p は |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
98 * ・sid先頭 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
99 * ・[,]の次の文字 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
100 * いずれかであるので p を sid_list[i] に代入してよい |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
101 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
102 sid_list[i] = p; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
103 i++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
104 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
105 /* 最初に現れる[,]をNULL文字で置換する */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
106 p = strchr(p, C_CHAR_COMMA); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
107 if ( p == NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
108 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
109 /* カンマが見つからない場合は最後の処理対象なので終了 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
110 break; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
111 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
112 *p = '\0'; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
113 /* 処理位置をNULLで置換した文字の次の位置に設定する */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
114 p++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
115 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
116 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
117 /* 最後のsid_list[n]はNULLポインタで止める */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
118 sid_list[i] = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
119 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
120 i=0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
121 while( sid_list[i] != NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
122 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
123 i++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
124 } |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
125 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
126 for(i=0; sid_list[i] != NULL; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
127 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
128 printf("sid_list[%d]=[%s].\n",i, sid_list[i]); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
129 } |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
130 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
131 return sid_list; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
132 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
133 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
134 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
135 * 初期化処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
136 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
137 splitter* split_startup( |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
138 char *sid // [in] サービスID(引数で指定した文字列) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
139 ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
140 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
141 splitter* sp; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
142 sp = malloc(sizeof(splitter)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
143 if ( sp == NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
144 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
145 fprintf(stderr, "split_startup malloc error.\n"); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
146 return NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
147 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
148 memset(sp->pids, 0, sizeof(sp->pids)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
149 memset(sp->pmt_pids, 0, sizeof(sp->pmt_pids)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
150 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
151 sp->sid_list = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
152 sp->pat = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
153 sp->sid_list = AnalyzeSid(sid); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
154 if ( sp->sid_list == NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
155 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
156 free(sp); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
157 return NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
158 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
159 sp->pat_count = 0xFF; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
160 sp->pmt_retain = -1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
161 sp->pmt_counter = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
162 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
163 memset(sp->section_remain, 0U, sizeof(sp->section_remain)); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
164 memset(sp->packet_seq, 0U, sizeof(sp->packet_seq)); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
165 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
166 return sp; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
167 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
168 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
169 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
170 * 落とすPIDを確定させる |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
171 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
172 int split_select( |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
173 splitter *sp, // [in/out] splitter構造体 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
174 ARIB_STD_B25_BUFFER *sbuf // [in] 入力TS |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
175 ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
176 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
177 int result; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
178 // TS解析 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
179 result = ReadTs(sp, sbuf); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
180 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
181 return result; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
182 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
183 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
184 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
185 * 終了処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
186 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
187 void split_shutdown(splitter* sp) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
188 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
189 if ( sp != NULL ) { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
190 if ( sp->pat != NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
191 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
192 free(sp->pat); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
193 sp->pat = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
194 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
195 if ( sp->sid_list != NULL ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
196 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
197 free(sp->sid_list); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
198 sp->sid_list = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
199 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
200 free(sp); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
201 sp = NULL; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
202 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
203 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
204 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
205 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
206 * TS 解析処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
207 * |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
208 * 対象のチャンネル番号のみの PAT の再構築と出力対象 PID の抽出を行う |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
209 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
210 static int ReadTs(splitter *sp, ARIB_STD_B25_BUFFER *sbuf) |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
211 { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
212 #if 0 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
213 unsigned char **pat, // [out] PAT 情報(再構築後) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
214 unsigned char* pids, // [out] 出力対象 PID 情報 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
215 char** sid_list, // [in] 出力対象サービス ID のリスト |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
216 unsigned char* pmt_pids, // [in] 出力対象PIDのPMT PID |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
217 , // [in] pt1_drvの入力TS |
101
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
218 int* pmt_retain, // [in] 残すべきPMTの数 |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
219 int* pmt_counter // [out] 残したPMTの数 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
220 #endif |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
221 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
222 int length = sbuf->size; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
223 int pid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
224 int result = TSS_ERROR; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
225 int index; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
226 int analyze_result = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
227 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
228 index = 0; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
229 while(length - index - LENGTH_PACKET > 0) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
230 pid = GetPid(sbuf->data + index + 1); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
231 // PAT |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
232 if(0x0000 == pid) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
233 result = AnalyzePat(sp, sbuf->data + index); |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
234 if(result != TSS_SUCCESS) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
235 /* 下位の関数内部でmalloc error発生 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
236 return result; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
237 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
238 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
239 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
240 // PMT |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
241 /* 残すpmt_pidである場合には、pmtに書かれている |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
242 * 残すべきPCR/AUDIO/VIDEO PIDを取得する */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
243 if(sp->pmt_pids[pid] == 1) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
244 /* この中にはPMT毎に一度しか入らないようにしておく */ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
245 analyze_result = AnalyzePmt(sp, sbuf->data + index, 1); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
246 if(TSS_SUCCESS == analyze_result) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
247 sp->pmt_pids[pid]++; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
248 sp->pmt_counter += 1; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
249 *(sbuf->data + index + 1) = 0xff; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
250 *(sbuf->data + index + 2) = 0xff; |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
251 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
252 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
253 /* 録画する全てのPMTについて、中にあるPCR/AUDIO/VIDEOのPIDを |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
254 * 得る */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
255 /* pmt_counter と pmt_retain が一致する場合に条件は満たされる */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
256 if(sp->pmt_counter == sp->pmt_retain) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
257 result = TSS_SUCCESS; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
258 break; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
259 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
260 else { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
261 result = TSS_ERROR; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
262 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
263 index += LENGTH_PACKET; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
264 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
265 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
266 return(result); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
267 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
268 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
269 static int RescanPID(splitter *splitter, unsigned char *buf) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
270 { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
271 int result = TSS_NULL; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
272 int i; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
273 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
274 // clear |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
275 if (splitter->pmt_counter == splitter->pmt_retain) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
276 memcpy(splitter->pids, splitter->pmt_pids, sizeof(splitter->pids)); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
277 splitter->pmt_counter = 0; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
278 memset(splitter->section_remain, 0U, sizeof(splitter->section_remain)); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
279 memset(splitter->packet_seq, 0U, sizeof(splitter->packet_seq)); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
280 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
281 fprintf(stderr, "Rescan PID \n"); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
282 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
283 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
284 if (TSS_SUCCESS == AnalyzePmt(splitter, buf, 2)) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
285 splitter->pmt_counter += 1; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
286 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
287 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
288 if (splitter->pmt_retain == splitter->pmt_counter) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
289 result = TSS_SUCCESS; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
290 for (i = 0; MAX_PID > i; i++) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
291 if (splitter->pids[i] > 0) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
292 splitter->pids[i] -= 1; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
293 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
294 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
295 fprintf(stderr, "Rescan PID End\n"); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
296 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
297 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
298 return result; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
299 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
300 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
301 * TS 分離処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
302 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
303 int split_ts( |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
304 splitter *splitter, // [in] splitterパラメータ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
305 ARIB_STD_B25_BUFFER *sbuf, // [in] 入力TS |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
306 splitbuf_t *dbuf // [out] 出力TS |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
307 ) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
308 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
309 int pid; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
310 unsigned char *sptr, *dptr; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
311 int s_offset = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
312 int d_offset = 0; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
313 int result = TSS_SUCCESS; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
314 int pmts = 0; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
315 int version = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
316 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
317 /* 初期化 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
318 dbuf->size = 0; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
319 if (sbuf->size < 0) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
320 return TSS_ERROR; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
321 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
322 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
323 sptr = sbuf->data; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
324 dptr = dbuf->buffer; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
325 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
326 while(sbuf->size > s_offset) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
327 pid = GetPid(sptr + s_offset + 1); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
328 switch(pid) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
329 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
330 // PAT |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
331 case 0x0000: |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
332 // 巡回カウンタカウントアップ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
333 if(0xFF == splitter->pat_count) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
334 splitter->pat_count = splitter->pat[3]; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
335 } |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
336 else { |
101
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
337 splitter->pat_count += 1; |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
338 if(0 == splitter->pat_count % 0x10) { |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
339 splitter->pat_count -= 0x10; |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
340 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
341 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
342 splitter->pat[3] = splitter->pat_count; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
343 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
344 memcpy(dptr + d_offset, splitter->pat, LENGTH_PACKET); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
345 d_offset += LENGTH_PACKET; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
346 dbuf->size += LENGTH_PACKET; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
347 break; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
348 default: |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
349 if(0 != splitter->pmt_pids[pid]) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
350 //PMT |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
351 if ((sptr + s_offset)[1] & 0x40) { // PES開始インジケータ |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
352 // バージョンチェック |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
353 for(pmts = 0; splitter->pmt_retain > pmts; pmts++) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
354 if (splitter->pmt_version[pmts].pid == pid) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
355 version = splitter->pmt_version[pmts].version; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
356 break; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
357 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
358 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
359 if((version != ((sptr + s_offset)[10] & 0x3e)) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
360 ||(splitter->pmt_retain != splitter->pmt_counter)) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
361 // 再チェック |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
362 result = RescanPID(splitter, sptr + s_offset); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
363 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
364 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
365 else { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
366 if (splitter->pmt_retain != splitter->pmt_counter) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
367 // 再チェック |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
368 result = RescanPID(splitter, sptr + s_offset); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
369 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
370 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
371 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
372 /* pids[pid] が 1 は残すパケットなので書き込む */ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
373 if(0 != splitter->pids[pid]) { |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
374 memcpy(dptr + d_offset, sptr + s_offset, LENGTH_PACKET); |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
375 d_offset += LENGTH_PACKET; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
376 dbuf->size += LENGTH_PACKET; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
377 } |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
378 break; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
379 } /* switch */ |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
380 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
381 s_offset += LENGTH_PACKET; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
382 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
383 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
384 return result; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
385 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
386 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
387 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
388 * PAT 解析処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
389 * |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
390 * PAT を解析し、出力対象チャンネルが含まれているかチェックを行い、PAT を再構築する |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
391 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
392 static int AnalyzePat(splitter *sp, unsigned char *buf) |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
393 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
394 unsigned char* buf, // [in] 読み込んだバッファ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
395 unsigned char** pat, // [out] PAT 情報(再構築後) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
396 unsigned char* pids, // [out] 出力対象 PID 情報 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
397 char** sid_list, // [in] 出力対象サービス ID のリスト |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
398 unsigned char* pmt_pids, // [out] サービス ID に対応する PMT の PID |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
399 int* pmt_retain // [out] 残すPMTの数 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
400 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
401 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
402 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
403 int pos[MAX_PID]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
404 int service_id; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
405 int i, j, k; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
406 int size = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
407 int pid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
408 int result = TSS_SUCCESS; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
409 char **p; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
410 int sid_found = FALSE; |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
411 int avail_sids[MAX_SERVICES]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
412 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
413 unsigned char *pat = sp->pat; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
414 unsigned char *pids = sp->pids; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
415 char **sid_list = sp->sid_list; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
416 unsigned char *pmt_pids = sp->pmt_pids; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
417 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
418 char chosen_sid[512]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
419 chosen_sid[0] = '\0'; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
420 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
421 if(pat == NULL) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
422 /* 初期化 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
423 sp->pmt_retain = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
424 memset(pos, 0, sizeof(pos)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
425 size = buf[7]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
426 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
427 /* prescan SID/PMT */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
428 for(i = 17, j = 0; i < (size + 8) - 4; i = i + 4, j++) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
429 avail_sids[j] = (buf[i] << 8) + buf[i+1]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
430 sp->avail_pmts[j] = GetPid(&buf[i+2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
431 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
432 sp->num_pmts = j; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
433 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
434 // 対象チャンネル判定 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
435 /* size + 8 = パケット全長 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
436 /* 最終 4 バイトはCRCなので飛ばす */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
437 for(i = 17; i < (size + 8) - 4; i = i + 4) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
438 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
439 service_id = (buf[i] << 8) + buf[i+1]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
440 p = sid_list; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
441 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
442 while(*p) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
443 if(service_id == atoi(*p)) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
444 /* 録画対象の pmt_pids は 1 とする */ |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
445 /* 録画対象の pmt の pids は 1 とする */ |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
446 pid = GetPid(&buf[i + 2]); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
447 *(pmt_pids+pid) = 1; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
448 *(pids+pid) = 1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
449 pos[pid] = i; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
450 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
451 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
452 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
453 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
454 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
455 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
456 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
457 else if(!strcasecmp(*p, "hd") || !strcasecmp(*p, "sd1")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
458 /* hd/sd1 指定時には1番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
459 if(service_id == avail_sids[0]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
460 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
461 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
462 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
463 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
464 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
465 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
466 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
467 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
468 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
469 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
470 continue; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
471 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
472 else if(!strcasecmp(*p, "sd2")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
473 /* sd2 指定時には2番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
474 if(service_id == avail_sids[1]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
475 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
476 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
477 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
478 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
479 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
480 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
481 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
482 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
483 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
484 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
485 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
486 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
487 else if(!strcasecmp(*p, "sd3")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
488 /* sd3 指定時には3番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
489 if(service_id == avail_sids[2]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
490 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
491 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
492 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
493 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
494 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
495 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
496 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
497 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
498 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
499 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
500 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
501 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
502 else if(!strcasecmp(*p, "1seg")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
503 /* 1seg 指定時には PMTPID=0x1FC8 のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
504 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
505 if(pid == 0x1FC8) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
506 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
507 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
508 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
509 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
510 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
511 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
512 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
513 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
514 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
515 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
516 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
517 else if(!strcasecmp(*p, "all")) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
518 /* all指定時には全保存する */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
519 pid = GetPid(&buf[i + 2]); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
520 *(pmt_pids+pid) = 1; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
521 *(pids+pid) = 1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
522 pos[pid] = i; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
523 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
524 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
525 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
526 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
527 break; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
528 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
529 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
530 p++; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
531 } /* while */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
532 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
533 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
534 /* if sid has been specified but no sid found, fall back to all */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
535 if(*sid_list && !sid_found) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
536 for(i = 17; i < (size + 8) - 4; i = i + 4) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
537 service_id = (buf[i] << 8) + buf[i+1]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
538 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
539 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
540 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
541 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
542 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
543 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
544 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
545 sprintf(chosen_sid, "%s %d", *chosen_sid ? chosen_sid : "", service_id); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
546 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
547 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
548 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
549 /* print SIDs */ |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
550 fprintf(stderr, "Available sid = "); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
551 for(k=0; k < sp->num_pmts; k++) |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
552 fprintf(stderr, "%d ", avail_sids[k]); |
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
553 fprintf(stderr, "\n"); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
554 fprintf(stderr, "Chosen sid =%s\n", chosen_sid); |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
555 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
556 #if 0 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
557 /* print PMTs */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
558 fprintf(stderr, "Available PMT = "); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
559 for(k=0; k < sp->num_pmts; k++) |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
560 fprintf(stderr, "%d ", sp->avail_pmts[k].pid); |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
561 fprintf(stderr, "\n"); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
562 #endif |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
563 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
564 // PAT 再構築 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
565 result = RecreatePat(sp, buf, pos); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
566 #if 0 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
567 int tc; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
568 for(tc=0; tc<188; tc++) |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
569 fprintf(stderr, "%02x ", *(pat+tc)); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
570 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
571 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
572 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
573 return(result); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
574 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
575 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
576 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
577 * PAT 再構築処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
578 * |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
579 * PMT から出力対象チャンネル以外のチャンネル情報を削除し、PAT を再構築する |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
580 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
581 static int RecreatePat(splitter *sp, unsigned char *buf, int *pos) |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
582 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
583 unsigned char* buf, // [in] 読み込んだバッファ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
584 unsigned char** pat, // [out] PAT 情報(再構築後) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
585 unsigned char* pids, // [out] 出力対象 PID 情報 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
586 int *pos // [in] 取得対象 PMT のバッファ中の位置 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
587 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
588 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
589 unsigned char y[LENGTH_CRC_DATA]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
590 int crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
591 int i; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
592 int j; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
593 int pos_i; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
594 int pid_num = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
595 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
596 // CRC 計算のためのデータ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
597 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
598 // チャンネルによって変わらない部分 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
599 for (i = 0; i < LENGTH_PAT_HEADER; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
600 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
601 y[i] = buf[i + 5]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
602 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
603 // チャンネルによって変わる部分 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
604 for (i = 0; i < MAX_PID; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
605 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
606 if(pos[i] != 0) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
607 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
608 /* buf[pos_i] を y にコピー(抽出したPIDの数) */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
609 pos_i = pos[i]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
610 for (j = 0; j < 4; j++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
611 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
612 y[LENGTH_PAT_HEADER + ((4*pid_num) + j)] = buf[pos_i + j]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
613 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
614 pid_num++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
615 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
616 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
617 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
618 /* パケットサイズ計算 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
619 y[2] = pid_num * 4 + 0x0d; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
620 // CRC 計算 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
621 crc = GetCrc32(y, LENGTH_PAT_HEADER + pid_num*4); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
622 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
623 // PAT 再構成 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
624 sp->pat = (unsigned char*)malloc(LENGTH_PACKET); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
625 if(sp->pat == NULL) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
626 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
627 fprintf(stderr, "RecreatePat() malloc error.\n"); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
628 return(TSS_NULL); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
629 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
630 memset(sp->pat, 0xFF, LENGTH_PACKET); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
631 for (i = 0; i < 5; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
632 { |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
633 (sp->pat)[i] = buf[i]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
634 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
635 for (i = 0; i < LENGTH_PAT_HEADER + pid_num*4; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
636 { |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
637 (sp->pat)[i + 5] = y[i]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
638 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
639 (sp->pat)[5 + LENGTH_PAT_HEADER + pid_num*4] = (crc >> 24) & 0xFF; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
640 (sp->pat)[6 + LENGTH_PAT_HEADER + pid_num*4] = (crc >> 16) & 0xFF; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
641 (sp->pat)[7 + LENGTH_PAT_HEADER + pid_num*4] = (crc >> 8) & 0xFF; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
642 (sp->pat)[8 + LENGTH_PAT_HEADER + pid_num*4] = (crc ) & 0xFF; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
643 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
644 return(TSS_SUCCESS); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
645 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
646 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
647 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
648 * PMT 解析処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
649 * |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
650 * PMT を解析し、保存対象の PID を特定する |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
651 */ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
652 static int AnalyzePmt(splitter *sp, unsigned char *buf, unsigned char mark) |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
653 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
654 unsigned char* buf, // [in] 読み込んだバッファ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
655 unsigned char* pids // [out] 出力対象 PID 情報 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
656 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
657 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
658 unsigned char Nall; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
659 unsigned char N; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
660 int pcr; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
661 int epid; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
662 int pid; |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
663 int retry_count = 0; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
664 int count; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
665 int payload_offset; // offset to payload |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
666 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
667 pid = GetPid(&buf[1]); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
668 if (buf[1] & 0x40) { // PES開始インジケータ |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
669 sp->section_remain[pid] = ((buf[6] & 0x0F) << 8) + buf[7] + 3; // セクションサイズ取得(ヘッダ込) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
670 payload_offset = 5; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
671 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
672 for (count = 0; sp->pmt_retain > count; count++) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
673 if (sp->pmt_version[count].pid == pid) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
674 sp->pmt_version[count].version = buf[10] & 0x3e; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
675 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
676 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
677 // PCR, 番組情報が先頭からはみ出ることはないだろう |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
678 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
679 // PCR |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
680 pcr = GetPid(&buf[payload_offset + 8]); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
681 sp->pids[pcr] = mark; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
682 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
683 // ECM |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
684 N = ((buf[payload_offset + 10] & 0x0F) << 8) + buf[payload_offset + 11] + payload_offset + 12; // ES情報開始点 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
685 int p = payload_offset + 12; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
686 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
687 while(p < N) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
688 uint32_t ca_pid; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
689 uint32_t tag; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
690 uint32_t len; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
691 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
692 tag = buf[p]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
693 len = buf[p+1]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
694 p += 2; |
104
afd25d9ebef6
output ECM packet so that former workaround is no longer needed.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
101
diff
changeset
|
695 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
696 if(tag == 0x09 && len >= 4 && p+len <= N) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
697 ca_pid = ((buf[p+2] << 8) | buf[p+3]) & 0x1fff; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
698 sp->pids[ca_pid] = mark; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
699 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
700 p += len; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
701 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
702 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
703 else { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
704 if (sp->section_remain[pid] == 0) return TSS_ERROR; // セクション先頭が飛んでいる |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
705 if ((buf[3] & 0x0F) != ((sp->packet_seq[pid] + 1) & 0x0F)) return TSS_ERROR; // パケットカウンタが飛んだ |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
706 payload_offset = 4; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
707 N = payload_offset; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
708 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
709 sp->packet_seq[pid] = buf[3] & 0x0F; // 巡回カウンタ |
106
12b9192becaa
avoid infinite loop. length in the first descriptor loop can be zero.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
104
diff
changeset
|
710 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
711 Nall = sp->section_remain[pid]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
712 if(Nall > LENGTH_PACKET - payload_offset) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
713 Nall = LENGTH_PACKET - payload_offset; |
104
afd25d9ebef6
output ECM packet so that former workaround is no longer needed.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
101
diff
changeset
|
714 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
715 // ES PID |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
716 while (N <= Nall + payload_offset - 5) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
717 { |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
718 // ストリーム種別が 0x0D(type D)は出力対象外 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
719 if (0x0D != buf[N]) |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
720 { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
721 epid = GetPid(&buf[N + 1]); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
722 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
723 sp->pids[epid] = mark; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
724 } |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
725 N += 4 + (((buf[N + 3]) & 0x0F) << 8) + buf[N + 4] + 1; |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
726 retry_count++; |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
727 if(retry_count > Nall) { |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
728 return TSS_ERROR; |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
729 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
730 } |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
731 sp->section_remain[pid] -= Nall; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
732 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
733 if (sp->section_remain[pid] > 0) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
734 return SECTION_CONTINUE; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
735 else |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
736 return TSS_SUCCESS; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
737 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
738 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
739 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
740 * CRC 計算 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
741 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
742 static int GetCrc32( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
743 unsigned char* data, // [in] CRC 計算対象データ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
744 int len) // [in] CRC 計算対象データ長 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
745 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
746 int crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
747 int i, j; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
748 int c; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
749 int bit; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
750 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
751 crc = 0xFFFFFFFF; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
752 for (i = 0; i < len; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
753 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
754 char x; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
755 x = data[i]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
756 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
757 for (j = 0; j < 8; j++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
758 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
759 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
760 bit = (x >> (7 - j)) & 0x1; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
761 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
762 c = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
763 if (crc & 0x80000000) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
764 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
765 c = 1; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
766 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
767 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
768 crc = crc << 1; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
769 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
770 if (c ^ bit) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
771 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
772 crc ^= 0x04C11DB7; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
773 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
774 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
775 crc &= 0xFFFFFFFF; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
776 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
777 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
778 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
779 return crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
780 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
781 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
782 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
783 * PID 取得 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
784 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
785 static int GetPid( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
786 unsigned char* data) // [in] 取得対象データのポインタ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
787 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
788 return ((data[0] & 0x1F) << 8) + data[1]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
789 } |