1/* ----------------------------------------------------------------
2 *
3 *
4 * File Name:  armVCM4P10_UnpackBlock2x2.c
5 * OpenMAX DL: v1.0.2
6 * Revision:   9641
7 * Date:       Thursday, February 7, 2008
8 *
9 * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
10 *
11 *
12 *
13 * H.264 inverse quantize and transform helper module
14 *
15 */
16
17#include "omxtypes.h"
18#include "armOMX.h"
19#include "omxVC.h"
20
21#include "armVC.h"
22
23/*
24 * Description
25 * Unpack a 2x2 block of coefficient-residual pair values
26 *
27 * Parameters:
28 * [in]	ppSrc	Double pointer to residual coefficient-position pair
29 *						buffer output by CALVC decoding
30 * [out]	ppSrc	*ppSrc is updated to the start of next non empty block
31 * [out]	pDst	Pointer to unpacked 4x4 block
32 */
33
34void armVCM4P10_UnpackBlock2x2(
35     const OMX_U8 **ppSrc,
36     OMX_S16* pDst
37)
38{
39    const OMX_U8 *pSrc = *ppSrc;
40    int i;
41    int Flag, Value;
42
43    for (i=0; i<4; i++)
44    {
45        pDst[i] = 0;
46    }
47
48    do
49    {
50        Flag  = *pSrc++;
51        if (Flag & 0x10)
52        {
53            /* 16 bit */
54            Value = *pSrc++;
55            Value = Value | ((*pSrc++)<<8);
56            if (Value & 0x8000)
57            {
58                Value -= 0x10000;
59            }
60        }
61        else
62        {
63            /* 8 bit */
64            Value = *pSrc++;
65            if (Value & 0x80)
66            {
67                Value -= 0x100;
68            }
69        }
70        i = Flag & 15;
71        pDst[i] = (OMX_S16)Value;
72    }
73    while ((Flag & 0x20)==0);
74
75    *ppSrc = pSrc;
76}
77
78/* End of file */
79