1aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
2aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
3aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Copyright (C) 2015 The Android Open Source Project
4aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
5aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Licensed under the Apache License, Version 2.0 (the "License");
6aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * you may not use this file except in compliance with the License.
7aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * You may obtain a copy of the License at:
8aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
9aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * http://www.apache.org/licenses/LICENSE-2.0
10aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
11aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Unless required by applicable law or agreed to in writing, software
12aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * distributed under the License is distributed on an "AS IS" BASIS,
13aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * See the License for the specific language governing permissions and
15aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * limitations under the License.
16aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
17aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *****************************************************************************
18aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
20aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include <string.h>
21aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
22aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "iv_datatypedef.h"
23aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "iv.h"
24aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "ivd.h"
25aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_macros.h"
26aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_buf_mgr.h"
27aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_disp_mgr.h"
28aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_defs.h"
29aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_inter_pred.h"
30aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_idct.h"
31aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_format_conv.h"
32aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_mem_func.h"
33aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_platform_macros.h"
34aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "ithread.h"
35aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_job_queue.h"
36aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
37aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2d.h"
38aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2d_bitstream.h"
39aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2d_api.h"
40aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2d_structs.h"
41aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2_globals.h"
42aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#include "impeg2d_pic_proc.h"
438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "impeg2d_deinterlace.h"
44aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
45aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
46aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
47aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
48aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_next_start_code
49aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
50aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Peek for next_start_code from the stream_t.
51aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
52aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
53aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder Context
54aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
55aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
56aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************/
57aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_next_start_code(dec_state_t *ps_dec)
58aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
59aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
60aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
61aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush_to_byte_boundary(ps_stream);
62aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
63aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while ((impeg2d_bit_stream_nxt(ps_stream,START_CODE_PREFIX_LEN) != START_CODE_PREFIX)
64aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        && (ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset))
65aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
66aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_get(ps_stream,8);
67aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
68aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return;
69aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
70aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
71aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_next_code
72aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
73aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Peek for next_start_code from the stream_t.
74aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
75aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
76aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder Context
77aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
78aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
79aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************/
80aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_next_code(dec_state_t *ps_dec, UWORD32 u4_start_code_val)
81aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
82aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
83aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
84aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush_to_byte_boundary(ps_stream);
85aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
86aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while ((impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) != u4_start_code_val)
87aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        && (ps_dec->s_bit_stream.u4_offset <= ps_dec->s_bit_stream.u4_max_offset))
88aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
89aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
90aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if (impeg2d_bit_stream_get(ps_stream,8) != 0)
91aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
92aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /* Ignore stuffing bit errors. */
93aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
94aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
95aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
96aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return;
97aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
98aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
99aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_peek_next_start_code
100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Peek for next_start_code from the stream_t.
102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder Context
105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************/
108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_peek_next_start_code(dec_state_t *ps_dec)
109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush_to_byte_boundary(ps_stream);
113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while ((impeg2d_bit_stream_nxt(ps_stream,START_CODE_PREFIX_LEN) != START_CODE_PREFIX)
115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        && (ps_dec->s_bit_stream.u4_offset <= ps_dec->s_bit_stream.u4_max_offset))
116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_get(ps_stream,8);
118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return;
120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_seq_hdr
124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Decodes Sequence header information
126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder Context
129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************/
132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_seq_hdr(dec_state_t *ps_dec)
133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16 u2_height;
137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16 u2_width;
138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) != SEQUENCE_HEADER_CODE)
140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND;
143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u2_width    = impeg2d_bit_stream_get(ps_stream,12);
148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u2_height   = impeg2d_bit_stream_get(ps_stream,12);
149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if ((u2_width != ps_dec->u2_horizontal_size)
151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    || (u2_height != ps_dec->u2_vertical_size))
152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if (0 == ps_dec->u2_header_done)
154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /* This is the first time we are reading the resolution */
156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec->u2_horizontal_size = u2_width;
157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec->u2_vertical_size = u2_height;
158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if (0 == ps_dec->u4_frm_buf_stride)
159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
160903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar                ps_dec->u4_frm_buf_stride  = (UWORD32) (u2_width);
161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if((u2_width > ps_dec->u2_create_max_width)
166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            || (u2_height > ps_dec->u2_create_max_height))
167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                IMPEG2D_ERROR_CODES_T e_error = IMPEG2D_UNSUPPORTED_DIMENSIONS;
169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_dec->u2_reinit_max_height   = u2_height;
171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ps_dec->u2_reinit_max_width    = u2_width;
172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return e_error;
174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* The resolution has changed */
178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return (IMPEG2D_ERROR_CODES_T)IVD_RES_CHANGED;
179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if((ps_dec->u2_horizontal_size > ps_dec->u2_create_max_width)
184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    || (ps_dec->u2_vertical_size > ps_dec->u2_create_max_height))
185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        IMPEG2D_ERROR_CODES_T e_error = IMPEG2D_UNSUPPORTED_DIMENSIONS;
187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return SET_IVD_FATAL_ERROR(e_error);
188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush the following as they are not being used                         */
193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* aspect_ratio_info (4 bits)                                             */
194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_aspect_ratio_info = impeg2d_bit_stream_get(ps_stream,4);
196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Frame rate code(4 bits)                                                */
199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_frame_rate_code = impeg2d_bit_stream_get(ps_stream,4);
201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush the following as they are not being used                         */
203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* bit_rate_value (18 bits)                                               */
204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,18);
206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    GET_MARKER_BIT(ps_dec,ps_stream);
207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush the following as they are not being used                         */
209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* vbv_buffer_size_value(10 bits), constrained_parameter_flag (1 bit)     */
210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,11);
212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Quantization matrix for the intra blocks                               */
215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(impeg2d_bit_stream_get_bit(ps_stream) == 1)
217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD16 i;
219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < NUM_PELS_IN_BLOCK; i++)
220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec->au1_intra_quant_matrix[gau1_impeg2_inv_scan_zig_zag[i]] =  (UWORD8)impeg2d_bit_stream_get(ps_stream,8);
222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        memcpy(ps_dec->au1_intra_quant_matrix,gau1_impeg2_intra_quant_matrix_default,
228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                NUM_PELS_IN_BLOCK);
229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Quantization matrix for the inter blocks                               */
233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(impeg2d_bit_stream_get_bit(ps_stream) == 1)
235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD16 i;
237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < NUM_PELS_IN_BLOCK; i++)
238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec->au1_inter_quant_matrix[gau1_impeg2_inv_scan_zig_zag[i]] =   (UWORD8)impeg2d_bit_stream_get(ps_stream,8);
240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        memcpy(ps_dec->au1_inter_quant_matrix,gau1_impeg2_inter_quant_matrix_default,
245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            NUM_PELS_IN_BLOCK);
246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE;
250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_seq_ext
255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Gets additional sequence data.
257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder Context
260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************/
263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_seq_ext(dec_state_t *ps_dec)
264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) != EXTENSION_START_CODE)
270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND;
273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush the extension start code */
276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush extension start code identifier */
279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,4);
280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*----------------------------------------------------------------------*/
282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Profile and Level information                                        */
283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*----------------------------------------------------------------------*/
284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD32   u4_esc_bit, u4_profile, u4_level;
286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Read the profile and level information */
288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* check_profile_and_level: Table 8-1     */
289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* [7:7] 1 Escape bit                     */
290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* [6:4] 3 Profile identification         */
291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* [3:0] 4 Level identification           */
292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_esc_bit   = impeg2d_bit_stream_get_bit(ps_stream);
294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_profile   = impeg2d_bit_stream_get(ps_stream,3);
295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_level     = impeg2d_bit_stream_get(ps_stream,4);
296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UNUSED(u4_profile);
297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UNUSED(u4_level);
298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /*
299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if( escBit == 1                   ||
300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            profile < MPEG2_MAIN_PROFILE  ||
301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            level < MPEG2_MAIN_LEVEL)
302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            */
303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if (1 == u4_esc_bit)
304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return IMPEG2D_PROF_LEVEL_NOT_SUPPORTED;
306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_progressive_sequence = impeg2d_bit_stream_get_bit(ps_stream);
310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Read the chrominance format */
312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(impeg2d_bit_stream_get(ps_stream,2) != 0x1)
313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return IMPEG2D_CHROMA_FMT_NOT_SUP;
314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Read the 2 most significant bits from horizontal_size */
316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_horizontal_size    += (impeg2d_bit_stream_get(ps_stream,2) << 12);
317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Read the 2 most significant bits from vertical_size */
319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_vertical_size      += (impeg2d_bit_stream_get(ps_stream,2) << 12);
320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*-----------------------------------------------------------------------*/
322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush the following as they are not used now                          */
323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* bit_rate_extension          12                                        */
324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* marker_bit                   1                                        */
325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* vbv_buffer_size_extension    8                                        */
326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* low_delay                    1                                        */
327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*-----------------------------------------------------------------------*/
328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,12);
329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    GET_MARKER_BIT(ps_dec,ps_stream);
330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,9);
331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*-----------------------------------------------------------------------*/
332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* frame_rate_extension_n       2                                        */
333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* frame_rate_extension_d       5                                        */
334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*-----------------------------------------------------------------------*/
335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_frame_rate_extension_n = impeg2d_bit_stream_get(ps_stream,2);
336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_frame_rate_extension_d = impeg2d_bit_stream_get(ps_stream,5);
337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE;
339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_seq_disp_ext
344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : This function is eqvt to sequence_display_extension() of
346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    standard. It flushes data present as it is not being used
347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder Context
350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani******************************************************************************/
353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_seq_disp_ext(dec_state_t *ps_dec)
354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*
359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    sequence_display_extension()
360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        extension_start_code_identifier 4
362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        video_format                    3
363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        colour_description              1
364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if (colour_description)
365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            colour_primaries            8
367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            transfer_characteristics    8
368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            matrix_coefficients         8
369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        display_horizontal_size         14
371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        marker_bit                      1
372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        display_vertical_size           14
373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        next_start_code()
374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    */
376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get(ps_stream,7);
378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (impeg2d_bit_stream_get_bit(ps_stream) == 1)
379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_get(ps_stream,24);
381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* display_horizontal_size and display_vertical_size */
384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_display_horizontal_size = impeg2d_bit_stream_get(ps_stream,14);;
385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    GET_MARKER_BIT(ps_dec,ps_stream);
386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_display_vertical_size   = impeg2d_bit_stream_get(ps_stream,14);
387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_seq_scale_ext
395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : This function is eqvt to sequence_scalable_extension() of
397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    standard.
398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_seq_scale_ext(dec_state_t *ps_dec)
404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UNUSED(ps_dec);
406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return IMPEG2D_SCALABILITIY_NOT_SUPPORTED;
407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_quant_matrix_ext
412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Gets Intra and NonIntra quantizer matrix from the stream.
414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_quant_matrix_ext(dec_state_t *ps_dec)
420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush extension_start_code_identifier */
425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,4);
426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Quantization matrix for the intra blocks                               */
429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(impeg2d_bit_stream_get(ps_stream,1) == 1)
431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD16 i;
433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < NUM_PELS_IN_BLOCK; i++)
434aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
435aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec->au1_intra_quant_matrix[gau1_impeg2_inv_scan_zig_zag[i]] =  (UWORD8)impeg2d_bit_stream_get(ps_stream,8);
436aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
437aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
439aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
440aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Quantization matrix for the inter blocks                               */
443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(impeg2d_bit_stream_get(ps_stream,1) == 1)
445aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
446aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD16 i;
447aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < NUM_PELS_IN_BLOCK; i++)
448aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec->au1_inter_quant_matrix[gau1_impeg2_inv_scan_zig_zag[i]] =   (UWORD8)impeg2d_bit_stream_get(ps_stream,8);
450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Note : chroma intra quantizer matrix and chroma non
454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    intra quantizer matrix are not needed for 4:2:0 format */
455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_pic_disp_ext
460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : This function is eqvt to picture_display_extension() of
462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    standard.The parameters are not used by decoder
463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Pointer to dec_state_t
465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : Decoder context
467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_pic_disp_ext(dec_state_t *ps_dec)
471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16 i2_number_of_frame_centre_offsets ;
473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,4);
477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (ps_dec->u2_progressive_sequence)
479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i2_number_of_frame_centre_offsets = (ps_dec->u2_repeat_first_field) ?
481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            2 + ps_dec->u2_top_field_first : 1;
482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i2_number_of_frame_centre_offsets =
486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            (ps_dec->u2_picture_structure != FRAME_PICTURE) ?
487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            1 : 2 + ps_dec->u2_repeat_first_field;
488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(i2_number_of_frame_centre_offsets--)
490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* frame_centre_horizontal_offset */
492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_get(ps_stream,16);
493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        GET_MARKER_BIT(ps_dec,ps_stream);
494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* frame_centre_vertical_offset */
495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_get(ps_stream,16);
496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        GET_MARKER_BIT(ps_dec,ps_stream);
497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_itu_t_ext
504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
505aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : This function is eqvt to ITU-T_extension() of
506aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    standard.The parameters are not used by decoder
507aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
508aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
510aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
511aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
512aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_itu_t_ext(dec_state_t *ps_dec)
513aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani  impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,EXT_ID_LEN);
515aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani  impeg2d_next_start_code(ps_dec);
516aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
518aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_copyright_ext
520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : This function is eqvt to copyright_extension() of
522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    standard. The parameters are not used by decoder
523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_copyright_ext(dec_state_t *ps_dec)
531aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
532aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_bits_to_flush;
533aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
534aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_bits_to_flush = COPYRIGHT_EXTENSION_LEN;
535aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
536aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(u4_bits_to_flush >= 32 )
537aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
538aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,32);
539aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_bits_to_flush = u4_bits_to_flush - 32;
540aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
541aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
542aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(u4_bits_to_flush > 0)
543aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
544aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,u4_bits_to_flush);
545aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
546aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
547aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
548aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani  impeg2d_next_start_code(ps_dec);
549aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
550aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
551aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_cam_param_ext
552aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
553aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : This function is eqvt to camera_parameters_extension() of
554aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    standard. The parameters are not used by decoder
555aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
556aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
557aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
558aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
559aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
560aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
561aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
562aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_cam_param_ext(dec_state_t *ps_dec)
563aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
564aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
565aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_bits_to_flush;
566aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
567aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_bits_to_flush = CAMERA_PARAMETER_EXTENSION_LEN;
568aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
569aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(u4_bits_to_flush >= 32 )
570aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
571aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,32);
572aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_bits_to_flush = u4_bits_to_flush - 32;
573aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
574aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
575aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(u4_bits_to_flush > 0)
576aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
577aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,u4_bits_to_flush);
578aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
579aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
580aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani  impeg2d_next_start_code(ps_dec);
581aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
582aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
583aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
584aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
585aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_grp_of_pic_hdr
586aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
587aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Gets information at the GOP level.
588aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
589aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
590aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
591aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
592aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
593aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
594aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
595aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_grp_of_pic_hdr(dec_state_t *ps_dec)
596aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
597aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
598aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_bits_to_flush;
599aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
600aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_bits_to_flush = GROUP_OF_PICTURE_LEN;
601aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
602aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(u4_bits_to_flush >= 32 )
603aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
604aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,32);
605aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_bits_to_flush = u4_bits_to_flush - 32;
606aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
607aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
608aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(u4_bits_to_flush > 0)
609aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
610aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&ps_dec->s_bit_stream,u4_bits_to_flush);
611aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
612aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
613aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
614aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
615aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
616aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
617aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
618aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_pic_hdr
619aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
620aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Gets the picture header information.
621aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
622aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       : Decoder context
623aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
624aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
625aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
626aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_pic_hdr(dec_state_t *ps_dec)
627aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
628aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
629aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
630aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
631aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
632aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush temporal reference */
633aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get(ps_stream,10);
634aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
635aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Picture type */
636aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->e_pic_type = (e_pic_type_t)impeg2d_bit_stream_get(ps_stream,3);
637aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if((ps_dec->e_pic_type < I_PIC) || (ps_dec->e_pic_type > D_PIC))
638aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
639aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_next_code(ps_dec, PICTURE_START_CODE);
640aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return IMPEG2D_INVALID_PIC_TYPE;
641aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
642aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
643aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush vbv_delay */
644aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get(ps_stream,16);
645aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
646aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->e_pic_type == P_PIC || ps_dec->e_pic_type == B_PIC)
647aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
648aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u2_full_pel_forw_vector = impeg2d_bit_stream_get_bit(ps_stream);
649aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u2_forw_f_code          = impeg2d_bit_stream_get(ps_stream,3);
650aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
651aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->e_pic_type == B_PIC)
652aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
653aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u2_full_pel_back_vector = impeg2d_bit_stream_get_bit(ps_stream);
654aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u2_back_f_code          = impeg2d_bit_stream_get(ps_stream,3);
655aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
656aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
657aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->u2_is_mpeg2 == 0)
658aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
659aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->au2_f_code[0][0] = ps_dec->au2_f_code[0][1] = ps_dec->u2_forw_f_code;
660aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->au2_f_code[1][0] = ps_dec->au2_f_code[1][1] = ps_dec->u2_back_f_code;
661aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
662aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
663aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*-----------------------------------------------------------------------*/
664aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*  Flush the extra bit value                                            */
665aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*                                                                       */
666aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*  while(impeg2d_bit_stream_nxt() == '1')                                  */
667aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*  {                                                                    */
668aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*      extra_bit_picture         1                                      */
669aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*      extra_information_picture 8                                      */
670aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*  }                                                                    */
671aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*  extra_bit_picture             1                                      */
672aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*-----------------------------------------------------------------------*/
673aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while (impeg2d_bit_stream_nxt(ps_stream,1) == 1)
674aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
675aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_get(ps_stream,9);
676aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
677aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get_bit(ps_stream);
678aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
679aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
680aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE;
681aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
682aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
683aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
684aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
685aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
686aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_pic_coding_ext
687aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
688aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Reads more picture level parameters
689aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
690aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
691aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
692aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
693aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
694aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
695aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_pic_coding_ext(dec_state_t *ps_dec)
696aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
697aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
698aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
699aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
700aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
701aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* extension code identifier */
702aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get(ps_stream,4);
703aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
704aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->au2_f_code[0][0]             = impeg2d_bit_stream_get(ps_stream,4);
705aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->au2_f_code[0][1]             = impeg2d_bit_stream_get(ps_stream,4);
706aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->au2_f_code[1][0]             = impeg2d_bit_stream_get(ps_stream,4);
707aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->au2_f_code[1][1]             = impeg2d_bit_stream_get(ps_stream,4);
708aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_intra_dc_precision        = impeg2d_bit_stream_get(ps_stream,2);
709aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_picture_structure            = impeg2d_bit_stream_get(ps_stream,2);
710aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_top_field_first              = impeg2d_bit_stream_get_bit(ps_stream);
711aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_frame_pred_frame_dct         = impeg2d_bit_stream_get_bit(ps_stream);
712aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_concealment_motion_vectors   = impeg2d_bit_stream_get_bit(ps_stream);
713aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_q_scale_type                 = impeg2d_bit_stream_get_bit(ps_stream);
714aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_intra_vlc_format             = impeg2d_bit_stream_get_bit(ps_stream);
715aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_alternate_scan               = impeg2d_bit_stream_get_bit(ps_stream);
716aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_repeat_first_field           = impeg2d_bit_stream_get_bit(ps_stream);
717aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flush chroma_420_type */
718aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get_bit(ps_stream);
719aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
720aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_progressive_frame            = impeg2d_bit_stream_get_bit(ps_stream);
721aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (impeg2d_bit_stream_get_bit(ps_stream))
722aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
723aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Flush v_axis, field_sequence, burst_amplitude, sub_carrier_phase */
724aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(ps_stream,20);
725aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
726aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
727aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
728aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
729aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(VERTICAL_SCAN == ps_dec->u2_alternate_scan)
730aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
731aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->pu1_inv_scan_matrix = (UWORD8 *)gau1_impeg2_inv_scan_vertical;
732aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
733aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
734aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
735aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->pu1_inv_scan_matrix = (UWORD8 *)gau1_impeg2_inv_scan_zig_zag;
736aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
737aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
738aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
739aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
740aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
741aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_slice
742aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
743aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Reads Slice level parameters and calls functions that
744aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    decode individual MBs of slice
745aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
746aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
747aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
748aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
749aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
750aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
751aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_slice(dec_state_t *ps_dec)
752aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
753aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
754aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_slice_vertical_position;
755aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_slice_vertical_position_extension;
756aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T e_error;
757aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
758aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
759aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
760aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
761aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* All the profiles supported require restricted slice structure. Hence   */
762aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* there is no need to store slice_vertical_position. Note that max       */
763aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* height supported does not exceed 2800 and scalablity is not supported  */
764aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
765aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
766aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Remove the slice start code */
767aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_flush(ps_stream,START_CODE_PREFIX_LEN);
768aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_slice_vertical_position = impeg2d_bit_stream_get(ps_stream, 8);
769aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(u4_slice_vertical_position > 2800)
770aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
771aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_slice_vertical_position_extension = impeg2d_bit_stream_get(ps_stream, 3);
772aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_slice_vertical_position += (u4_slice_vertical_position_extension << 7);
773aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
774aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
775aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if((u4_slice_vertical_position > ps_dec->u2_num_vert_mb) ||
776aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani       (u4_slice_vertical_position == 0))
777aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
778aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return IMPEG2D_INVALID_VERT_SIZE;
779aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
780aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
781aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    // change the mb_y to point to slice_vertical_position
782aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_slice_vertical_position--;
783aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (ps_dec->u2_mb_y != u4_slice_vertical_position)
784aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
785aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u2_mb_y    = u4_slice_vertical_position;
786aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u2_mb_x    = 0;
787aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
788aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_first_mb = 1;
789aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
790aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
791aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Quant scale code decoding                                              */
792aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
793aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
794aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        UWORD16 u2_quant_scale_code;
795aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u2_quant_scale_code = impeg2d_bit_stream_get(ps_stream,5);
796aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec->u1_quant_scale = (ps_dec->u2_q_scale_type) ?
797aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            gau1_impeg2_non_linear_quant_scale[u2_quant_scale_code] : (u2_quant_scale_code << 1);
798aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
799aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
800aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (impeg2d_bit_stream_nxt(ps_stream,1) == 1)
801aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
802aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(ps_stream,9);
803aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Flush extra bit information */
804aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while (impeg2d_bit_stream_nxt(ps_stream,1) == 1)
805aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
806aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_bit_stream_flush(ps_stream,9);
807aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
808aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
809aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_bit_stream_get_bit(ps_stream);
810aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
811aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Reset the DC predictors to reset values given in Table 7.2 at the start*/
812aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* of slice data */
813aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_def_dc_pred[Y_LUMA]   = 128 << ps_dec->u2_intra_dc_precision;
814aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_def_dc_pred[U_CHROMA]   = 128 << ps_dec->u2_intra_dc_precision;
815aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_def_dc_pred[V_CHROMA]   = 128 << ps_dec->u2_intra_dc_precision;
816aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
817aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* dec->DecMBsinSlice() implements the following psuedo code from standard*/
818aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* do                                                                     */
819aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* {                                                                      */
820aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*      macroblock()                                                      */
821aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* } while (impeg2d_bit_stream_nxt() != '000 0000 0000 0000 0000 0000')      */
822aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /*------------------------------------------------------------------------*/
823aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
824aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_error = ps_dec->pf_decode_slice(ps_dec);
825aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
826aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
827aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return e_error;
828aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
829aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
830aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Check for the MBy index instead of number of MBs left, because the
831aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * number of MBs left in case of multi-thread decode is the number of MBs
832aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * in that row only
833aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
834aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->u2_mb_y < ps_dec->u2_num_vert_mb)
835aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_next_start_code(ps_dec);
836aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
837aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE;
838aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
839aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
840aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_pic_data_thread(dec_state_t *ps_dec)
841aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
842aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_continue_decode;
843aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
844aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_cur_row, temp;
845aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_bits_read;
846aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_dequeue_job;
847aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T e_error;
848aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
849aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_cur_row = ps_dec->u2_mb_y + 1;
850aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
851aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_continue_decode = 1;
852aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
853aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_dequeue_job = 1;
854aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    do
855aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
856aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(i4_cur_row > ps_dec->u2_num_vert_mb)
857aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
858aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_continue_decode = 0;
859aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
860aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
861aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
862aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
863aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if((ps_dec->i4_num_cores> 1) && (i4_dequeue_job))
864aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
865aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                job_t s_job;
866aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                IV_API_CALL_STATUS_T e_ret;
867aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                UWORD8 *pu1_buf;
868aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
869aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                e_ret = impeg2_jobq_dequeue(ps_dec->pv_jobq, &s_job, sizeof(s_job), 1, 1);
870aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(e_ret != IV_SUCCESS)
871aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
872aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
873aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(CMD_PROCESS == s_job.i4_cmd)
874aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
875aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    pu1_buf = ps_dec->pu1_inp_bits_buf + s_job.i4_bistream_ofst;
876aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    impeg2d_bit_stream_init(&(ps_dec->s_bit_stream), pu1_buf,
877aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                            (ps_dec->u4_num_inp_bytes - s_job.i4_bistream_ofst) + 8);
878aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    i4_cur_row      = s_job.i2_start_mb_y;
879aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_dec->i4_start_mb_y = s_job.i2_start_mb_y;
880aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_dec->i4_end_mb_y = s_job.i2_end_mb_y;
881aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_dec->u2_mb_x = 0;
882aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_dec->u2_mb_y = ps_dec->i4_start_mb_y;
883aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    ps_dec->u2_num_mbs_left = (ps_dec->i4_end_mb_y - ps_dec->i4_start_mb_y) * ps_dec->u2_num_horiz_mb;
884aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
885aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
886aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else
887aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
888aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    WORD32 start_row;
889aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    WORD32 num_rows;
890aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    start_row = s_job.i2_start_mb_y << 4;
891aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    num_rows = MIN((s_job.i2_end_mb_y << 4), ps_dec->u2_vertical_size);
892aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    num_rows -= start_row;
8938520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
8948520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    if(ps_dec->u4_deinterlace && (0 == ps_dec->u2_progressive_frame))
8958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    {
8968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                        impeg2d_deinterlace(ps_dec,
8978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                            ps_dec->ps_disp_pic,
8988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                            ps_dec->ps_disp_frm_buf,
8998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                            start_row,
9008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                            num_rows);
9018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
9028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    }
9038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    else
9048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    {
9058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                        impeg2d_format_convert(ps_dec, ps_dec->ps_disp_pic,
9068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                               ps_dec->ps_disp_frm_buf,
9078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                               start_row, num_rows);
9088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    }
909aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
910aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
911aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
912aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
913aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
914aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            e_error = impeg2d_dec_slice(ps_dec);
915aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
916aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
917aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
918aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_next_start_code(ps_dec);
919aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
920aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
921aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
922aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Detecting next slice start code */
923aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while(1)
924aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
925aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            // skip (dec->u4_num_cores-1) rows
926aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_bits_read = impeg2d_bit_stream_nxt(&ps_dec->s_bit_stream,START_CODE_LEN);
927aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            temp = u4_bits_read & 0xFF;
928aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_continue_decode = (((u4_bits_read >> 8) == 0x01) && (temp) && (temp <= 0xAF));
929aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
930aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(i4_continue_decode)
931aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
932aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* If the slice is from the same row, then continue decoding without dequeue */
933aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if((temp - 1) == i4_cur_row)
934aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
935aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    i4_dequeue_job = 0;
936aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    break;
937aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
938aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
939aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(temp < ps_dec->i4_end_mb_y)
940aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
941aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    i4_cur_row = ps_dec->u2_mb_y;
942aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
943aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else
944aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
945aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    i4_dequeue_job = 1;
946aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
947aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
948aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
949aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
950aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
951aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
952aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
953aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
954aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }while(i4_continue_decode);
955aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->i4_num_cores > 1)
956aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
957aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while(1)
958aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
959aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            job_t s_job;
960aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            IV_API_CALL_STATUS_T e_ret;
961aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
962aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            e_ret = impeg2_jobq_dequeue(ps_dec->pv_jobq, &s_job, sizeof(s_job), 1, 1);
963aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(e_ret != IV_SUCCESS)
964aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
965aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(CMD_FMTCONV == s_job.i4_cmd)
966aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
967aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                WORD32 start_row;
968aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                WORD32 num_rows;
969aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                start_row = s_job.i2_start_mb_y << 4;
970aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                num_rows = MIN((s_job.i2_end_mb_y << 4), ps_dec->u2_vertical_size);
971aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                num_rows -= start_row;
9728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                if(ps_dec->u4_deinterlace && (0 == ps_dec->u2_progressive_frame))
9738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                {
9748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    impeg2d_deinterlace(ps_dec,
9758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                        ps_dec->ps_disp_pic,
9768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                        ps_dec->ps_disp_frm_buf,
9778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                        start_row,
9788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                        num_rows);
9798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
9808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                }
9818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                else
9828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                {
9838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                    impeg2d_format_convert(ps_dec,
9848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                           ps_dec->ps_disp_pic,
9858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                           ps_dec->ps_disp_frm_buf,
9868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                           start_row,
9878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                           num_rows);
9888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                }
989aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
990aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
991aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
992aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
993aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
994aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if((NULL != ps_dec->ps_disp_pic) && ((0 == ps_dec->u4_share_disp_buf) || (IV_YUV_420P != ps_dec->i4_chromaFormat)))
9958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar        {
9968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar            if(ps_dec->u4_deinterlace && (0 == ps_dec->u2_progressive_frame))
9978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar            {
9988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                impeg2d_deinterlace(ps_dec,
9998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                    ps_dec->ps_disp_pic,
10008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                    ps_dec->ps_disp_frm_buf,
10018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                    0,
10028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                    ps_dec->u2_vertical_size);
10038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
10048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar            }
10058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar            else
10068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar            {
10078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                impeg2d_format_convert(ps_dec, ps_dec->ps_disp_pic,
10088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                        ps_dec->ps_disp_frm_buf,
10098520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar                                        0, ps_dec->u2_vertical_size);
10108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar            }
10118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar        }
1012aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1013aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1014aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1015aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanistatic WORD32 impeg2d_init_thread_dec_ctxt(dec_state_t *ps_dec,
1016aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           dec_state_t *ps_dec_thd,
1017aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                           WORD32 i4_min_mb_y)
1018aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1019aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UNUSED(i4_min_mb_y);
1020aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->i4_start_mb_y = 0;
1021aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->i4_end_mb_y = ps_dec->u2_num_vert_mb;
1022aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_mb_x = 0;
1023aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_mb_y = 0;
1024aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_is_mpeg2 = ps_dec->u2_is_mpeg2;
1025aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frame_width = ps_dec->u2_frame_width;
1026aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frame_height = ps_dec->u2_frame_height;
1027aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_picture_width = ps_dec->u2_picture_width;
1028aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_horizontal_size = ps_dec->u2_horizontal_size;
1029aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_vertical_size = ps_dec->u2_vertical_size;
1030aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_create_max_width = ps_dec->u2_create_max_width;
1031aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_create_max_height = ps_dec->u2_create_max_height;
1032aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_header_done = ps_dec->u2_header_done;
1033aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_decode_header = ps_dec->u2_decode_header;
1034aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1035aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_num_horiz_mb = ps_dec->u2_num_horiz_mb;
1036aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_num_vert_mb = ps_dec->u2_num_vert_mb;
1037aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_num_flds_decoded = ps_dec->u2_num_flds_decoded;
1038aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1039aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u4_frm_buf_stride = ps_dec->u4_frm_buf_stride;
1040aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1041aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_field_dct = ps_dec->u2_field_dct;
1042aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_read_dct_type = ps_dec->u2_read_dct_type;
1043aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1044aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_read_motion_type = ps_dec->u2_read_motion_type;
1045aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_motion_type = ps_dec->u2_motion_type;
1046aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1047aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pu2_mb_type = ps_dec->pu2_mb_type;
1048aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_fld_pic = ps_dec->u2_fld_pic;
1049aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frm_pic = ps_dec->u2_frm_pic;
1050aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1051aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_fld_parity = ps_dec->u2_fld_parity;
1052aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1053aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->au2_fcode_data[0] = ps_dec->au2_fcode_data[0];
1054aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->au2_fcode_data[1] = ps_dec->au2_fcode_data[1];
1055aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1056aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u1_quant_scale = ps_dec->u1_quant_scale;
1057aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1058aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_num_mbs_left = ps_dec->u2_num_mbs_left;
1059aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_first_mb = ps_dec->u2_first_mb;
1060aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_num_skipped_mbs = ps_dec->u2_num_skipped_mbs;
1061aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1062aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(&ps_dec_thd->s_cur_frm_buf, &ps_dec->s_cur_frm_buf, sizeof(yuv_buf_t));
1063aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(&ps_dec_thd->as_recent_fld[0][0], &ps_dec->as_recent_fld[0][0], sizeof(yuv_buf_t));
1064aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(&ps_dec_thd->as_recent_fld[0][1], &ps_dec->as_recent_fld[0][1], sizeof(yuv_buf_t));
1065aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(&ps_dec_thd->as_recent_fld[1][0], &ps_dec->as_recent_fld[1][0], sizeof(yuv_buf_t));
1066aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(&ps_dec_thd->as_recent_fld[1][1], &ps_dec->as_recent_fld[1][1], sizeof(yuv_buf_t));
1067aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(&ps_dec_thd->as_ref_buf, &ps_dec->as_ref_buf, sizeof(yuv_buf_t) * 2 * 2);
1068aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1069aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1070aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_decode_slice = ps_dec->pf_decode_slice;
1071aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1072aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_vld_inv_quant = ps_dec->pf_vld_inv_quant;
1073aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1074aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(ps_dec_thd->pf_idct_recon, ps_dec->pf_idct_recon, sizeof(ps_dec->pf_idct_recon));
1075aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1076aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(ps_dec_thd->pf_mc, ps_dec->pf_mc, sizeof(ps_dec->pf_mc));
1077aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_interpolate = ps_dec->pf_interpolate;
1078aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_copy_mb = ps_dec->pf_copy_mb;
1079aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_fullx_halfy_8x8              =  ps_dec->pf_fullx_halfy_8x8;
1080aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_halfx_fully_8x8              =  ps_dec->pf_halfx_fully_8x8;
1081aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_halfx_halfy_8x8              =  ps_dec->pf_halfx_halfy_8x8;
1082aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_fullx_fully_8x8              =  ps_dec->pf_fullx_fully_8x8;
1083aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1084aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_memset_8bit_8x8_block        =  ps_dec->pf_memset_8bit_8x8_block;
1085aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_memset_16bit_8x8_linear_block        =  ps_dec->pf_memset_16bit_8x8_linear_block;
1086aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_copy_yuv420p_buf             =   ps_dec->pf_copy_yuv420p_buf;
1087aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_fmt_conv_yuv420p_to_yuv422ile    =   ps_dec->pf_fmt_conv_yuv420p_to_yuv422ile;
1088aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_fmt_conv_yuv420p_to_yuv420sp_uv  =   ps_dec->pf_fmt_conv_yuv420p_to_yuv420sp_uv;
1089aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pf_fmt_conv_yuv420p_to_yuv420sp_vu  =   ps_dec->pf_fmt_conv_yuv420p_to_yuv420sp_vu;
1090aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1091aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1092aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(ps_dec_thd->au1_intra_quant_matrix, ps_dec->au1_intra_quant_matrix, NUM_PELS_IN_BLOCK * sizeof(UWORD8));
1093aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(ps_dec_thd->au1_inter_quant_matrix, ps_dec->au1_inter_quant_matrix, NUM_PELS_IN_BLOCK * sizeof(UWORD8));
1094aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pu1_inv_scan_matrix = ps_dec->pu1_inv_scan_matrix;
1095aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1096aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1097aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_progressive_sequence = ps_dec->u2_progressive_sequence;
1098aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->e_pic_type =  ps_dec->e_pic_type;
1099aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_full_pel_forw_vector = ps_dec->u2_full_pel_forw_vector;
1100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_forw_f_code =   ps_dec->u2_forw_f_code;
1101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_full_pel_back_vector = ps_dec->u2_full_pel_back_vector;
1102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_back_f_code = ps_dec->u2_back_f_code;
1103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(ps_dec_thd->ai2_mv, ps_dec->ai2_mv, (2*2*2)*sizeof(WORD16));
1105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    memcpy(ps_dec_thd->au2_f_code, ps_dec->au2_f_code, (2*2)*sizeof(UWORD16));
1106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_intra_dc_precision = ps_dec->u2_intra_dc_precision;
1107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_picture_structure = ps_dec->u2_picture_structure;
1108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_top_field_first = ps_dec->u2_top_field_first;
1109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frame_pred_frame_dct = ps_dec->u2_frame_pred_frame_dct;
1110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_concealment_motion_vectors = ps_dec->u2_concealment_motion_vectors;
1111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_q_scale_type =  ps_dec->u2_q_scale_type;
1112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_intra_vlc_format = ps_dec->u2_intra_vlc_format;
1113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_alternate_scan = ps_dec->u2_alternate_scan;
1114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_repeat_first_field = ps_dec->u2_repeat_first_field;
1115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_progressive_frame = ps_dec->u2_progressive_frame;
1116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pu1_inp_bits_buf = ps_dec->pu1_inp_bits_buf;
1117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u4_num_inp_bytes = ps_dec->u4_num_inp_bytes;
1118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pv_jobq = ps_dec->pv_jobq;
1119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->pv_jobq_buf = ps_dec->pv_jobq_buf;
1120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->i4_jobq_buf_size = ps_dec->i4_jobq_buf_size;
1121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frame_rate_code = ps_dec->u2_frame_rate_code;
1124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frame_rate_extension_n = ps_dec->u2_frame_rate_extension_n;
1125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_frame_rate_extension_d = ps_dec->u2_frame_rate_extension_d;
1126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_framePeriod =   ps_dec->u2_framePeriod;
1127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_display_horizontal_size = ps_dec->u2_display_horizontal_size;
1128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_display_vertical_size = ps_dec->u2_display_vertical_size;
1129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->u2_aspect_ratio_info = ps_dec->u2_aspect_ratio_info;
1130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->ps_func_bi_direct = ps_dec->ps_func_bi_direct;
1132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_thd->ps_func_forw_or_back = ps_dec->ps_func_forw_or_back;
11338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    ps_dec_thd->pv_deinterlacer_ctxt = ps_dec->pv_deinterlacer_ctxt;
11348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    ps_dec_thd->ps_deint_pic = ps_dec->ps_deint_pic;
1135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return 0;
1137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniWORD32 impeg2d_get_slice_pos(dec_state_multi_core_t *ps_dec_state_multi_core)
1141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 u4_bits;
1143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_row;
1144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    dec_state_t *ps_dec = ps_dec_state_multi_core->ps_dec_state[0];
1147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_prev_row;
1148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t s_bitstrm;
1149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_start_row;
1150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_slice_bistream_ofst;
1151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i;
1152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    s_bitstrm = ps_dec->s_bit_stream;
1153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_prev_row = -1;
1154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[0]->i4_start_mb_y = 0;
1156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[1]->i4_start_mb_y = -1;
1157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[2]->i4_start_mb_y = -1;
1158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[3]->i4_start_mb_y = -1;
1159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[0]->i4_end_mb_y = ps_dec->u2_num_vert_mb;
1161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[1]->i4_end_mb_y = -1;
1162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[2]->i4_end_mb_y = -1;
1163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core->ps_dec_state[3]->i4_end_mb_y = -1;
1164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->i4_num_cores == 1)
1166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return 0;
1167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Reset the jobq to start of the jobq buffer */
1168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2_jobq_reset((jobq_t *)ps_dec->pv_jobq);
1169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_start_row = -1;
1171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_slice_bistream_ofst = 0;
1172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(1)
1173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        WORD32 i4_is_slice;
1175b34913857dacd4b7f82715c48ae1de9c56ede9e0Venkatarama Avadhani
1176b34913857dacd4b7f82715c48ae1de9c56ede9e0Venkatarama Avadhani        if(s_bitstrm.u4_offset + START_CODE_LEN >= s_bitstrm.u4_max_offset)
1177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1180b34913857dacd4b7f82715c48ae1de9c56ede9e0Venkatarama Avadhani        u4_bits = impeg2d_bit_stream_nxt(&s_bitstrm,START_CODE_LEN);
1181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i4_row = u4_bits & 0xFF;
1183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Detect end of frame */
1185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i4_is_slice = (((u4_bits >> 8) == 0x01) && (i4_row) && (i4_row <= ps_dec->u2_num_vert_mb));
1186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(!i4_is_slice)
1187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i4_row -= 1;
1190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(i4_prev_row != i4_row)
1193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /* Create a job for previous slice row */
1195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(i4_start_row != -1)
1196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                job_t s_job;
1198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                IV_API_CALL_STATUS_T ret;
1199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_job.i2_start_mb_y = i4_start_row;
1200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_job.i2_end_mb_y = i4_row;
1201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_job.i4_cmd = CMD_PROCESS;
1202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                s_job.i4_bistream_ofst = i4_slice_bistream_ofst;
1203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                ret = impeg2_jobq_queue(ps_dec->pv_jobq, &s_job, sizeof(s_job), 1, 0);
1204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ret != IV_SUCCESS)
1205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return ret;
1206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /* Store current slice's bitstream offset */
1209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_slice_bistream_ofst = s_bitstrm.u4_offset >> 3;
1210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_slice_bistream_ofst -= (size_t)s_bitstrm.pv_bs_buf & 3;
1211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_prev_row = i4_row;
1212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            /* Store current slice's row position */
1214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_start_row = i4_row;
1215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(&s_bitstrm, START_CODE_LEN);
1220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // flush bytes till next start code
1222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* Flush the bytes till a  start code is encountered  */
1223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while(impeg2d_bit_stream_nxt(&s_bitstrm, 24) != START_CODE_PREFIX)
1224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_bit_stream_get(&s_bitstrm, 8);
1226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(s_bitstrm.u4_offset >= s_bitstrm.u4_max_offset)
1228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Create job for the last slice row */
1235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        job_t s_job;
1237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        IV_API_CALL_STATUS_T e_ret;
1238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_job.i2_start_mb_y = i4_start_row;
1239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_job.i2_end_mb_y = ps_dec->u2_num_vert_mb;
1240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_job.i4_cmd = CMD_PROCESS;
1241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        s_job.i4_bistream_ofst = i4_slice_bistream_ofst;
1242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        e_ret = impeg2_jobq_queue(ps_dec->pv_jobq, &s_job, sizeof(s_job), 1, 0);
1243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(e_ret != IV_SUCCESS)
1244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return e_ret;
1245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if((NULL != ps_dec->ps_disp_pic) && ((0 == ps_dec->u4_share_disp_buf) || (IV_YUV_420P != ps_dec->i4_chromaFormat)))
1248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        for(i = 0; i < ps_dec->u2_vertical_size; i+=64)
1250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            job_t s_job;
1252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            IV_API_CALL_STATUS_T ret;
1253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_job.i2_start_mb_y = i;
1254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_job.i2_start_mb_y >>= 4;
1255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_job.i2_end_mb_y = (i + 64);
1256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_job.i2_end_mb_y >>= 4;
1257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_job.i4_cmd = CMD_FMTCONV;
1258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            s_job.i4_bistream_ofst = 0;
1259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ret = impeg2_jobq_queue(ps_dec->pv_jobq, &s_job, sizeof(s_job), 1, 0);
1260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(ret != IV_SUCCESS)
1261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return ret;
1262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2_jobq_terminate(ps_dec->pv_jobq);
1267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->i4_bytes_consumed = s_bitstrm.u4_offset >> 3;
1268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->i4_bytes_consumed -= ((size_t)s_bitstrm.pv_bs_buf & 3);
1269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return 0;
1271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_pic_data
1276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : It intializes several parameters and decodes a Picture
1278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    till any slice is left.
1279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_pic_data(dec_state_t *ps_dec)
1287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i;
1290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    dec_state_multi_core_t *ps_dec_state_multi_core;
1291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32  u4_error_code;
1293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    dec_state_t *ps_dec_thd;
1295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_status;
1296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_min_mb_y;
1297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Resetting the MB address and MB coordinates at the start of the Frame */
1300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u2_mb_x = ps_dec->u2_mb_y = 0;
1301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_error_code = 0;
1302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec_state_multi_core = ps_dec->ps_dec_state_multi_core;
1304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_get_slice_pos(ps_dec_state_multi_core);
1305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    i4_min_mb_y = 1;
1307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    for(i=0; i < ps_dec->i4_num_cores - 1; i++)
1308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // initialize decoder context for thread
1310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        // launch dec->u4_num_cores-1 threads
1311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec_thd = ps_dec_state_multi_core->ps_dec_state[i+1];
1313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec_thd->ps_disp_pic = ps_dec->ps_disp_pic;
1315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        ps_dec_thd->ps_disp_frm_buf = ps_dec->ps_disp_frm_buf;
1316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        i4_status = impeg2d_init_thread_dec_ctxt(ps_dec, ps_dec_thd, i4_min_mb_y);
1318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        //impeg2d_dec_pic_data_thread(ps_dec_thd);
1319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(i4_status == 0)
1321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ithread_create(ps_dec_thd->pv_codec_thread_handle, NULL, (void *)impeg2d_dec_pic_data_thread, ps_dec_thd);
1323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec_state_multi_core->au4_thread_launched[i + 1] = 1;
1324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            i4_min_mb_y = ps_dec_thd->u2_mb_y + 1;
1325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
1327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec_state_multi_core->au4_thread_launched[i + 1] = 0;
1329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            break;
1330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_dec_pic_data_thread(ps_dec);
1334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    // wait for threads to complete
1336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    for(i=0; i < (ps_dec->i4_num_cores - 1); i++)
1337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_dec_state_multi_core->au4_thread_launched[i + 1] == 1)
1339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ps_dec_thd = ps_dec_state_multi_core->ps_dec_state[i+1];
1341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            ithread_join(ps_dec_thd->pv_codec_thread_handle, NULL);
1342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_dec->u4_error_code = u4_error_code;
1346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_flush_ext_and_user_data
1351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Flushes the extension and user data present in the
1353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    stream_t
1354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_flush_ext_and_user_data(dec_state_t *ps_dec)
1361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_start_code;
1363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
1364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream    = &ps_dec->s_bit_stream;
1366aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1367aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1368aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(u4_start_code == EXTENSION_START_CODE || u4_start_code == USER_DATA_START_CODE)
1369aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1370aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
1371aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while(impeg2d_bit_stream_nxt(ps_stream,START_CODE_PREFIX_LEN) != START_CODE_PREFIX)
1372aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1373aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_bit_stream_flush(ps_stream,8);
1374aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1375aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1376aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1377aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_user_data
1381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Flushes the user data present in the stream_t
1383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanivoid impeg2d_dec_user_data(dec_state_t *ps_dec)
1390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_start_code;
1392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
1393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream    = &ps_dec->s_bit_stream;
1395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while(u4_start_code == USER_DATA_START_CODE)
1398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
1400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while(impeg2d_bit_stream_nxt(ps_stream,START_CODE_PREFIX_LEN) != START_CODE_PREFIX)
1401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_bit_stream_flush(ps_stream,8);
1403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_seq_ext_data
1409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Decodes the extension data following Sequence
1411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    Extension. It flushes any user data if present
1412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1414aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1415aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1416aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1417aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1418aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_seq_ext_data(dec_state_t *ps_dec)
1419aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1420aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t   *ps_stream;
1421aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32     u4_start_code;
1422aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T e_error;
1423aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1424aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_error = (IMPEG2D_ERROR_CODES_T) IVD_ERROR_NONE;
1425aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1426aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream      = &ps_dec->s_bit_stream;
1427aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1428aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while( (u4_start_code == EXTENSION_START_CODE ||
1429aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_start_code == USER_DATA_START_CODE) &&
1430aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE == e_error)
1431aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1432aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_start_code == USER_DATA_START_CODE)
1433aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1434aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_dec_user_data(ps_dec);
1435aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1436aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
1437aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1438aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
1439aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_start_code   = impeg2d_bit_stream_nxt(ps_stream,EXT_ID_LEN);
1440aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            switch(u4_start_code)
1441aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1442aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case SEQ_DISPLAY_EXT_ID:
1443aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_seq_disp_ext(ps_dec);
1444aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1445aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case SEQ_SCALABLE_EXT_ID:
1446aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                e_error = IMPEG2D_SCALABILITIY_NOT_SUPPORTED;
1447aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1448aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            default:
1449aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* In case its a reserved extension code */
1450aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_bit_stream_flush(ps_stream,EXT_ID_LEN);
1451aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_peek_next_start_code(ps_dec);
1452aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1453aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1454aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1455aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1456aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1457aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return e_error;
1458aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1459aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1460aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_dec_pic_ext_data
1461aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1462aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Decodes the extension data following Picture Coding
1463aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*                    Extension. It flushes any user data if present
1464aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1465aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1466aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1467aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1468aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1469aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1470aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_dec_pic_ext_data(dec_state_t *ps_dec)
1471aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1472aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t   *ps_stream;
1473aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32     u4_start_code;
1474aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T e_error;
1475aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1476aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_error = (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE;
1477aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1478aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream      = &ps_dec->s_bit_stream;
1479aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_start_code   = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1480aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    while ( (u4_start_code == EXTENSION_START_CODE ||
1481aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_start_code == USER_DATA_START_CODE) &&
1482aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE == e_error)
1483aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1484aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(u4_start_code == USER_DATA_START_CODE)
1485aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1486aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_dec_user_data(ps_dec);
1487aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1488aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
1489aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1490aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_bit_stream_flush(ps_stream,START_CODE_LEN);
1491aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_start_code   = impeg2d_bit_stream_nxt(ps_stream,EXT_ID_LEN);
1492aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            switch(u4_start_code)
1493aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1494aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case QUANT_MATRIX_EXT_ID:
1495aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_quant_matrix_ext(ps_dec);
1496aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1497aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case COPYRIGHT_EXT_ID:
1498aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_copyright_ext(ps_dec);
1499aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1500aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case PIC_DISPLAY_EXT_ID:
1501aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_pic_disp_ext(ps_dec);
1502aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1503aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case CAMERA_PARAM_EXT_ID:
1504aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_cam_param_ext(ps_dec);
1505aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1506aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case ITU_T_EXT_ID:
1507aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_itu_t_ext(ps_dec);
1508aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1509aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case PIC_SPATIAL_SCALABLE_EXT_ID:
1510aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            case PIC_TEMPORAL_SCALABLE_EXT_ID:
1511aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                e_error = IMPEG2D_SCALABLITY_NOT_SUP;
1512aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1513aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            default:
1514aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                /* In case its a reserved extension code */
1515aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_bit_stream_flush(ps_stream,EXT_ID_LEN);
1516aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_next_start_code(ps_dec);
1517aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                break;
1518aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1519aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1520aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        u4_start_code = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1521aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1522aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return e_error;
1523aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1524aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1525aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1526aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1527aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_process_video_header
1528aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1529aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Processes video sequence header information
1530aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1531aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1532aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1533aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1534aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1535aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1536aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_process_video_header(dec_state_t *ps_dec)
1537aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1538aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
1539aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
1540aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T e_error;
1541aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1542aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_code(ps_dec, SEQUENCE_HEADER_CODE);
1543aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1544aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1545aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        e_error = impeg2d_dec_seq_hdr(ps_dec);
1546aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1547aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1548aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return e_error;
1549aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1550aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1551aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
1552aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1553aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani      return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
1554aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1555aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if (impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) == EXTENSION_START_CODE)
1556aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1557aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* MPEG2 Decoder */
1558aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1559aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1560aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            e_error = impeg2d_dec_seq_ext(ps_dec);
1561aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1562aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1563aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return e_error;
1564aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1565aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1566aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        else
1567aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1568aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani          return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
1569aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1570aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1571aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1572aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            e_error = impeg2d_dec_seq_ext_data(ps_dec);
1573aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1574aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1575aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                return e_error;
1576aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1577aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1578aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return impeg2d_init_video_state(ps_dec,MPEG_2_VIDEO);
1579aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1580aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
1581aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1582aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani         /* MPEG1 Decoder */
1583aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1584aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1585aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_flush_ext_and_user_data(ps_dec);
1586aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1587aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        return impeg2d_init_video_state(ps_dec,MPEG_1_VIDEO);
1588aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1589aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1590aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/*******************************************************************************
1591aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1592aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Function Name   : impeg2d_process_video_bit_stream
1593aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1594aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Description     : Processes video sequence header information
1595aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1596aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Arguments       :
1597aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  dec             : Decoder context
1598aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*
1599aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*  Values Returned : None
1600aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*******************************************************************************/
1601aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama AvadhaniIMPEG2D_ERROR_CODES_T impeg2d_process_video_bit_stream(dec_state_t *ps_dec)
1602aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
1603aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t *ps_stream;
1604aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_next_bits, u4_start_code_found;
1605aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T e_error;
1606aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1607aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ps_stream = &ps_dec->s_bit_stream;
1608aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    impeg2d_next_start_code(ps_dec);
1609aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* If the stream is MPEG-2 compliant stream */
1610aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    u4_start_code_found = 0;
1611aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1612aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    if(ps_dec->u2_is_mpeg2)
1613aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1614aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* MPEG2 decoding starts */
1615aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while((u4_start_code_found == 0) && (ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset))
1616aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1617aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_next_bits = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1618aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1619aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(u4_next_bits == SEQUENCE_HEADER_CODE)
1620aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1621aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1622aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1623aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    e_error = impeg2d_dec_seq_hdr(ps_dec);
1624aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1625aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
1626aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        return e_error;
1627aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
1628aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1629aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    u4_start_code_found = 0;
1630aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1631aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1632aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else
1633aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1634aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
1635aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1636aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1637aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1638aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1639aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1640aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    IMPEG2D_ERROR_CODES_T e_error;
1641aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    e_error = impeg2d_dec_seq_ext(ps_dec);
1642aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1643aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
1644aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        return e_error;
1645aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
1646aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    u4_start_code_found = 0;
1647aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1648aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1649aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else
1650aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1651aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
1652aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1653aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1654aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((u4_next_bits == USER_DATA_START_CODE) || (u4_next_bits == EXTENSION_START_CODE))
1655aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1656aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1657aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1658aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    impeg2d_dec_seq_ext_data(ps_dec);
1659aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    u4_start_code_found = 0;
1660aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1661aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1662aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1663aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1664aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1665aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    && (u4_next_bits == GOP_START_CODE))
1666aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1667aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_grp_of_pic_hdr(ps_dec);
1668aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_user_data(ps_dec);
1669aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_start_code_found = 0;
1670aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1671aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1672aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1673aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    && (u4_next_bits == PICTURE_START_CODE))
1674aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1675aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1676aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                e_error = impeg2d_dec_pic_hdr(ps_dec);
1677aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1678aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1679aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return e_error;
1680aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1681aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_pic_coding_ext(ps_dec);
1682aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                e_error = impeg2d_dec_pic_ext_data(ps_dec);
1683aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1684aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1685aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return e_error;
1686aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1687aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_pre_pic_dec_proc(ps_dec);
1688aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_pic_data(ps_dec);
1689aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_post_pic_dec_proc(ps_dec);
1690aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_start_code_found = 1;
1691aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1692aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
1693aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1694aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1695aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                FLUSH_BITS(ps_dec->s_bit_stream.u4_offset, ps_dec->s_bit_stream.u4_buf, ps_dec->s_bit_stream.u4_buf_nxt, 8, ps_dec->s_bit_stream.pu4_buf_aligned);
1696aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1697aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1698aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(u4_start_code_found == 0)
1699aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1700aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_next_start_code(ps_dec);
1701aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1702aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1703aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if((u4_start_code_found == 0) && (ps_dec->s_bit_stream.u4_offset > ps_dec->s_bit_stream.u4_max_offset))
1704aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1705aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            return IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND;
1706aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1707aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1708aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1709aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        /* If the stream is MPEG-1 compliant stream */
1710aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    else
1711aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    {
1712aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        while((u4_start_code_found == 0) && (ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset))
1713aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1714aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            u4_next_bits = impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN);
1715aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1716aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            if(impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) == SEQUENCE_HEADER_CODE)
1717aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1718aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if(ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset)
1719aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1720aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    e_error = impeg2d_dec_seq_hdr(ps_dec);
1721aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1722aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    {
1723aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                        return e_error;
1724aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    }
1725aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1726aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    u4_start_code_found = 0;
1727aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1728aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                else
1729aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1730aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
1731aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1732aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1733aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if((ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset) && (u4_next_bits == EXTENSION_START_CODE || u4_next_bits == USER_DATA_START_CODE))
1734aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1735aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_flush_ext_and_user_data(ps_dec);
1736aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_start_code_found = 0;
1737aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1738aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1739aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1740aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if ((impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) == GOP_START_CODE)
1741aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    && (ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset))
1742aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1743aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_grp_of_pic_hdr(ps_dec);
1744aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_flush_ext_and_user_data(ps_dec);
1745aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_start_code_found = 0;
1746aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1747aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else if ((impeg2d_bit_stream_nxt(ps_stream,START_CODE_LEN) == PICTURE_START_CODE)
1748aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    && (ps_dec->s_bit_stream.u4_offset < ps_dec->s_bit_stream.u4_max_offset))
1749aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1750aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1751aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                e_error = impeg2d_dec_pic_hdr(ps_dec);
1752aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                if ((IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE != e_error)
1753aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                {
1754aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                    return e_error;
1755aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                }
1756aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_flush_ext_and_user_data(ps_dec);
1757aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_pre_pic_dec_proc(ps_dec);
1758aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_dec_pic_data(ps_dec);
1759aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                impeg2d_post_pic_dec_proc(ps_dec);
1760aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                u4_start_code_found = 1;
1761aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1762aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            else
1763aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            {
1764aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                FLUSH_BITS(ps_dec->s_bit_stream.u4_offset, ps_dec->s_bit_stream.u4_buf, ps_dec->s_bit_stream.u4_buf_nxt, 8, ps_dec->s_bit_stream.pu4_buf_aligned);
1765aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            }
1766aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani            impeg2d_next_start_code(ps_dec);
1767aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1768aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1769aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        if((u4_start_code_found == 0) && (ps_dec->s_bit_stream.u4_offset > ps_dec->s_bit_stream.u4_max_offset))
1770aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        {
1771aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani           return IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND;
1772aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani        }
1773aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    }
1774aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
1775aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    return (IMPEG2D_ERROR_CODES_T)IVD_ERROR_NONE;
1776aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}
1777