| /****************************************************************************** |
| * |
| * Copyright (C) 2016-2017 Cadence Design Systems, Inc. |
| * All rights reserved worldwide. |
| * |
| * Redistribution and use in source and binary forms, with or without modification, |
| * are permitted provided that the following conditions are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * 2. Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation and/or |
| * other materials provided with the distribution. |
| * |
| * 3. Neither the name of the copyright holder nor the names of its contributors |
| * may be used to endorse or promote products derived from this software without |
| * specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
| * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
| * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
| * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE |
| * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| * Copyright 2017 NXP |
| * |
| ****************************************************************************** |
| * |
| * API_AVI.c |
| * |
| ****************************************************************************** |
| */ |
| |
| #include "API_AVI.h" |
| #include "API_Infoframe.h" |
| |
| CDN_API_STATUS CDN_API_Set_AVI(state_struct *state, VIC_MODES vicMode, |
| VIC_PXL_ENCODING_FORMAT colorMode, |
| BT_TYPE ITUver) |
| { |
| u32 active_slot = vic_table[vicMode][H_BLANK]; |
| u32 line_width = vic_table[vicMode][H_TOTAL]; |
| u32 Hactive = line_width - active_slot + 1; |
| u32 Vactive = vic_table[vicMode][V_ACTIVE] + 1; |
| |
| u32 Hactive_l = Hactive - 256 * ((u32) Hactive / 256); |
| u32 Hactive_h = Hactive / 256; |
| u32 Vactive_l = Vactive - 256 * ((u32) Vactive / 256); |
| u32 Vactive_h = Vactive / 256; |
| |
| u32 packet_type = 0x82; |
| u32 packet_version = 0x2; |
| u32 packet_len = 0xD; |
| u32 packet_Y = 0; |
| u32 packet_C = 0; |
| u32 packet_R = 0; |
| u32 packet_VIC = 0; |
| u32 packet_PR = 0; |
| u8 packet[32]; |
| u8 len = sizeof(packet)/sizeof(u32); |
| u32 packet_HB0 = 0; |
| u32 packet_HB1 = 0; |
| u32 packet_HB2 = 0; |
| u32 packet_PB0 = 0; |
| u32 packet_PB1 = 0; |
| u32 packet_PB2 = 0; |
| u32 packet_PB3 = 0; |
| u32 packet_PB4 = 0; |
| u32 packet_PB5 = 0; |
| u32 packet_PB6 = 0; |
| u32 packet_PB7 = 0; |
| u32 packet_PB8 = 0; |
| u32 packet_PB9 = 0; |
| u32 packet_PB10 = 0; |
| u32 packet_PB11 = 0; |
| u32 packet_PB12 = 0; |
| u32 packet_PB13 = 0; |
| u32 PB1_13_chksum = 0; |
| u32 packet_chksum = 0; |
| |
| u32 packet_A0 = 1; |
| u32 packet_B = 0; |
| u32 packet_S = 0; |
| /* Picture Scsaling */ |
| u32 packet_SC = 0; |
| /* Aspect Ratio: Nodata=0 4:3=1 16:9=2 */ |
| u32 packet_M = 0; |
| /* Quantization Range Default=0 Limited Range=0x1 FullRange=0x2 Reserved 0x3 */ |
| u32 packet_Q = 0; |
| /* Quantization Range 0=Limited Range FullRange=0x1 Reserved 0x3/2 */ |
| u32 packet_YQ = 0; |
| /* Extended Colorimetry xvYCC601=0x0 xvYCC709=1 All other Reserved */ |
| u32 packet_EC = 0; |
| /* IT content nodata=0 ITcontent=1 */ |
| u32 packet_IT = 0; |
| /* Content Type */ |
| u32 packet_CN = 0; |
| |
| /* Active Format Aspec Ratio: |
| * Same As Picture = 0x8 4:3(Center)=0x9 16:9=0xA 14:9=0xB */ |
| packet_R = vic_table[vicMode][VIC_R3_0]; |
| /* Video Code (CEA) */ |
| packet_VIC = vic_table[vicMode][VIC]; |
| /* Pixel Repetition 0 ... 9 (1-10) */ |
| packet_PR = vic_table[vicMode][VIC_PR]; |
| |
| if (colorMode == PXL_RGB) |
| packet_Y = 0; |
| else if (colorMode == YCBCR_4_4_4) |
| packet_Y = 2; |
| else if (colorMode == YCBCR_4_2_2) |
| packet_Y = 1; |
| else if (colorMode == YCBCR_4_2_0) |
| packet_Y = 3; |
| |
| /* Colorimetry: Nodata=0 IT601=1 ITU709=2 */ |
| if (ITUver == BT_601) |
| packet_C = 1; |
| else if (ITUver == BT_709) |
| packet_C = 2; |
| else if (ITUver == 2) { |
| packet_C = 0; |
| packet_EC = 0; |
| } else |
| packet_C = 0; |
| |
| packet_HB0 = packet_type; |
| packet_HB1 = packet_version; |
| packet_HB2 = packet_len; |
| |
| packet_PB1 = 32 * packet_Y + 16 * packet_A0 + 4 * packet_B + packet_S; |
| packet_PB2 = 64 * packet_C + 16 * packet_M + packet_R; |
| packet_PB3 = |
| 128 * packet_IT + 16 * packet_EC + 4 * packet_Q + packet_SC; |
| packet_PB4 = packet_VIC; |
| packet_PB5 = 64 * packet_YQ + 16 * packet_CN + packet_PR; |
| packet_PB6 = 0; |
| packet_PB7 = 0; |
| packet_PB8 = Vactive_l; |
| packet_PB9 = Vactive_h; |
| packet_PB10 = 0; |
| packet_PB11 = 0; |
| packet_PB12 = Hactive_l; |
| packet_PB13 = Hactive_h; |
| |
| PB1_13_chksum = |
| (packet_HB0 + packet_HB1 + packet_HB2 + packet_PB1 + packet_PB2 + |
| packet_PB3 + packet_PB4 + packet_PB5 + packet_PB6 + packet_PB7 + |
| packet_PB8 + packet_PB9 + packet_PB10 + packet_PB11 + packet_PB12 + |
| packet_PB13); |
| packet_chksum = |
| 256 - (PB1_13_chksum - 256 * ((u32) PB1_13_chksum / 256)); |
| packet_PB0 = packet_chksum; |
| |
| packet[0] = 0; |
| packet[1] = packet_HB0; |
| packet[2] = packet_HB1; |
| packet[3] = packet_HB2; |
| packet[4] = packet_PB0; |
| packet[5] = packet_PB1; |
| packet[6] = packet_PB2; |
| packet[7] = packet_PB3; |
| packet[8] = packet_PB4; |
| packet[9] = packet_PB5; |
| packet[10] = packet_PB6; |
| packet[11] = packet_PB7; |
| packet[12] = packet_PB8; |
| packet[13] = packet_PB9; |
| packet[14] = packet_PB10; |
| packet[15] = packet_PB11; |
| packet[16] = packet_PB12; |
| packet[17] = packet_PB13; |
| |
| CDN_API_InfoframeSet(state, 0, len, (u32 *)&packet[0], packet_type); |
| |
| return CDN_OK; |
| } |