Mercurial > pt1
annotate recpt1/tssplitter_lite.c @ 140:c9b1d21c5035
separate common function to core library
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 25 Apr 2013 16:06:15 +0900 |
parents | 61ff9cabf962 |
children | 1e7718cc2556 |
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 /* 初期化 */ |
139
61ff9cabf962
fix for split buffer shortage
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
134
diff
changeset
|
317 dbuf->buffer_filled = 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; |
139
61ff9cabf962
fix for split buffer shortage
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
134
diff
changeset
|
345 dbuf->buffer_filled += LENGTH_PACKET; |
99
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; |
139
61ff9cabf962
fix for split buffer shortage
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
134
diff
changeset
|
375 dbuf->buffer_filled += LENGTH_PACKET; |
99
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 |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
393 splitter *sp |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
394 unsigned char** pat, // [out] PAT 情報(再構築後) |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
395 unsigned char* pids, // [out] 出力対象 PID 情報 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
396 char** sid_list, // [in] 出力対象サービス ID のリスト |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
397 unsigned char* pmt_pids, // [out] サービス ID に対応する PMT の PID |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
398 int* pmt_retain // [out] 残すPMTの数 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
399 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
400 unsigned char* buf, // [in] 読み込んだバッファ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
401 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
402 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
403 int pos[MAX_PID]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
404 int service_id; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
405 int i, j, k; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
406 int size = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
407 int pid; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
408 int result = TSS_SUCCESS; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
409 char **p; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
410 int sid_found = FALSE; |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
411 int avail_sids[MAX_SERVICES]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
412 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
413 unsigned char *pat = sp->pat; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
414 unsigned char *pids = sp->pids; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
415 char **sid_list = sp->sid_list; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
416 unsigned char *pmt_pids = sp->pmt_pids; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
417 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
418 char chosen_sid[512]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
419 chosen_sid[0] = '\0'; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
420 |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
421 if(pat == NULL) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
422 /* 初期化 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
423 sp->pmt_retain = 0; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
424 memset(pos, 0, sizeof(pos)); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
425 size = buf[7]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
426 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
427 /* prescan SID/PMT */ |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
428 for(i = 13, j = 0; i < (size + 8) - 4; i = i + 4) { |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
429 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
430 pid = GetPid(&buf[i+2]); |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
431 if(pid == 0x0010) |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
432 continue; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
433 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
434 avail_sids[j] = (buf[i] << 8) + buf[i+1]; |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
435 sp->avail_pmts[j] = pid; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
436 j++; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
437 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
438 sp->num_pmts = j; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
439 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
440 // 対象チャンネル判定 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
441 /* size + 8 = パケット全長 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
442 /* 最終 4 バイトはCRCなので飛ばす */ |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
443 for(i = 13; i < (size + 8) - 4; i = i + 4) { |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
444 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
445 pid = GetPid(&buf[i+2]); |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
446 if(pid == 0x0010) |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
447 continue; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
448 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
449 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
|
450 p = sid_list; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
451 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
452 while(*p) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
453 if(service_id == atoi(*p)) { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
454 /* 録画対象の pmt_pids は 1 とする */ |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
455 /* 録画対象の pmt の pids は 1 とする */ |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
456 pid = GetPid(&buf[i + 2]); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
457 *(pmt_pids+pid) = 1; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
458 *(pids+pid) = 1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
459 pos[pid] = i; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
460 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
461 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
462 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
463 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
|
464 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
465 continue; |
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 else if(!strcasecmp(*p, "hd") || !strcasecmp(*p, "sd1")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
468 /* hd/sd1 指定時には1番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
469 if(service_id == avail_sids[0]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
470 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
471 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
472 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
473 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
474 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
475 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
476 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
477 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
|
478 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
479 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
480 continue; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
481 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
482 else if(!strcasecmp(*p, "sd2")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
483 /* sd2 指定時には2番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
484 if(service_id == avail_sids[1]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
485 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
486 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
487 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
488 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
489 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
490 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
491 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
492 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
|
493 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
494 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
495 continue; |
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 else if(!strcasecmp(*p, "sd3")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
498 /* sd3 指定時には3番目のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
499 if(service_id == avail_sids[2]) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
500 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
501 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
502 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
503 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
504 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
505 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
506 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
507 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
|
508 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
509 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
510 continue; |
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 else if(!strcasecmp(*p, "1seg")) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
513 /* 1seg 指定時には PMTPID=0x1FC8 のサービスを保存する */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
514 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
515 if(pid == 0x1FC8) { |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
516 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
517 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
518 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
519 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
520 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
521 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
522 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
|
523 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
524 p++; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
525 continue; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
526 } |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
527 else if(!strcasecmp(*p, "all")) { |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
528 /* all指定時には全保存する */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
529 pid = GetPid(&buf[i + 2]); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
530 *(pmt_pids+pid) = 1; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
531 *(pids+pid) = 1; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
532 pos[pid] = i; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
533 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
534 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
535 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
536 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
|
537 break; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
538 } |
134
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
539 else if(!strcasecmp(*p, "epg")) { |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
540 /* epg抽出に必要なPIDのみを保存する */ |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
541 sid_found = TRUE; |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
542 *(pids+0x11) = 1; |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
543 *(pids+0x12) = 1; |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
544 *(pids+0x26) = 1; |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
545 *(pids+0x27) = 1; |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
546 break; |
550ee373afbc
imported a patch which adds new service id for epg only output
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
132
diff
changeset
|
547 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
548 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
549 p++; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
550 } /* while */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
551 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
552 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
553 /* 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
|
554 if(*sid_list && !sid_found) { |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
555 for(i = 13; i < (size + 8) - 4; i = i + 4) { |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
556 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
557 pid = GetPid(&buf[i+2]); |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
558 if(pid==0x0010) |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
559 continue; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
560 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
561 service_id = (buf[i] << 8) + buf[i+1]; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
562 pid = GetPid(&buf[i + 2]); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
563 *(pmt_pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
564 *(pids+pid) = 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
565 pos[pid] = i; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
566 sid_found = TRUE; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
567 sp->pmt_version[sp->pmt_retain].pid = pid; |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
568 sp->pmt_retain += 1; |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
569 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
|
570 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
571 } |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
572 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
573 /* print SIDs */ |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
574 fprintf(stderr, "Available sid = "); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
575 for(k=0; k < sp->num_pmts; k++) |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
576 fprintf(stderr, "%d ", avail_sids[k]); |
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
577 fprintf(stderr, "\n"); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
578 fprintf(stderr, "Chosen sid =%s\n", chosen_sid); |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
579 |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
580 #if 1 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
581 /* print PMTs */ |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
582 fprintf(stderr, "Available PMT = "); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
583 for(k=0; k < sp->num_pmts; k++) |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
584 fprintf(stderr, "0x%x ", sp->avail_pmts[k]); |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
585 fprintf(stderr, "\n"); |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
586 #endif |
98
3fd15032fd3a
tweak user interface for sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
96
diff
changeset
|
587 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
588 // PAT 再構築 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
589 result = RecreatePat(sp, buf, pos); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
590 #if 0 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
591 int tc; |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
592 for(tc=0; tc<188; tc++) |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
593 fprintf(stderr, "%02x ", *(sp->pat+tc)); |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
594 #endif |
96
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 return(result); |
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 |
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 * PAT 再構築処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
602 * |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
603 * PMT から出力対象チャンネル以外のチャンネル情報を削除し、PAT を再構築する |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
604 */ |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
605 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
|
606 #if 0 |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
607 splitter *sp // [in/out] |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
608 unsigned char** pat, // [out] PAT 情報(再構築後) |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
609 unsigned char* pids, // [out] 出力対象 PID 情報 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
610 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
611 unsigned char* buf, // [in] 読み込んだバッファ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
612 int *pos // [in] 取得対象 PMT のバッファ中の位置 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
613 #endif |
96
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 unsigned char y[LENGTH_CRC_DATA]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
616 int crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
617 int i; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
618 int j; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
619 int pos_i; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
620 int pid_num = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
621 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
622 // CRC 計算のためのデータ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
623 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
624 // チャンネルによって変わらない部分 |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
625 for (i = 0; i < LENGTH_PAT_HEADER - 4; i++) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
626 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
627 y[i] = buf[i + 5]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
628 } |
132
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
629 |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
630 // NIT |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
631 y[LENGTH_PAT_HEADER-4] = 0x00; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
632 y[LENGTH_PAT_HEADER-3] = 0x00; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
633 y[LENGTH_PAT_HEADER-2] = 0xe0; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
634 y[LENGTH_PAT_HEADER-1] = 0x10; |
9783d247d1c9
imported Shaolin-san's NIT fix patch. The original patch can be obtained at http://microgroove.jp/shaolin/2010/09/a_tiny_patch_for_recpt1tssplitter_litec.html
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
128
diff
changeset
|
635 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
636 // チャンネルによって変わる部分 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
637 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
|
638 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
639 if(pos[i] != 0) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
640 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
641 /* buf[pos_i] を y にコピー(抽出したPIDの数) */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
642 pos_i = pos[i]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
643 for (j = 0; j < 4; j++) |
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 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
|
646 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
647 pid_num++; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
648 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
649 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
650 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
651 /* パケットサイズ計算 */ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
652 y[2] = pid_num * 4 + 0x0d; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
653 // CRC 計算 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
654 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
|
655 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
656 // PAT 再構成 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
657 sp->pat = (unsigned char*)malloc(LENGTH_PACKET); |
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
658 if(sp->pat == NULL) |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
659 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
660 fprintf(stderr, "RecreatePat() malloc error.\n"); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
661 return(TSS_NULL); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
662 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
663 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
|
664 for (i = 0; i < 5; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
665 { |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
666 (sp->pat)[i] = buf[i]; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
667 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
668 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
|
669 { |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
670 (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
|
671 } |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
672 (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
|
673 (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
|
674 (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
|
675 (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
|
676 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
677 return(TSS_SUCCESS); |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
678 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
679 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
680 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
681 * PMT 解析処理 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
682 * |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
683 * PMT を解析し、保存対象の PID を特定する |
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 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
|
686 #if 0 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
687 unsigned char* buf, // [in] 読み込んだバッファ |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
688 unsigned char* pids // [out] 出力対象 PID 情報 |
100
aeba1988234f
support macros to specify sid:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
99
diff
changeset
|
689 #endif |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
690 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
691 unsigned char Nall; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
692 unsigned char N; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
693 int pcr; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
694 int epid; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
695 int pid; |
125
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
696 int retry_count = 0; |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
697 int count; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
698 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
|
699 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
700 pid = GetPid(&buf[1]); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
701 if (buf[1] & 0x40) { // PES開始インジケータ |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
702 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
|
703 payload_offset = 5; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
704 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
705 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
|
706 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
|
707 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
|
708 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
709 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
710 // PCR, 番組情報が先頭からはみ出ることはないだろう |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
711 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
712 // PCR |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
713 pcr = GetPid(&buf[payload_offset + 8]); |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
714 sp->pids[pcr] = mark; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
715 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
716 // ECM |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
717 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
|
718 int p = payload_offset + 12; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
719 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
720 while(p < N) { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
721 uint32_t ca_pid; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
722 uint32_t tag; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
723 uint32_t len; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
724 |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
725 tag = buf[p]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
726 len = buf[p+1]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
727 p += 2; |
104
afd25d9ebef6
output ECM packet so that former workaround is no longer needed.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
101
diff
changeset
|
728 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
729 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
|
730 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
|
731 sp->pids[ca_pid] = mark; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
732 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
733 p += len; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
734 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
735 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
736 else { |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
737 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
|
738 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
|
739 payload_offset = 4; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
740 N = payload_offset; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
741 } |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
742 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
|
743 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
744 Nall = sp->section_remain[pid]; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
745 if(Nall > LENGTH_PACKET - payload_offset) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
746 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
|
747 |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
748 // ES PID |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
749 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
|
750 { |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
751 // ストリーム種別が 0x0D(type D)は出力対象外 |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
752 if (0x0D != buf[N]) |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
753 { |
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
754 epid = GetPid(&buf[N + 1]); |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
755 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
756 sp->pids[epid] = mark; |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
757 } |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
758 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
|
759 retry_count++; |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
760 if(retry_count > Nall) { |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
761 return TSS_ERROR; |
a910b49dfbee
work in progress improvement:
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
112
diff
changeset
|
762 } |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
763 } |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
764 sp->section_remain[pid] -= Nall; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
765 |
127
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
766 if (sp->section_remain[pid] > 0) |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
767 return SECTION_CONTINUE; |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
768 else |
8e0f7191b92e
Imported PID re-acquisition code by Toshiyuki Kawashima
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
125
diff
changeset
|
769 return TSS_SUCCESS; |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
770 } |
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 計算 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
774 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
775 static int GetCrc32( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
776 unsigned char* data, // [in] CRC 計算対象データ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
777 int len) // [in] 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 int crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
780 int i, j; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
781 int c; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
782 int bit; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
783 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
784 crc = 0xFFFFFFFF; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
785 for (i = 0; i < len; i++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
786 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
787 char x; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
788 x = data[i]; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
789 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
790 for (j = 0; j < 8; j++) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
791 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
792 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
793 bit = (x >> (7 - j)) & 0x1; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
794 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
795 c = 0; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
796 if (crc & 0x80000000) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
797 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
798 c = 1; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
799 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
800 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
801 crc = crc << 1; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
802 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
803 if (c ^ bit) |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
804 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
805 crc ^= 0x04C11DB7; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
806 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
807 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
808 crc &= 0xFFFFFFFF; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
809 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
810 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
811 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
812 return crc; |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
813 } |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
814 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
815 /** |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
816 * PID 取得 |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
817 */ |
99
3a3f15b063e1
now recpt1 accepts single sid for terrestrial channels.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
98
diff
changeset
|
818 static int GetPid( |
96
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
819 unsigned char* data) // [in] 取得対象データのポインタ |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
820 { |
52f8e081763d
add an option to specify the necessary service IDs.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff
changeset
|
821 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
|
822 } |