Mercurial > pt1
annotate recpt1/tssplitter_lite.c @ 129:d49174955c7f
minor build fix
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Tue, 20 Mar 2012 00:54:35 +0900 |
parents | 9e9dbb17b70f |
children | 9783d247d1c9 |
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 #if 0 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
212 unsigned char **pat, // [out] PAT 情報(再構築後) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
213 unsigned char* pids, // [out] 出力対象 PID 情報 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
214 char** sid_list, // [in] 出力対象サービス ID のリスト |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
215 unsigned char* pmt_pids, // [in] 出力対象PIDのPMT PID |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
216 , // [in] pt1_drvの入力TS |
101
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
217 int* pmt_retain, // [in] 残すべきPMTの数 |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
218 int* pmt_counter // [out] 残したPMTの数 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
219 #endif |
128 | 220 { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
221 int length = sbuf->size; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
222 int pid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
223 int result = TSS_ERROR; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
224 int index; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
225 int analyze_result = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
226 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
227 index = 0; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
228 while(length - index - LENGTH_PACKET > 0) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
229 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
|
230 // PAT |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
231 if(0x0000 == pid) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
232 result = AnalyzePat(sp, sbuf->data + index); |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
233 if(result != TSS_SUCCESS) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
234 /* 下位の関数内部でmalloc error発生 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
235 return result; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
236 } |
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 // PMT |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
240 /* 残すpmt_pidである場合には、pmtに書かれている |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
241 * 残すべきPCR/AUDIO/VIDEO PIDを取得する */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
242 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
|
243 /* この中にはPMT毎に一度しか入らないようにしておく */ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
244 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
|
245 if(TSS_SUCCESS == analyze_result) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
246 sp->pmt_pids[pid]++; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
247 sp->pmt_counter += 1; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
248 *(sbuf->data + index + 1) = 0xff; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
249 *(sbuf->data + index + 2) = 0xff; |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
250 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
251 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
252 /* 録画する全てのPMTについて、中にあるPCR/AUDIO/VIDEOのPIDを |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
253 * 得る */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
254 /* pmt_counter と pmt_retain が一致する場合に条件は満たされる */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
255 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
|
256 result = TSS_SUCCESS; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
257 break; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
258 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
259 else { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
260 result = TSS_ERROR; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
261 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
262 index += LENGTH_PACKET; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
263 } |
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 return(result); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
266 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
267 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
268 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
|
269 { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
270 int result = TSS_NULL; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
271 int i; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
272 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
273 // clear |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
274 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
|
275 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
|
276 splitter->pmt_counter = 0; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
277 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
|
278 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
|
279 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
280 fprintf(stderr, "Rescan PID \n"); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
281 } |
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 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
|
284 splitter->pmt_counter += 1; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
285 } |
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 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
|
288 result = TSS_SUCCESS; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
289 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
|
290 if (splitter->pids[i] > 0) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
291 splitter->pids[i] -= 1; |
128 | 292 } |
127
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 fprintf(stderr, "Rescan PID End\n"); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
295 } |
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 return result; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
298 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
299 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
300 * TS 分離処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
301 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
302 int split_ts( |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
303 splitter *splitter, // [in] splitterパラメータ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
304 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
|
305 splitbuf_t *dbuf // [out] 出力TS |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
306 ) |
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 int pid; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
309 unsigned char *sptr, *dptr; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
310 int s_offset = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
311 int d_offset = 0; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
312 int result = TSS_SUCCESS; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
313 int pmts = 0; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
314 int version = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
315 |
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 dbuf->size = 0; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
318 if (sbuf->size < 0) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
319 return TSS_ERROR; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
320 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
321 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
322 sptr = sbuf->data; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
323 dptr = dbuf->buffer; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
324 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
325 while(sbuf->size > s_offset) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
326 pid = GetPid(sptr + s_offset + 1); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
327 switch(pid) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
328 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
329 // PAT |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
330 case 0x0000: |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
331 // 巡回カウンタカウントアップ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
332 if(0xFF == splitter->pat_count) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
333 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
|
334 } |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
335 else { |
101
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
336 splitter->pat_count += 1; |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
337 if(0 == splitter->pat_count % 0x10) { |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
338 splitter->pat_count -= 0x10; |
3f7288b0672c
fix calculation for continuity counter
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
100
diff
changeset
|
339 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
340 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
341 splitter->pat[3] = splitter->pat_count; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
342 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
343 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
|
344 d_offset += LENGTH_PACKET; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
345 dbuf->size += LENGTH_PACKET; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
346 break; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
347 default: |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
348 if(0 != splitter->pmt_pids[pid]) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
349 //PMT |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
350 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
|
351 // バージョンチェック |
128 | 352 for(pmts = 0; splitter->pmt_retain > pmts; pmts++) { |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
353 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
|
354 version = splitter->pmt_version[pmts].version; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
355 break; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
356 } |
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 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
|
359 ||(splitter->pmt_retain != splitter->pmt_counter)) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
360 // 再チェック |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
361 result = RescanPID(splitter, sptr + s_offset); |
128 | 362 } |
127
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 else { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
365 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
|
366 // 再チェック |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
367 result = RescanPID(splitter, sptr + s_offset); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
368 } |
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 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
371 /* pids[pid] が 1 は残すパケットなので書き込む */ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
372 if(0 != splitter->pids[pid]) { |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
373 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
|
374 d_offset += LENGTH_PACKET; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
375 dbuf->size += LENGTH_PACKET; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
376 } |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
377 break; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
378 } /* switch */ |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
379 |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
380 s_offset += LENGTH_PACKET; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
381 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
382 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
383 return result; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
384 } |
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 * PAT 解析処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
388 * |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
389 * PAT を解析し、出力対象チャンネルが含まれているかチェックを行い、PAT を再構築する |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
390 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
391 static int AnalyzePat(splitter *sp, unsigned char *buf) |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
392 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
393 unsigned char* buf, // [in] 読み込んだバッファ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
394 unsigned char** pat, // [out] PAT 情報(再構築後) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
395 unsigned char* pids, // [out] 出力対象 PID 情報 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
396 char** sid_list, // [in] 出力対象サービス ID のリスト |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
397 unsigned char* pmt_pids, // [out] サービス ID に対応する PMT の PID |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
398 int* pmt_retain // [out] 残すPMTの数 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
399 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
400 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
401 int pos[MAX_PID]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
402 int service_id; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
403 int i, j, k; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
404 int size = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
405 int pid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
406 int result = TSS_SUCCESS; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
407 char **p; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
408 int sid_found = FALSE; |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
409 int avail_sids[MAX_SERVICES]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
410 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
411 unsigned char *pat = sp->pat; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
412 unsigned char *pids = sp->pids; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
413 char **sid_list = sp->sid_list; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
414 unsigned char *pmt_pids = sp->pmt_pids; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
415 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
416 char chosen_sid[512]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
417 chosen_sid[0] = '\0'; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
418 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
419 if(pat == NULL) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
420 /* 初期化 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
421 sp->pmt_retain = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
422 memset(pos, 0, sizeof(pos)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
423 size = buf[7]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
424 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
425 /* prescan SID/PMT */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
426 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
|
427 avail_sids[j] = (buf[i] << 8) + buf[i+1]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
428 sp->avail_pmts[j] = GetPid(&buf[i+2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
429 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
430 sp->num_pmts = j; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
431 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
432 // 対象チャンネル判定 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
433 /* size + 8 = パケット全長 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
434 /* 最終 4 バイトはCRCなので飛ばす */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
435 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
|
436 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
437 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
|
438 p = sid_list; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
439 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
440 while(*p) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
441 if(service_id == atoi(*p)) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
442 /* 録画対象の pmt_pids は 1 とする */ |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
443 /* 録画対象の pmt の pids は 1 とする */ |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
444 pid = GetPid(&buf[i + 2]); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
445 *(pmt_pids+pid) = 1; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
446 *(pids+pid) = 1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
447 pos[pid] = i; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
448 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
449 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
450 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
451 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
|
452 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
453 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
454 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
455 else if(!strcasecmp(*p, "hd") || !strcasecmp(*p, "sd1")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
456 /* hd/sd1 指定時には1番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
457 if(service_id == avail_sids[0]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
458 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
459 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
460 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
461 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
462 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
463 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
464 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
465 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
|
466 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
467 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
468 continue; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
469 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
470 else if(!strcasecmp(*p, "sd2")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
471 /* sd2 指定時には2番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
472 if(service_id == avail_sids[1]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
473 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
474 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
475 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
476 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
477 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
478 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
479 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
480 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
|
481 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
482 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
483 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
484 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
485 else if(!strcasecmp(*p, "sd3")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
486 /* sd3 指定時には3番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
487 if(service_id == avail_sids[2]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
488 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
489 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
490 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
491 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
492 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
493 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
494 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
495 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
|
496 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
497 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
498 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
499 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
500 else if(!strcasecmp(*p, "1seg")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
501 /* 1seg 指定時には PMTPID=0x1FC8 のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
502 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
503 if(pid == 0x1FC8) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
504 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
505 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
506 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
507 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
508 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
509 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
510 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
|
511 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
512 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
513 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
514 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
515 else if(!strcasecmp(*p, "all")) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
516 /* all指定時には全保存する */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
517 pid = GetPid(&buf[i + 2]); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
518 *(pmt_pids+pid) = 1; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
519 *(pids+pid) = 1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
520 pos[pid] = i; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
521 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
522 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
523 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
524 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
|
525 break; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
526 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
527 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
528 p++; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
529 } /* while */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
530 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
531 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
532 /* 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
|
533 if(*sid_list && !sid_found) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
534 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
|
535 service_id = (buf[i] << 8) + buf[i+1]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
536 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
537 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
538 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
539 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
540 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
541 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
542 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
543 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
|
544 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
545 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
546 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
547 /* print SIDs */ |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
548 fprintf(stderr, "Available sid = "); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
549 for(k=0; k < sp->num_pmts; k++) |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
550 fprintf(stderr, "%d ", avail_sids[k]); |
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
551 fprintf(stderr, "\n"); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
552 fprintf(stderr, "Chosen sid =%s\n", chosen_sid); |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
553 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
554 #if 0 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
555 /* print PMTs */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
556 fprintf(stderr, "Available PMT = "); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
557 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
|
558 fprintf(stderr, "%d ", sp->avail_pmts[k].pid); |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
559 fprintf(stderr, "\n"); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
560 #endif |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
561 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
562 // PAT 再構築 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
563 result = RecreatePat(sp, buf, pos); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
564 #if 0 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
565 int tc; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
566 for(tc=0; tc<188; tc++) |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
567 fprintf(stderr, "%02x ", *(pat+tc)); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
568 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
569 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
570 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
571 return(result); |
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 |
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 * PAT 再構築処理 |
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 * PMT から出力対象チャンネル以外のチャンネル情報を削除し、PAT を再構築する |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
578 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
579 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
|
580 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
581 unsigned char* buf, // [in] 読み込んだバッファ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
582 unsigned char** pat, // [out] PAT 情報(再構築後) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
583 unsigned char* pids, // [out] 出力対象 PID 情報 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
584 int *pos // [in] 取得対象 PMT のバッファ中の位置 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
585 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
586 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
587 unsigned char y[LENGTH_CRC_DATA]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
588 int crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
589 int i; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
590 int j; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
591 int pos_i; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
592 int pid_num = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
593 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
594 // CRC 計算のためのデータ |
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 // チャンネルによって変わらない部分 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
597 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
|
598 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
599 y[i] = buf[i + 5]; |
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 // チャンネルによって変わる部分 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
602 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
|
603 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
604 if(pos[i] != 0) |
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 /* buf[pos_i] を y にコピー(抽出したPIDの数) */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
607 pos_i = pos[i]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
608 for (j = 0; j < 4; j++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
609 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
610 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
|
611 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
612 pid_num++; |
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 } |
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 y[2] = pid_num * 4 + 0x0d; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
618 // CRC 計算 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
619 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
|
620 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
621 // PAT 再構成 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
622 sp->pat = (unsigned char*)malloc(LENGTH_PACKET); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
623 if(sp->pat == NULL) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
624 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
625 fprintf(stderr, "RecreatePat() malloc error.\n"); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
626 return(TSS_NULL); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
627 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
628 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
|
629 for (i = 0; i < 5; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
630 { |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
631 (sp->pat)[i] = buf[i]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
632 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
633 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
|
634 { |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
635 (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
|
636 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
637 (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
|
638 (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
|
639 (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
|
640 (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
|
641 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
642 return(TSS_SUCCESS); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
643 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
644 |
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 * PMT 解析処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
647 * |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
648 * PMT を解析し、保存対象の PID を特定する |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
649 */ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
650 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
|
651 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
652 unsigned char* buf, // [in] 読み込んだバッファ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
653 unsigned char* pids // [out] 出力対象 PID 情報 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
654 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
655 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
656 unsigned char Nall; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
657 unsigned char N; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
658 int pcr; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
659 int epid; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
660 int pid; |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
661 int retry_count = 0; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
662 int count; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
663 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
|
664 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
665 pid = GetPid(&buf[1]); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
666 if (buf[1] & 0x40) { // PES開始インジケータ |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
667 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
|
668 payload_offset = 5; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
669 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
670 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
|
671 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
|
672 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
|
673 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
674 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
675 // PCR, 番組情報が先頭からはみ出ることはないだろう |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
676 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
677 // PCR |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
678 pcr = GetPid(&buf[payload_offset + 8]); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
679 sp->pids[pcr] = mark; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
680 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
681 // ECM |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
682 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
|
683 int p = payload_offset + 12; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
684 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
685 while(p < N) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
686 uint32_t ca_pid; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
687 uint32_t tag; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
688 uint32_t len; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
689 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
690 tag = buf[p]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
691 len = buf[p+1]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
692 p += 2; |
104
afd25d9ebef6
output ECM packet so that former workaround is no longer needed.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
101
diff
changeset
|
693 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
694 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
|
695 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
|
696 sp->pids[ca_pid] = mark; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
697 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
698 p += len; |
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 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
701 else { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
702 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
|
703 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
|
704 payload_offset = 4; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
705 N = payload_offset; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
706 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
707 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
|
708 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
709 Nall = sp->section_remain[pid]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
710 if(Nall > LENGTH_PACKET - payload_offset) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
711 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
|
712 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
713 // ES PID |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
714 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
|
715 { |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
716 // ストリーム種別が 0x0D(type D)は出力対象外 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
717 if (0x0D != buf[N]) |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
718 { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
719 epid = GetPid(&buf[N + 1]); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
720 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
721 sp->pids[epid] = mark; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
722 } |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
723 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
|
724 retry_count++; |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
725 if(retry_count > Nall) { |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
726 return TSS_ERROR; |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
727 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
728 } |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
729 sp->section_remain[pid] -= Nall; |
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 if (sp->section_remain[pid] > 0) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
732 return SECTION_CONTINUE; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
733 else |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
734 return TSS_SUCCESS; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
735 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
736 |
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 * CRC 計算 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
739 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
740 static int GetCrc32( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
741 unsigned char* data, // [in] CRC 計算対象データ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
742 int len) // [in] CRC 計算対象データ長 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
743 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
744 int crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
745 int i, j; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
746 int c; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
747 int bit; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
748 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
749 crc = 0xFFFFFFFF; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
750 for (i = 0; i < len; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
751 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
752 char x; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
753 x = data[i]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
754 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
755 for (j = 0; j < 8; j++) |
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 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
758 bit = (x >> (7 - j)) & 0x1; |
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 c = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
761 if (crc & 0x80000000) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
762 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
763 c = 1; |
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 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
766 crc = crc << 1; |
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 if (c ^ bit) |
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 crc ^= 0x04C11DB7; |
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 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
773 crc &= 0xFFFFFFFF; |
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 } |
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 return crc; |
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 |
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 * PID 取得 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
782 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
783 static int GetPid( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
784 unsigned char* data) // [in] 取得対象データのポインタ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
785 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
786 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
|
787 } |