blob: f09f5d54c3b2282602fb9fb6e19369adbb70b857 [file] [log] [blame]
/*
* Copyright (C) 2007-2008 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/**
*
* File Name: armVCM4P2_FillVLDBuffer.c
* OpenMAX DL: v1.0.2
* Revision: 9641
* Date: Thursday, February 7, 2008
*
*
*
*
* Description:
* Contains module for VLC get bits from the stream
*
*/
#include "omxtypes.h"
#include "armOMX.h"
#include "armVCM4P2_ZigZag_Tables.h"
/**
* Function: armVCM4P2_FillVLDBuffer
*
* Description:
* Performs filling of the coefficient buffer according to the run, level
* and sign, also updates the index
*
* Parameters:
* [in] storeRun Stored Run value (count of zeros)
* [in] storeLevel Stored Level value (non-zero value)
* [in] sign Flag indicating the sign of level
* [in] last status of the last flag
* [in] pIndex pointer to coefficient index in 8x8 matrix
* [out] pIndex pointer to updated coefficient index in 8x8
* matrix
* [in] pZigzagTable pointer to the zigzag tables
* [out] pDst pointer to the coefficient buffer of current
* block. Should be 32-bit aligned
* Return Value:
* Standard OMXResult result. See enumeration for possible result codes.
*
*/
OMXResult armVCM4P2_FillVLDBuffer(
OMX_U32 storeRun,
OMX_S16 * pDst,
OMX_S16 storeLevel,
OMX_U8 sign,
OMX_U8 last,
OMX_U8 * pIndex,
const OMX_U8 * pZigzagTable
)
{
/* Store the zero's as per the run length count */
for (;storeRun > 0; storeRun--, (*pIndex)++)
{
pDst[pZigzagTable[*pIndex]] = 0;
}
/* Store the level depending on the sign*/
if (sign == 1)
{
pDst[pZigzagTable[*pIndex]] = -storeLevel;
}
else
{
pDst[pZigzagTable[*pIndex]] = storeLevel;
}
(*pIndex)++;
/* If last is 1, fill the remaining elments of the buffer with zeros */
if (last == 1)
{
while (*pIndex < 64)
{
pDst[pZigzagTable[*pIndex]] = 0;
(*pIndex)++;
}
}
return OMX_Sts_NoErr;
}