178e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar/* 278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Copyright (C) 2007-2008 ARM Limited 378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * you may not use this file except in compliance with the License. 678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * You may obtain a copy of the License at 778e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 878e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 978e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 1078e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Unless required by applicable law or agreed to in writing, software 1178e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 1278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * See the License for the specific language governing permissions and 1478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * limitations under the License. 1578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 1678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar */ 170c1bc742181ded4930842b46e9507372f0b1b963James Dong/* ---------------------------------------------------------------- 180c1bc742181ded4930842b46e9507372f0b1b963James Dong * 190c1bc742181ded4930842b46e9507372f0b1b963James Dong * 200c1bc742181ded4930842b46e9507372f0b1b963James Dong * File Name: omxVCM4P10_DecodeCoeffsToPairCAVLC.c 210c1bc742181ded4930842b46e9507372f0b1b963James Dong * OpenMAX DL: v1.0.2 220c1bc742181ded4930842b46e9507372f0b1b963James Dong * Revision: 12290 230c1bc742181ded4930842b46e9507372f0b1b963James Dong * Date: Wednesday, April 9, 2008 240c1bc742181ded4930842b46e9507372f0b1b963James Dong * 250c1bc742181ded4930842b46e9507372f0b1b963James Dong * 260c1bc742181ded4930842b46e9507372f0b1b963James Dong * 270c1bc742181ded4930842b46e9507372f0b1b963James Dong * 280c1bc742181ded4930842b46e9507372f0b1b963James Dong * H.264 decode coefficients module 290c1bc742181ded4930842b46e9507372f0b1b963James Dong * 300c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 310c1bc742181ded4930842b46e9507372f0b1b963James Dong 320c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxtypes.h" 330c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armOMX.h" 340c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxVC.h" 350c1bc742181ded4930842b46e9507372f0b1b963James Dong 360c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armCOMM.h" 370c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armVC.h" 380c1bc742181ded4930842b46e9507372f0b1b963James Dong 390c1bc742181ded4930842b46e9507372f0b1b963James Dong/** 400c1bc742181ded4930842b46e9507372f0b1b963James Dong * Function: omxVCM4P10_DecodeCoeffsToPairCAVLC 410c1bc742181ded4930842b46e9507372f0b1b963James Dong * 420c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 430c1bc742181ded4930842b46e9507372f0b1b963James Dong * Performs CAVLC decoding and inverse zigzag scan for 4x4 block of 440c1bc742181ded4930842b46e9507372f0b1b963James Dong * Intra16x16DCLevel, Intra16x16ACLevel,LumaLevel, and ChromaACLevel. 450c1bc742181ded4930842b46e9507372f0b1b963James Dong * Inverse field scan is not supported. The decoded coefficients in packed 460c1bc742181ded4930842b46e9507372f0b1b963James Dong * position-coefficient buffer are stored in increasing zigzag order instead 470c1bc742181ded4930842b46e9507372f0b1b963James Dong * of position order. 480c1bc742181ded4930842b46e9507372f0b1b963James Dong * 490c1bc742181ded4930842b46e9507372f0b1b963James Dong * Remarks: 500c1bc742181ded4930842b46e9507372f0b1b963James Dong * 510c1bc742181ded4930842b46e9507372f0b1b963James Dong * Parameters: 520c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in] ppBitStream Double pointer to current byte in bit stream buffer 530c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in] pOffset Pointer to current bit position in the byte pointed 540c1bc742181ded4930842b46e9507372f0b1b963James Dong * to by *ppBitStream 550c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in] sMaxNumCoeff Maximum number of non-zero coefficients in current 560c1bc742181ded4930842b46e9507372f0b1b963James Dong * block 570c1bc742181ded4930842b46e9507372f0b1b963James Dong * [in] sVLCSelect VLC table selector, obtained from number of non-zero 580c1bc742181ded4930842b46e9507372f0b1b963James Dong * AC coefficients of above and left 4x4 blocks. It is 590c1bc742181ded4930842b46e9507372f0b1b963James Dong * equivalent to the variable nC described in H.264 standard 600c1bc742181ded4930842b46e9507372f0b1b963James Dong * table 9-5, except its value can��t be less than zero. 610c1bc742181ded4930842b46e9507372f0b1b963James Dong * [out] ppBitStream *ppBitStream is updated after each block is decoded 620c1bc742181ded4930842b46e9507372f0b1b963James Dong * [out] pOffset *pOffset is updated after each block is decoded 630c1bc742181ded4930842b46e9507372f0b1b963James Dong * [out] pNumCoeff Pointer to the number of nonzero coefficients in 640c1bc742181ded4930842b46e9507372f0b1b963James Dong * this block 650c1bc742181ded4930842b46e9507372f0b1b963James Dong * [out] ppPosCoefbuf Double pointer to destination residual 660c1bc742181ded4930842b46e9507372f0b1b963James Dong * coefficient-position pair buffer 670c1bc742181ded4930842b46e9507372f0b1b963James Dong * Return Value: 680c1bc742181ded4930842b46e9507372f0b1b963James Dong * Standard omxError result. See enumeration for possible result codes. 690c1bc742181ded4930842b46e9507372f0b1b963James Dong * 700c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 710c1bc742181ded4930842b46e9507372f0b1b963James Dong 720c1bc742181ded4930842b46e9507372f0b1b963James DongOMXResult omxVCM4P10_DecodeCoeffsToPairCAVLC( 730c1bc742181ded4930842b46e9507372f0b1b963James Dong const OMX_U8** ppBitStream, 740c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_S32* pOffset, 750c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8* pNumCoeff, 760c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8**ppPosCoefbuf, 770c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT sVLCSelect, 780c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT sMaxNumCoeff 790c1bc742181ded4930842b46e9507372f0b1b963James Dong ) 800c1bc742181ded4930842b46e9507372f0b1b963James Dong{ 810c1bc742181ded4930842b46e9507372f0b1b963James Dong return armVCM4P10_DecodeCoeffsToPair(ppBitStream, pOffset, pNumCoeff, 820c1bc742181ded4930842b46e9507372f0b1b963James Dong ppPosCoefbuf, sVLCSelect, sMaxNumCoeff); 830c1bc742181ded4930842b46e9507372f0b1b963James Dong} 84