source: svn/newcon3bcm2_21bu/BSEAV/lib/mpeg2_ts_parse/psip_dccsct.c

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 3.2 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003, 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_dccsct.c $
11 * $brcm_Revision: 1 $
12 * $brcm_Date: 2/7/05 11:23p $
13 *
14 * [File Description:]
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /BSEAV/lib/mpeg2_ts_parse/psip_dccsct.c $
19 *
20 * 1   2/7/05 11:23p dlwin
21 * Merge down for release 2005_REFSW_MERGETOMAIN:
22 *
23 * Irvine_BSEAVSW_Devel/2   2/4/04 9:56a erickson
24 * PR9217: converted BDBG_ASSERT calls to CHECK calls. Don't assert on bad
25 * data.
26 *
27 * Irvine_BSEAVSW_Devel/1   8/29/03 5:02p marcusk
28 * Initial Version.
29 *
30 ***************************************************************************/
31#include "bstd.h"
32#include "psip_priv.h"
33#include "psip_dccsct.h"
34BDBG_MODULE(psip_dccsct);
35
36static int PSIP_DCCSCT_P_getUpdateByteOffset( const uint8_t *buf, int updateNum )
37{
38        uint8_t i;
39        int byteOffset = PSIP_TABLE_DATA_OFFSET + 1;
40
41        if( updateNum == -1 )
42        {
43                updateNum = buf[PSIP_TABLE_DATA_OFFSET];
44        }
45
46        /* Jump to correct table (or first byte after last table) */
47        for( i = 0; i < updateNum; i++ )
48        {
49                byteOffset += 2 + buf[byteOffset+1];
50                byteOffset += 2 + (TS_READ_16(&buf[byteOffset])&0x3FF);
51
52                CHECK( byteOffset <= TS_PSI_MAX_BYTE_OFFSET(buf) );
53        }
54
55        return byteOffset;
56}
57
58
59void PSIP_DCCSCT_getHeader( const uint8_t *buf, PSIP_DCCSCT_header *p_header )
60{
61        p_header->dccsct_type = TS_READ_16(&buf[TS_PSI_TABLE_ID_EXT_OFFSET]);
62        p_header->updates_defined = buf[PSIP_TABLE_DATA_OFFSET];
63}
64
65TS_PSI_descriptor PSIP_DCCSCT_getAdditionalDescriptor( const uint8_t *buf, int descriptorNum )
66{
67        int byteOffset;
68
69        byteOffset = PSIP_DCCSCT_P_getUpdateByteOffset( buf, -1 );
70        return TS_P_getDescriptor( &buf[byteOffset+2], (TS_READ_16(&buf[byteOffset])&0x3FF), descriptorNum );
71}
72
73BERR_Code PSIP_DCCT_getUpdate( const uint8_t *buf, int updateNum, PSIP_DCCSCT_update *p_update )
74{
75        int byteOffset;
76
77        if( updateNum >= buf[PSIP_TABLE_DATA_OFFSET] )
78        {
79                return BERR_INVALID_PARAMETER;
80        }
81
82        byteOffset = PSIP_DCCSCT_P_getUpdateByteOffset( buf, updateNum );
83        p_update->update_type = buf[byteOffset];
84        p_update->update.genre.genre_category_code = buf[byteOffset+2];
85
86        switch( p_update->update_type )
87        {
88        case PSIP_DCCSCT_new_genre_category:
89                /* Fallthrough */
90        case PSIP_DCCSCT_new_state:
91                p_update->update.genre.p_genre_category_name_text = &buf[byteOffset+3];
92                break;
93        case PSIP_DCCSCT_new_county:
94                p_update->update.county.dcc_county_location_code = (uint16_t)(TS_READ_16(&buf[byteOffset+3]) & 0x3FF);
95                p_update->update.county.p_dcc_county_location_code_text = &buf[byteOffset+5];
96                break;
97        default:
98                CHECK(false);
99                return BERR_INVALID_PARAMETER;
100        }
101
102        return BERR_SUCCESS;
103}
104
105TS_PSI_descriptor PSIP_DCCT_getUpdateDescriptor( const uint8_t *buf, int updateNum, int descriptorNum )
106{
107        int byteOffset;
108
109        byteOffset = PSIP_DCCSCT_P_getUpdateByteOffset( buf, updateNum );
110        byteOffset += 2 + buf[byteOffset+1];
111        return TS_P_getDescriptor( &buf[byteOffset+2], (TS_READ_16(&buf[byteOffset])&0x3FF), descriptorNum );
112}
Note: See TracBrowser for help on using the repository browser.