@@ -21,6 +21,20 @@ const char* descriptor_tag_to_str(uint8_t tag);
2121void print_descriptor_info (TSDDescriptor * desc );
2222
2323int main (int argc , char * * charv ) {
24+ FILE * file_input = NULL ;
25+ if (argc < 2 )
26+ {
27+ printf ("not enough params\n" );
28+ return -10 ;
29+ }
30+
31+ file_input = fopen (charv [1 ], "rb" );
32+ if (!file_input )
33+ {
34+ printf ("failed to open file %s\n" , charv [1 ]);
35+ return -20 ;
36+ }
37+
2438 // create a demuxing context.
2539 TSDemuxContext ctx ;
2640 // set default values onto the context.
@@ -44,7 +58,7 @@ int main(int argc, char **charv) {
4458 // at the end of the do loop, we write back any remainder bytes into
4559 // the buffer, this is why we write into the buffer at the location
4660 // &buffer[count - parsed].
47- count = fread (& buffer [count - parsed ], 1 , 1880 - (count - parsed ), stdin );
61+ count = fread (& buffer [count - parsed ], 1 , 1880 - (count - parsed ), file_input );
4862
4963 if (count > 0 ) {
5064 // with res, we could report any errors found during demuxing
@@ -69,6 +83,9 @@ int main(int argc, char **charv) {
6983 // destroy context
7084 tsd_context_destroy (& ctx );
7185
86+ if (file_input )
87+ fclose (file_input );
88+
7289 return 0 ;
7390}
7491
@@ -138,7 +155,7 @@ void print_pmt(TSDemuxContext *ctx, void *data) {
138155 for (i = 0 ;i < pmt -> program_elements_length ; ++ i ) {
139156 TSDProgramElement * prog = & pmt -> program_elements [i ];
140157 printf (" -----\nProgram #%d\n" , i );
141- printf (" stream type: (0x%04X) %s\n" , prog -> stream_type , stream_type_to_str (prog -> stream_type ));
158+ printf (" stream type: (0x%04X) %s\n" , prog -> stream_type , stream_type_to_str (TSDPESStreamId ( prog -> stream_type ) ));
142159 printf (" elementary pid: 0x%04X\n" , prog -> elementary_pid );
143160 printf (" es info length: %d\n" , prog -> es_info_length );
144161 printf (" descriptors length: %d\n" , prog -> descriptors_length );
@@ -166,20 +183,20 @@ void print_pmt(TSDemuxContext *ctx, void *data) {
166183}
167184
168185const char * stream_type_to_str (TSDPESStreamId stream_id ) {
169- if (stream_id >= 0x1C && stream_id <= 0x7F ) {
170- stream_id = 0x1C ;
186+ if (stream_id >= 0x1C && stream_id <= 0x7F && stream_id != 0x24 && stream_id != 0x42 ) {
187+ stream_id = ( TSDPESStreamId ) 0x1C ;
171188 }else if (stream_id >= 0x8A && stream_id <= 0x8F ) {
172- stream_id = 0x8A ;
189+ stream_id = ( TSDPESStreamId ) 0x8A ;
173190 }else if (stream_id >= 0x93 && stream_id <= 0x94 ) {
174- stream_id = 0x93 ;
191+ stream_id = ( TSDPESStreamId ) 0x93 ;
175192 }else if (stream_id >= 0x96 && stream_id <= 0x9F ) {
176- stream_id = 0x96 ;
193+ stream_id = ( TSDPESStreamId ) 0x96 ;
177194 }else if (stream_id >= 0xA1 && stream_id <= 0xBF ){
178- stream_id = 0xA1 ;
195+ stream_id = ( TSDPESStreamId ) 0xA1 ;
179196 }else if (stream_id >= 0xC4 && stream_id <= 0xE9 ){
180- stream_id = 0xC4 ;
197+ stream_id = ( TSDPESStreamId ) 0xC4 ;
181198 }else if (stream_id >= 0xEB && stream_id <= 0xFF ){
182- stream_id = 0xEB ;
199+ stream_id = ( TSDPESStreamId ) 0xEB ;
183200 }
184201
185202 switch (stream_id ) {
@@ -212,6 +229,8 @@ const char* stream_type_to_str(TSDPESStreamId stream_id) {
212229 case 0x1A : return "IPMP stream (defined in ISO/IEC 13818-11, MPEG-2 IPMP)" ;
213230 case 0X1B : return "AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10 Video" ;
214231 case 0x1C : return "ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved" ;
232+ case 0x24 : return "ITU-T Rec. H.265 and ISO/IEC 23008-2 (Ultra HD video) in a packetized stream" ;
233+ case 0x42 : return "Chinese Video Standard in a packetized stream" ;
215234 case 0x80 : return "DigiCipher® II video | Identical to ITU-T Rec. H.262 | ISO/IEC 13818-2 Video" ;
216235 case 0x81 : return "ATSC A/53 audio [2] | AC-3 audio" ;
217236 case 0x82 : return "SCTE Standard Subtitle" ;
0 commit comments