Lines Matching refs:data

25 import com.android.usbtuner.data.Channel;
26 import com.android.usbtuner.data.PsiData.PatItem;
27 import com.android.usbtuner.data.PsiData.PmtItem;
28 import com.android.usbtuner.data.PsipData.Ac3AudioDescriptor;
29 import com.android.usbtuner.data.PsipData.CaptionServiceDescriptor;
30 import com.android.usbtuner.data.PsipData.ContentAdvisoryDescriptor;
31 import com.android.usbtuner.data.PsipData.EitItem;
32 import com.android.usbtuner.data.PsipData.EttItem;
33 import com.android.usbtuner.data.PsipData.ExtendedChannelNameDescriptor;
34 import com.android.usbtuner.data.PsipData.GenreDescriptor;
35 import com.android.usbtuner.data.PsipData.Iso639LanguageDescriptor;
36 import com.android.usbtuner.data.PsipData.MgtItem;
37 import com.android.usbtuner.data.PsipData.PsipSection;
38 import com.android.usbtuner.data.PsipData.RatingRegion;
39 import com.android.usbtuner.data.PsipData.RegionalRating;
40 import com.android.usbtuner.data.PsipData.TsDescriptor;
41 import com.android.usbtuner.data.PsipData.VctItem;
42 import com.android.usbtuner.data.Track.AtscAudioTrack;
43 import com.android.usbtuner.data.Track.AtscCaptionTrack;
314 public void parseSections(ByteArrayBuffer data) {
316 while (pos + 3 <= data.length()) {
317 if ((data.byteAt(pos) & 0xff) == 0xff) {
319 data.setLength(0);
323 (((data.byteAt(pos + 1) & 0x0f) << 8) | (data.byteAt(pos + 2) & 0xff)) + 3;
324 if (pos + sectionLength > data.length()) {
328 Log.d(TAG, "parseSections 0x" + Integer.toHexString(data.byteAt(pos) & 0xff));
330 parseSection(Arrays.copyOfRange(data.buffer(), pos, pos + sectionLength));
343 private void parseSection(byte[] data) {
344 if (!checkSanity(data)) {
348 PsipSection section = PsipSection.create(data);
357 int versionNumber = (data[5] & 0x3e) >> 1;
366 switch (data[0]) {
368 result = parsePAT(data);
371 result = parsePMT(data);
374 result = parseMGT(data);
378 result = parseVCT(data);
381 result = parseEIT(data);
384 result = parseETT(data);
394 private boolean parsePAT(byte[] data) {
401 for (; pos < data.length - 4; pos = pos + 4) {
402 if (pos > data.length - 4 - 4) {
406 int programNo = ((data[pos] & 0xff) << 8) | (data[pos + 1] & 0xff);
407 int pmtPid = ((data[pos + 2] & 0x1f) << 8) | (data[pos + 3] & 0xff);
416 private boolean parsePMT(byte[] data) {
417 int table_id_ext = ((data[3] & 0xff) << 8) | (data[4] & 0xff);
421 if (data.length <= 11) {
425 int pcrPid = (data[8] & 0x1f) << 8 | data[9];
426 int programInfoLen = (data[10] & 0x0f) << 8 | data[11];
428 List<TsDescriptor> descriptors = parseDescriptors(data, pos, pos + programInfoLen);
434 for (; pos < data.length - 4;) {
435 int streamType = data[pos] & 0xff;
436 int esPid = (data[pos + 1] & 0x1f) << 8 | (data[pos + 2] & 0xff);
437 int esInfoLen = (data[pos + 3] & 0xf) << 8 | (data[pos + 4] & 0xff);
438 if (data.length < pos + esInfoLen + 5) {
442 descriptors = parseDescriptors(data, pos + 5, pos + 5 + esInfoLen);
459 private boolean parseMGT(byte[] data) {
464 if (data.length <= 10) {
468 int tablesDefined = ((data[9] & 0xff) << 8) | (data[10] & 0xff);
472 if (data.length <= pos + 10) {
476 int tableType = ((data[pos] & 0xff) << 8) | (data[pos + 1] & 0xff);
477 int tableTypePid = ((data[pos + 2] & 0x1f) << 8) | (data[pos + 3] & 0xff);
478 int descriptorsLength = ((data[pos + 9] & 0x0f) << 8) | (data[pos + 10] & 0xff);
482 if ((data[pos] & 0xf0) != 0xf0) {
492 private boolean parseVCT(byte[] data) {
497 if (data.length <= 9) {
501 int numChannelsInSection = (data[9] & 0xff);
505 if (data.length <= pos + 31) {
510 int shortNameSize = getShortNameSize(data, pos);
513 Arrays.copyOfRange(data, pos, pos + shortNameSize), "UTF-16");
518 if ((data[pos + 14] & 0xf0) != 0xf0) {
522 int majorNumber = ((data[pos + 14] & 0x0f) << 6) | ((data[pos + 15] & 0xff) >> 2);
523 int minorNumber = ((data[pos + 15] & 0x03) << 8) | (data[pos + 16] & 0xff);
530 int channelTsid = ((data[pos + 22] & 0xff) << 8) | (data[pos + 23] & 0xff);
531 int programNumber = ((data[pos + 24] & 0xff) << 8) | (data[pos + 25] & 0xff);
532 boolean accessControlled = (data[pos + 26] & 0x20) != 0;
533 boolean hidden = (data[pos + 26] & 0x10) != 0;
534 int serviceType = (data[pos + 27] & 0x3f);
535 int sourceId = ((data[pos + 28] & 0xff) << 8) | (data[pos + 29] & 0xff);
537 int descriptorsLength = ((data[pos + 30] & 0x03) << 8) | (data[pos + 31] & 0xff);
539 if (data.length < pos) {
544 data, descriptorsPos, descriptorsPos + descriptorsLength);
569 if ((data[pos] & 0xfc) != 0xfc) {
579 private boolean parseEIT(byte[] data) {
584 if (data.length <= 9) {
588 int sourceId = ((data[3] & 0xff) << 8) | (data[4] & 0xff);
589 int numEventsInSection = (data[9] & 0xff);
594 if (data.length <= pos + 9) {
598 if ((data[pos] & 0xc0) != 0xc0) {
602 int eventId = ((data[pos] & 0x3f) << 8) + (data[pos + 1] & 0xff);
603 long startTime = ((data[pos + 2] & (long) 0xff) << 24) | ((data[pos + 3] & 0xff) << 16)
604 | ((data[pos + 4] & 0xff) << 8) | (data[pos + 5] & 0xff);
605 int lengthInSecond = ((data[pos + 6] & 0x0f) << 16)
606 | ((data[pos + 7] & 0xff) << 8) | (data[pos + 8] & 0xff);
607 int titleLength = (data[pos + 9] & 0xff);
608 if (data.length <= pos + 10 + titleLength + 1) {
614 titleText = extractText(data, pos + 10);
616 if ((data[pos + 10 + titleLength] & 0xf0) != 0xf0) {
620 int descriptorsLength = ((data[pos + 10 + titleLength] & 0x0f) << 8)
621 | (data[pos + 10 + titleLength + 1] & 0xff);
623 if (data.length < descriptorsPos + descriptorsLength) {
628 data, descriptorsPos, descriptorsPos + descriptorsLength);
648 private boolean parseETT(byte[] data) {
653 if (data.length <= 12) {
657 int sourceId = ((data[9] & 0xff) << 8) | (data[10] & 0xff);
658 int eventId = (((data[11] & 0xff) << 8) | (data[12] & 0xff)) >> 2;
659 String text = extractText(data, 13);
810 private static List<TsDescriptor> parseDescriptors(byte[] data, int offset, int limit) {
813 if (data.length < limit) {
818 int tag = data[pos] & 0xff;
819 int length = data[pos + 1] & 0xff;
832 descriptor = parseContentAdvisory(data, pos, pos + length + 2);
836 descriptor = parseCaptionService(data, pos, pos + length + 2);
840 descriptor = parseLongChannelName(data, pos, pos + length + 2);
844 descriptor = parseGenre(data, pos, pos + length + 2);
848 descriptor = parseAc3AudioStream(data, pos, pos + length + 2);
852 descriptor = parseIso639Language(data, pos, pos + length + 2);
868 private static Iso639LanguageDescriptor parseIso639Language(byte[] data, int pos, int limit) {
878 String language = new String(data, pos, 3);
879 int audioType = data[pos + 3] & 0xff;
889 private static CaptionServiceDescriptor parseCaptionService(byte[] data, int pos, int limit) {
898 int numberServices = data[pos] & 0x1f;
905 String language = new String(Arrays.copyOfRange(data, pos, pos + 3));
907 boolean ccType = (data[pos] & 0x80) != 0;
911 int captionServiceNumber = data[pos] & 0x3f;
913 boolean easyReader = (data[pos] & 0x80) != 0;
914 boolean wideAspectRatio = (data[pos] & 0x40) != 0;
916 reserved[0] = (byte) (data[pos] << 2);
917 reserved[0] |= (byte) ((data[pos + 1] & 0xc0) >>> 6);
918 reserved[1] = (byte) ((data[pos + 1] & 0x3f) << 2);
930 private static ContentAdvisoryDescriptor parseContentAdvisory(byte[] data, int pos, int limit) {
936 int count = data[pos + 2] & 0x3f;
945 int ratingRegion = data[pos] & 0xff;
946 int dimensionCount = data[pos + 1] & 0xff;
953 int dimensionIndex = data[pos] & 0xff;
954 int ratingValue = data[pos + 1] & 0x0f;
962 int ratingDescriptionLength = data[pos] & 0xff;
968 String ratingDescription = extractText(data, pos);
975 private static ExtendedChannelNameDescriptor parseLongChannelName(byte[] data, int pos,
982 String text = extractText(data, pos);
990 private static GenreDescriptor parseGenre(byte[] data, int pos, int limit) {
992 int attributeCount = data[pos] & 0x1f;
1001 int genreCode = data[pos] & 0xff;
1019 private static TsDescriptor parseAc3AudioStream(byte[] data, int pos, int limit) {
1026 byte sampleRateCode = (byte) ((data[pos] & 0xe0) >> 5);
1027 byte bsid = (byte) (data[pos] & 0x1f);
1029 byte bitRateCode = (byte) ((data[pos] & 0xfc) >> 2);
1030 byte surroundMode = (byte) (data[pos] & 0x03);
1032 byte bsmod = (byte) ((data[pos] & 0xe0) >> 5);
1033 int numChannels = (data[pos] & 0x1e) >> 1;
1034 boolean fullSvc = (data[pos] & 0x01) != 0;
1036 byte langCod = data[pos];
1044 langCod2 = data[pos];
1055 mainId = (byte) ((data[pos] & 0xe0) >> 5);
1056 priority = (byte) ((data[pos] & 0x18) >> 3);
1057 if ((data[pos] & 0x07) != 0x07) {
1062 asvcflags = data[pos];
1105 int textLen = (data[pos] & 0xfe) >> 1;
1106 boolean textCode = (data[pos] & 0x01) != 0;
1115 text = new String(data, pos, textLen);
1117 text = new String(data, pos, textLen, Charset.forName("UTF-16"));
1125 boolean languageFlag1 = (data[pos] & 0x80) != 0;
1126 boolean languageFlag2 = (data[pos] & 0x40) != 0;
1127 if ((data[pos] & 0x3f) != 0x3f) {
1137 language = new String(data, pos, 3);
1141 language2 = new String(data, pos, 3);
1150 private static int getShortNameSize(byte[] data, int offset) {
1152 if (data[offset + i] == 0 && data[offset + i + 1] == 0) {
1159 private static String extractText(byte[] data, int pos) {
1160 if (data.length < pos) {
1163 int numStrings = data[pos] & 0xff;
1166 if (data.length <= pos + 3) {
1170 int numSegments = data[pos + 3] & 0xff;
1173 if (data.length <= pos + 2) {
1177 int compressionType = data[pos] & 0xff;
1178 int mode = data[pos + 1] & 0xff;
1179 int numBytes = data[pos + 2] & 0xff;
1180 if (data.length < pos + 3 + numBytes) {
1184 byte[] bytes = Arrays.copyOfRange(data, pos + 3, pos + 3 + numBytes);
1205 private static boolean checkSanity(byte[] data) {
1206 if (data.length <= 1) {
1209 boolean hasCRC = (data[1] & 0x80) != 0; // section_syntax_indicator
1212 for(byte b : data) {