OSDN Git Service

lots of bug fixes.
[rec10/rec10-git.git] / jTsSplitter / trunk / src / jtssplitter / Tsfile.java
index 2c5b307..b4e463c 100644 (file)
@@ -8,6 +8,7 @@ import java.util.ArrayList;
 import java.io.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.Arrays;
 import jtssplitter.data.PATData;
 import jtssplitter.data.PIDs;
 import jtssplitter.data.PMTData;
@@ -71,6 +72,7 @@ public class Tsfile {
         PIDs pidss=getTablePID(origpath,p_table);
         p_table=pidss.Program_Table;
         pids=pidss.PIDs;
+        int pmt_pid=pidss.PMT_PID;
         byte[] tb=new byte[188];
         try {
             FileInputStream in = new FileInputStream(origpath);
@@ -100,8 +102,23 @@ public class Tsfile {
                         if ((ii==0)&&(readti>187)){
                             //Mpeg2TSPacket m2tp2=new Mpeg2TSPacket();
                             wbyte=m2tpp.splitPAT(tb,p_table);
+                        }else if ((ii==pmt_pid)&&(readti>187)){
+                            wbyte=tb;
+                            ArrayList<PMTData> pmtss=m2tpp.readPMT(tb, pmt_pid);
+                            int[] new_pids=new int[pmtss.size()+3];
+                            new_pids[pmtss.size()]=0;
+                            new_pids[pmtss.size()+1]=pmt_pid;
+                            new_pids[pmtss.size()+2]=pmtss.get(0).PCR_PID;
+                            for (int i=0;i<pmtss.size();i++){
+                                new_pids[i]=pmtss.get(i).Elementary_PID;
+                            }
+                            if (!Arrays.equals(pids, new_pids)){
+                                pids=new_pids;
+                            }
+
                         }else if (readti>187){
                             wbyte=tb;
+
                         }else {
                             readend=true;
                         }
@@ -112,10 +129,6 @@ public class Tsfile {
             if (alreadyreaded==false){
                 bis.skip(188);
             }
-            int bbb=bis.available();
-            //if (bis.available()<188){
-            //    readend=true;
-            //}
                 if (wbyte!=null){
                     bos.write(wbyte);
                 }
@@ -212,13 +225,17 @@ public class Tsfile {
             }
             ret.add(0);
             ret.add(patd_det.PID);
+            ret.add(pmt.get(0).Elementary_PID);
             for (int i=0;i<pmt.size();i++){
                 if (patd_det.Program_TABLE==pmt.get(i).Program_Table){
                     if (!(ret.contains(pmt.get(i).Elementary_PID))){
-                        ret.add(pmt.get(i).Elementary_PID);
+                        if ((pmt.get(i).Stream_Type==0x02)||(pmt.get(i).Stream_Type==0x0f)){
+                            ret.add(pmt.get(i).Elementary_PID);
+                        }
                     }
                 }
             }
+            pids.PMT_PID=patd_det.PID;
             pids.Program_Table=patd_det.Program_TABLE;
             pids.PIDs=new int[ret.size()];
             for (int i=0;i<ret.size();i++){