;//
;// 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_DecodePadMV_PVOP_s.s
; * OpenMAX DL: v1.0.2
; * Revision:   12290
; * Date:       Wednesday, April 9, 2008
; * 
; * 
; * 
; * 
; **
; * Function: omxVCM4P2_DecodePadMV_PVOP
; *
; * Description:
; * Decodes and pads four motion vectors of the non-intra macroblock in P-VOP.
; * The motion vector padding process is specified in subclause 7.6.1.6 of
; * ISO/IEC 14496-2.
; *
; * Remarks:
; *
; *
; * Parameters:
; * [in]    ppBitStream        pointer to the pointer to the current byte in
; *                            the bit stream buffer
; * [in]    pBitOffset         pointer to the bit position in the byte pointed
; *                            to by *ppBitStream. *pBitOffset is valid within
; *                            [0-7].
; * [in]    pSrcMVLeftMB       pointers to the motion vector buffers of the
; *                           macroblocks specially at the left side of the current macroblock
; *                     respectively.
; * [in]    pSrcMVUpperMB      pointers to the motion vector buffers of the
; *                     macroblocks specially at the upper side of the current macroblock
; *                     respectively.
; * [in]    pSrcMVUpperRightMB pointers to the motion vector buffers of the
; *                     macroblocks specially at the upper-right side of the current macroblock
; *                     respectively.
; * [in]    fcodeForward       a code equal to vop_fcode_forward in MPEG-4
; *                     bit stream syntax
; * [in]    MBType         the type of the current macroblock. If MBType
; *                     is not equal to OMX_VC_INTER4V, the destination
; *                     motion vector buffer is still filled with the
; *                     same decoded vector.
; * [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]   pDstMVCurMB         pointer to the motion vector buffer of the current
; *                     macroblock which contains four decoded motion vectors
; *
; * Return Value:
; * OMX_Sts_NoErr -no error
; * 
; *                     
; * OMX_Sts_Err - status error
; *
; *
     
        INCLUDE omxtypes_s.h
        INCLUDE armCOMM_s.h
        INCLUDE armCOMM_BitDec_s.h
        INCLUDE omxVC_s.h
        
       M_VARIANTS ARM1136JS
       
                


        IF ARM1136JS

;//Input Arguments

ppBitStream           RN 0
pBitOffset            RN 1
pSrcMVLeftMB          RN 2
pSrcMVUpperMB         RN 3
pSrcMVUpperRightMB    RN 4
pDstMVCurMB           RN 5
fcodeForward          RN 6
MBType                RN 7

;//Local Variables

zero                  RN 4
one                   RN 4
scaleFactor           RN 1


Return                RN 0

VlcMVD                RN 0
index                 RN 4
Count                 RN 7

mvHorData             RN 4
mvHorResidual         RN 0

mvVerData             RN 4             
mvVerResidual         RN 0

temp                  RN 1

temp1                 RN 3
High                  RN 4
Low                   RN 2
Range                 RN 1

BlkCount              RN 14

diffMVdx              RN 0
diffMVdy              RN 1

;// Scratch Registers

RBitStream            RN 8
RBitCount             RN 9
RBitBuffer            RN 10

T1                    RN 11
T2                    RN 12
LR                    RN 14

       IMPORT          armVCM4P2_aVlcMVD
       IMPORT          omxVCM4P2_FindMVpred

       ;// Allocate stack memory        
       
       M_ALLOC4        ppDstMVCurMB,4
       M_ALLOC4        pDstMVPredME,4
       M_ALLOC4        pBlkCount,4
       
       M_ALLOC4        pppBitStream,4
       M_ALLOC4        ppBitOffset,4
       M_ALLOC4        ppSrcMVLeftMB,4
       M_ALLOC4        ppSrcMVUpperMB,4
       
       M_ALLOC4        pdiffMVdx,4
       M_ALLOC4        pdiffMVdy,4
       M_ALLOC4        pHigh,4
       
              


       M_START   omxVCM4P2_DecodePadMV_PVOP,r11
       
       M_ARG           pSrcMVUpperRightMBonStack,4           ;// pointer to  pSrcMVUpperRightMB on stack
       M_ARG           pDstMVCurMBonStack,4                  ;// pointer to pDstMVCurMB on stack
       M_ARG           fcodeForwardonStack,4                 ;// pointer to fcodeForward on stack 
       M_ARG           MBTypeonStack,4                       ;// pointer to MBType on stack

      
       
       
       
       ;// Initializing the BitStream Macro

       M_BD_INIT0      ppBitStream, pBitOffset, RBitStream, RBitBuffer, RBitCount
       M_LDR           MBType,MBTypeonStack                  ;// Load MBType from stack
       M_LDR           pDstMVCurMB,pDstMVCurMBonStack        ;// Load pDstMVCurMB from stack
       MOV             zero,#0

       TEQ             MBType,#OMX_VC_INTRA                  ;// Check if MBType=OMX_VC_INTRA
       TEQNE           MBType,#OMX_VC_INTRA_Q                ;// check if MBType=OMX_VC_INTRA_Q
       STREQ           zero,[pDstMVCurMB]
       M_BD_INIT1      T1, T2, T2
       STREQ           zero,[pDstMVCurMB,#4]
       M_BD_INIT2      T1, T2, T2
       STREQ           zero,[pDstMVCurMB,#4]
       MOVEQ           Return,#OMX_Sts_NoErr
       MOV             BlkCount,#0
       STREQ           zero,[pDstMVCurMB,#4]
       
       BEQ             ExitOK

       TEQ             MBType,#OMX_VC_INTER4V                ;// Check if MBType=OMX_VC_INTER4V
       TEQNE           MBType,#OMX_VC_INTER4V_Q              ;// Check if MBType=OMX_VC_INTER4V_Q
       MOVEQ           Count,#4

       TEQ             MBType,#OMX_VC_INTER                  ;// Check if MBType=OMX_VC_INTER
       TEQNE           MBType,#OMX_VC_INTER_Q                ;// Check if MBType=OMX_VC_INTER_Q
       MOVEQ           Count,#1
       
       M_LDR           fcodeForward,fcodeForwardonStack      ;// Load fcodeForward  from stack

       ;// Storing the values temporarily on stack

       M_STR           ppBitStream,pppBitStream              
       M_STR           pBitOffset,ppBitOffset
            

       SUB             temp,fcodeForward,#1                  ;// temp=fcodeForward-1
       MOV             one,#1
       M_STR           pSrcMVLeftMB,ppSrcMVLeftMB
       LSL             scaleFactor,one,temp                  ;// scaleFactor=1<<(fcodeForward-1)
       M_STR           pSrcMVUpperMB,ppSrcMVUpperMB
       LSL             scaleFactor,scaleFactor,#5            
       M_STR           scaleFactor,pHigh                     ;// [pHigh]=32*scaleFactor
              
       ;// VLD Decoding


Loop

       LDR             VlcMVD, =armVCM4P2_aVlcMVD        ;// Load the optimized MVD VLC table

       ;// Horizontal Data and Residual calculation

       LDR             temp,=0xFFF                           
       M_BD_VLD        index,T1,T2,VlcMVD,3,2                ;// variable lenght decoding using the macro
      
       TEQ             index,temp
       BEQ             ExitError                             ;// Exit with an Error Message if the decoded symbol is an invalied symbol 
       
       SUB             mvHorData,index,#32                   ;// mvHorData=index-32             
       MOV             mvHorResidual,#1                      ;// mvHorResidual=1
       CMP             fcodeForward,#1
       TEQNE           mvHorData,#0
       MOVEQ           diffMVdx,mvHorData                    ;// if scaleFactor=1(fcodeForward=1) or mvHorData=0 diffMVdx=mvHorData         
       BEQ             VerticalData
       
       SUB             temp,fcodeForward,#1
       M_BD_VREAD8     mvHorResidual,temp,T1,T2              ;// get mvHorResidual from bitstream if fcodeForward>1 and mvHorData!=0              
       
       CMP             mvHorData,#0
       RSBLT           mvHorData,mvHorData,#0                ;// mvHorData=abs(mvHorData)
       SUB             mvHorResidual,mvHorResidual,fcodeForward
       SMLABB          diffMVdx,mvHorData,fcodeForward,mvHorResidual ;// diffMVdx=abs(mvHorData)*fcodeForward+mvHorResidual-fcodeForward
       ADD             diffMVdx,diffMVdx,#1
       RSBLT           diffMVdx,diffMVdx,#0
       
       ;// Vertical Data and Residual calculation

VerticalData

       M_STR           diffMVdx,pdiffMVdx                    ;// Store the diffMVdx on stack
       LDR             VlcMVD, =armVCM4P2_aVlcMVD        ;// Loading the address of optimized VLC tables

       LDR             temp,=0xFFF
       M_BD_VLD        index,T1,T2,VlcMVD,3,2                ;// VLC decoding using the macro
       
       TEQ             index,temp
       BEQ             ExitError                             ;// Exit with an Error Message if an Invalied Symbol occurs
       
       SUB             mvVerData,index,#32                   ;// mvVerData=index-32             
       MOV             mvVerResidual,#1     
       CMP             fcodeForward,#1
       TEQNE           mvVerData,#0
       MOVEQ           diffMVdy,mvVerData                    ;// diffMVdy = mvVerData if scaleFactor=1(fcodeForward=1) or mvVerData=0
       BEQ             FindMVPred

       SUB             temp,fcodeForward,#1
       M_BD_VREAD8     mvVerResidual,temp,T1,T2              ;// Get mvVerResidual from bit stream if fcodeForward>1 and mnVerData!=0
             

       CMP             mvVerData,#0
       RSBLT           mvVerData,mvVerData,#0
       SUB             mvVerResidual,mvVerResidual,fcodeForward
       SMLABB          diffMVdy,mvVerData,fcodeForward,mvVerResidual ;// diffMVdy=abs(mvVerData)*fcodeForward+mvVerResidual-fcodeForward
       ADD             diffMVdy,diffMVdy,#1
       RSBLT           diffMVdy,diffMVdy,#0

       ;//Calling the Function omxVCM4P2_FindMVpred
        
FindMVPred

       M_STR           diffMVdy,pdiffMVdy
       ADD             temp,pDstMVCurMB,BlkCount,LSL #2      ;// temp=pDstMVCurMB[BlkCount]
       M_STR           temp,ppDstMVCurMB                     ;// store temp on stack for passing as an argument to FindMVPred
       
       MOV             temp,#0
       M_STR           temp,pDstMVPredME                     ;// Pass pDstMVPredME=NULL as an argument         
       M_STR           BlkCount,pBlkCount                    ;// Passs BlkCount as Argument through stack

       MOV             temp,pSrcMVLeftMB                     ;// temp (RN 1)=pSrcMVLeftMB
       M_LDR           pSrcMVUpperRightMB,pSrcMVUpperRightMBonStack
       MOV             pSrcMVLeftMB,pSrcMVUpperMB            ;// pSrcMVLeftMB ( RN 2) = pSrcMVUpperMB
       MOV             ppBitStream,pDstMVCurMB               ;// ppBitStream  ( RN 0) = pDstMVCurMB
       MOV             pSrcMVUpperMB,pSrcMVUpperRightMB      ;// pSrcMVUpperMB( RN 3) = pSrcMVUpperRightMB      
       BL              omxVCM4P2_FindMVpred              ;// Branch to subroutine omxVCM4P2_FindMVpred

       ;// Store Horizontal Motion Vector
     
       M_LDR           BlkCount,pBlkCount                    ;// Load BlkCount from stack
       M_LDR           High,pHigh                            ;// High=32*scaleFactor
       LSL             temp1,BlkCount,#2                     ;// temp=BlkCount*4
       M_LDR           diffMVdx,pdiffMVdx                    ;// Laad diffMVdx
       
       LDRSH           temp,[pDstMVCurMB,temp1]              ;// temp=pDstMVCurMB[BlkCount]
       
       
       RSB             Low,High,#0                           ;// Low = -32*scaleFactor
       ADD             diffMVdx,temp,diffMVdx                ;// diffMVdx=pDstMVCurMB[BlkCount]+diffMVdx
       ADD             Range,High,High                       ;// Range=64*ScaleFactor
       SUB             High,High,#1                          ;// High= 32*scaleFactor-1

       CMP             diffMVdx,Low                          ;// If diffMVdx<Low          
       ADDLT           diffMVdx,diffMVdx,Range               ;// diffMVdx+=Range
        
       CMP             diffMVdx,High                         
       SUBGT           diffMVdx,diffMVdx,Range               ;// If diffMVdx > High diffMVdx-=Range
       STRH            diffMVdx,[pDstMVCurMB,temp1]

       ;// Store Vertical

       ADD             temp1,temp1,#2                        ;// temp1=4*BlkCount+2
       M_LDR           diffMVdx,pdiffMVdy                    ;// Laad diffMVdy
       LDRSH           temp,[pDstMVCurMB,temp1]              ;// temp=pDstMVCurMB[BlkCount].diffMVdy
       ADD             BlkCount,BlkCount,#1                  ;// BlkCount=BlkCount+1
       ADD             diffMVdx,temp,diffMVdx                
       CMP             diffMVdx,Low
       ADDLT           diffMVdx,diffMVdx,Range               ;// If diffMVdy<Low  diffMVdy+=Range                
       CMP             diffMVdx,High
       SUBGT           diffMVdx,diffMVdx,Range               ;// If diffMVdy > High diffMVdy-=Range
       STRH            diffMVdx,[pDstMVCurMB,temp1]    
       
       CMP             BlkCount,Count
       M_LDR           pSrcMVLeftMB,ppSrcMVLeftMB
       M_LDR           pSrcMVUpperMB,ppSrcMVUpperMB

       BLT             Loop                                  ;// If BlkCount<Count Continue the Loop


       ;// If MBType=OMX_VC_INTER or MBtype=OMX_VC_INTER_Q copy pDstMVCurMB[0] to
       ;// pDstMVCurMB[1], pDstMVCurMB[2], pDstMVCurMB[3] 

       M_LDR           MBType,MBTypeonStack

       TEQ             MBType,#OMX_VC_INTER                                       
       TEQNE           MBType,#OMX_VC_INTER_Q                            
       LDREQ           temp,[pDstMVCurMB]
       M_LDR           ppBitStream,pppBitStream
       STREQ           temp,[pDstMVCurMB,#4]
       
       STREQ           temp,[pDstMVCurMB,#8]
       STREQ           temp,[pDstMVCurMB,#12]
       
       
       M_LDR           pBitOffset,ppBitOffset
       ;//Ending the macro
       M_BD_FINI       ppBitStream,pBitOffset                 ;// Finishing the Macro       

       
       MOV             Return,#OMX_Sts_NoErr
       B               ExitOK
 
ExitError

       M_LDR           ppBitStream,pppBitStream
       M_LDR           pBitOffset,ppBitOffset
       ;//Ending the macro
       M_BD_FINI       ppBitStream,pBitOffset
       
       MOV             Return,#OMX_Sts_Err

ExitOK             

       M_END
       ENDIF
       END


   
