OSDN Git Service

some speed ups.
authorgn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Thu, 29 Oct 2009 00:52:41 +0000 (00:52 +0000)
committergn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Thu, 29 Oct 2009 00:52:41 +0000 (00:52 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@197 4e526526-5e11-4fc0-8910-f8fd03428081

jTsSplitter/trunk/src/jtssplitter/Main.java
jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java
jTsSplitter/trunk/src/jtssplitter/Tsfile.java

index 982e024..6024bc0 100644 (file)
@@ -30,10 +30,10 @@ public class Main {
         }
         Tsfile t1=new Tsfile();
         //t1.readTs("D:\\jTssplitter\\test-sp.ts");
-        //inf="/home/ftpusr/ftp-tmp/tester/testcs30.tsmix";
-        //outf="/home/ftpusr/ftp-tmp/tester/test.tssp.ts";
-        //inf="D:\\jTssplitter\\NEEDLESS.ts";
-        //outf="D:\\jTssplitter\\NEEDLESS.split-2.ts";
+        //inf="/home/ftpusr/ftp-tmp/tester/test.ts";
+        //outf="/home/ftpusr/ftp-tmp/tester/test.tssp2.ts";
+        inf="D:\\jTssplitter\\test.ts";
+        outf="D:\\jTssplitter\\test.split-5test.ts";
         //inf="/home/ftpusr/ftp-tmp/tester/NEEDLESS.tsmix.ts";
         //outf="/home/ftpusr/ftp-tmp/tester/Needless.tssp.ts";
         t1.splitTS(inf,outf,ch);
index 068649b..eec3663 100644 (file)
@@ -11,13 +11,15 @@ import jtssplitter.data.PMTData;
 
 /**
  *
- * @author Administrator
+ * @author gn64_jp
  */
 public class Mpeg2TSPacket {
 
     public String header;
     public String payload;
     public String adaptation;
+    public byte[] bPAT_payload=null;
+    private String bPAT_payload_made="";
     //private ArrayList<TsDate> date=new ArrayList<TsDate>();
     //date.add(new TsDate("Starter"))
     public int type;//
@@ -166,6 +168,24 @@ public class Mpeg2TSPacket {
          * 
          * p_tableで指定された番組テーブルのみを取り出すPATを作る。
          */
+        int matchnum=0;
+        byte[] tbb=new byte[ts.length-4];
+        for (int i=0;i<ts.length-4;i++){
+            tbb[i]=ts[4+i];
+            if (bPAT_payload!=null){
+                if (ts[4+i]==bPAT_payload[i]){
+                    matchnum++;
+                }
+            }
+        }
+        if (matchnum==ts.length-4){
+            byte[] retb=new byte[188];
+            System.arraycopy(ts,0,retb,0,4);
+            System.arraycopy(bPAT_payload,0,retb,4,184);
+            return retb;
+        }else{
+            bPAT_payload=tbb;
+        }
         String tsbyte = byte2String(ts);
         String tsheader = "";
         header = tsbyte.substring(0, 31);
@@ -201,43 +221,48 @@ public class Mpeg2TSPacket {
     }
 
     private String makePAT(String tsheader,String payload_temp, int Table) {
-        int tableid;
         int sectionlength;
-        ArrayList program_number = new ArrayList();
+        StringBuffer sb=new StringBuffer();
+        //ArrayList program_number = new ArrayList();
         //System.out.println("Pay:"+payload_temp);
-        tableid = TSString2Int(payload_temp, 0, 8);
+        //int tableid = TSString2Int(payload_temp, 0, 8);
         sectionlength = TSString2Int(payload_temp, 12, 12);//-40-32;
         int patnum = sectionlength * 8 - 72;
-        String rets = "";//="00000000";//pointer field
-        rets = rets + payload_temp.substring(0, 12);//セクション長の前まで
+        //String rets = "";//="00000000";//pointer field
+        //rets = rets + payload_temp.substring(0, 12);//セクション長の前まで
+        sb.append(payload_temp.substring(0,12));
         int new_section_length = (2 * 32 + 32 + 40) / 8;
-
-        rets = rets + Int2String(new_section_length, 12);
-        rets = rets + payload_temp.substring(24, 64);//ループ前まで
+        sb.append(Int2String(new_section_length, 12));
+        sb.append(payload_temp.substring(24, 64));
+        //rets = rets + Int2String(new_section_length, 12);
+        //rets = rets + payload_temp.substring(24, 64);//ループ前まで
         String loop = "";
         patnum = patnum / 32;
-        String crcnow = payload_temp.substring(64 + 32 * patnum, 64 + 32 * patnum + 32);
+        //String crcnow = payload_temp.substring(64 + 32 * patnum, 64 + 32 * patnum + 32);
         for (int i = 0; i < patnum; i++) {
             int[] pat = new int[2];
             pat[0] = TSString2Int(payload_temp, 64 + 32 * i, 16);
             pat[1] = TSString2Int(payload_temp, 32 * i + 64 + 19, 13);
             if (pat[0] == 0) {
-                loop = loop+payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
+                sb.append(payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1));
+                //loop = loop+payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
             } else if (pat[0] == Table) {
-                loop = loop + payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
+                sb.append(payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1));
+                //loop = loop + payload_temp.substring(64 + 32 * i, 95 + 32 * i + 1);
                 i = patnum;
             }
         }
-        rets = rets + loop;
         String s2=tsheader.substring(tsheader.length()-8);
-        s2=s2+rets;
+        s2=s2+sb.toString();
         String s = getCRC32(s2);
-        rets = rets + s;
-        int ill3 = payload_temp.length() - rets.length();
+        sb.append(s);
+        //rets = rets + s;
+        int ill3 = payload_temp.length() - sb.length();
         for (int ir = 0; ir < ill3; ir++) {
-            rets = rets + "1";
+            sb.append("1");
+            //rets = rets + "1";
         }
-        return rets;
+        return sb.toString();
     }
     private String getCRC32(String s){
         return getCRC32(String2Byte(s),1);
@@ -285,11 +310,32 @@ public class Mpeg2TSPacket {
     }
 
     private String addzero(int num){
-        StringBuffer s2=new StringBuffer();
-        for (int i2 = 0; i2 < num; i2++) {
-            s2.append("0");// = "0" + s2;
+        switch (num){
+            case 0:
+                return "";
+            case 1:
+                return "0";
+            case 2:
+                return "00";
+            case 3:
+                return "000";
+            case 4:
+                return "0000";
+            case 5:
+                return "00000";
+            case 6:
+                return "000000";
+            case 7:
+                return "0000000";
+            case 8:
+                return "00000000";
+            default:
+                StringBuffer sb=new StringBuffer();
+                for (int i=0;i<num;i++){
+                    sb.append("0");
+                }
+                return sb.toString();
         }
-        return s2.toString();
     }
     private String byte2String(byte[] b) {
         StringBuffer sb=new StringBuffer(8*b.length);
index 5e38764..4c6653a 100644 (file)
@@ -78,6 +78,8 @@ public class Tsfile {
             boolean end=false;
             int ik=0;
             boolean readend=false;
+            Mpeg2TSPacket m2tpp;
+            m2tpp=new Mpeg2TSPacket();
             while (readend==false){
                 byte[] tstt=new byte[3];
                 bis.mark(188*2);
@@ -86,15 +88,15 @@ public class Tsfile {
                 wbyte=null;
                 Mpeg2TSPacket m2tp;
                 m2tp=new Mpeg2TSPacket();
-                int ii=m2tp.getPIDFirst(tstt);
+                int ii=m2tpp.getPIDFirst(tstt);
                 boolean alreadyreaded=false;
                 for (int k=0;k<pids.length;k++){
                     if (ii==pids[k]){
                         alreadyreaded=true;
                         int readti=bis.read(tb);
                         if ((ii==0)&&(readti>187)){
-                            Mpeg2TSPacket m2tp2=new Mpeg2TSPacket();
-                            wbyte=m2tp2.splitPAT(tb,p_table);
+                            //Mpeg2TSPacket m2tp2=new Mpeg2TSPacket();
+                            wbyte=m2tpp.splitPAT(tb,p_table);
                         }else if (readti>187){
                             wbyte=tb;
                         }else {