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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vlc_gen.c

?? 圖象采集處理系統(tǒng),基于dsp平臺(tái),可以直接運(yùn)行的工程文件和原理圖
?? C
字號(hào):
/* ======================================================================== */
/*  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;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱子伦一区| 中文字幕亚洲成人| 成人91在线观看| 天天色天天爱天天射综合| 国产亚洲精品aa午夜观看| 欧美日韩国产精品自在自线| 国产精品99久久久久| 五月天欧美精品| 亚洲天堂a在线| 久久久精品国产99久久精品芒果 | 欧美喷潮久久久xxxxx| 久久se精品一区二区| 亚洲欧洲精品一区二区三区不卡| 欧美精品123区| 91视频国产观看| 国产精品亚洲第一区在线暖暖韩国| 亚洲高清不卡在线| 亚洲视频免费观看| 欧美国产日产图区| 久久久精品蜜桃| 日韩欧美久久久| 欧美日韩国产高清一区二区 | 麻豆国产精品一区二区三区| 亚洲精品视频在线看| 国产精品久久久久久久久果冻传媒| 欧美v亚洲v综合ⅴ国产v| 欧美日韩一区 二区 三区 久久精品| 成人av资源在线观看| 国产乱码字幕精品高清av | 欧美午夜精品一区二区三区| 国产精品一区二区在线看| 日韩和欧美一区二区三区| 一区二区三区四区不卡视频| 国产精品毛片久久久久久| 国产视频不卡一区| www一区二区| 欧美成人猛片aaaaaaa| 欧美乱妇一区二区三区不卡视频| 色综合久久综合网97色综合| 99国产精品视频免费观看| 丁香婷婷综合色啪| 成人在线综合网| 北条麻妃一区二区三区| 成人国产电影网| 99久久婷婷国产综合精品电影| 岛国精品在线播放| 成人高清av在线| 91一区二区三区在线播放| 91在线观看一区二区| 91蜜桃免费观看视频| 日本韩国欧美一区| 欧美日韩一区二区三区在线看| 欧美三级中文字| 91精品国产一区二区| 欧美一个色资源| 精品国产乱码久久久久久免费| 26uuu国产在线精品一区二区| 26uuu国产一区二区三区| 欧美激情一区不卡| 日韩毛片一二三区| 亚洲国产精品麻豆| 麻豆视频一区二区| 国产精品自拍毛片| 91蜜桃传媒精品久久久一区二区| 91久久人澡人人添人人爽欧美| 欧美日韩亚洲综合| 日韩免费性生活视频播放| 国产亚洲婷婷免费| 亚洲日穴在线视频| 无码av免费一区二区三区试看| 麻豆精品一二三| 国产精品69毛片高清亚洲| 91美女福利视频| 欧美精品乱码久久久久久 | 一区二区三区中文在线观看| 亚洲成人资源网| 国产综合久久久久久鬼色| 国产成人免费视频| 狠狠色丁香久久婷婷综| 成人做爰69片免费看网站| 色婷婷综合久久久中文一区二区| 91激情在线视频| 精品少妇一区二区三区视频免付费 | 亚洲猫色日本管| 日韩1区2区日韩1区2区| 国产精品白丝jk黑袜喷水| 91丨porny丨最新| 欧美一区二区三区视频| 国产日韩欧美综合一区| 亚洲国产成人va在线观看天堂| 国模大尺度一区二区三区| 99精品视频一区二区| 日韩欧美国产一区在线观看| 亚洲少妇30p| 韩国一区二区三区| 欧美自拍偷拍午夜视频| 久久久不卡网国产精品二区| 亚洲一区二区在线免费观看视频 | 日日摸夜夜添夜夜添精品视频 | 国产精品国产三级国产aⅴ无密码| 午夜精品久久久久久久蜜桃app| 国产成人午夜高潮毛片| 69p69国产精品| 亚洲天堂久久久久久久| 国产一区二三区| 88在线观看91蜜桃国自产| 亚洲欧洲www| 国产一区二区精品久久99| 欧美老年两性高潮| 17c精品麻豆一区二区免费| 国产一区二区在线观看视频| 欧美日韩成人在线一区| 亚洲三级视频在线观看| 国产成人免费视频一区| 欧美电视剧在线看免费| 天天色综合天天| 欧美视频一区二区三区四区| 国产精品久久久久久久久久免费看| 精品制服美女丁香| 91精品免费在线观看| 亚洲第一精品在线| 91福利视频久久久久| 亚洲特黄一级片| 99精品国产热久久91蜜凸| 欧美国产综合一区二区| 欧洲精品在线观看| 国产精品理伦片| 成人性生交大片免费看中文| 久久蜜桃av一区精品变态类天堂| 蜜臀久久99精品久久久久宅男| 欧美日韩国产一级二级| 亚洲一区二区三区四区不卡| 色婷婷国产精品综合在线观看| 中文字幕巨乱亚洲| 成人免费黄色大片| 国产精品国产三级国产aⅴ原创| 处破女av一区二区| 国产精品久久久久三级| www.亚洲色图.com| 亚洲色图欧美激情| 一本色道久久综合精品竹菊| 亚洲人成在线观看一区二区| 91麻豆123| 亚洲香肠在线观看| 91精品国产乱码| 理论片日本一区| 久久一日本道色综合| 国产激情视频一区二区在线观看| 久久久777精品电影网影网| 国产成人啪免费观看软件| 亚洲国产精品成人综合| 91免费看`日韩一区二区| 一个色综合av| 欧美精品久久久久久久久老牛影院| 三级精品在线观看| 精品成人a区在线观看| 懂色av噜噜一区二区三区av| 自拍偷拍亚洲激情| 欧美日韩中文字幕精品| 日本va欧美va瓶| 久久精品人人爽人人爽| 99re热视频这里只精品| 亚洲电影第三页| 精品国产91久久久久久久妲己 | 久久精品国产亚洲5555| 久久日韩精品一区二区五区| 成人aa视频在线观看| 亚洲一区二区视频| 欧美mv和日韩mv的网站| www..com久久爱| 亚洲成人av电影在线| 精品电影一区二区三区| eeuss鲁一区二区三区| 天堂av在线一区| 久久老女人爱爱| 日本丶国产丶欧美色综合| 亚洲va韩国va欧美va| 制服.丝袜.亚洲.另类.中文| 国内精品第一页| 亚洲精品高清视频在线观看| 欧美一区二区三区在线观看视频| 国产很黄免费观看久久| 亚洲尤物视频在线| 久久蜜桃香蕉精品一区二区三区| 色网综合在线观看| 精品一区二区av| 亚洲精品免费电影| 亚洲观看高清完整版在线观看| 精品久久久久一区| 在线观看av一区二区| 国产在线一区二区| 亚洲成av人在线观看| 中文字幕高清不卡| 日韩一区二区三区免费观看| 97久久精品人人做人人爽50路| 日av在线不卡| 亚洲另类春色国产| 久久精品亚洲精品国产欧美| 欧美剧情片在线观看| 99精品偷自拍|