10c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
20c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
30c1bc742181ded4930842b46e9507372f0b1b963James Dong;// File Name:  armVCM4P2_SetPredDir_s.s
40c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OpenMAX DL: v1.0.2
50c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Revision:   12290
60c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Date:       Wednesday, April 9, 2008
70c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
80c1bc742181ded4930842b46e9507372f0b1b963James Dong;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
90c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
100c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
110c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
120c1bc742181ded4930842b46e9507372f0b1b963James Dong
130c1bc742181ded4930842b46e9507372f0b1b963James Dong; **
140c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Function: armVCM4P2_SetPredDir
150c1bc742181ded4930842b46e9507372f0b1b963James Dong; *
160c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Description:
170c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Performs detecting the prediction direction
180c1bc742181ded4930842b46e9507372f0b1b963James Dong; *
190c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Remarks:
200c1bc742181ded4930842b46e9507372f0b1b963James Dong; *
210c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Parameters:
220c1bc742181ded4930842b46e9507372f0b1b963James Dong; * [in] blockIndex  block index indicating the component type and
230c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                          position as defined in subclause 6.1.3.8, of ISO/IEC
240c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                          14496-2. Furthermore, indexes 6 to 9 indicate the
250c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                          alpha blocks spatially corresponding to luminance
260c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                          blocks 0 to 3 in the same macroblock.
270c1bc742181ded4930842b46e9507372f0b1b963James Dong; * [in] pCoefBufRow pointer to the coefficient row buffer
280c1bc742181ded4930842b46e9507372f0b1b963James Dong; * [in] pQpBuf      pointer to the quantization parameter buffer
290c1bc742181ded4930842b46e9507372f0b1b963James Dong; * [out]predQP      quantization parameter of the predictor block
300c1bc742181ded4930842b46e9507372f0b1b963James Dong; * [out]predDir     indicates the prediction direction which takes one
310c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                  of the following values:
320c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                  OMX_VC_HORIZONTAL    predict horizontally
330c1bc742181ded4930842b46e9507372f0b1b963James Dong; *                  OMX_VC_VERTICAL      predict vertically
340c1bc742181ded4930842b46e9507372f0b1b963James Dong; *
350c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Return Value:
360c1bc742181ded4930842b46e9507372f0b1b963James Dong; * Standard OMXResult result. See enumeration for possible result codes.
370c1bc742181ded4930842b46e9507372f0b1b963James Dong; *
380c1bc742181ded4930842b46e9507372f0b1b963James Dong; */
390c1bc742181ded4930842b46e9507372f0b1b963James Dong
400c1bc742181ded4930842b46e9507372f0b1b963James Dong       INCLUDE omxtypes_s.h
410c1bc742181ded4930842b46e9507372f0b1b963James Dong       INCLUDE armCOMM_s.h
420c1bc742181ded4930842b46e9507372f0b1b963James Dong       INCLUDE omxVC_s.h
430c1bc742181ded4930842b46e9507372f0b1b963James Dong
440c1bc742181ded4930842b46e9507372f0b1b963James Dong
450c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_VARIANTS ARM1136JS
460c1bc742181ded4930842b46e9507372f0b1b963James Dong
470c1bc742181ded4930842b46e9507372f0b1b963James Dong
480c1bc742181ded4930842b46e9507372f0b1b963James Dong       IF ARM1136JS
490c1bc742181ded4930842b46e9507372f0b1b963James Dong
500c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Input Arguments
510c1bc742181ded4930842b46e9507372f0b1b963James DongBlockIndex         RN 0
520c1bc742181ded4930842b46e9507372f0b1b963James DongpCoefBufRow        RN 1
530c1bc742181ded4930842b46e9507372f0b1b963James DongpCoefBufCol        RN 2
540c1bc742181ded4930842b46e9507372f0b1b963James DongpredDir            RN 3
550c1bc742181ded4930842b46e9507372f0b1b963James DongpredQP             RN 4
560c1bc742181ded4930842b46e9507372f0b1b963James DongpQpBuf             RN 5
570c1bc742181ded4930842b46e9507372f0b1b963James Dong
580c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Local Variables
590c1bc742181ded4930842b46e9507372f0b1b963James Dong
600c1bc742181ded4930842b46e9507372f0b1b963James DongReturn             RN 0
610c1bc742181ded4930842b46e9507372f0b1b963James DongblockDCLeft        RN 6
620c1bc742181ded4930842b46e9507372f0b1b963James DongblockDCTop         RN 7
630c1bc742181ded4930842b46e9507372f0b1b963James DongblockDCTopLeft     RN 8
640c1bc742181ded4930842b46e9507372f0b1b963James Dongtemp1              RN 9
650c1bc742181ded4930842b46e9507372f0b1b963James Dongtemp2              RN 14
660c1bc742181ded4930842b46e9507372f0b1b963James Dong
670c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_START    armVCM4P2_SetPredDir,r9
680c1bc742181ded4930842b46e9507372f0b1b963James Dong
690c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_ARG       ppredQP,4
700c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_ARG       ppQpBuf,4
710c1bc742181ded4930842b46e9507372f0b1b963James Dong
720c1bc742181ded4930842b46e9507372f0b1b963James Dong       LDRH        blockDCTopLeft,[pCoefBufRow,#-16]
730c1bc742181ded4930842b46e9507372f0b1b963James Dong       LDRH        blockDCLeft,[pCoefBufCol]
740c1bc742181ded4930842b46e9507372f0b1b963James Dong
750c1bc742181ded4930842b46e9507372f0b1b963James Dong       TEQ         BlockIndex,#3
760c1bc742181ded4930842b46e9507372f0b1b963James Dong       LDREQH      blockDCTop,[pCoefBufCol,#-16]
770c1bc742181ded4930842b46e9507372f0b1b963James Dong       LDRNEH      blockDCTop,[pCoefBufRow]
780c1bc742181ded4930842b46e9507372f0b1b963James Dong
790c1bc742181ded4930842b46e9507372f0b1b963James Dong       SUBS        temp1,blockDCLeft,blockDCTopLeft
800c1bc742181ded4930842b46e9507372f0b1b963James Dong       RSBLT       temp1,temp1,#0
810c1bc742181ded4930842b46e9507372f0b1b963James Dong       SUBS        temp2,blockDCTopLeft,blockDCTop
820c1bc742181ded4930842b46e9507372f0b1b963James Dong       RSBLT       temp2,temp2,#0
830c1bc742181ded4930842b46e9507372f0b1b963James Dong
840c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_LDR       pQpBuf,ppQpBuf
850c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_LDR       predQP,ppredQP
860c1bc742181ded4930842b46e9507372f0b1b963James Dong       CMP         temp1,temp2
870c1bc742181ded4930842b46e9507372f0b1b963James Dong       MOV         temp2,#OMX_VC_VERTICAL
880c1bc742181ded4930842b46e9507372f0b1b963James Dong       LDRLTB      temp1,[pQpBuf,#1]
890c1bc742181ded4930842b46e9507372f0b1b963James Dong       STRLT       temp2,[predDir]
900c1bc742181ded4930842b46e9507372f0b1b963James Dong       STRLT       temp1,[predQP]
910c1bc742181ded4930842b46e9507372f0b1b963James Dong       MOV         temp2,#OMX_VC_HORIZONTAL
920c1bc742181ded4930842b46e9507372f0b1b963James Dong       LDRGEB      temp1,[pQpBuf]
930c1bc742181ded4930842b46e9507372f0b1b963James Dong       STRGE       temp2,[predDir]
940c1bc742181ded4930842b46e9507372f0b1b963James Dong       MOV         Return,#OMX_Sts_NoErr
950c1bc742181ded4930842b46e9507372f0b1b963James Dong       STRGE       temp1,[predQP]
960c1bc742181ded4930842b46e9507372f0b1b963James Dong
970c1bc742181ded4930842b46e9507372f0b1b963James Dong
980c1bc742181ded4930842b46e9507372f0b1b963James Dong
990c1bc742181ded4930842b46e9507372f0b1b963James Dong       M_END
1000c1bc742181ded4930842b46e9507372f0b1b963James Dong
1010c1bc742181ded4930842b46e9507372f0b1b963James Dong       ENDIF
1020c1bc742181ded4930842b46e9507372f0b1b963James Dong
1030c1bc742181ded4930842b46e9507372f0b1b963James Dong       END
1040c1bc742181ded4930842b46e9507372f0b1b963James Dong
105