armVCM4P2_FillVLDBuffer.c revision 0c1bc742181ded4930842b46e9507372f0b1b963
1/**
2 *
3 * File Name:  armVCM4P2_FillVLDBuffer.c
4 * OpenMAX DL: v1.0.2
5 * Revision:   9641
6 * Date:       Thursday, February 7, 2008
7 *
8 * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
9 *
10 *
11 *
12 * Description:
13 * Contains module for VLC get bits from the stream
14 *
15 */
16
17#include "omxtypes.h"
18#include "armOMX.h"
19
20#include "armVCM4P2_ZigZag_Tables.h"
21
22
23/**
24 * Function: armVCM4P2_FillVLDBuffer
25 *
26 * Description:
27 * Performs filling of the coefficient buffer according to the run, level
28 * and sign, also updates the index
29 *
30 * Parameters:
31 * [in]  storeRun        Stored Run value (count of zeros)
32 * [in]  storeLevel      Stored Level value (non-zero value)
33 * [in]  sign            Flag indicating the sign of level
34 * [in]  last            status of the last flag
35 * [in]  pIndex          pointer to coefficient index in 8x8 matrix
36 * [out] pIndex          pointer to updated coefficient index in 8x8
37 *                       matrix
38 * [in]  pZigzagTable    pointer to the zigzag tables
39 * [out] pDst            pointer to the coefficient buffer of current
40 *                       block. Should be 32-bit aligned
41 * Return Value:
42 * Standard OMXResult result. See enumeration for possible result codes.
43 *
44 */
45
46OMXResult armVCM4P2_FillVLDBuffer(
47    OMX_U32 storeRun,
48    OMX_S16 * pDst,
49    OMX_S16 storeLevel,
50    OMX_U8  sign,
51    OMX_U8  last,
52    OMX_U8  * pIndex,
53    const OMX_U8 * pZigzagTable
54)
55{
56    /* Store the zero's as per the run length count */
57    for (;storeRun > 0; storeRun--, (*pIndex)++)
58    {
59        pDst[pZigzagTable[*pIndex]] = 0;
60    }
61    /* Store the level depending on the sign*/
62    if (sign == 1)
63    {
64        pDst[pZigzagTable[*pIndex]] = -storeLevel;
65    }
66    else
67    {
68        pDst[pZigzagTable[*pIndex]] = storeLevel;
69    }
70    (*pIndex)++;
71
72    /* If last is 1, fill the remaining elments of the buffer with zeros */
73    if (last == 1)
74    {
75        while (*pIndex < 64)
76        {
77            pDst[pZigzagTable[*pIndex]] = 0;
78            (*pIndex)++;
79        }
80    }
81
82    return OMX_Sts_NoErr;
83}
84
85