;//
;// Copyright (C) 2007-2008 ARM Limited
;//
;// Licensed under the Apache License, Version 2.0 (the "License");
;// you may not use this file except in compliance with the License.
;// You may obtain a copy of the License at
;//
;//      http://www.apache.org/licenses/LICENSE-2.0
;//
;// Unless required by applicable law or agreed to in writing, software
;// distributed under the License is distributed on an "AS IS" BASIS,
;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;// See the License for the specific language governing permissions and
;// limitations under the License.
;//
;/**
; * 
; * File Name:  omxVCM4P2_DecodeVLCZigzag_IntraDCVLC_s.s
; * OpenMAX DL: v1.0.2
; * Revision:   9641
; * Date:       Thursday, February 7, 2008
; * 
; * 
; * 
; *
; * Description: 
; * Contains modules for zigzag scanning and VLC decoding
; * for inter block.
; *
; *
; *
; * Function: omxVCM4P2_DecodeVLCZigzag_Inter
; *
; * Description:
; * Performs VLC decoding and inverse zigzag scan for one intra coded block.
; *
; * Remarks:
; *
; * Parameters:
; * [in]    ppBitStream        pointer to the pointer to the current byte in
; *                    the bitstream buffer
; * [in]    pBitOffset        pointer to the bit position in the byte pointed
; *                    to by *ppBitStream. *pBitOffset is valid within    [0-7].
; * [in] shortVideoHeader     binary flag indicating presence of short_video_header;
; *                           escape modes 0-3 are used if shortVideoHeader==0,
; *                           and escape mode 4 is used when shortVideoHeader==1.
; * [out]    ppBitStream        *ppBitStream is updated after the block is
; *                    decoded, so that it points to the current byte
; *                    in the bit stream buffer
; * [out]    pBitOffset        *pBitOffset is updated so that it points to the
; *                    current bit position in the byte pointed by
; *                    *ppBitStream
; * [out]    pDst            pointer to the coefficient buffer of current
; *                    block. Must be 16-byte aligned
; *
; * Return Value:
; * OMX_Sts_BadArgErr - bad arguments
; *   -At least one of the following pointers is NULL: ppBitStream, *ppBitStream, pBitOffset, pDst, or
; *   -pDst is not 16-byte aligned, or
; *   -*pBitOffset exceeds [0,7].
; * OMX_Sts_Err - status error
; *   -At least one mark bit is equal to zero
; *   -Encountered an illegal stream code that cannot be found in the VLC table
; *   -Encountered and illegal code in the VLC FLC table
; *   -The number of coefficients is greater than 64
; *
; */


      INCLUDE omxtypes_s.h
      INCLUDE armCOMM_s.h
      INCLUDE armCOMM_BitDec_s.h


      M_VARIANTS ARM1136JS

     
      


      IF ARM1136JS :LOR: CortexA8

     
        ;// Import various tables needed for the function

        
        IMPORT          armVCM4P2_IntraVlcL0L1             ;// Contains optimized and packed VLC Tables for both Last =1 and last=0
                                                               ;// Packed in Run:Level:Last format
        IMPORT          armVCM4P2_IntraL0L1LMAX            ;// Contains LMAX table entries with both Last=0 and Last=1
        IMPORT          armVCM4P2_IntraL0L1RMAX            ;// Contains RMAX table entries with both Last=0 and Last=1
        IMPORT          armVCM4P2_aClassicalZigzagScan     ;// contains CLassical, Horizontal, Vertical Zigzag table entries with double the original values
        IMPORT          armVCM4P2_aIntraDCLumaChromaIndex  ;// Contains Optimized DCLuma and DCChroma Index table Entries
        

        IMPORT          armVCM4P2_DecodeVLCZigzag_AC_unsafe

;//Input Arguments

ppBitStream          RN 0
pBitOffset           RN 1
pDst                 RN 2
PredDir              RN 3
shortVideoHeader     RN 3
videoComp            RN 5
;//Local Variables

Return               RN 0

pDCLumaChromaIndex   RN 4
pDCChromaIndex       RN 7
pVlcTableL0L1        RN 4
pLMAXTableL0L1       RN 4
pRMAXTableL0L1       RN 4
pZigzagTable         RN 4
Count                RN 6
DCValueSize          RN 6
powOfSize            RN 7
temp1                RN 5


;// Scratch Registers

RBitStream           RN 8
RBitBuffer           RN 9
RBitCount            RN 10

T1                   RN 11
T2                   RN 12
DCVal                RN 14

        
        ;// Allocate stack memory to store optimized VLC,Zigzag, RMAX, LMAX Table Addresses 
     
        M_ALLOC4        ppVlcTableL0L1,4
        M_ALLOC4        ppLMAXTableL0L1,4
        M_ALLOC4        ppRMAXTableL0L1,4
        M_ALLOC4        ppZigzagTable,4
        M_ALLOC4        pDCCoeff,4
        

        
        M_START omxVCM4P2_DecodeVLCZigzag_IntraDCVLC,r12

        M_ARG           shortVideoHeaderonStack,4                                  ;// Pointer to argument on stack  
        M_ARG           videoComponstack,4                                         ;// Pointer to argument on stack

        
        ;// Decode DC Coefficient

        
        LDR             pDCLumaChromaIndex, =armVCM4P2_aIntraDCLumaChromaIndex ;// Load Optimized VLC Table for Luminance and Chrominance

        ;// Initializing the Bitstream Macro

        M_BD_INIT0      ppBitStream, pBitOffset, RBitStream, RBitBuffer, RBitCount
        M_LDR           videoComp,videoComponstack                                 
        M_BD_INIT1      T1, T2, T2
        ADD             pDCLumaChromaIndex,pDCLumaChromaIndex,videoComp, LSL #6             
        M_BD_INIT2      T1, T2, T2
    
        
        M_BD_VLD        DCValueSize,T1,T2,pDCLumaChromaIndex,4,2                    ;// VLC Decode using optimized Luminance and Chrominance VLC Table

    
       

DecodeDC
                         
        CMP             DCValueSize,#12     
        BGT             ExitError
        
        CMP             DCValueSize,#0
        MOVEQ           DCVal,#0                                                    ;// If DCValueSize is zero then DC coeff =0
        BEQ             ACDecode                                                    ;// Branch to perform AC Coeff Decoding
        
        M_BD_VREAD16    DCVal,DCValueSize,T1,T2                                     ;// Get DC Value From Bit stream
         

        MOV             powOfSize,#1                                                
        LSL             powOfSize,DCValueSize                                       ;// powOfSize=pow(2,DCValueSize)
        CMP             DCVal,powOfSize,LSR #1                                      ;// Compare DCVal with powOfSize/2 
        ADDLT           DCVal,DCVal,#1
        SUBLT           DCVal,DCVal,powOfSize                                       ;// If Lessthan powOfSize/2 DCVal=DCVal-powOfSize+1
                                                                                    ;// Else DCVal= fetchbits from bit stream

CheckDCValueSize
        
        CMP             DCValueSize,#8                                              ;// If DCValueSize greater than 8 check marker bit

        BLE             ACDecode

        M_BD_READ8      temp1,1,T1
        TEQ             temp1,#0                                                    ;// If Marker bit is zero Exit with an Error Message
        BEQ             ExitError

        

        ;// Decode AC Coefficient

ACDecode

        M_STR           DCVal,pDCCoeff                                             ;// Store Decoded DC Coeff on Stack
        M_BD_FINI       ppBitStream,pBitOffset                                     ;// Terminating the Bit stream Macro
         
        LDR             pZigzagTable, =armVCM4P2_aClassicalZigzagScan          ;// Load Zigzag talbe address   
        ADD             pZigzagTable, pZigzagTable, PredDir, LSL #6                ;// Modify the Zigzag table adress based on PredDir                
       
        M_STR           pZigzagTable,ppZigzagTable                                 ;// Store zigzag table on stack
        LDR             pVlcTableL0L1, =armVCM4P2_IntraVlcL0L1                 ;// Load Optimized VLC Table With both Last=0 and Last=1 Entries
        M_STR           pVlcTableL0L1,ppVlcTableL0L1                               ;// Store Optimized VLC Table on stack
        LDR             pLMAXTableL0L1, =armVCM4P2_IntraL0L1LMAX               ;// Load LMAX Table
        M_STR           pLMAXTableL0L1,ppLMAXTableL0L1                             ;// Store LMAX table on stack
        LDR             pRMAXTableL0L1, =armVCM4P2_IntraL0L1RMAX               ;// Load RMAX Table
        MOV             Count,#1                                                   ;// Set Start =1        
        
        M_STR           pRMAXTableL0L1,ppRMAXTableL0L1                             ;// Store RMAX Table on Stack
        
       
        M_LDR           shortVideoHeader,shortVideoHeaderonStack                   ;// Load the Input Argument From Stack
        
        BL              armVCM4P2_DecodeVLCZigzag_AC_unsafe                    ;// Call the Unsafe Function

        M_LDR           DCVal,pDCCoeff                                             ;// Get the Decoded DC Value From Stack
        STRH            DCVal,[pDst]                                               ;// Store the DC Value 
        B               ExitOK
        
              

ExitError
 
        M_BD_FINI       ppBitStream,pBitOffset                                     ;// Terminating the Bit Stream Macro in case of an Error
        MOV             Return,#OMX_Sts_Err                                        ;// Exit with an Error Message 
ExitOK
      
        M_END
        ENDIF
        
        END
