OSDN Git Service

fix some bugs.
authorgn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Sat, 21 Nov 2009 01:43:41 +0000 (01:43 +0000)
committergn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Sat, 21 Nov 2009 01:43:41 +0000 (01:43 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@228 4e526526-5e11-4fc0-8910-f8fd03428081

jTsSplitter/trunk/src/jtssplitter/Mpeg2TSPacket.java
jTsSplitter/trunk/src/jtssplitter/Tsfile.java
jTsSplitter/trunk/src/jtssplitter/calc.java
jTsSplitter/trunk/src/jtssplitter/data/EITData.java [new file with mode: 0644]

index 39e79e0..8fa9a12 100644 (file)
@@ -6,6 +6,7 @@ import java.util.zip.CRC32;
 import jtssplitter.data.PATData;
 import jtssplitter.data.PMTData;
 import jtssplitter.data.Descriptor;
+import jtssplitter.data.EITData;
 import jtssplitter.data.Video_stream_descriptor;
 /*
  * To change this template, choose Tools | Templates
@@ -153,13 +154,13 @@ public class Mpeg2TSPacket {
                 int elementary_PID = TSString2Int(payload_temp, cur_point + 11, 13);
                 //System.out.println(Integer.toString(cur_point)+" :  "+Integer.toString(section_length*8));
                 int es_length = TSString2Int(payload_temp, cur_point + 28, 12);
-                if (pmt_stream_type==0x02){
+                /*if (pmt_stream_type==0x02){
                     Descriptor des=new Descriptor();
                     Object a=des.getDescriptors(payload_temp.substring(cur_point + 40,cur_point + 40+es_length*8));
                 }else if(pmt_stream_type==0x0f){
                     Descriptor des=new Descriptor();
                     Object a=des.getDescriptors(payload_temp.substring(cur_point + 40,cur_point + 40+es_length*8));
-                }
+                }*/
 
                 
                 PMTData pmtd=new PMTData();
@@ -171,8 +172,8 @@ public class Mpeg2TSPacket {
                     pmt_t.add(pmtd);
                 }
                 cur_point = cur_point + 40 + es_length * 8;
-                //System.out.println(Integer.toString(cur_point)+" :  "+Integer.toString(section_length));
-                if (cur_point > section_length * 8 - 1) {
+                //System.out.println(Integer.toString(cur_point)+" :  "+Integer.toString(section_length*8));
+                if ((cur_point > section_length * 8 - 1)|| (cur_point>payload_temp.length()-11)) {
                     end = true;
                 }
             }else{
@@ -181,7 +182,29 @@ public class Mpeg2TSPacket {
         }
         return pmt_t;
     }
-
+    public ArrayList<EITData> readEIT(byte[] ts) {
+        String payload_temp=getPayload(ts);
+        int tableid = TSString2Int(payload_temp, 0, 8);
+        int section_length = TSString2Int(payload_temp, 12, 12);
+        int program_number = TSString2Int(payload_temp, 24, 16);
+        boolean current_next_indicator= (TSString2Int(payload_temp, 47, 1)==1);
+        int section_number = TSString2Int(payload_temp, 48, 8);
+        int curpoint=112;
+        ArrayList<EITData> ret=new ArrayList<EITData>();
+        while (curpoint<24+section_length*8-32){
+            EITData eitd=new EITData();
+            eitd.current_newt_indicator=current_next_indicator;
+            eitd.event_id = TSString2Int(payload_temp, curpoint, 16);
+            eitd.program_number=program_number;
+            eitd.section_number = section_number;
+            int des_len=TSString2Int(payload_temp, curpoint+84, 12);
+            Descriptor des=new Descriptor();
+            eitd.descriptors=des.getDescriptors(payload_temp.substring(curpoint+96,curpoint+84+des_len*8));
+            ret.add(eitd);
+            curpoint=curpoint+84+des_len*8;
+        }
+        return ret;
+    }
     private int TSString2Int(String s, int begin, int length) {
         String st = s.substring(begin, begin + length);
         int i = Integer.parseInt(st, 2);
index b4e463c..5299ee4 100644 (file)
@@ -9,6 +9,7 @@ import java.io.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.Arrays;
+import jtssplitter.data.EITData;
 import jtssplitter.data.PATData;
 import jtssplitter.data.PIDs;
 import jtssplitter.data.PMTData;
@@ -105,17 +106,22 @@ public class Tsfile {
                         }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;
+                            if (pmtss.size()>0){
+                                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 ((ii==0x0012)&&(readti>187)){
+                            ArrayList<EITData> eitss=m2tpp.readEIT(tb);
+                         */
                         }else if (readti>187){
                             wbyte=tb;
 
index 17f7b76..35e5fe8 100644 (file)
@@ -125,4 +125,91 @@ public class calc {
         int i = Integer.parseInt(st, 2);
         return i;
     }
+    public byte[] byte2subbyte(byte[] b,int start,int length){
+        byte[] ret=new byte[length];
+        System.arraycopy(b,start,ret,0, length);
+        return ret;
+    }
+    public int byte2int(byte[] b,int startbit,int length){
+        int a=startbit-startbit%8;
+        a=a/8;
+        int bb=startbit+length-(startbit+length)%8;
+        bb=bb/8;
+        int ret=0;
+        for (int i=0;i<bb-a+1;i++){
+            if (i==0){
+                int tt=1;
+                for (int j=0;j<(8-(startbit%8));j++){
+                    tt=tt*2;
+                }
+                tt=tt-1;
+                int lent=length-8+(startbit%8);
+                if (lent<0){
+                    lent=0;
+                }
+                ret=ret+(((b[a]&0xFF)&tt)<<lent);
+                if (i==bb-a){
+                    int k=0;
+                    if ((startbit+length)%8==0){
+                        k=0;
+                    }else{
+                        k=8-(startbit+length)%8;
+                }
+                    ret=ret>>k;
+                }
+            }else if (i==bb-a){
+                int k=0;
+                if ((startbit+length)%8==0){
+                    k=8;
+                }else{
+                    k=8-(startbit+length)%8;
+                }
+                ret=ret+((b[a+i]&0xFF)>>k);
+            }else{
+                ret=ret+((b[a+i]&0xFF)<<((bb-a-i-1)*8+((startbit+length)%8)));
+            }
+        }
+        return ret;
+    }
+    public long byte2long(byte[] b,int startbit,int length){
+        int a=startbit-startbit%8;
+        a=a/8;
+        int bb=startbit+length-(startbit+length)%8;
+        bb=bb/8;
+        long ret=0;
+        for (int i=0;i<bb-a+1;i++){
+            if (i==0){
+                int tt=1;
+                for (int j=0;j<(8-(startbit%8));j++){
+                    tt=tt*2;
+                }
+                tt=tt-1;
+                int lent=length-8+(startbit%8);
+                if (lent<0){
+                    lent=0;
+                }
+                ret=ret+(((b[a]&0xFF)&tt)<<lent);
+                if (i==bb-a){
+                    int k=0;
+                    if ((startbit+length)%8==0){
+                        k=0;
+                    }else{
+                        k=8-(startbit+length)%8;
+                }
+                    ret=ret>>k;
+                }
+            }else if (i==bb-a){
+                int k=0;
+                if ((startbit+length)%8==0){
+                    k=8;
+                }else{
+                    k=8-(startbit+length)%8;
+                }
+                ret=ret+((b[a+i]&0xFF)>>k);
+            }else{
+                ret=ret+((b[a+i]&0xFF)<<((bb-a-i-1)*8+((startbit+length)%8)));
+            }
+        }
+        return ret;
+    }
 }
diff --git a/jTsSplitter/trunk/src/jtssplitter/data/EITData.java b/jTsSplitter/trunk/src/jtssplitter/data/EITData.java
new file mode 100644 (file)
index 0000000..88f8e80
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package jtssplitter.data;
+import java.util.ArrayList;
+/**
+ *
+ * @author yukikaze
+ */
+public class EITData {
+    public int program_number;
+    public boolean current_newt_indicator;
+    public int section_number;
+    public int event_id;
+    public ArrayList<jtssplitter.data.descriptor.abstract_Descriptor> descriptors;
+}