source: svn/trunk/newcon3bcm2_21bu/BSEAV/lib/mpeg2_ts_parse/psip_mgt.c

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 2.9 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-2007, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: psip_mgt.c $
11 * $brcm_Revision: 2 $
12 * $brcm_Date: 2/26/07 2:26p $
13 *
14 * [File Description:]
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /BSEAV/lib/mpeg2_ts_parse/psip_mgt.c $
19 *
20 * 2   2/26/07 2:26p marcusk
21 * PR 27668: Fixed in mainline.
22 *
23 * 1   2/7/05 11:26p dlwin
24 * Merge down for release 2005_REFSW_MERGETOMAIN:
25 *
26 * Irvine_BSEAVSW_Devel/2   2/4/04 9:56a erickson
27 * PR9217: converted BDBG_ASSERT calls to CHECK calls. Don't assert on bad
28 * data.
29 *
30 * Irvine_BSEAVSW_Devel/1   8/29/03 5:04p marcusk
31 * Initial Version.
32 *
33 ***************************************************************************/
34#include "bstd.h"
35#include "psip_priv.h"
36#include "psip_mgt.h"
37BDBG_MODULE(psip_mgt);
38
39static int PSIP_MGT_P_getTableByteOffset( const uint8_t *buf, int tableNum )
40{
41        uint16_t i;
42        int byteOffset = PSIP_TABLE_DATA_OFFSET + 2;
43
44        if( tableNum == -1 )
45        {
46                tableNum = TS_READ_16( &buf[PSIP_TABLE_DATA_OFFSET] );
47        }
48
49        /* Jump to correct table (or first byte after last table) */
50        for( i = 0; i < tableNum; i++ )
51        {
52                byteOffset += 11 + (TS_READ_16(&buf[byteOffset+9]) & 0x0FFF);
53
54                CHECK( byteOffset <= TS_PSI_MAX_BYTE_OFFSET(buf) );
55        }
56
57        return byteOffset;
58}
59
60uint16_t PSIP_MGT_getTablesDefined( const uint8_t *buf )
61{
62        CHECK( buf[0] == 0xC7 );
63        return TS_READ_16( &buf[PSIP_TABLE_DATA_OFFSET] );
64}
65
66TS_PSI_descriptor PSIP_MGT_getAdditionalDescriptor( const uint8_t *buf, int descriptorNum )
67{
68        int byteOffset;
69
70        CHECK( buf[0] == 0xC7 );
71
72        byteOffset = PSIP_MGT_P_getTableByteOffset( buf, -1 );
73        return TS_P_getDescriptor( &buf[byteOffset+2], (TS_READ_16(&buf[byteOffset]) & 0xFFF), descriptorNum );
74}
75
76BERR_Code PSIP_MGT_getTable( const uint8_t *buf, int tableNum, PSIP_MGT_table *p_table )
77{
78        int byteOffset;
79
80        CHECK( buf[0] == 0xC7 );
81
82        if( tableNum >= TS_READ_16( &buf[PSIP_TABLE_DATA_OFFSET] ) )
83        {
84                return BERR_INVALID_PARAMETER;
85        }
86
87        byteOffset = PSIP_MGT_P_getTableByteOffset( buf, tableNum );
88
89        p_table->table_type = TS_READ_16( &buf[byteOffset] );
90        p_table->table_type_PID = (uint16_t)(TS_READ_16( &buf[byteOffset+2] ) & 0x1FFF);
91        p_table->table_type_version_number = (uint8_t)(buf[byteOffset+4] & 0x1F);
92        p_table->number_bytes = TS_READ_32( &buf[byteOffset+5] );
93
94        return BERR_SUCCESS;
95}
96
97TS_PSI_descriptor PSIP_MGT_getTableDescriptor( const uint8_t *buf, int tableNum, int descriptorNum )
98{
99        int byteOffset;
100
101        CHECK( buf[0] == 0xC7 );
102
103        byteOffset = PSIP_MGT_P_getTableByteOffset( buf, tableNum );
104        return TS_P_getDescriptor( &buf[byteOffset+11], (TS_READ_16(&buf[byteOffset+9]) & 0xFFF), descriptorNum );
105}
Note: See TracBrowser for help on using the repository browser.