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