/*************************************************************************** * Copyright (c) 1998-2009, Broadcom Corporation * All Rights Reserved * Confidential Property of Broadcom Corporation * * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. * * $brcm_Workfile: printts.c $ * $brcm_Revision: 5 $ * $brcm_Date: 3/28/09 8:44a $ * * Module Description: * * Revision History: * * $brcm_Log: /BSEAV/lib/bcmplayer/utils/printts.c $ * * 5 3/28/09 8:44a erickson * PR42679: fixed cc check * * 4 7/12/07 11:57a erickson * PR30310: added note re: 204 byte packet streams * * 3 4/30/07 1:09p erickson * PR30310: added TIMING_MARKER, PICTURE_TAG. changed debug code to * function. * * 2 1/30/07 12:28p erickson * PR27189: extend -hdr feature * * Irvine_BSEAVSW_Devel/25 5/4/06 4:48p erickson * PR17108: added cc check * * Irvine_BSEAVSW_Devel/24 3/7/06 6:52a erickson * PR17108: fix warnings * * Irvine_BSEAVSW_Devel/23 2/6/06 1:00p ahulse * PR16207: Update to support 7411D BTP packets. Fix typecast warnings on * compile * * Irvine_BSEAVSW_Devel/22 1/6/06 10:17a erickson * PR17108: updated for magnum basemodules and 64 bit cpus * * Irvine_BSEAVSW_Devel/21 9/14/05 2:24p erickson * PR17148: converted to BCHP_7411_REV * * Irvine_BSEAVSW_Devel/20 9/2/05 12:44p erickson * PR16964: added -q and -pidonly options * * Irvine_BSEAVSW_Devel/19 9/1/05 3:37p erickson * PR16964: refactor * * Irvine_BSEAVSW_Devel/18 7/13/05 3:04p erickson * PR16207: added 7411d support and cleaned up btp packet printout * (interpret the data instead of a raw dump) * ****************************************************************/ #include "bstd.h" #include #include #include #include "ts_utils.h" #define NULL_PID 0x1fff void printPacket(const unsigned char *pkt, int packetsize) { static int cnt = 0; BSTD_UNUSED(packetsize); printf("packet %d: pid 0x%x\n", cnt++, b_get_pid(pkt)); if (b_is_btp(pkt)) { uint32_t *pktdata = (uint32_t *)&pkt[12]; int mode = b_get_btp_word(pkt, 0); if (!(pkt[5] & 0x80)) printf(" discontinuity_indicator is cleared\n"); #if BCHP_7411_VER == BCHP_VER_C0 if (mode == 3) /* PROCESS */ printf(" BTP packet: %s, start_byte %ld, packets %ld, end_byte_count %ld, PTS %#lx\n", b_btp_mode_str(mode), (long)be(pktdata[4])&0xFFFF, (long)be(pktdata[5])&0xFFFFFF, (long)be(pktdata[6])&0xFFFF, (long)be(pktdata[9])); else if (mode == 2) /* BUILD_REF */ printf(" BTP packet: %s, skip %ld\n", b_btp_mode_str(mode), (long)be(pktdata[1])&0xFFFF); else printf(" BTP packet: %s, skip %ld, display %ld, PTS %#lx\n", b_btp_mode_str(mode), (long)be(pktdata[1])&0xFFFF, (long)be(pktdata[2])&0xFFFF, (long)be(pktdata[9])); #elif defined BCHP_7411_VER if (mode == 3) /* PROCESS */ printf(" BTP packet: %s, start_byte %ld, packets %ld, end_byte_count %ld PTS %#lx\n", b_btp_mode_str(mode), (long)be(pktdata[4]), (long)be(pktdata[5]), (long)be(pktdata[6]), (long)be(pktdata[9]) ); else if (mode == 2) /* BUILD_REF */ printf(" BTP packet: %s, skip %ld\n", b_btp_mode_str(mode), (long)be(pktdata[1])); else printf(" BTP packet: %s, skip %ld, display %ld, PTS %#lx\n", b_btp_mode_str(mode), (long)be(pktdata[1]), (long)be(pktdata[2]), (long)be(pktdata[9])); #else printf(" BTP packet: %s, skip %u, display %u, discard head=%u, tail=%u, PTS %#lx\n", b_btp_mode_str(mode), be(pktdata[1]), be(pktdata[2]), be(pktdata[7]), be(pktdata[8]), (unsigned long)be(pktdata[9])); #endif } } void printTransportHeader(const unsigned char *buf) { /* TODO: fill this out */ printf(" transport_error: %d\n", (buf[2] & 0x80)?1:0); printf(" transport_scrambling_control: %d\n", (buf[3] & 0xb0)>>6); printf(" continuity_counter: %d\n", buf[3] & 0x0F); printf(" adaptation_field: %s\n", (buf[3] & 0x30) == 0x00 ? "reserved" : (buf[3] & 0x30) == 0x10 ? "none" : (buf[3] & 0x30) == 0x20 ? "w/o payload" : "w/ payload"); if (buf[3] & 0x20) { /* print adaptation field */ printf(" length %d\n", buf[4]); printf(" discontinuity %d\n", buf[5] & 0x80?1:0); printf(" random_access %d\n", buf[5] & 0x40?1:0); } } void printRawPacket(const unsigned char *buf, int packetsize) { int i; for (i=0;i> 4; if (adaptation_field_control != 0 && adaptation_field_control != 2) { if (!current_cc.discontinuity && this_cc != current_cc.next) { printf("Bad CC %d at packet %d\n", this_cc, cnt); } current_cc.next = this_cc + 1; if (current_cc.next == 0x10) current_cc.next = 0x0; current_cc.discontinuity = false; } } if (pidonly) { printf("pid 0x%x\n", b_get_pid(pkt)); } else { if (!onlyPrintBad) printPacket(pkt, packetsize); if (do_printTransportHeader) printTransportHeader(pkt); if (raw) printRawPacket(pkt, packetsize); } cnt++; } fclose(file); } return 0; }