Skip to content

Commit bc766a6

Browse files
Merge pull request #80 from paulhiggs/master
Add support for AVS3 audio and video in a transport stream
2 parents c634327 + a15be19 commit bc766a6

File tree

11 files changed

+488
-59
lines changed

11 files changed

+488
-59
lines changed

build.bat

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
rem use maven to build the distribution jar
2+
mvn -B package --file pom.xml

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,9 @@ public static String getComponentType0x09String(final int stream_content_ext, fi
607607
case 0x1c -> "DTS-UHD receiver-mix audio description, mono, for the visually impaired ";
608608
case 0x1d -> "DTS-UHD receiver-mix audio description, stereo, for the visually impaired ";
609609
case 0x1e -> "DTS-UHD NGA Audio";
610+
case 0x20 -> "AVS3-P3 Next Generation Audio (NGA)";
611+
case 0x21 -> "AVS3-P3 broadcast-mix accessibility components";
612+
case 0x22 -> "AVS3-P3 receiver-mix accessibility components";
610613
default -> "reserved for future use";
611614
};
612615
case 0x02 ->
@@ -637,7 +640,7 @@ public static String getNextGenerationAudioComponentTypeString(final int compone
637640
res.append("content contains spoken subtitles, ");
638641
}
639642
if((component_type & 0b0000_0100) != 0) {
640-
res.append("ccontent contains audio description, ");
643+
res.append("content contains audio description, ");
641644
}
642645
res.append("preferred reproduction channel layout: ");
643646
switch (component_type & 0b0000_0011) {

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,18 @@ private static Descriptor getPrivateDVBSIDescriptor(final byte[] data, final Tab
295295
return new nl.digitalekabeltelevisie.data.mpeg.descriptors.privatedescriptors.au.LogicalChannelDescriptor(data, 0, tableSection, descriptorContext);
296296
}
297297

298-
} else if (private_data_specifier == 0x41565356) { // AVS
298+
} else if (private_data_specifier == 0x41565356) { // AVS Video
299299
switch (descriptor_tag) {
300300
case 0xD1:
301301
return new AVS3VideoDescriptor(data, 0, tableSection);
302302
}
303303
}
304+
else if (private_data_specifier == 0x41565341) { // AVS Audio
305+
switch (descriptor_tag) {
306+
case 0xD2:
307+
return new AVS3AudioDescriptor(data, 0, tableSection);
308+
}
309+
}
304310
logger.info("Unimplemented private descriptor, private_data_specifier=" + private_data_specifier
305311
+ ", descriptortag=" + descriptor_tag + ", tableSection=" + tableSection);
306312
return new Descriptor(data, 0, tableSection);

src/main/java/nl/digitalekabeltelevisie/data/mpeg/descriptors/extension/dvb/URILinkageDescriptor.java

+37-1
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,30 @@ public class URILinkageDescriptor extends DVBExtensionDescriptor {
4242
add(0x00,"Online SDT (OSDT) for CI Plus").
4343
add(0x01,"DVB-IPTV SD&S").
4444
add(0x02,"Material Resolution Server (MRS) for companion screen applications").
45-
add(0x03,0x7F,"Reserved for future use").
45+
add(0x03,"DVB-I").
46+
add(0x04,0x7F,"Reserved for future use").
4647
add(0x80,0xFF,"User defined").
4748
build();
4849

50+
private static LookUpList dvb_i_endpoint_type_list = new LookUpList.Builder().
51+
add(0x00,"Not used").
52+
add(0x01,"DVB-I Serice List").
53+
add(0x02,"Service List Registry query").
54+
add(0x03,"Named DVB-I Service List").
55+
add(0x04,0xFF,"Reserved for future use").
56+
build();
57+
4958
private final int uri_linkage_type;
5059
private final int uri_length;
5160
private final byte[] uri_char;
5261
private int min_polling_interval;
5362
private byte[] private_data_byte = null;
5463

64+
private int dvb_i_endpoint_type = 0;
65+
private int dvb_i_service_list_name_length = 0;
66+
private String dvb_i_service_list_name = "";
67+
private int dvb_i_service_list_provider_name_length = 0;
68+
private String dvb_i_service_list_provider_name = "";
5569

5670
public URILinkageDescriptor(final byte[] b, final int offset, final TableSection parent) {
5771
super(b, parent);
@@ -66,6 +80,17 @@ public URILinkageDescriptor(final byte[] b, final int offset, final TableSection
6680
localOffset += 2;
6781
}
6882
if ((PRIVATE_DATA_OFFSET + descriptorLength) < localOffset) {
83+
if (uri_linkage_type == 0x03) { // for DVB-I. Refer to clause 5.1.3.3 of DVB A177
84+
dvb_i_endpoint_type = getInt(b, localOffset++, 1, MASK_8BITS);
85+
if (dvb_i_endpoint_type == 0x03) {
86+
dvb_i_service_list_name_length = getInt(b, localOffset++, 1, MASK_8BITS);
87+
dvb_i_service_list_name = getString(b, localOffset, dvb_i_service_list_name_length);
88+
localOffset += dvb_i_service_list_name_length;
89+
dvb_i_service_list_provider_name_length = getInt(b, localOffset++, 1, MASK_8BITS);
90+
dvb_i_service_list_provider_name = getString(b, localOffset, dvb_i_service_list_provider_name_length);
91+
localOffset += dvb_i_service_list_provider_name_length;
92+
}
93+
}
6994
private_data_byte = copyOfRange(b, localOffset, localOffset + descriptorLength + 2);
7095
}
7196
}
@@ -80,6 +105,13 @@ public DefaultMutableTreeNode getJTreeNode(final int modus) {
80105
if ((uri_linkage_type == 0x00) || (uri_linkage_type == 0x01)) {
81106
t.add(new KVP("min_polling_interval", min_polling_interval));
82107
}
108+
if (uri_linkage_type == 0x03) {
109+
t.add(new KVP("dvb-i endpoint_type", dvb_i_endpoint_type).setDescription(getDVBIEndpointType(dvb_i_endpoint_type)));
110+
if (dvb_i_endpoint_type == 0x03) {
111+
t.add(new KVP("dvb-i service_list_name", dvb_i_service_list_name));
112+
t.add(new KVP("dvb-i service_list_provider_name", dvb_i_service_list_provider_name));
113+
}
114+
}
83115
if (private_data_byte != null) {
84116
t.add(new KVP("private_data_byte", private_data_byte));
85117
}
@@ -90,4 +122,8 @@ private static String getURILinkageTypeString(int uri_linkage_type) {
90122
return uri_linkage_type_list.get(uri_linkage_type);
91123
}
92124

125+
private static String getDVBIEndpointType(int dvb_i_endpoint_type) {
126+
return dvb_i_endpoint_type_list.get(dvb_i_endpoint_type);
127+
}
128+
93129
}

0 commit comments

Comments
 (0)