| 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: bacm_spdif.c $ |
|---|
| 11 | * $brcm_Revision: Hydra_Software_Devel/1 $ |
|---|
| 12 | * $brcm_Date: 3/15/07 3:17p $ |
|---|
| 13 | * |
|---|
| 14 | * Module Description: |
|---|
| 15 | * |
|---|
| 16 | * Revision History: |
|---|
| 17 | * |
|---|
| 18 | * $brcm_Log: /magnum/commonutils/acm/bacm_spdif.c $ |
|---|
| 19 | * |
|---|
| 20 | * Hydra_Software_Devel/1 3/15/07 3:17p rgreen |
|---|
| 21 | * PR27181: Initial audio common support for SPDIF Channel Status |
|---|
| 22 | * types/functions |
|---|
| 23 | * |
|---|
| 24 | * Hydra_Software_Devel/2 12/22/05 6:39p bandrews |
|---|
| 25 | * PR18809: Cleaned up compiler warnings |
|---|
| 26 | * |
|---|
| 27 | * Hydra_Software_Devel/1 9/22/05 9:42p bandrews |
|---|
| 28 | * PR17068: Refactored common spdif stuff. Improved status reporting. |
|---|
| 29 | ***************************************************************************/ |
|---|
| 30 | |
|---|
| 31 | #include "bacm_spdif.h" |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | BDBG_MODULE(BACM) ; |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | void BACM_SPDIF_InitChannelStatus(BACM_SPDIF_ChannelStatus * psChannelStatus) |
|---|
| 38 | { |
|---|
| 39 | if (psChannelStatus) |
|---|
| 40 | { |
|---|
| 41 | psChannelStatus->eApplication = BACM_SPDIF_Application_eConsumer; |
|---|
| 42 | psChannelStatus->eStreamType = BACM_SPDIF_StreamType_eLinear; |
|---|
| 43 | psChannelStatus->bCopyrighted = false; |
|---|
| 44 | psChannelStatus->uAdditionalFormatInfo.ePCM = BACM_SPDIF_PCM_AdditionalFormatInfo_2ChannelNoPreEmphasis; |
|---|
| 45 | psChannelStatus->eChannelStatusMode = BACM_SPDIF_ChannelStatusMode_e0; |
|---|
| 46 | psChannelStatus->uiCategoryCode = 0x0; |
|---|
| 47 | psChannelStatus->eSourceNumber = BACM_SPDIF_SourceNumber_eUnspecified; |
|---|
| 48 | psChannelStatus->eChannelNumber = BACM_SPDIF_ChannelNumber_eUnspecified; |
|---|
| 49 | psChannelStatus->eSamplingFrequency = BACM_SPDIF_SamplingFrequency_eUnspecified; |
|---|
| 50 | psChannelStatus->eClockAccuracy = BACM_SPDIF_ClockAccuracy_eLevel2; |
|---|
| 51 | psChannelStatus->eWordLength = BACM_SPDIF_WordLength_eUnspecifiedOf24; |
|---|
| 52 | psChannelStatus->eOriginalSamplingFrequency = BACM_SPDIF_OriginalSamplingFrequency_eUnspecified; |
|---|
| 53 | } |
|---|
| 54 | } |
|---|
| 55 | |
|---|
| 56 | |
|---|
| 57 | void BACM_SPDIF_ParseChannelStatus(BACM_SPDIF_ChannelStatus * psChannelStatus, uint8_t uiChannelStatusSize, uint8_t auiChannelStatus[]) |
|---|
| 58 | { |
|---|
| 59 | if (psChannelStatus) |
|---|
| 60 | { |
|---|
| 61 | if (uiChannelStatusSize > 0) |
|---|
| 62 | { |
|---|
| 63 | psChannelStatus->eApplication = |
|---|
| 64 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[0], CHAN_STAT0, APPLICATION); |
|---|
| 65 | psChannelStatus->eStreamType = |
|---|
| 66 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[0], CHAN_STAT0, STREAM_TYPE); |
|---|
| 67 | psChannelStatus->bCopyrighted = |
|---|
| 68 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[0], CHAN_STAT0, COPYRIGHT); |
|---|
| 69 | |
|---|
| 70 | if (psChannelStatus->eStreamType == BACM_SPDIF_StreamType_eLinear) |
|---|
| 71 | { |
|---|
| 72 | psChannelStatus->uAdditionalFormatInfo.ePCM = |
|---|
| 73 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[0], CHAN_STAT0, ADDED_FORMAT_INFO); |
|---|
| 74 | } |
|---|
| 75 | else |
|---|
| 76 | { |
|---|
| 77 | psChannelStatus->uAdditionalFormatInfo.eNonlinear = |
|---|
| 78 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[0], CHAN_STAT0, ADDED_FORMAT_INFO); |
|---|
| 79 | } |
|---|
| 80 | |
|---|
| 81 | psChannelStatus->eChannelStatusMode = |
|---|
| 82 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[0], CHAN_STAT0, MODE); |
|---|
| 83 | } |
|---|
| 84 | if (uiChannelStatusSize > 1) |
|---|
| 85 | { |
|---|
| 86 | psChannelStatus->uiCategoryCode = |
|---|
| 87 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[1], CHAN_STAT1, CATEGORY_CODE); |
|---|
| 88 | } |
|---|
| 89 | if (uiChannelStatusSize > 2) |
|---|
| 90 | { |
|---|
| 91 | psChannelStatus->eSourceNumber = |
|---|
| 92 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[2], CHAN_STAT2, SOURCE_NUM); |
|---|
| 93 | psChannelStatus->eChannelNumber = |
|---|
| 94 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[2], CHAN_STAT2, CHAN_NUM); |
|---|
| 95 | } |
|---|
| 96 | if (uiChannelStatusSize > 3) |
|---|
| 97 | { |
|---|
| 98 | psChannelStatus->eSamplingFrequency = |
|---|
| 99 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[3], CHAN_STAT3, FS); |
|---|
| 100 | psChannelStatus->eClockAccuracy = |
|---|
| 101 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[3], CHAN_STAT3, CLK_ACCURACY); |
|---|
| 102 | } |
|---|
| 103 | if (uiChannelStatusSize > 4) |
|---|
| 104 | { |
|---|
| 105 | psChannelStatus->eWordLength = |
|---|
| 106 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[4], CHAN_STAT4, WORD_LEN); |
|---|
| 107 | psChannelStatus->eOriginalSamplingFrequency = |
|---|
| 108 | BACM_SPDIF_GET_FIELD_DATA(auiChannelStatus[4], CHAN_STAT4, ORIG_FS); |
|---|
| 109 | } |
|---|
| 110 | |
|---|
| 111 | } |
|---|
| 112 | } |
|---|
| 113 | |
|---|
| 114 | |
|---|
| 115 | void BACM_SPDIF_ParsePreambleC(BACM_SPDIF_PreambleC * psPreambleC, uint16_t uiPreambleC) |
|---|
| 116 | { |
|---|
| 117 | if (psPreambleC) |
|---|
| 118 | { |
|---|
| 119 | psPreambleC->eDataType = |
|---|
| 120 | BACM_SPDIF_GET_FIELD_DATA(uiPreambleC, PC, DATA_TYPE); |
|---|
| 121 | |
|---|
| 122 | psPreambleC->bPayloadMayContainErrors = |
|---|
| 123 | BACM_SPDIF_GET_FIELD_DATA(uiPreambleC, PC, PAYLOAD_ERRORS); |
|---|
| 124 | |
|---|
| 125 | psPreambleC->uiDataTypeDependentInfo = |
|---|
| 126 | BACM_SPDIF_GET_FIELD_DATA(uiPreambleC, PC, TYPE_DEP_INFO); |
|---|
| 127 | |
|---|
| 128 | psPreambleC->uiBitstreamNumber = |
|---|
| 129 | BACM_SPDIF_GET_FIELD_DATA(uiPreambleC, PC, BS_NUM); |
|---|
| 130 | } |
|---|
| 131 | } |
|---|
| 132 | |
|---|