OSDN Git Service

stop using trunk or dist directory in rec10 project.
[rec10/rec10-git.git] / jTsSplitter / jtssplitter / data / Descriptor.java
1 /*
2  * jTsSplitter - java based mpeg2ts splitter.
3  * Copyright (C) 2009-2010 Yukikaze
4  */
5 package jtssplitter.data;
6
7 import java.util.ArrayList;
8 import jtssplitter.calc;
9 import jtssplitter.data.descriptor.ARIB_Audio_Component_Descriptor;
10 import jtssplitter.data.descriptor.ARIB_Video_Compornent_Descriptor;
11
12 /**
13  *
14  * @author yukikaze
15  */
16 public class Descriptor {
17
18     private calc cal = new calc();
19
20     public String analyze(String s) {
21         StringBuffer sb=new StringBuffer();
22         int curp = 0;
23         while (s.length() > curp + 16) {
24             String adds = "";
25             int tag = cal.TSString2Int(s, curp + 0, 8);
26             int len = cal.TSString2Int(s, curp + 8, 8) * 8;
27             String des_s = s.substring(curp + 16, curp + 16 + len);
28             curp = curp + len + 16;
29             switch (tag) {
30                 case 0xc8://ビデオコントロール記述子
31                     switch (cal.TSString2Int(des_s, 3, 4)) {
32                         case 0:
33                             adds = "Video:1080p";
34                             break;
35                         case 1:
36                             adds = "Video:1080i";
37                             break;
38                         case 2:
39                             adds = "Video:720p";
40                             break;
41                         case 3:
42                             adds = "Video:480p";
43                             break;
44                         case 4:
45                             adds = "Video:480i";
46                             break;
47                         case 5:
48                             adds = "Video:240p";
49                             break;
50                         case 6:
51                             adds = "Video:120p";
52                             break;
53                         case 7:
54                             adds = "Video:2160p";
55                             break;
56                     }
57                     break;
58                 case 0xc4://音声コンポーネント記述子
59                     switch (cal.TSString2Int(des_s, 8, 8)) {
60                         case 0x01:
61                             adds = "Video:120p";
62                             break;
63
64                     }
65                     break;
66             }
67             if (adds.length() > 0) {
68                 sb.append(adds);
69             }
70         }
71         return sb.toString();
72     }
73     public ArrayList<jtssplitter.data.descriptor.abstract_Descriptor> getDescriptors(String s){
74         jtssplitter.calc cal=new calc();
75         return getDescriptors(cal.String2Byte(s));
76     }
77     public ArrayList<jtssplitter.data.descriptor.abstract_Descriptor> getDescriptors(byte[] b){
78         int curp = 0;
79         ArrayList<jtssplitter.data.descriptor.abstract_Descriptor> ad=new ArrayList<jtssplitter.data.descriptor.abstract_Descriptor>();
80         while (b.length > curp + 2) {
81             int tag = b[curp]&0xFF;
82             int len = b[curp+1]&0xFF;
83             byte[] btag=new byte[len];
84             System.arraycopy(b,curp+2,btag,0,len);
85             curp = curp + len + 2;
86             switch (tag) {
87                 case 0xc8://ビデオコントロール記述子
88                     jtssplitter.data.descriptor.ARIB_Video_Compornent_Descriptor avcd=new jtssplitter.data.descriptor.ARIB_Video_Compornent_Descriptor();
89                     avcd.analyzeDescriptor(0xc8, btag);
90                     ad.add(avcd);
91                     break;
92                 case 0xc4://音声コンポーネント記述子
93                     ARIB_Audio_Component_Descriptor aacd=new ARIB_Audio_Component_Descriptor();
94                     aacd.analyzeDescriptor(0xC4, btag);
95                     ad.add(aacd);
96                     break;
97             }
98         }
99         return ad;
100     }
101 }