1 /* ///////////////////////////////////////////////////////////////////////
2 //
3 //               INTEL CORPORATION PROPRIETARY INFORMATION
4 //  This software is supplied under the terms of a license agreement or
5 //  nondisclosure agreement with Intel Corporation and may not be copied
6 //  or disclosed except in accordance with the terms of that agreement.
7 //        Copyright (c) 2008 Intel Corporation. All Rights Reserved.
8 //
9 //  Description: Parses VC-1 syntax elements MVRANGE and DMVRANGE.
10 //
11 */
12 
13 #include "vc1parse.h"
14 
15 /*------------------------------------------------------------------------------
16  * Parse syntax element MVRANGE, which exists for main and advanced profiles.
17  *------------------------------------------------------------------------------
18  */
19 
vc1_MVRangeDecode(void * ctxt,vc1_Info * pInfo)20 vc1_Status vc1_MVRangeDecode(void* ctxt, vc1_Info *pInfo)
21 {
22     vc1_Status status = VC1_STATUS_OK;
23     vc1_metadata_t *md = &pInfo->metadata;
24     vc1_PictureLayerHeader *picLayerHeader = &pInfo->picLayerHeader;
25 
26     if (md->EXTENDED_MV == 1)
27     {
28         VC1_GET_BITS9(1, picLayerHeader->MVRANGE);
29         if (picLayerHeader->MVRANGE)
30         {
31             VC1_GET_BITS9(1, picLayerHeader->MVRANGE);
32             if (picLayerHeader->MVRANGE)
33             {
34                 VC1_GET_BITS9(1, picLayerHeader->MVRANGE);
35                 picLayerHeader->MVRANGE += 1;
36             }
37             picLayerHeader->MVRANGE += 1;
38         }
39     }
40     else
41         picLayerHeader->MVRANGE = 0;
42 
43     return status;
44 }
45 
46 /*------------------------------------------------------------------------------
47  * Parse syntax element DMVRANGE.
48  *------------------------------------------------------------------------------
49  */
50 
vc1_DMVRangeDecode(void * ctxt,vc1_Info * pInfo)51 vc1_Status vc1_DMVRangeDecode(void* ctxt, vc1_Info *pInfo)
52 {
53     vc1_Status status = VC1_STATUS_OK;
54     vc1_metadata_t *md = &pInfo->metadata;
55     vc1_PictureLayerHeader *picLayerHeader = &pInfo->picLayerHeader;
56 
57     if (md->EXTENDED_DMV == 1)
58     {
59         VC1_GET_BITS9(1, picLayerHeader->DMVRANGE);
60         if (picLayerHeader->DMVRANGE == 0)
61             picLayerHeader->DMVRANGE = VC1_DMVRANGE_NONE;
62         else
63         {
64             VC1_GET_BITS9(1, picLayerHeader->DMVRANGE);
65             if (picLayerHeader->DMVRANGE == 0)
66                 picLayerHeader->DMVRANGE = VC1_DMVRANGE_HORIZONTAL_RANGE;
67             else
68             {
69                 VC1_GET_BITS9(1, picLayerHeader->DMVRANGE);
70                 if (picLayerHeader->DMVRANGE == 0)
71                     picLayerHeader->DMVRANGE = VC1_DMVRANGE_VERTICAL_RANGE;
72                 else
73                 {
74                     picLayerHeader->DMVRANGE =
75                         VC1_DMVRANGE_HORIZONTAL_VERTICAL_RANGE;
76                 }
77             }
78         }
79     }
80 
81     return status;
82 }
83