亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mve_core.asm

?? mpeg2中的全搜索算法
?? ASM
字號:
/*******************************************************************************
Copyright(c) 2000 - 2002 Analog Devices. All Rights Reserved.
Developed by Joint Development Software Application Team, IPDC, Bangalore, India
for Blackfin DSPs  ( Micro Signal Architecture 1.0 specification).

By using this module you agree to the terms of the Analog Devices License
Agreement for DSP Software. 
********************************************************************************
Module Name     : mve_core.asm
Label Name      : __mve_core
Version         :   1.0
Change History  :

                Version     Date          Author            Comments
                1.0         07/02/2001    Vijay             Original 

Description     : The assembly function is used by the motion estimation routine
                  to compute the best matching macroblock for a given target 
                  block and to compute the motion vectors for that matching 
                  block. The subroutine fetches all the possible blocks within 
                  the search range in the reference frame and determines the 
                  best matching macro block for a give target block based on the
                  MAD. The MAD of a pair of 16x16 blocks denoted by TGT_BLK and 
                  REF_BLK is computed as follows :

                      MAD = Sum( ABS[TGT_BLK - REF_BLK ] )

                  The offset between the best matching reference block and the 
                  target block gives the motion vector. Half pixelation is not 
                  done inside this subroutine.

Prototype       : void _mve_core( srruct *input_parameters, struct *output);

                  The input to this routine is a set of two pointers. The first 
                  pointer points to a structure containing the following input 
                  parameters.

                  Input : Structure 1 :
                        struct {
                                    int hor_size;
                            -> Horizontal size of the video frame 
                                    int left_search_boundary;
                            -> (2^search_factor + 1) 
                                    unsigned char *tgt_blk_add;
                            -> Start address of the target block; 
                                    unsigned char *loc_tgt_blk_in_ref_frame;
                            -> Location of target block in the reference frame 
                                    unsigned char *search_begin_st_add;
                            -> Start address from where search should begin 
                                    int hor_search_range;
                            -> Search range in pixels in the horizontal 
                               direction 
                                    int ver_search_range;
                            -> Search range in pixels in the vertical direction 
                                }input_parameters;

                  The second structure acts as an output where the elements of 
                  the structure are modified by this routine

                  Output : Structure 2 :
                        struct {
                                    int least_mad;
                            -> The value of the least MAD after searching the 
                               search window fully 
                                    unsigned char *add_least_mad;
                            -> Address of the block having the least MAD 
                                    int vert_mv;
                            -> Vertical integer motion vector 
                                    int hor_mv;
                            -> Horizontal integer motion vector 
                                }output;

Registers used  : A0, A1, R0-R3, R5-R7, I0, I1, I3, M1-M3, L0, L1, L3, P0-P5, 
                  LC0 LC1.

Performance     :
                Code size : 388 Bytes.
*******************************************************************************/
.section L1_code;
.align 8;
.global __mve_core;
    
__mve_core:

    [--SP] = (R7:5, P5:3);
    L0 = 0;
    L1 = 0;
    L3 = 0;
    P5 = R0;
    I3 = R1;
    P3 = 16;                // Loop ctr(for 16 rows) initialized
    R7.L = -1;              // Initialize R7 to the positive maximum number
    R7.H = 0x7FFF;          // R7 contains the minimum MAD or MSE
    R0 = [P5];              // Horizontal size of the frame
    R1 = R0 << 4 || P1 = [P5 + 16];
                            // Starting address from where subroutine must start
                            // searching for matching blocks 
    M2 = R1;                // 16*Horizontal size
    R0 += -16;
    M1 = R0;                // Horizontal size - 16
    R0 += 4;
    M3 = R0;                // Horizontal size - 12
    MNOP || R1 = [P5 + 8];
    I0 = R1;                // Starting address of target block
    MNOP || R2 = [P5 + 20];
    P4 = R2;                // Horizontal search range
    R6 = [P5 + 24] || NOP;  // Vertical search range
    P2 = 0;
VERTICAL:
    P1 = P1 + P2;           // Update the reference block row address
    P2 = P1;                
    LSETUP(ST_SEARCH, END_SEARCH) LC1 = P4;
                            // Set horizontal span of the search range 
ST_SEARCH:
        I1 = P2;            // Fetch the start address of the reference block
/*********************** MEAN ABSOLUTE DIFFERENCE *****************************/
    
        A1=A0=0;            // Initialize accumulators for accumulation
        DISALGNEXCPT || R0 = [I0++] || R2 = [I1++];
                            // Fetch the first data from the two blocks 
        LSETUP (MAD_START, MAD_END) LC0=P3;
MAD_START:  DISALGNEXCPT || R3 = [I1++];
            SAA (R1:0,R3:2) || R1 = [I0++]  || R2 = [I1++];
                            // Compute absolute difference and accumulate 
            SAA (R1:0,R3:2) (R) || R0 = [I0++] || R3 = [I1++];
                            //                  | 
            SAA (R1:0,R3:2) || R1 = [I0 ++ M3] || R2 = [I1++M1];
                            //  After fetch of 4th word of target blk, pointer 
                            // made to point next row 
MAD_END:    SAA (R1:0,R3:2) (R) || R0 = [I0++] || R2 = [I1++];

        R3=A1.L+A1.H,R2=A0.L+A0.H || I0 -= M2;    
        R0 = R2 + R3 (NS) || I0 -= 4;
                            // Add the accumulated values in both MACs 
    
    
/*************************** MINIMUM MAD COMPUTATION **************************/
        CC = R0 <= R7;      // Check if the latest MAD or MSE is less than the 
                            // previous ones
        IF !CC JUMP END_SEARCH (BP);
                            // If latest MAD is not lesser, then return 
        CC = R0 < R7;                           
        IF !CC JUMP EQUAL;  // If MAD is lesser jump to 'LESS'
        R7 = R0;            // If latest MAD is less, latest MAD or MSE is the 
                            // minimum
        P0 = P2;            // and corresponding block is better match
        JUMP END_SEARCH;
EQUAL:                      // Compute the MVs for the least, previous MAD
        R1 = P0;
        R0 = R0 - R0 (NS) || R2 = [P5 + 12];
        R3 = R1 - R2 (NS) || R5 = [P5];
                            // Find the difference between current block and 
                            // reference block 
        R1 = ABS R3 || R2 = [P5 + 4];
                            // Take the absolute value of the difference 
REPEAT1:
        CC = R1 < R5;
        IF CC JUMP FINISH_MOD1;                 
        R1 = R1 - R5;       // Divide the offset by COLUMNS
        R0 += 2;            // R0 has twice the quotient and R1 has the 
                            // remainder
        JUMP REPEAT1;
FINISH_MOD1:
        CC = R1 <= R2;
        IF CC JUMP NOTRANS1;
        R0 += 2;            // If remainder is greater than that value, 
                            // increment quotient by two
        R1 = R1 - R5;       // and remainder = remainder - COLUMNS
NOTRANS1:
        R1 <<= 1;           // Remainder*2 gives horizontal motion vector
        R2 = -R0;
        R5 = -R1;
        CC = R3 < 0;        // If R3 is negative (diff. negative), negate both 
                            // quotient and remainder
        IF CC R0 = R2;                          
        IF CC R1 = R5;                          
        A1 = R0.L*R0.L (IS);// Distance to previous best match from reference 
                            // block
        A1 += R1.L*R1.L (IS);
    
                            // Compute the MVs for the least, current MAD
        R1 = P2;
        R0 = R0 - R0 (NS) || R2 = [P5 + 12];
        R3 = R1 - R2 (NS) || R5 = [P5];
                            // Find the difference between current block and 
                            // reference block 
        R1 = ABS R3 || R2 = [P5 + 4];
                            // Take the absolute value of the difference
REPEAT2:
        CC = R1 < R5;
        IF CC JUMP FINISH_MOD2;                 
        R1 = R1 - R5;       // Divide the offset by COLUMNS
        R0 += 2;            // R0 has twice the quotient and R1 has the 
                            // remainder
        JUMP REPEAT2;
FINISH_MOD2:
        CC = R1 <= R2;
        IF CC JUMP NOTRANS2;
        R0 += 2;            // If remainder is greater than that value, 
                            // increment quotient by two
        R1 = R1 - R5;       // and remainder = remainder - COLUMNS
NOTRANS2:
        R1 <<= 1;           // Remainder*2 gives horizontal motion vector
        R2 = -R0;
        R5 = -R1;
        CC = R3 < 0;        // If R3 is negative (diff. negative), negate both 
                            // quotient and remainder
        IF CC R0 = R2;                          
        IF CC R1 = R5;                          
        A0 = R0.L*R0.L (IS);
        A0 += R1.L*R1.L (IS);
                            // Distance to current block from reference block 
    
        CC = A0 < A1;
        IF CC P0 = P2;      // Make current block as the best match till now
    
END_SEARCH:
        P2 += 1;            // Update the reference block column address
    P2 = [P5];              // Horizontal size of the video frame
    R6 += -1;
    CC = R6 <= 0;           // Check if the all the rows in the search area are 
                            // completed
    IF !CC JUMP  VERTICAL (BP);
                            // Repeat till the entire search area is matched 
    
                            // Compute the motion vectors
    R1 = P0;
    R0 = R0 - R0 (NS) || R2 = [P5 + 12];
    R3 = R1 - R2 (NS) || R5 = [P5];
                            // Find the difference between current block and 
                            // reference block 
    R1 = ABS R3 || R2 = [P5 + 4];
                            // Take the absolute value of the difference
REPEAT3:
    CC = R1 < R5;
    IF CC JUMP FINISH_MOD3;                 
    R1 = R1 - R5;           // Divide the offset by COLUMNS
    R0 += 2;                // R0 has twice the quotient and R1 has the 
                            // remainder
    JUMP REPEAT3;
FINISH_MOD3:
    CC = R1 <= R2;
    IF CC JUMP NOTRANS3;
    R0 += 2;                // If remainder is greater than that value, 
                            // increment quotient by two
    R1 = R1 - R5;           // and remainder = remainder - COLUMNS
NOTRANS3:
    R1 <<= 1;               // Remainder*2 gives horizontal motion vector
    R2 = -R0;
    R5 = -R1;
    CC = R3 < 0;            // If R3 is negative (diff. negative), negate both 
                            // quotient and remainder
    IF CC R0 = R2;                          
    IF CC R1 = R5;                          
    R3 = P0;
    [I3++] = R7;            // Store the least MAD in the output structure
    [I3++] = R3;            // Store the address of the least MAD in the output 
                            // structure
    [I3++] = R0;            // Store the integer vertical MV in the output 
                            // structure
    [I3++] = R1;            // Store the integer horizontal MV in the output 
                            // structure
    (R7:5, P5:3) = [SP++];          
    RTS;
    NOP;                    //to avoid one stall if LINK or UNLINK happens to be
                            //the next instruction after RTS in the memory.
__mve_core.end:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲蜜桃精久久久久久久| 欧美亚洲综合久久| 麻豆精品视频在线观看视频| 亚洲欧洲中文日韩久久av乱码| 国产日韩欧美高清在线| 久久蜜桃一区二区| 久久午夜国产精品| 国产欧美日韩三区| 国产精品福利影院| 亚洲欧洲精品天堂一级 | 一二三四区精品视频| 一区二区三区加勒比av| 亚洲国产综合色| 亚洲成人综合视频| 麻豆国产精品一区二区三区 | 色婷婷综合久久久中文字幕| a级精品国产片在线观看| 9色porny自拍视频一区二区| 91亚洲大成网污www| 91成人免费网站| 欧美一二三在线| 精品99一区二区三区| 久久亚洲精品小早川怜子| 国产精品看片你懂得| 亚洲精品福利视频网站| 日韩成人午夜电影| 韩国v欧美v日本v亚洲v| 97精品国产97久久久久久久久久久久| 色婷婷激情综合| 欧美一卡在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 99视频精品免费视频| 911精品产国品一二三产区| 久久精品免费在线观看| 亚洲人成精品久久久久久| 免费成人结看片| 91视频观看视频| 精品福利在线导航| 亚洲精品日产精品乱码不卡| 麻豆91精品视频| 91天堂素人约啪| 26uuu精品一区二区| 亚洲一区二区在线免费观看视频| 久久99国产精品免费网站| 91久久精品一区二区三区| 26uuu久久综合| 午夜精品福利一区二区三区av| 国产成人一级电影| 日韩精品一区二区三区视频在线观看| 欧美精品一区二区在线播放| 一区二区在线观看免费| 国产一区欧美一区| 欧美一区二区不卡视频| 亚洲国产日韩av| 99免费精品在线观看| 久久亚洲影视婷婷| 日韩高清在线不卡| 欧美亚洲日本国产| 国产精品人成在线观看免费| 麻豆国产精品777777在线| 666欧美在线视频| 夜夜嗨av一区二区三区中文字幕| 成人av免费在线观看| 久久久亚洲精品一区二区三区| 青青草国产精品97视觉盛宴| 欧美怡红院视频| 亚洲精品第一国产综合野| 91视频观看视频| 综合网在线视频| 91丨porny丨国产| 18欧美乱大交hd1984| 成年人国产精品| 中文字幕精品一区二区三区精品| 国产精品一二三四| 国产日产亚洲精品系列| 国产suv精品一区二区三区| 久久久99免费| 国产麻豆精品久久一二三| 2017欧美狠狠色| 国产福利一区在线| 中文字幕不卡在线| 99久久er热在这里只有精品15| 国产精品国产成人国产三级| 99热精品一区二区| 亚洲中国最大av网站| 欧美精品九九99久久| 青青青伊人色综合久久| ww久久中文字幕| www.欧美日韩| 亚洲愉拍自拍另类高清精品| 欧美精品1区2区| 国内欧美视频一区二区| 欧美国产成人精品| 欧美性色黄大片| 久久精品国产网站| 国产精品私房写真福利视频| 色综合天天视频在线观看| 午夜电影网一区| 久久这里只有精品6| 色综合久久中文综合久久牛| 亚洲成人先锋电影| 久久免费精品国产久精品久久久久| 成人av在线影院| 日韩va亚洲va欧美va久久| 国产精品日产欧美久久久久| 欧美优质美女网站| 国产一区二区三区不卡在线观看| 中文字幕日本不卡| 91精品国产福利| 成人h精品动漫一区二区三区| 亚洲一区二区三区小说| 26uuu国产电影一区二区| 欧美在线|欧美| 国产伦理精品不卡| 亚洲第一成年网| 国产精品国产精品国产专区不蜜| 欧美一区二区视频在线观看2020| 国产精品一二三区| 午夜视频一区二区| 1024亚洲合集| 久久亚洲综合色| 欧美一区二区三区视频免费| 99在线热播精品免费| 国产一区二区在线观看免费| 亚洲国产综合在线| 中文字幕一区二区三区乱码在线| 日韩精品一区二区在线| 欧美日韩精品综合在线| 99久久免费视频.com| 久久综合综合久久综合| 亚洲电影你懂得| 中文字幕一区二区三区色视频| 精品福利一二区| 日韩美女主播在线视频一区二区三区| 91黄色激情网站| 波多野结衣中文字幕一区二区三区| 另类综合日韩欧美亚洲| 天天综合色天天综合| 亚洲精品国产a久久久久久 | 午夜精品一区二区三区三上悠亚| 中文字幕一区二区三区在线不卡 | 最新日韩av在线| 国产精品久久久久永久免费观看 | 久久久久久久精| 欧美一区二区在线观看| 欧美日韩三级一区| 欧美亚洲一区二区在线观看| 色婷婷综合久久久久中文一区二区| 成人动漫一区二区在线| 成人做爰69片免费看网站| 久久国产精品第一页| 精品在线观看免费| 精品一区二区影视| 国内成+人亚洲+欧美+综合在线| 免费观看久久久4p| 精品亚洲成a人| 国产精一区二区三区| 国产成人综合亚洲网站| www.成人在线| 色综合色综合色综合| 精品视频在线视频| 91精品国产品国语在线不卡| 日韩亚洲欧美成人一区| 精品福利av导航| 国产亚洲欧美一区在线观看| 国产精品久久久久久福利一牛影视 | 色呦呦国产精品| 欧洲亚洲精品在线| 91精品国产综合久久香蕉的特点| 日韩精品一区国产麻豆| 久久久久久久久久看片| 中文字幕在线不卡视频| 一区二区免费在线| 美女在线视频一区| 成人精品一区二区三区四区| 一本到三区不卡视频| 91精品国产全国免费观看| 精品女同一区二区| 亚洲三级在线观看| 蜜臀av性久久久久蜜臀av麻豆| 国产成a人无v码亚洲福利| 91国偷自产一区二区使用方法| 日韩一区二区三区电影| 中文文精品字幕一区二区| 亚洲一二三区不卡| 国产精品中文欧美| 欧美亚洲丝袜传媒另类| 久久久综合视频| 亚洲综合男人的天堂| 国产高清一区日本| 在线免费观看一区| 久久久久久9999| 五月天亚洲婷婷| www.亚洲精品| 欧美一区二区国产| 一区二区三区成人| 粉嫩av一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 国产精品入口麻豆原神| 久久草av在线|