Skip to content

Commit 36d2834

Browse files
Merge pull request #81 from paulhiggs/master
fix errors processing DVB-I_Info() data carried in the private_bytye of a URI_linkage_descriptor
2 parents bc766a6 + b66ecca commit 36d2834

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

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

+23-23
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ public class URILinkageDescriptor extends DVBExtensionDescriptor {
4949

5050
private static LookUpList dvb_i_endpoint_type_list = new LookUpList.Builder().
5151
add(0x00,"Not used").
52-
add(0x01,"DVB-I Serice List").
52+
add(0x01,"DVB-I Service List").
5353
add(0x02,"Service List Registry query").
5454
add(0x03,"Named DVB-I Service List").
5555
add(0x04,0xFF,"Reserved for future use").
5656
build();
5757

5858
private final int uri_linkage_type;
5959
private final int uri_length;
60-
private final byte[] uri_char;
60+
private String uri_char = "";
6161
private int min_polling_interval;
6262
private byte[] private_data_byte = null;
6363

@@ -69,30 +69,30 @@ public class URILinkageDescriptor extends DVBExtensionDescriptor {
6969

7070
public URILinkageDescriptor(final byte[] b, final int offset, final TableSection parent) {
7171
super(b, parent);
72-
int localOffset = PRIVATE_DATA_OFFSET;
73-
uri_linkage_type = getInt(b, localOffset++, 1, MASK_8BITS);
74-
uri_length = getInt(b, localOffset++, 1, MASK_8BITS);
75-
uri_char = copyOfRange(b, localOffset, localOffset + uri_length);
76-
localOffset += uri_length;
77-
72+
byte[] payload=getBytes(b, PRIVATE_DATA_OFFSET+1, descriptorLength-1);
73+
int localOffset = 0;
74+
uri_linkage_type = getInt(payload, localOffset++, 1, MASK_8BITS);
75+
uri_length = getInt(payload, localOffset++, 1, MASK_8BITS);
76+
uri_char = getString(payload, localOffset, uri_length);
77+
localOffset += uri_length;
78+
7879
if ((uri_linkage_type == 0x00) || (uri_linkage_type == 0x01)) {
79-
min_polling_interval = getInt(b, localOffset, 2, MASK_16BITS);
80-
localOffset += 2;
80+
min_polling_interval = getInt(payload, localOffset, 2, MASK_16BITS);
81+
localOffset += 2;
8182
}
82-
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-
}
83+
else if (uri_linkage_type == 0x03) { // for DVB-I. Refer to clause 5.1.3.3 of DVB A177
84+
dvb_i_endpoint_type = getInt(payload, localOffset++, 1, MASK_8BITS);
85+
if (dvb_i_endpoint_type == 0x03) {
86+
dvb_i_service_list_name_length = getInt(payload, localOffset++, 1, MASK_8BITS);
87+
dvb_i_service_list_name = getString(payload, localOffset, dvb_i_service_list_name_length);
88+
localOffset += dvb_i_service_list_name_length;
89+
dvb_i_service_list_provider_name_length = getInt(payload, localOffset++, 1, MASK_8BITS);
90+
dvb_i_service_list_provider_name = getString(payload, localOffset, dvb_i_service_list_provider_name_length);
91+
localOffset += dvb_i_service_list_provider_name_length;
9392
}
94-
private_data_byte = copyOfRange(b, localOffset, localOffset + descriptorLength + 2);
9593
}
94+
if (localOffset < payload.length)
95+
private_data_byte = copyOfRange(payload, localOffset, payload.length);
9696
}
9797

9898
@Override
@@ -106,7 +106,7 @@ public DefaultMutableTreeNode getJTreeNode(final int modus) {
106106
t.add(new KVP("min_polling_interval", min_polling_interval));
107107
}
108108
if (uri_linkage_type == 0x03) {
109-
t.add(new KVP("dvb-i endpoint_type", dvb_i_endpoint_type).setDescription(getDVBIEndpointType(dvb_i_endpoint_type)));
109+
t.add(new KVP("dvb-i end_point_type", dvb_i_endpoint_type).setDescription(getDVBIEndpointType(dvb_i_endpoint_type)));
110110
if (dvb_i_endpoint_type == 0x03) {
111111
t.add(new KVP("dvb-i service_list_name", dvb_i_service_list_name));
112112
t.add(new KVP("dvb-i service_list_provider_name", dvb_i_service_list_provider_name));

0 commit comments

Comments
 (0)