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

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

?? arith_decoder_mpeg4.asm

?? 基于VisualDSP++,bf561 ,mpeg4中的算數解碼
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************************************************
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     : arith_decoder_mpeg4.asm
Label Name      : __arith_decoder_mpeg4
Version         :   1.3
Change History  : 

                Version     Date          Author        Comments
                1.3         11/18/2002    Swarnalatha   Tested with VDSP++ 3.0
                                                        compiler 6.2.2 on 
                                                        ADSP-21535 Rev.0.2
                1.2         11/13/2002    Swarnalatha   Tested with VDSP++ 3.0
                                                        on ADSP-21535 Rev.0.2                                     
                1.1         03/20/2002    Raghavendra   Modified to match
                                                        silicon cycle count
                1.0         09/11/2001    Raghavendra   Original 

Description     : Arithmetic decoding contains four main steps
                  1. Removal of stuffed bits.
                  2. Initialization which is performed prior to the decoding of 
                     the first symbol.
                  3. Decoding of symbol themselves. The decoding of each symbol 
                     may be followed by a re-normalization step.
                  4. Termination which is performed after the decoding of the 
                     last symbol.

                  The least probable symbol LPS is defined as the symbol with 
                  least probability. If both probabilities are equal to half 
                  (i.e 0x8000), then '0' symbol is considered as least probable.
                  In initialization lower bound L is set to zero and range 
                  register R is set to 0x7fffffff. Encoder will do bit stuffing 
                  depending on the following condition in order to avoid start 
                  code emulation.
                  1's are stuffed into the bitstream whenever there are too many
                  successive 0's. If first 3(MAX-HEADING) bits are 0's then 1 is
                  transmitted and after MAX_HEADING th 0. If 10(MAX_MIDDLE) or 
                  more 0's are sent successively a 1 is inserted after the 
                  MAX_MIDDLE th 0. If the number of trailing 0's is larger than
                  2(MAX_TRAILING) then a 1 is appended. These stuffed bits are 
                  removed properly while decoding.
                  The range associated with least probable symbol(LPS) is simply
                  computed as R*pLPS. 
                    where R ->16 most significant bits of Range register value
                    pLPS -> probability of LPS symbol.
                  If R value is less than QUATER 1/4(i.e 0x40000000)then 
                  re-normalization is performed. In this procedure both lower 
                  value L and range R is doubled till R is greater than QUATER.

                  The following structure is used :
                  struct arcodec {
                  UInt L;              -> 32bit fixed point register. Contains 
                                          the lower bound of the interval
                  UInt R;              -> 32bit fixed point register. Contains 
                                          the range of the interval
                  UInt V;              -> Contains the value of arithmetic code 
                                          value. It is always larger than or 
                                          equal to L and less than R value.
                  UInt arpipe; 
                  Int bits_to_follow;  -> follow bit count
                  Int first_bit;       -> flag to check first bit
                  Int nzeros;          -> counter to count consecutive zeros
                  Int nonzero;  
                  Int nzerosf;        
                  Int extrabits;
                  Int mh;              ->  to hold MAX_HEAD
                  Int mm;              ->  to hold MAX_MIDDLE
                  Int mt;              ->  to hold MAX_TRAIL
                  unsigned char *in;   -> address of input compressed data array
                  }; typedef struct arcodec ArCoder;  

                  UInt -> unsigned integer 
                  Int -> interger 

Assumption      : Both input and output arrays are unsigned character array.
                  Each bit is stored in one location.
  
Prototype       : void StartArDecoder(ArDecoder *decoder,unsigned char *in);
                  void arith_decoder_mpeg4(int co,ArDecoder *decoder);
                  void decode_renormlise(Arcoder *decoder);
                  void  AddNextInputBit(ArDecoder *decoder);
                  void StopArDecoder( ArDecoder *decoder);

Calling sequence: Decoder is initialised by calling StartArDecoder. 
                  arith_decoder_mpeg4 function is called for each context
                  which returns one bit as output. Finally _StopArcoder 
                  function is called.

                   Following C code explains the calling sequence.
                     
                  main()
                   { 
                      int i,j,k,C;
                      struct ArCoder coder;
                            .
                            .
                            .
                        _StartArDecoder(coder,&bit_input[0]) ;
                            // bit_input is address of input array 
                        for(i=0;i<NO_OF_PAIR;i++)
                         { 
                           j=arrayIn0_C[i];
                           C=intra_prob[j];
                            // probability of '0' fetched from table 
                           k=_arith_decoder_mpeg4(C,coder);
                            // returns one bit output for each call 
                           output[i]=k;
                         }
                        _StopArDecoder(coder); 
                      .
                      .
                  }

Performance  :
            Code Size    :  
                            StartArDecoder      : 154 bytes
                            arith_decoder_mpeg4 :  94 bytes
                            decode_renormlise   : 124 bytes
                            AddNextInputBit     : 126 bytes
                            StopArDecoder       :  98 bytes

            Cycle count  :
                                            Best case         worst case
                  StartArDecoder        :       659             659 cycles
                  arith_decoder_mpeg4   :       66              539 cycles
                  StopArDecoder         :       103             103 cycles

As the cycle count depends on the data, the above mentioned cycle counts are for
Test case 1 in the C file arith_decoder_mpeg4.c

Cycle count for 512 output bits which takes  2 bits as input is 
36374 Cycles(71.04 cycles per output symbol),
whereas Cycle count for 512 output bits which takes 472 bits as input is 
57040 Cycles(111.40 cycles per output symbol).

Reference       : Appendix G and Appendix F of MPEG4 Video Verification 
                  model(V16.0).
*******************************************************************************/

/******************************************************************************
Prototype : void StartArDecoder(ArDecoder *decoder,unsigned char *in);

In this procedure lower bound register (decoder->L) is set to zero, 
the range register R(deocder->R) is to 0x7fffffff. The first 31 bits are read in
decoder->V register.

Registers used : R0-R7, P0-P2, P5, LC0.
*******************************************************************************/
#define MAXHEADING_ER 3
#define MAXMIDDLE_ER 10
#define MAXTRAILING_ER 2

.section               L1_code;
.global              __StartArDecoder;
.align                         8;
    
__StartArDecoder:

    P0 = R0;                // Address of structure decoder
    [--SP] = (R7:4,P5:5);   // push R7:4,P5 register
    P1 = 31;                // set loop counter to read 31 bits
    R0 = MAXHEADING_ER;
    R5 = MAXMIDDLE_ER;
    R2 = 1;               
    R1 = R1-R2(NS)||[P0+44] = R5;
                            // set decoder->mm to maximum zero count 
    [P0+52] = R1;           // Address of input array
    R3 = R1-R1(NS)||[P0+32] = R0;
                            // set decoder->mh to MAXHEADING_ER 
    [P0+40] = R0;              
    R0 = MAXTRAILING_ER;
    R6 = R1-R1(NS)||[P0+48] = R0;
                            // set decoder->mt to MAXTRAILING_ER 
    P5 = [P0+52];           // get address of input array
     R7 = R1-R1(NS)||[P0+36] = R3;
                            // clear decoder-> extra-bits 

    LSETUP(LOAD_31BITS_ST,LOAD_31BITS_END)LC0 = P1;
   
    P1 = 1;
LOAD_31BITS_ST:
        P2 = P1+P5;         // address to fetch a bit
        R7 = R7<<1||R0 = B[P2](Z);
                            // left shift V register by 1 and fetch next bit 
        R7 = R7+R0(NS)||R4 = [P0+32];
                            // add that bit to V register and fetch decoder->
                            // nzerof register 
        CC = R0 == 0;       // check if bit == 0
        IF CC R6 = R2;
        R4 = R4-R6(NS)||R1 = [P0+36];
                            // if true decrement decoder->nzerof by one 
        CC = R4 == 0;       // check if decoder->nzerof is zero
        R6 = CC;              
        IF CC R3 = R2;      // if true increment decoder->extrabit by one
        R1 = R1+R3;
        BITTGL(r6,0);
        R6 = R6&R0;         // check whether to set decoder->nzerof to 
                            // MAXMIDDLE( i.e 10)
        CC = R6 == 0;
        IF CC R5 = R4;            
        P2 = R1;
        P1 += 1;            // increment the pointer to fetch next bit
        R6 = R1-R1(NS)||[P0+36] = R1;
        R3 = R2-R2(NS)||[P0+32] = R5;
                            // store decoder->nzerof 
        R5 = MAXMIDDLE_ER;
LOAD_31BITS_END:
        P1 = P1+P2;         // offset to fetch next bit
    [P0+8] = R7;            // store first 31 bits in decoder->V register
    [P0] = R6;              // Clear decoder->L register
    [P0+16] = R6;           // clear decoder->bits-to-follow register
    [P0+12] = R7;           // set decoder->arpipe to decoder->V register
    [P0+28] = R6;           // clear decoder->nonzero register
    R0 = [P0+40];
    BITSET(R3,31);          
    R3 += -1;
    [P0+24] = R0; 
    [P0+4] = R3;            // set decoder->R register to 0x7fffffff.
    (R7:4,P5:5) = [SP++];   // pop R7:4,P5
    RTS;
    NOP;
__StartArDecoder.end:    
/******************************************************************************
Prototype : void arith_decoder_mpeg4(int co,ArDecoder *decoder);
    co-> probability of '0' symbol

In this procedure, probability of symbol '1' is calculated using probability of 
symbol '0'. If probability of symbol '1' is greater than probability of symbol
'0' then '0' is the least probable symbol(LPS), else '1' is LPS. Range of LPS 
symbol(rLPS) is calculated by multiplying higher 16 bit of range register(R) and
probability of LPS (CLPS). The interval(L,L+R) is split into two 
intervals(L,L+R-rLPS) and (L+R-rLPS,R). If decoder->V is in later interval then 
decoded symbol equals to LPS. Otherwise decoded symbol is opposite of LPS. The 
interval (L,R) is then reduced to the sub interval in which decoder->V lies. 
After the new interval has been computed, the new range R might be smaller than 
0x40000000(QUATER).If so renormalization is carried out.

Registers used : R0-R3, R5-R7, P0-P2.
*******************************************************************************/
.section               program;
.global        __arith_decoder_mpeg4;
.align                      8;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜精品网| 91猫先生在线| 91亚洲精品一区二区乱码| 欧美精品三级日韩久久| 日本一区二区不卡视频| 日本视频中文字幕一区二区三区| 99精品视频在线观看| 日韩欧美国产三级电影视频| 亚洲三级在线播放| 国产精品一二三四五| 日韩一卡二卡三卡| 偷窥国产亚洲免费视频| voyeur盗摄精品| 久久女同性恋中文字幕| 天使萌一区二区三区免费观看| 成人免费高清在线观看| 欧美精品一区二区三区蜜臀| 日韩精品视频网| 欧美中文字幕一二三区视频| 中文字幕一区二区在线播放| 国产一区二区三区在线观看免费| 91精品国产手机| 性做久久久久久免费观看| 一本一本大道香蕉久在线精品| 国产精品无码永久免费888| 麻豆传媒一区二区三区| 制服.丝袜.亚洲.另类.中文| 亚洲成人综合网站| 欧美日韩免费观看一区二区三区| 亚洲日本电影在线| 97精品久久久久中文字幕| 国产精品视频在线看| 粗大黑人巨茎大战欧美成人| 国产女同互慰高潮91漫画| 成人在线视频一区二区| 亚洲国产精品成人综合色在线婷婷| 韩国女主播一区| 国产日韩一级二级三级| 成人免费av在线| 亚洲欧洲av一区二区三区久久| 成人少妇影院yyyy| 中文字幕一区二区三中文字幕| 97精品国产露脸对白| 亚洲美女视频一区| 欧美午夜精品一区二区蜜桃 | 91福利社在线观看| 亚洲精品免费在线| 欧美日韩亚州综合| 免费看黄色91| 久久久高清一区二区三区| 成人黄色a**站在线观看| 亚洲欧美日韩国产成人精品影院| 在线观看国产日韩| 老司机精品视频导航| 国产精品入口麻豆原神| 欧美中文字幕一区二区三区亚洲| 午夜影院在线观看欧美| 精品国产麻豆免费人成网站| 国产999精品久久久久久| 一区二区三区精品在线| 91精品欧美福利在线观看| 国产一区二区精品久久99| 亚洲三级在线免费| 日韩一级黄色片| 成人av一区二区三区| 亚洲人快播电影网| 日韩美女在线视频 | 国产日韩欧美制服另类| 91丨九色丨黑人外教| 日韩av一二三| 成人免费视频在线观看| 欧美一区二区三区婷婷月色| 懂色中文一区二区在线播放| 一区二区欧美国产| 久久久一区二区三区捆绑**| 91久久精品日日躁夜夜躁欧美| 激情综合五月天| 亚洲一区二区三区中文字幕 | 午夜激情久久久| 国产欧美日韩另类视频免费观看| 在线观看免费亚洲| 国产一区二区三区四| 亚洲国产精品尤物yw在线观看| 久久毛片高清国产| 欧美精品日韩精品| 91丨porny丨蝌蚪视频| 国产一区二区三区精品欧美日韩一区二区三区 | 久久女同性恋中文字幕| 欧美四级电影在线观看| 成人小视频在线观看| 免费成人在线观看视频| 亚洲一二三级电影| 亚洲视频在线一区观看| 久久亚洲免费视频| 日韩一级黄色片| 欧美精品日韩精品| 欧美怡红院视频| 成人av在线网站| 国产一区二区三区免费看| 美日韩一区二区| 亚洲成人av一区| 一区二区三区蜜桃| 国产一区二区三区在线观看免费视频 | 欧美成人精品福利| 欧美性色黄大片| 色婷婷狠狠综合| 色综合久久中文综合久久牛| av中文字幕在线不卡| 高清国产一区二区| 国产精品一级黄| 国产成人综合亚洲网站| 国产专区欧美精品| 国产乱人伦偷精品视频免下载| 久久激五月天综合精品| 久久精品国产一区二区| 麻豆精品一区二区av白丝在线| 午夜精品福利一区二区三区av | 免费不卡在线视频| 日本欧美大码aⅴ在线播放| 五月开心婷婷久久| 男人操女人的视频在线观看欧美| 午夜电影网亚洲视频| 日韩精品五月天| 激情欧美一区二区三区在线观看| 老鸭窝一区二区久久精品| 国产一区美女在线| 成人永久aaa| 色老汉av一区二区三区| 欧美午夜片在线观看| 欧美久久高跟鞋激| 日韩视频一区二区| 国产欧美日产一区| 亚洲色图一区二区三区| 亚洲国产精品久久人人爱| 免费在线欧美视频| 国产黄色91视频| 99国产精品99久久久久久| 欧美综合在线视频| 欧美mv和日韩mv国产网站| 久久精品一区二区三区av| 国产精品毛片大码女人| 亚洲综合色自拍一区| 欧美bbbbb| 波多野结衣在线aⅴ中文字幕不卡| 99久久精品国产麻豆演员表| 欧美视频精品在线| 欧美电视剧在线看免费| 欧美激情在线一区二区三区| 亚洲黄色在线视频| 久久精品国产亚洲一区二区三区| 福利一区在线观看| 欧美日韩大陆在线| 欧美激情一区二区三区在线| 亚洲一区二区三区视频在线 | 亚洲视频网在线直播| 日韩成人一级大片| bt7086福利一区国产| 日韩欧美一级二级三级久久久| 国产日韩亚洲欧美综合| 天天色图综合网| 成人一级视频在线观看| 欧美绝品在线观看成人午夜影视| 2021中文字幕一区亚洲| 一区二区三区欧美视频| 精品一区二区日韩| 欧美亚洲日本一区| 欧美国产激情一区二区三区蜜月| 亚洲v日本v欧美v久久精品| 国产福利视频一区二区三区| 欧美日韩精品福利| 国产精品久久久久久户外露出| 日韩中文字幕麻豆| 色综合咪咪久久| 亚洲国产高清aⅴ视频| 奇米888四色在线精品| 在线观看国产91| 国产精品久久久久久久久动漫 | 亚洲福利视频一区二区| 国产成人精品影院| 欧美v国产在线一区二区三区| 亚洲精品少妇30p| 成人丝袜18视频在线观看| 精品乱码亚洲一区二区不卡| 亚洲成人免费观看| 97久久精品人人澡人人爽| 国产精品色婷婷| 国产乱码精品一品二品| 日韩欧美一级二级三级久久久| 亚洲成人精品一区二区| 欧美主播一区二区三区| 亚洲影院久久精品| 一本久久a久久免费精品不卡| 国产日韩在线不卡| 国产91精品久久久久久久网曝门| 欧美变态tickling挠脚心| 麻豆精品久久久| 日韩欧美国产小视频| 蜜臀av性久久久久蜜臀av麻豆| 欧美色涩在线第一页| 亚洲国产精品一区二区久久 |