;/**
; * 
; * File Name:  omxVCM4P2_DecodeVLCZigzag_IntraDCVLC_s.s
; * OpenMAX DL: v1.0.2
; * Revision:   12290
; * Date:       Wednesday, April 9, 2008
; * 
; * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
; * 
; * 
; *
; * 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 CortexA8

     
      


      IF 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
