亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲欧洲www| 成人午夜伦理影院| 91久久香蕉国产日韩欧美9色| 国产午夜精品在线观看| 国产精品亚洲午夜一区二区三区 | 欧美一区二区日韩一区二区| 亚洲一区二区三区四区在线| 欧美日韩一区二区三区高清| 首页亚洲欧美制服丝腿| 日韩写真欧美这视频| 激情久久久久久久久久久久久久久久| 久久久久国产精品麻豆ai换脸| 成人精品在线视频观看| 亚洲一线二线三线视频| 日韩色视频在线观看| 韩国视频一区二区| 中文字幕在线不卡视频| 欧美日韩免费电影| 国产精品综合一区二区| 亚洲免费观看高清完整版在线| 欧美乱熟臀69xxxxxx| 国内精品嫩模私拍在线| 国产精品久久久久三级| 欧美日韩久久不卡| 成人中文字幕在线| 亚洲va欧美va人人爽午夜| 亚洲精品一区在线观看| 91在线视频观看| 免费不卡在线视频| 国产精品护士白丝一区av| 欧美日本韩国一区二区三区视频| 久久国产精品99久久久久久老狼| 国产精品初高中害羞小美女文| 欧美日韩一区二区在线观看视频 | 国产精品国产三级国产普通话蜜臀| 91蜜桃视频在线| 极品少妇xxxx精品少妇偷拍| 日本一区二区三区在线不卡| 欧美日韩黄视频| 福利电影一区二区三区| 天使萌一区二区三区免费观看| 日本一区二区视频在线观看| 欧美日韩卡一卡二| 色呦呦国产精品| 国产黄色91视频| 免费成人在线观看| 亚洲国产精品精华液网站 | 一区二区三区四区国产精品| 日韩精品一区二区三区视频播放 | 寂寞少妇一区二区三区| 国产欧美日韩三级| 欧美美女喷水视频| 91丨porny丨户外露出| 激情欧美一区二区| 免费观看在线综合| 一区二区三区中文字幕电影| 亚洲国产高清在线观看视频| 欧美一区二区成人| 在线观看国产日韩| 91免费观看视频在线| 国产成人精品亚洲日本在线桃色| 另类小说一区二区三区| 亚洲永久免费av| 亚洲色图.com| 中文字幕在线观看一区| 欧美国产日本视频| 国产免费成人在线视频| 久久九九久久九九| 国产三级精品三级在线专区| 精品av综合导航| 日韩一区二区在线观看视频| 56国语精品自产拍在线观看| 欧美片在线播放| 777亚洲妇女| 欧美丰满美乳xxx高潮www| 欧美丰满美乳xxx高潮www| 欧美丰满高潮xxxx喷水动漫| 91 com成人网| 日韩欧美中文一区| 精品日韩成人av| 五月天精品一区二区三区| 亚洲最大的成人av| 亚洲亚洲精品在线观看| 亚洲国产精品一区二区www在线 | 亚洲欧美国产毛片在线| 国产精品久久久久一区| 亚洲日本电影在线| 亚洲国产精品尤物yw在线观看| 午夜电影久久久| 日日夜夜免费精品视频| 精品中文字幕一区二区小辣椒| 国产真实乱偷精品视频免| 国模套图日韩精品一区二区| 国产99久久久国产精品潘金| a级精品国产片在线观看| 色综合天天综合网国产成人综合天| 99久久er热在这里只有精品15| 日本韩国精品在线| 日韩一区二区三区在线观看| 精品久久久久久久久久久院品网| 国产三级一区二区| 一区二区三区在线免费观看| 亚洲成年人影院| 国产一区二区三区av电影 | 国产福利一区二区三区在线视频| 成人涩涩免费视频| 欧美伊人久久久久久午夜久久久久| 666欧美在线视频| 久久久久久久久免费| 国产精品麻豆一区二区| 亚洲va在线va天堂| 国产精品影音先锋| 欧美艳星brazzers| 久久久精品免费网站| 尤物av一区二区| 久久激五月天综合精品| av成人老司机| 欧美一级片免费看| 最新不卡av在线| 麻豆一区二区三| 99r国产精品| 欧美成va人片在线观看| 伊人开心综合网| 国产精品18久久久| 欧美剧情片在线观看| 中文一区一区三区高中清不卡| 午夜电影网亚洲视频| av一区二区久久| 精品国产1区二区| 亚洲综合一区二区三区| 国产成人在线免费观看| 91精品在线一区二区| 综合激情成人伊人| 国产伦精品一区二区三区视频青涩| 欧洲国产伦久久久久久久| 久久久久久久久久久黄色| 人人超碰91尤物精品国产| 91丨国产丨九色丨pron| 久久99精品久久久久久国产越南| 99国产精品久久久久久久久久 | 91麻豆精品国产91久久久使用方法| 久久久国产精品不卡| 日韩av中文字幕一区二区| 91免费看`日韩一区二区| 久久久综合网站| 蜜桃精品视频在线| 91精品免费观看| 亚洲一卡二卡三卡四卡五卡| 不卡一区在线观看| 国产日产亚洲精品系列| 国产资源在线一区| 日韩欧美黄色影院| 日本成人在线看| 欧美日韩国产经典色站一区二区三区| 中文字幕一区二区三区av| 国产69精品久久久久毛片| www久久久久| 国产一区二区三区久久久| 欧美精品一区二区三区很污很色的| 午夜久久久久久久久久一区二区| 在线观看成人小视频| 悠悠色在线精品| 精品卡一卡二卡三卡四在线| 国产精品三级av在线播放| 韩国精品主播一区二区在线观看 | 亚洲自拍与偷拍| 91视视频在线观看入口直接观看www | 蜜臀国产一区二区三区在线播放| 精品1区2区3区| 亚洲午夜精品在线| 欧美日韩国产一级片| eeuss鲁片一区二区三区| 日本一区二区视频在线| 高清久久久久久| 亚洲天堂网中文字| 色8久久精品久久久久久蜜| 一区二区三区在线免费播放| 欧美日韩国产一区| 老司机午夜精品| 精品毛片乱码1区2区3区| 国产一区二区在线免费观看| 欧美激情在线观看视频免费| 成人av在线影院| 一区二区三区久久| 在线成人小视频| 国产一区二区三区四| 国产女同互慰高潮91漫画| 91免费版pro下载短视频| 亚洲午夜精品久久久久久久久| 欧美日本一区二区在线观看| 青青青伊人色综合久久| 久久精品在这里| 成人免费av在线| 亚洲一级片在线观看| 日韩欧美国产一区二区在线播放| 久久99国产精品尤物| 久久精品一区二区三区av| 91丨porny丨在线| 麻豆91精品视频| 成人免费在线播放视频|