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

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

?? vlc_gen.c

?? 一個基于DSp的實時圖象采集處理系統設計實例。
?? C
字號:
/* ======================================================================== */
/*  TEXAS INSTRUMENTS, INC.                                                 */
/*                                                                          */
/*  NAME                                                                    */
/*      vlc_gen     -- MPEG-2 VLC random generator                          */
/*                                                                          */
/*  USAGE                                                                   */
/*      This code is called by the MPEG-2 VLD example code                  */
/*      vld_demo.                                                           */
/*                                                                          */
/* ------------------------------------------------------------------------ */
/*            Copyright (c) 2002 Texas Instruments, Incorporated.           */
/*                           All Rights Reserved.                           */
/* ======================================================================== */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>


#include "c6000.h"
#include "global.h"

unsigned bitstream[NUM_MB*288];          /* bitstream buffer for NUM_MB MBs */
unsigned int *bsbuf;     /* aligned bitstream buffer for circular addressing*/
unsigned input[NUM_MB*6*65];                                /* input codes  */

int intra_dc_precision;
int cbp;

typedef struct vld_entry
{
    unsigned    code;
    char        run;
    char        len;
    short       lvl;
} vld_entry_t;

#define MAX_ENTRIES (1024)

vld_entry_t vld_tbl_0[MAX_ENTRIES];
vld_entry_t vld_tbl_1[MAX_ENTRIES];
vld_entry_t *vld_tbl;

/* MPEG-2 VLC tables for intra DC coding */
unsigned int dc_lum_len[12]      
    = {   3,   2,   2,   3,   3,   4,    5,    6,    7,    8,     9,     9 };
unsigned int dc_lum_code[12]     
    = { 0x4, 0x0, 0x1, 0x5, 0x6, 0xE, 0x1E, 0x3E, 0x7E, 0xFE, 0x1FE, 0x1FF };
unsigned int dc_chrom_len[12]    
    = {   2,   2,   2,   3,   4,   5,     6,    7,    8,     9,    10,    10 };
unsigned int dc_chrom_code[12]   
    = { 0x0, 0x1, 0x2, 0x6, 0xE, 0x1E, 0x3E, 0x7E, 0xFE, 0x1FE, 0x3FE, 0x3FF };

/* Reads the VLD table file and does stuff with it. */
int parse_tbl(FILE *f, vld_entry_t vld_tbl[], int max_entries)
{
    char buf[256];
    int i,rn,lv,ln,e=0;
    char *s;
    unsigned cd;
    
    while (fgets(buf,256,f))
    {
        i = sscanf(buf,"%d %d\n",&rn,&lv);
        
        if (i != 2) continue;
        
        s = buf;
        
        while (*s &&  isspace(*s)) s++;
        while (*s && !isspace(*s)) s++;
        while (*s &&  isspace(*s)) s++;
        while (*s && !isspace(*s)) s++;
        while (*s &&  isspace(*s)) s++;
        
        ln = cd = 0;

        while (*s && (*s == '0' || *s == '1'))
            cd |= (*s++ - '0') << (31-ln++);
        
        if (rn==-1 && lv==-1) ln--; /* EOB doesn't have sign bit attached */

        if (ln > 0)
        {
            if (e == max_entries)
            {
                fprintf(stderr,"Too many entries (max = %d)\n",
                    max_entries);
                exit(1);
            }
            vld_tbl[e].run   = rn;
            vld_tbl[e].lvl   = lv;
            vld_tbl[e].len   = ln;
            vld_tbl[e].code  = cd;
            e++;
        }
        
    }
    
    return e;
}

unsigned generate_code(vld_entry_t vld_tbl[], int e, int run, int lvl, int *len)
{
    int i;
    int s = 0;
    int esc = -1;
    
    if (run >= 0 && lvl < 0)
    {
        s   = 1;
        lvl = -lvl;
    }
    
    for (i=0; i<e; i++)
    {
        if (vld_tbl[i].lvl == -2) esc = i;
        if (vld_tbl[i].run == run &&
            vld_tbl[i].lvl == lvl)
            break;
    }
    
    if (i < e)
    {
        *len = vld_tbl[i].len + 1;
        return vld_tbl[i].code | (s << (31 - vld_tbl[i].len));
    }
    
    if (esc >= 0)
    {
        *len = 24; /* escape code */
        if (s) lvl = -lvl;
        return  vld_tbl[esc].code | 
            ((run & 0x003F) << 20) | 
            ((lvl & 0x0FFF) <<  8);
    }
    
    fprintf(stderr,"Unable to generate code for %d, %d\n",run,lvl);
    exit(1);

    return 0;
}

int encode_bitstream(unsigned *input, int count, unsigned *bitstream,
                     vld_entry_t vld_tbl[], int e)
{
    unsigned code, dc_size, dc_val;
    unsigned op,p,w0;
    int len, i;
    short run,lvl;
    int total_bit = 0;
    int block=5;    
    int prev_run=-1; /* EOB */
    
    w0 = p = 0;
    
    for (i=0; i<count; i++)
    {
        if (block==-1) block=5;

        if (prev_run==-1 && (cbp&(1<<block)) == 0)
        {
            block--;
            i--;
            continue;
        }
        
        run = *input >> 16;
        lvl = *input & 0xFFFF;

        if (lvl==0) // generate intra DC code
        {
            dc_size = (float)rand() / 32768.0 * 12; // generate dc_size between 0..11
            dc_val = rand() & ((1<<dc_size)-1);     // generate DC value
            *input = (dc_size << 16) + dc_val;
            if (block>1)
            {
                len = dc_lum_len[dc_size] + dc_size;
                code = dc_lum_code[dc_size];
            }
            else
            { 
                len = dc_chrom_len[dc_size] + dc_size;
                code = dc_chrom_code[dc_size];
            }
            code = (code << dc_size) + dc_val;
            code = code << (32-len);
            block--;
            /* printf("outputting DC %3d/%-5d: %.8X [%2d]\n",
                    dc_size,dc_val,code,len); */
            prev_run=0; 
            /* prevent B-14 table modification (only done for inter) */
        }
        else
        {
            code = generate_code(vld_tbl, e, run, lvl, &len);
            /* MPEG-2 comp: modify the code of the _first_ coefficient if
             * run=0 and level=1: 11s becomes 1s. This is for Table B-14
             * (=vld_table_0), inter block and non-escape codes only.
             * Note: in case of intra the first symbol is always lvl=0 and
             * a DC code is generated, i.e. we don't need to check here if
             * it's inter because in intra we never get here */
            if (vld_tbl==vld_tbl_0 && prev_run==-1/*EOB*/ && run==0 
                    && (lvl==1 || lvl==-1) && len!=24)
            {
                code = code << 1;
                len = len - 1;
            }
            prev_run=run;
            /* printf("outputting %3d/%-5d: %.8X [%2d]\n",run,lvl,code,len); */
        }
        
        input++; 

        w0 |= code >> (op=p);
        
        total_bit += len;
        p         += len;
        if (p > 31)
        {
            *bitstream++ = w0;
            p -= 32;
            w0 = p ? code << (32 - op) : 0;
        }
    }
        
    if (p)
      *bitstream++ = w0;
    
    return total_bit;
}

int dequant(unsigned int *input, short *outi, int mb_type, 
        int intra_dc_precision, int dc_pred[3], int cbp, int qscl) 
{
    const unsigned char *zzptr; 
    const short *Wptr;
    int block; 
    unsigned int dc_size;
    int dc_diff, val, half_range;
    int i=0, cc;
    char run;
    short level;
    
    int neg, f1, f3, f5, qW, sum;
#ifdef _TMS320C6X
    int f4;
#else
    _int64 f4; 
#endif
    short W;
    unsigned char cnum;
   
    for (block=0; block<6; block++)
    {
        
    /* -------------------------------------------------------------------- 
     *  cbp: Bit 5 4 3 2 1 0 , if the corresponding bit is zero block no.
     *  (5-bit pos) is not coded 
     * -------------------------------------------------------------------- */
        if (!(cbp & (1 << (5-block))))              
            continue;
        
        run = sum = 0;
        zzptr = izigzag_tbl;

        if (mb_type==1) /* INTRA */
            Wptr=Warr; 
        else            /* INTER */
            Wptr=Warr_inter; 
        
    /* -------------------------------------------------------------------- 
     *  Intra DC dequantization 
     * -------------------------------------------------------------------- */

        if (mb_type==1) /* INTRA */
        {
            dc_size = (input[i] >> 16) & 0xFF;
            dc_diff = input[i] & 0xFFFF;
            i++;
               
            if (dc_size!=0)
            {
                half_range = 1 << (dc_size-1);
                if (dc_diff < half_range)
                    dc_diff = (dc_diff+1)-(2*half_range);
            }
            cc = (block<4) ? 0 : (block&1)+1;
            val = (dc_pred[cc]+= dc_diff); 

            outi[block*64+0] = val << (3-intra_dc_precision);

            sum += outi[block*64+0];

            Wptr++;
            zzptr++;
        }
        
    /* ----------------------------------------------------------------
     *  AC coefficients run-lengh expansion and DQ 
     * ---------------------------------------------------------------- */
        while (run!=-1) 
        {
            
            run   = (input[i] >> 16) & 0xFF;
            level =  input[i] & 0xFFFF;
            i++;

            if (run!=-1)
            {
                
                neg = (level < 0);      
                f1 = 2*level; 

                if (mb_type==0) /* INTER */
                {
                    if (neg) f1--;
                    else f1++;
                }
                    
                W = *(Wptr += run);  
                Wptr++;
                
                qW = qscl * W;
                f3 = f1 * qW;
                
                if (neg) f3 += 31;
                
                f4 = _sshl(f3, 15);
                f5 = (int)(f4 >> 20);
                
                sum += f5;
                
                cnum = *(zzptr += run); 
                zzptr++;
            
                outi[block*64+cnum] = f5;
            }
            
        } /* while */
    
    /* --------------------------------------------------------------------
     *  mismatch control: toggle last bit of last coefficient if sum of
     *  coefficents is even.
     * -------------------------------------------------------------------- */

     if ((sum&1)==0)
        {
            outi[block*64+63] ^= 1;
        }

    } /* for */ 

    return i;
}


#define MAXRUN (63)

int vlc_gen(IMG_mpeg2_vld *mpeg2_vld_cont, int *mb_type, short *output_gen)
{
    int e, block, k;
    int i, mb, pos, r, run, lvl, ent;
    int tot_coef = 63;
    FILE *table;
    int a, intra, intra_vlc_format; 
    unsigned int next_wptr;
    int dc_pred[3]={0,0,0};
    
    printf("\nGenerating random VLC codes for %d MBs...\n", NUM_MB);
    
    table = fopen("table_0.txt","rb"); 
    e = parse_tbl(table,vld_tbl_0,MAX_ENTRIES);
    fclose(table);

    table = fopen("table_1.txt","rb"); 
    e = parse_tbl(table,vld_tbl_1,MAX_ENTRIES);
    fclose(table);

    srand(time(0));                                          /* random seed */
    
    i = 0;
        
    intra = rand() & 1;                /* choose intra or non-intra MB type */

    if (!intra)
    {
        vld_tbl = vld_tbl_0;
    }
    else /* intra */
    {
        intra_vlc_format = rand() & 1;   
        /* randomly choose table 0 or 1 for intra blocks */
        if (intra_vlc_format==0)
            vld_tbl = vld_tbl_0;
        else /* intra_vlc_format==1 */
            vld_tbl = vld_tbl_1;
    }

    cbp = rand() & 0x3F;                     /* random cbp */
        
    for (mb=0; mb<NUM_MB; mb++)
    {
        for (block=0; block<6; block++)
        {
            if (!(cbp & (1 << (5-block))))              
                continue;
                
            r = 0;

            while (r <= tot_coef)
            {
                ent = rand() & 127;         /* random table index */
                    
                if (r==0 && intra)
                {
                    run = 0;        /* intra DC coeff takes 1 position      */
                    lvl = 0;        /* indicates to insert an intra DC code */
                                    /* (lvl=0 not allowed for AC coeffs)    */
                }
                else if (ent < e && vld_tbl[ent].run >= 0)
                {
                    run = vld_tbl[ent].run;
                    lvl = vld_tbl[ent].lvl;
                    if (rand() & 1) lvl = -lvl;
                } 
                else
                {
                    run = (rand() % MAXRUN);    /* change to increase range */
                    lvl = (rand() & 4095) - 2048;
                    if (lvl == -2048) lvl = -2047;
                    if (lvl == 0)     lvl = 1;
                }
                
                /* If there's not enough room for this symbol and 
                   its run of zeros, pick EOB instead. */
                if (run >= (tot_coef - r))
                {
                    /* send EOB */
                    run = lvl = -1;
                    r = tot_coef + 1;
                } else
                {
                    /* there was room, so advance our position */
                    r += run + 1;
                }
                
                /* insert the desired symbol into our list */
                input[i++] = (run << 16) | (lvl & 0xFFFF);
            }
        } 
    }
            
    r = encode_bitstream(input,i,bitstream,vld_tbl,e);

    /* make next_wptr random to test circular buffer */
    next_wptr = rand() & (BSBUF_SIZE-1);  

    /* copy into aligned buffer */
    for (k=0; k<6*64; k++) 
       mpeg2_vld_cont->bsbuf[(next_wptr+k)&(BSBUF_SIZE-1)] = bitstream[k];
            
    *mb_type = intra; 
    mpeg2_vld_cont->next_wptr = next_wptr;
    mpeg2_vld_cont->intravlc = intra_vlc_format;
    mpeg2_vld_cont->dc_prec = rand() & 3; 
    mpeg2_vld_cont->cbp = cbp;
    mpeg2_vld_cont->quant_scale = (a=rand()) ? (a&31)*2 : 2; /* quant_scale_type=0 */
       
    for (i=0; i<NUM_MB*6*64; i++) 
            output_gen[i] = 0;

    for (pos=0, mb=0; mb<NUM_MB; mb++)
    {
        pos += dequant(input+pos, output_gen+(mb*6*64), 
                *mb_type, mpeg2_vld_cont->dc_prec, dc_pred, 
                cbp, mpeg2_vld_cont->quant_scale); 
    }

    return r;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜欧美视频在线观看| 高清国产午夜精品久久久久久| 六月丁香综合在线视频| 成人一区二区三区视频| 欧美电影在哪看比较好| 中文字幕在线不卡一区| 极品少妇xxxx精品少妇偷拍| 欧美中文一区二区三区| 亚洲国产精品二十页| 日韩在线a电影| 91网站最新网址| 精品sm在线观看| 日韩高清一级片| 在线中文字幕不卡| 国产精品成人一区二区三区夜夜夜| 日本 国产 欧美色综合| 91精品办公室少妇高潮对白| 国产欧美日韩精品a在线观看| 蜜臀久久99精品久久久久久9| 欧美在线观看视频一区二区| 国产精品麻豆网站| 国产精品99久久久久久久vr| 欧美电影免费观看高清完整版在线观看| 一区二区成人在线观看| av电影在线观看完整版一区二区| 久久久久久久精| 狠狠色丁香婷综合久久| 91精品国产色综合久久ai换脸 | 欧美视频一区二区三区四区| **网站欧美大片在线观看| 国产成人av电影在线| 国产午夜精品理论片a级大结局 | 精品国产乱码久久久久久1区2区| 一区二区三区精品视频在线| 色婷婷精品大在线视频| 亚洲色图欧美激情| 91丨porny丨首页| 亚洲天堂成人网| 91国产免费看| 五月天国产精品| 日韩美女一区二区三区| 久久成人免费网| 久久久国产精品麻豆| 国产91色综合久久免费分享| 欧美激情一区二区三区全黄| 99视频精品在线| 亚洲综合成人在线视频| 欧美日韩aaaaaa| 男人的天堂亚洲一区| 久久嫩草精品久久久精品 | 亚洲国产另类av| 欧美精品乱人伦久久久久久| 麻豆精品一区二区av白丝在线| 精品国产成人系列| 成人激情综合网站| 亚洲精品一二三四区| 欧美日韩精品福利| 久久99精品一区二区三区 | 成人综合在线观看| 亚洲老妇xxxxxx| 3751色影院一区二区三区| 久久电影国产免费久久电影| 国产精品免费免费| 欧美午夜精品一区二区三区| 久热成人在线视频| 中文字幕在线不卡国产视频| 欧美日韩视频专区在线播放| 精品亚洲porn| 亚洲色图在线播放| 日韩精品一区二区三区在线观看 | 欧美www视频| 99视频精品全部免费在线| 亚瑟在线精品视频| 国产日韩精品一区二区三区 | 国产乱人伦偷精品视频不卡| 亚洲色图欧美在线| 精品美女在线播放| 色妹子一区二区| 国产在线不卡一区| 亚洲一区影音先锋| 国产免费成人在线视频| 欧美日韩精品免费| 99re热这里只有精品视频| 奇米一区二区三区| 亚洲精品日韩一| 国产丝袜在线精品| 91精品欧美一区二区三区综合在 | 在线观看亚洲精品| 国产精品中文有码| 日韩精品1区2区3区| 18成人在线观看| 亚洲精品大片www| 国产日韩欧美精品一区| 9191久久久久久久久久久| 9久草视频在线视频精品| 精品影视av免费| 日韩不卡一区二区| 亚洲激情五月婷婷| 中文字幕成人av| 2021国产精品久久精品| 这里只有精品99re| 欧美日韩亚洲综合一区二区三区| av电影天堂一区二区在线观看| 狠狠色狠狠色合久久伊人| 午夜激情综合网| 亚洲已满18点击进入久久| 国产精品国产精品国产专区不蜜 | 国产一区二区三区美女| 日韩1区2区3区| 婷婷一区二区三区| 亚洲一区二区三区四区的| 亚洲美女淫视频| 亚洲欧美日韩国产一区二区三区 | 国产一本一道久久香蕉| 欧美aaaaa成人免费观看视频| 亚洲成人www| 天堂av在线一区| 日日摸夜夜添夜夜添国产精品| 亚洲韩国一区二区三区| 夜夜操天天操亚洲| 亚洲一区二区三区四区五区黄| 亚洲精品乱码久久久久久久久| 亚洲女人小视频在线观看| 亚洲精品欧美二区三区中文字幕| ...中文天堂在线一区| 亚洲人午夜精品天堂一二香蕉| 国产精品麻豆99久久久久久| 亚洲日本在线天堂| 亚洲一区影音先锋| 日韩激情av在线| 99re这里只有精品首页| av中文字幕亚洲| 91国偷自产一区二区使用方法| 欧美中文字幕不卡| 欧美一区二视频| 久久中文字幕电影| 中文文精品字幕一区二区| 国产精品色哟哟网站| 亚洲伦理在线免费看| 亚洲高清久久久| 蜜臀av一级做a爰片久久| 国产毛片一区二区| 91亚洲资源网| 3atv在线一区二区三区| 久久精品亚洲乱码伦伦中文| 亚洲私人影院在线观看| 亚洲国产sm捆绑调教视频| 九九久久精品视频| av电影一区二区| 欧美日韩国产一级二级| 久久久亚洲精华液精华液精华液| 亚洲欧美自拍偷拍色图| 天堂午夜影视日韩欧美一区二区| 国内精品伊人久久久久影院对白| av男人天堂一区| 欧美一级国产精品| 中文字幕欧美一| 麻豆精品一区二区三区| 91丨porny丨中文| 精品国产一区久久| 夜色激情一区二区| 国产精品自在欧美一区| 在线影院国内精品| 久久久久久夜精品精品免费| 亚洲一二三四在线| 成人免费电影视频| 欧美一区二区三区不卡| 亚洲免费资源在线播放| 国产精品自拍毛片| 欧美精品自拍偷拍| 亚洲少妇中出一区| 韩国欧美国产1区| 制服丝袜在线91| 久久99精品国产麻豆不卡| 色婷婷亚洲综合| 欧美激情一区二区在线| 久久电影网站中文字幕| 欧美色综合久久| 亚洲乱码一区二区三区在线观看| 国产综合久久久久久鬼色| 欧美人动与zoxxxx乱| 中文字幕一区二区在线观看| 国模一区二区三区白浆| 欧美精品乱码久久久久久| 亚洲精品水蜜桃| 成人av先锋影音| 欧美高清在线一区二区| 国产一区二区视频在线| 日韩亚洲欧美一区二区三区| 视频一区中文字幕国产| 欧美日韩中字一区| 亚洲欧美激情一区二区| a级精品国产片在线观看| 久久久不卡影院| 国产一区二区伦理片| 日韩欧美色综合网站| 日本欧美一区二区| 在线播放国产精品二区一二区四区| 有码一区二区三区| 色婷婷久久久亚洲一区二区三区|