;//
;// 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:   12290
; * Date:       Wednesday, April 9, 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 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
