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

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

?? hpel_core1.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     : hpel_core1.asm
Label Name      : __hpel_core1
Version         :   1.0
Change History  :

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

Description     : The assembly function is used by the half pixelation routine 
                  to compute the average of two ADJACENT macroblocks which need 
                  not be word aligned. The starting addresses of the macroblocks
                  are passed in I0 and I1 and the averaged result is stored  in 
                  a buffer pointed to by I3. The MAD between the averaged
                  (interpolated) block and the target block is then computed. If
                  the interpolated block has a lower value of MAD than the 
                  previously observed minimum an offset of +1 or -1 is added to 
                  the integer motion vector in the corresponding direction. This
                  is called the half-pixel correction.

Prototype       : void _hpel_core1(struct *input_parameters, int *temp_array1);

                  Input : The input to this routine is a pointer to a structure 
                  containing the following elements and a temporary array of 
                  size 260. The content of the temporary array will be used by 
                  the hpel_core2 routine.

                  Structure :
                        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 
                                    int curr_ver_mv_off;
                            -> Current hpel offset for the vertical motion 
                               vector
                                    int curr_hor_mv_off;
                            -> Current hpel offset for the horizontal motion 
                               vector 
                                    int prev_ver_mv_off;
                            -> Previous hpel offset for the vertical motion 
                               vector
                                    int prev_hor_mv_off;
                            -> Previous hpel offset for the horizontal motion 
                               vector 
                                    int hor_size;
                            -> Horizontal size of the video frame 
                                    unsigned char *tgt_blk_add;
                            -> Start address of the target block 
                                }input_parameters;

Registers used  : R0-R3, R7, I0-I3, M1, M3, L0, L1, L3, P1, P2, LC0.

Performance     :
                Code size : 282 Bytes.
*******************************************************************************/
.section L1_code;
.align 8;
.global __hpel_core1;

__hpel_core1:

    L0 = 0;
    L1 = 0;
    L3 = 0;
    P1 = R0;
    I3 = R1;
    I2 = R1;
    [--SP] = R7;
    MNOP || R1 = [P1 + 16]; // Current hpel offset for the vertical motion 
                            // vector
    MNOP || R3 = [P1 + 32]; // Horizontal size of the video frame
    R1 = R1.L * R3.L (IS) || R0 = [P1 + 4];
                            // R0 -> Address of the block having least MAD 
    R2 = R0 + R1 (NS) || R1 = [P1 + 20];
                            // R1 -> Current hpel offset for the horizontal 
                            // motion vector 
    I0 = R0;                                
    R2 = R2 + R1;
    I1 = R2;
    P2 = 16;                // Loop ctr(for 16 rows) is initialized
    R3 += -16;
    M1 = R3;                // COLUMNS - 16
    R3 += 4;
    M3 = R3;                // COLUMNS - 12
    
/************************** AVERAGE ADJACENT BLOCKS *************************/
    LSETUP(ST_LOOP,END_LOOP) LC0=P2;
    DISALGNEXCPT || R0 = [I0++] || R2  =[I1++];
                            // Fetch 1st words of the two blocks(if disligned, 
                            // contains partial data
ST_LOOP:
        DISALGNEXCPT || R1 = [I0++] || R3  =[I1++];
                            // Fetch 2nd words(will contain remaining part of 
                            // 1st word) 
        R7 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++] || R2  =[I1++];
                            // Average(R0,R2) and fetch 3rd word 
        R7 = BYTEOP1P(R1:0,R3:2)(R) || R1 = [I0++] || [I3++] = R7 ;
                            // Average(R1,R3), fetch 4th data and store previous
                            // result 
        DISALGNEXCPT  || R3  =[I1++] || [I3++] = R7;
                            // Fetch 4th data and store previous result 
        R7 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++M1] || R2  =[I1++M1];
                            // Average (R0,R2), fetch 5th word and modify 
                            // pointers 
        R7 = BYTEOP1P(R1:0,R3:2)(R) || R0 = [I0++] || [I3++] = R7 ;
                            // Average (R1,R3), fetch 1st word of next row and 
                            // store 
END_LOOP:
        DISALGNEXCPT || R2  =[I1++] || [I3++] = R7;
                            // Fetch 1st word of next row and store previous 
                            // result 
    
/************************* MEAN ABSOLUTE DIFFERENCE ***************************/
    R0 = [P1 + 36];
    I0 = R0;                // Fetch the start address of the target block
    I1 = I2;                // Fetch the start address of the reference block
    A1=A0=0 || R0 = [I0++] || R2 = [I1++];
                            // Initialize accumulators to zero and fetch the 
                            // first data from the two blocks 

    LSETUP (MAD_START, MAD_END) LC0=P2;
MAD_START:
        SAA (R1:0,R3:2) || R1 = [I0++]  || R3 = [I1++];
                            // Compute absolute difference and accumulate 
        SAA (R1:0,R3:2) (R) || R0 = [I0++] || R2 = [I1++];
                            //                  | 
        SAA (R1:0,R3:2) || R1 = [I0 ++ M3] || R3 = [I1++];
                            //  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;    
    R0 = R2 + R3 (NS) || R3 = [P1];
                            // Add the accumulated values in both MACs 
    
/*************************** MINIMUM MAD COMPUTATION ***********************/
    
    CC = R0 <= R3;          // Check if the latest MAD or MSE is less than the 
                            // previous ones
    IF CC JUMP LESS_OR_EQUAL;
                            // If latest MAD is not lesser, then return 
    R7 = [SP++];
    RTS;
LESS_OR_EQUAL:
    CC = R0 < R3;                 
    IF !CC JUMP EQUAL;      // If MAD is lesser jump to 'LESS'
    [P1] = R0;              // If latest MAD is less, then store it as the 
                            // minimum MAD
    R0 = [P1 + 16];
    [P1 + 24] = R0;
    R0 = [P1 + 20];
    [P1 + 28] = R0;
    R7 = [SP++];
    RTS;
EQUAL:
    R2 = [P1 + 12];         // Horizontal-vector before half pixel estimation
    R1 = [P1 + 28];
    R1 = R2 + R1 (NS) || R3 = [P1 + 8];
                            // Half pixel estimation for Horizontal-vector added
                            // to X-vector 
    R0 = [P1 + 24];
    R0 = R3 + R0;           // Half pixel estimation for Vertical-vector added 
                            // to Y-vector
    A1 = R1.L*R1.L (IS) || R1 = [P1 + 20];
    A1 += R0.L*R0.L (IS) || R0 = [P1 + 16];
                            // Distance to previous best match from reference 
                            // block 
    R0 = R0 + R3;
    R1 = R1 + R2;
    A0 = R0.L*R0.L (IS);    // Distance to current best match from reference 
                            // block
    A0 += R1.L*R1.L (IS);
    CC = A0 < A1;
    IF !CC JUMP FINISH;
    R0 = [P1 + 16];
    [P1 + 24] = R0;
    R0 = [P1 + 20];
    [P1 + 28] = R0;
FINISH:
    R7 = [SP++];
    RTS;        
    
__hpel_core1.end:    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产一区二区三区 | 亚洲欧美电影一区二区| 欧美一级免费大片| 欧美日韩dvd在线观看| 色综合一区二区| 91麻豆精品一区二区三区| a在线欧美一区| 97久久超碰国产精品电影| 91香蕉视频黄| 91国产精品成人| 欧美日韩久久不卡| 欧美三级电影在线看| 欧美日韩黄视频| 欧美高清一级片在线| 在线播放91灌醉迷j高跟美女 | 日韩免费成人网| 精品乱码亚洲一区二区不卡| 精品1区2区在线观看| 久久精品在这里| 中文字幕一区二区三| 亚洲日本韩国一区| 亚洲永久精品国产| 日韩1区2区3区| 国产激情一区二区三区| 97超碰欧美中文字幕| 欧美三级在线看| 日韩欧美成人激情| 国产欧美日韩中文久久| 中文字幕一区二区在线播放| 亚洲成人免费影院| 久久精品国产澳门| 99精品国产热久久91蜜凸| 色婷婷久久久久swag精品| 91精品在线麻豆| 欧美激情一区三区| 亚洲一区自拍偷拍| 国产一级精品在线| 欧美综合一区二区| 国产午夜精品一区二区三区嫩草 | 色综合久久久久久久久| 91精品国产91久久久久久一区二区 | 国产一区二区免费看| 波多野结衣一区二区三区| 欧美久久久久久蜜桃| 久久久久久久综合色一本| 夜夜精品浪潮av一区二区三区| 麻豆高清免费国产一区| 91最新地址在线播放| 久久无码av三级| 亚洲综合图片区| 成人黄色av网站在线| 欧美一级午夜免费电影| 亚洲精品一二三| 国产精品一二三| 日韩一区二区三区视频在线| 亚洲欧美一区二区视频| 激情伊人五月天久久综合| 欧美午夜精品久久久| 国产欧美一区二区精品性| 免费在线看一区| 欧美性猛交xxxx乱大交退制版| 中文字幕电影一区| 日韩成人av影视| 欧美日韩视频专区在线播放| 综合欧美一区二区三区| 国产成人啪午夜精品网站男同| 日韩一区二区高清| 日av在线不卡| 7777精品伊人久久久大香线蕉完整版| 亚洲欧美区自拍先锋| 成人国产精品免费网站| 国产亚洲综合av| 韩日av一区二区| 欧美大肚乱孕交hd孕妇| 青椒成人免费视频| 欧美精品粉嫩高潮一区二区| 亚洲成人www| 精品视频1区2区3区| 亚洲无线码一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 国产精品全国免费观看高清| 国产成人av一区二区三区在线| 精品三级在线看| 国产真实精品久久二三区| 日韩一级成人av| 看片的网站亚洲| 久久精品视频网| 成人免费精品视频| 亚洲欧美一区二区视频| 91福利在线免费观看| 亚洲一区影音先锋| 欧美久久久久久蜜桃| 毛片av中文字幕一区二区| 精品乱人伦小说| 成人av手机在线观看| 亚洲黄色免费网站| 欧美丰满美乳xxx高潮www| 极品瑜伽女神91| 欧美高清在线精品一区| 91国在线观看| 蜜桃一区二区三区四区| 国产亚洲精品福利| 色婷婷国产精品综合在线观看| 亚洲一区二区三区国产| 日韩午夜电影av| 成人动漫一区二区| 亚洲一区二区在线免费看| 欧美一级午夜免费电影| 成人精品视频一区二区三区 | 欧美自拍偷拍午夜视频| 性做久久久久久免费观看欧美| 日韩一级片在线播放| 成人99免费视频| 午夜欧美2019年伦理| 国产欧美精品一区二区色综合| 在线免费精品视频| 国产一区久久久| 亚洲精品福利视频网站| 日韩欧美国产精品| 色婷婷av一区| 国产综合色在线| 亚洲综合色在线| 久久久精品国产免大香伊 | 亚洲 欧美综合在线网络| 精品国产髙清在线看国产毛片| 国产成人aaa| 性做久久久久久免费观看欧美| 中文字幕精品一区二区三区精品| 欧美日韩免费不卡视频一区二区三区| 国产一区啦啦啦在线观看| 亚洲尤物在线视频观看| 国产精品欧美经典| 久久久久久久精| 91精品国产乱码| 在线观看av一区| 成人激情午夜影院| 国产在线精品一区二区| 蜜臀国产一区二区三区在线播放 | 欧美电影在线免费观看| 99久久国产综合精品色伊| 国产自产2019最新不卡| 日韩va亚洲va欧美va久久| 亚洲一区二区三区中文字幕| 国产精品久久久久精k8| 久久综合九色综合久久久精品综合| 欧美性大战xxxxx久久久| 99久久精品99国产精品| jlzzjlzz亚洲日本少妇| 丁香桃色午夜亚洲一区二区三区| 九九国产精品视频| 美女国产一区二区三区| 免费在线观看视频一区| 日韩专区在线视频| 亚洲综合激情另类小说区| 国产精品国产精品国产专区不蜜| 久久这里只有精品6| 日韩免费看的电影| 欧美mv日韩mv国产网站| 精品免费视频.| 久久久噜噜噜久久中文字幕色伊伊| 日韩精品中文字幕在线不卡尤物| 欧美色图片你懂的| 欧美三级在线播放| 777xxx欧美| 日韩一区二区三区四区五区六区| 日韩精品在线一区| 日韩天堂在线观看| 2020国产精品久久精品美国| 26uuu国产一区二区三区| 26uuu久久天堂性欧美| 久久久久9999亚洲精品| 中文字幕在线一区免费| 一区二区视频在线| 亚洲一二三四区| 午夜激情久久久| 久久成人久久爱| eeuss鲁一区二区三区| 色老头久久综合| 91麻豆精品国产91| 久久青草欧美一区二区三区| 国产精品久久久久四虎| 亚洲影院免费观看| 久久91精品久久久久久秒播| 国产成人亚洲精品青草天美| av不卡一区二区三区| 欧美亚洲国产一区二区三区| 日韩欧美www| 亚洲天堂福利av| 麻豆精品一二三| www.亚洲免费av| 欧美日韩视频专区在线播放| 久久女同精品一区二区| 亚洲免费av观看| 国产专区欧美精品| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美日韩另类一区| 国产精品免费久久| 日韩av电影天堂| 色哟哟日韩精品| 久久精品一二三|