Skip to content

Commit 73520da

Browse files
Added SCTE35 TimeDescriptor, fixed segmentation descriptor without sub_segment_num and sub_segments_expected (#88)
* Added TimeDescriptor, fixed segmentation descriptor without sub_segment_num and sub_segments_expected * Update TimeDescriptor * Update TimeDescriptor
1 parent 9a30376 commit 73520da

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

src/main/java/nl/digitalekabeltelevisie/data/mpeg/descriptors/DescriptorFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,8 @@ private static Descriptor getSCTE35Descriptor(final byte[] data, final TableSect
685685
return new AvailDescriptor(data, 0, tableSection);
686686
case 0x02:
687687
return new SegmentationDescriptor(data, 0, tableSection);
688+
case 0x03:
689+
return new TimeDescriptor(data, 0, tableSection);
688690
default:
689691
Descriptor d = new SCTE35Descriptor(data, 0, tableSection);
690692
logger.info("Not implemented SCTE35Descriptor:" + toUnsignedInt(data[0]) + " ("

src/main/java/nl/digitalekabeltelevisie/data/mpeg/descriptors/scte35/SCTE35Descriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public static String getDescriptorname(final int tag, final TableSection tableSe
6565
case 0x00: return "avail_descriptor";
6666
case 0x01: return "DTMF_descriptor";
6767
case 0x02: return "segmentation_descriptor";
68-
case 0x03: return "DVB-time_descriptor";
68+
case 0x03: return "time_descriptor";
6969
case 0x04: return "audio_descriptor";
7070
default:
7171

src/main/java/nl/digitalekabeltelevisie/data/mpeg/descriptors/scte35/SegmentationDescriptor.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,16 @@ public SegmentationDescriptor(byte[] b, int offset, TableSection parent) {
184184
segmentation_type_id = getInt(b,localOffset++,1,MASK_8BITS);
185185
segment_num = getInt(b,localOffset++,1,MASK_8BITS);
186186
segments_expected = getInt(b,localOffset++,1,MASK_8BITS);
187-
if(segmentation_type_id == 0x34 ||segmentation_type_id == 0x36) {
188-
sub_segment_num = getInt(b,localOffset++,1,MASK_8BITS);
189-
sub_segments_expected = getInt(b,localOffset++,1,MASK_8BITS);
190-
}
187+
188+
//10.3.3.1. Segmentation descriptor details
189+
// Note: sub_segment_num and sub_segments_expected can form an optional appendix to the segmentation descriptor.
190+
// The presence or absence of this optional data block is determined by the descriptor loop’s descriptor_length.
191+
if (((b.length -localOffset) >= 2 ) &&
192+
(segmentation_type_id == 0x34 || segmentation_type_id == 0x36 ||
193+
segmentation_type_id == 0x38 || segmentation_type_id == 0x3A)) {
194+
sub_segment_num = getInt(b, localOffset++, 1, MASK_8BITS);
195+
sub_segments_expected = getInt(b, localOffset++, 1, MASK_8BITS);
196+
}
191197
}
192198
}
193199

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package nl.digitalekabeltelevisie.data.mpeg.descriptors.scte35;
2+
3+
import javax.swing.tree.DefaultMutableTreeNode;
4+
5+
import nl.digitalekabeltelevisie.controller.KVP;
6+
import nl.digitalekabeltelevisie.data.mpeg.psi.TableSection;
7+
8+
import static nl.digitalekabeltelevisie.util.Utils.*;
9+
10+
public class TimeDescriptor extends SCTE35Descriptor {
11+
12+
private long TAI_seconds;
13+
private long TAI_ns;
14+
private int UTC_offset;
15+
16+
17+
public TimeDescriptor(byte[] b, int offset, TableSection parent) {
18+
super(b, offset, parent);
19+
TAI_seconds = getLong(b,offset+6,6, 0xFFFFFFFFFFFFL);
20+
TAI_ns = getLong(b,offset+12,4, 0xFFFFFFFFL);
21+
UTC_offset = getInt(b,offset+16, 2, 0xFFFF);
22+
23+
}
24+
25+
26+
@Override
27+
public DefaultMutableTreeNode getJTreeNode(final int modus){
28+
final DefaultMutableTreeNode t = super.getJTreeNode(modus);
29+
t.add(new DefaultMutableTreeNode(new KVP("TAI_seconds",TAI_seconds ,null)));
30+
t.add(new DefaultMutableTreeNode(new KVP("TAI_ns",TAI_ns ,null)));
31+
t.add(new DefaultMutableTreeNode(new KVP("UTC_offset",UTC_offset ,null)));
32+
return t;
33+
}
34+
35+
}

0 commit comments

Comments
 (0)