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

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

?? dnxhdenc.c

?? mediastreamer2是開源的網絡傳輸媒體流的庫
?? C
?? 第 1 頁 / 共 2 頁
字號:
        dsp->get_pixels(ctx->blocks[7], ptr_v + ctx->dct_uv_offset   , ctx->m.uvlinesize);    }}static av_always_inline int dnxhd_switch_matrix(DNXHDEncContext *ctx, int i){    if (i&2) {        ctx->m.q_intra_matrix16 = ctx->qmatrix_c16;        ctx->m.q_intra_matrix   = ctx->qmatrix_c;        return 1 + (i&1);    } else {        ctx->m.q_intra_matrix16 = ctx->qmatrix_l16;        ctx->m.q_intra_matrix   = ctx->qmatrix_l;        return 0;    }}static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg){    DNXHDEncContext *ctx = arg;    int mb_y, mb_x;    int qscale = ctx->thread[0]->qscale;    for (mb_y = ctx->m.start_mb_y; mb_y < ctx->m.end_mb_y; mb_y++) {        ctx->m.last_dc[0] =        ctx->m.last_dc[1] =        ctx->m.last_dc[2] = 1024;        for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) {            unsigned mb = mb_y * ctx->m.mb_width + mb_x;            int ssd     = 0;            int ac_bits = 0;            int dc_bits = 0;            int i;            dnxhd_get_blocks(ctx, mb_x, mb_y);            for (i = 0; i < 8; i++) {                DECLARE_ALIGNED_16(DCTELEM, block[64]);                DCTELEM *src_block = ctx->blocks[i];                int overflow, nbits, diff, last_index;                int n = dnxhd_switch_matrix(ctx, i);                memcpy(block, src_block, sizeof(block));                last_index = ctx->m.dct_quantize((MpegEncContext*)ctx, block, i, qscale, &overflow);                ac_bits += dnxhd_calc_ac_bits(ctx, block, last_index);                diff = block[0] - ctx->m.last_dc[n];                if (diff < 0) nbits = av_log2_16bit(-2*diff);                else          nbits = av_log2_16bit( 2*diff);                dc_bits += ctx->cid_table->dc_bits[nbits] + nbits;                ctx->m.last_dc[n] = block[0];                if (avctx->mb_decision == FF_MB_DECISION_RD || !RC_VARIANCE) {                    dnxhd_unquantize_c(ctx, block, i, qscale, last_index);                    ctx->m.dsp.idct(block);                    ssd += dnxhd_ssd_block(block, src_block);                }            }            ctx->mb_rc[qscale][mb].ssd = ssd;            ctx->mb_rc[qscale][mb].bits = ac_bits+dc_bits+12+8*ctx->table_vlc_bits[0];        }    }    return 0;}static int dnxhd_encode_thread(AVCodecContext *avctx, void *arg){    DNXHDEncContext *ctx = arg;    int mb_y, mb_x;    for (mb_y = ctx->m.start_mb_y; mb_y < ctx->m.end_mb_y; mb_y++) {        ctx->m.last_dc[0] =        ctx->m.last_dc[1] =        ctx->m.last_dc[2] = 1024;        for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) {            unsigned mb = mb_y * ctx->m.mb_width + mb_x;            int qscale = ctx->mb_qscale[mb];            int i;            put_bits(&ctx->m.pb, 12, qscale<<1);            dnxhd_get_blocks(ctx, mb_x, mb_y);            for (i = 0; i < 8; i++) {                DCTELEM *block = ctx->blocks[i];                int last_index, overflow;                int n = dnxhd_switch_matrix(ctx, i);                last_index = ctx->m.dct_quantize((MpegEncContext*)ctx, block, i, qscale, &overflow);                dnxhd_encode_block(ctx, block, last_index, n);            }        }        if (put_bits_count(&ctx->m.pb)&31)            put_bits(&ctx->m.pb, 32-(put_bits_count(&ctx->m.pb)&31), 0);    }    flush_put_bits(&ctx->m.pb);    return 0;}static void dnxhd_setup_threads_slices(DNXHDEncContext *ctx, uint8_t *buf){    int mb_y, mb_x;    int i, offset = 0;    for (i = 0; i < ctx->m.avctx->thread_count; i++) {        int thread_size = 0;        for (mb_y = ctx->thread[i]->m.start_mb_y; mb_y < ctx->thread[i]->m.end_mb_y; mb_y++) {            ctx->slice_size[mb_y] = 0;            for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) {                unsigned mb = mb_y * ctx->m.mb_width + mb_x;                ctx->slice_size[mb_y] += ctx->mb_bits[mb];            }            ctx->slice_size[mb_y] = (ctx->slice_size[mb_y]+31)&~31;            ctx->slice_size[mb_y] >>= 3;            thread_size += ctx->slice_size[mb_y];        }        init_put_bits(&ctx->thread[i]->m.pb, buf + 640 + offset, thread_size);        offset += thread_size;    }}static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg){    DNXHDEncContext *ctx = arg;    int mb_y, mb_x;    for (mb_y = ctx->m.start_mb_y; mb_y < ctx->m.end_mb_y; mb_y++) {        for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) {            unsigned mb  = mb_y * ctx->m.mb_width + mb_x;            uint8_t *pix = ctx->thread[0]->src[0] + ((mb_y<<4) * ctx->m.linesize) + (mb_x<<4);            int sum      = ctx->m.dsp.pix_sum(pix, ctx->m.linesize);            int varc     = (ctx->m.dsp.pix_norm1(pix, ctx->m.linesize) - (((unsigned)(sum*sum))>>8)+128)>>8;            ctx->mb_cmp[mb].value = varc;            ctx->mb_cmp[mb].mb = mb;        }    }    return 0;}static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx){    int lambda, up_step, down_step;    int last_lower = INT_MAX, last_higher = 0;    int x, y, q;    for (q = 1; q < avctx->qmax; q++) {        ctx->qscale = q;        avctx->execute(avctx, dnxhd_calc_bits_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);    }    up_step = down_step = 2<<LAMBDA_FRAC_BITS;    lambda = ctx->lambda;    for (;;) {        int bits = 0;        int end = 0;        if (lambda == last_higher) {            lambda++;            end = 1; // need to set final qscales/bits        }        for (y = 0; y < ctx->m.mb_height; y++) {            for (x = 0; x < ctx->m.mb_width; x++) {                unsigned min = UINT_MAX;                int qscale = 1;                int mb = y*ctx->m.mb_width+x;                for (q = 1; q < avctx->qmax; q++) {                    unsigned score = ctx->mb_rc[q][mb].bits*lambda+(ctx->mb_rc[q][mb].ssd<<LAMBDA_FRAC_BITS);                    if (score < min) {                        min = score;                        qscale = q;                    }                }                bits += ctx->mb_rc[qscale][mb].bits;                ctx->mb_qscale[mb] = qscale;                ctx->mb_bits[mb] = ctx->mb_rc[qscale][mb].bits;            }            bits = (bits+31)&~31; // padding            if (bits > ctx->frame_bits)                break;        }        //dprintf(ctx->m.avctx, "lambda %d, up %u, down %u, bits %d, frame %d\n",        //        lambda, last_higher, last_lower, bits, ctx->frame_bits);        if (end) {            if (bits > ctx->frame_bits)                return -1;            break;        }        if (bits < ctx->frame_bits) {            last_lower = FFMIN(lambda, last_lower);            if (last_higher != 0)                lambda = (lambda+last_higher)>>1;            else                lambda -= down_step;            down_step *= 5; // XXX tune ?            up_step = 1<<LAMBDA_FRAC_BITS;            lambda = FFMAX(1, lambda);            if (lambda == last_lower)                break;        } else {            last_higher = FFMAX(lambda, last_higher);            if (last_lower != INT_MAX)                lambda = (lambda+last_lower)>>1;            else                lambda += up_step;            up_step *= 5;            down_step = 1<<LAMBDA_FRAC_BITS;        }    }    //dprintf(ctx->m.avctx, "out lambda %d\n", lambda);    ctx->lambda = lambda;    return 0;}static int dnxhd_find_qscale(DNXHDEncContext *ctx){    int bits = 0;    int up_step = 1;    int down_step = 1;    int last_higher = 0;    int last_lower = INT_MAX;    int qscale;    int x, y;    qscale = ctx->qscale;    for (;;) {        bits = 0;        ctx->qscale = qscale;        // XXX avoid recalculating bits        ctx->m.avctx->execute(ctx->m.avctx, dnxhd_calc_bits_thread, (void**)&ctx->thread[0], NULL, ctx->m.avctx->thread_count);        for (y = 0; y < ctx->m.mb_height; y++) {            for (x = 0; x < ctx->m.mb_width; x++)                bits += ctx->mb_rc[qscale][y*ctx->m.mb_width+x].bits;            bits = (bits+31)&~31; // padding            if (bits > ctx->frame_bits)                break;        }        //dprintf(ctx->m.avctx, "%d, qscale %d, bits %d, frame %d, higher %d, lower %d\n",        //        ctx->m.avctx->frame_number, qscale, bits, ctx->frame_bits, last_higher, last_lower);        if (bits < ctx->frame_bits) {            if (qscale == 1)                return 1;            if (last_higher == qscale - 1) {                qscale = last_higher;                break;            }            last_lower = FFMIN(qscale, last_lower);            if (last_higher != 0)                qscale = (qscale+last_higher)>>1;            else                qscale -= down_step++;            if (qscale < 1)                qscale = 1;            up_step = 1;        } else {            if (last_lower == qscale + 1)                break;            last_higher = FFMAX(qscale, last_higher);            if (last_lower != INT_MAX)                qscale = (qscale+last_lower)>>1;            else                qscale += up_step++;            down_step = 1;            if (qscale >= ctx->m.avctx->qmax)                return -1;        }    }    //dprintf(ctx->m.avctx, "out qscale %d\n", qscale);    ctx->qscale = qscale;    return 0;}static int dnxhd_rc_cmp(const void *a, const void *b){    return ((const RCCMPEntry *)b)->value - ((const RCCMPEntry *)a)->value;}static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx){    int max_bits = 0;    int ret, x, y;    if ((ret = dnxhd_find_qscale(ctx)) < 0)        return -1;    for (y = 0; y < ctx->m.mb_height; y++) {        for (x = 0; x < ctx->m.mb_width; x++) {            int mb = y*ctx->m.mb_width+x;            int delta_bits;            ctx->mb_qscale[mb] = ctx->qscale;            ctx->mb_bits[mb] = ctx->mb_rc[ctx->qscale][mb].bits;            max_bits += ctx->mb_rc[ctx->qscale][mb].bits;            if (!RC_VARIANCE) {                delta_bits = ctx->mb_rc[ctx->qscale][mb].bits-ctx->mb_rc[ctx->qscale+1][mb].bits;                ctx->mb_cmp[mb].mb = mb;                ctx->mb_cmp[mb].value = delta_bits ?                    ((ctx->mb_rc[ctx->qscale][mb].ssd-ctx->mb_rc[ctx->qscale+1][mb].ssd)*100)/delta_bits                    : INT_MIN; //avoid increasing qscale            }        }        max_bits += 31; //worst padding    }    if (!ret) {        if (RC_VARIANCE)            avctx->execute(avctx, dnxhd_mb_var_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);        qsort(ctx->mb_cmp, ctx->m.mb_num, sizeof(RCEntry), dnxhd_rc_cmp);        for (x = 0; x < ctx->m.mb_num && max_bits > ctx->frame_bits; x++) {            int mb = ctx->mb_cmp[x].mb;            max_bits -= ctx->mb_rc[ctx->qscale][mb].bits - ctx->mb_rc[ctx->qscale+1][mb].bits;            ctx->mb_qscale[mb] = ctx->qscale+1;            ctx->mb_bits[mb] = ctx->mb_rc[ctx->qscale+1][mb].bits;        }    }    return 0;}static void dnxhd_load_picture(DNXHDEncContext *ctx, const AVFrame *frame){    int i;    for (i = 0; i < 3; i++) {        ctx->frame.data[i]     = frame->data[i];        ctx->frame.linesize[i] = frame->linesize[i];    }    for (i = 0; i < ctx->m.avctx->thread_count; i++) {        ctx->thread[i]->m.linesize    = ctx->frame.linesize[0]<<ctx->interlaced;        ctx->thread[i]->m.uvlinesize  = ctx->frame.linesize[1]<<ctx->interlaced;        ctx->thread[i]->dct_y_offset  = ctx->m.linesize  *8;        ctx->thread[i]->dct_uv_offset = ctx->m.uvlinesize*8;    }    ctx->frame.interlaced_frame = frame->interlaced_frame;    ctx->cur_field = frame->interlaced_frame && !frame->top_field_first;}static int dnxhd_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, const void *data){    DNXHDEncContext *ctx = avctx->priv_data;    int first_field = 1;    int offset, i, ret;    if (buf_size < ctx->cid_table->frame_size) {        av_log(avctx, AV_LOG_ERROR, "output buffer is too small to compress picture\n");        return -1;    }    dnxhd_load_picture(ctx, data); encode_coding_unit:    for (i = 0; i < 3; i++) {        ctx->src[i] = ctx->frame.data[i];        if (ctx->interlaced && ctx->cur_field)            ctx->src[i] += ctx->frame.linesize[i];    }    dnxhd_write_header(avctx, buf);    if (avctx->mb_decision == FF_MB_DECISION_RD)        ret = dnxhd_encode_rdo(avctx, ctx);    else        ret = dnxhd_encode_fast(avctx, ctx);    if (ret < 0) {        av_log(avctx, AV_LOG_ERROR, "picture could not fit ratecontrol constraints\n");        return -1;    }    dnxhd_setup_threads_slices(ctx, buf);    offset = 0;    for (i = 0; i < ctx->m.mb_height; i++) {        AV_WB32(ctx->msip + i * 4, offset);        offset += ctx->slice_size[i];        assert(!(ctx->slice_size[i] & 3));    }    avctx->execute(avctx, dnxhd_encode_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);    AV_WB32(buf + ctx->cid_table->coding_unit_size - 4, 0x600DC0DE); // EOF    if (ctx->interlaced && first_field) {        first_field     = 0;        ctx->cur_field ^= 1;        buf      += ctx->cid_table->coding_unit_size;        buf_size -= ctx->cid_table->coding_unit_size;        goto encode_coding_unit;    }    return ctx->cid_table->frame_size;}static int dnxhd_encode_end(AVCodecContext *avctx){    DNXHDEncContext *ctx = avctx->priv_data;    int i;    av_freep(&ctx->table_vlc_codes);    av_freep(&ctx->table_vlc_bits);    av_freep(&ctx->table_run_codes);    av_freep(&ctx->table_run_bits);    av_freep(&ctx->mb_bits);    av_freep(&ctx->mb_qscale);    av_freep(&ctx->mb_rc);    av_freep(&ctx->mb_cmp);    av_freep(&ctx->slice_size);    av_freep(&ctx->qmatrix_c);    av_freep(&ctx->qmatrix_l);    av_freep(&ctx->qmatrix_c16);    av_freep(&ctx->qmatrix_l16);    for (i = 1; i < avctx->thread_count; i++)        av_freep(&ctx->thread[i]);    return 0;}AVCodec dnxhd_encoder = {    "dnxhd",    CODEC_TYPE_VIDEO,    CODEC_ID_DNXHD,    sizeof(DNXHDEncContext),    dnxhd_encode_init,    dnxhd_encode_picture,    dnxhd_encode_end,    .pix_fmts = (enum PixelFormat[]){PIX_FMT_YUV422P, -1},};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品va天堂亚洲国产| 国产精品丝袜一区| 国产精品影视天天线| 色偷偷一区二区三区| 日韩三级视频中文字幕| 亚洲九九爱视频| 国产资源精品在线观看| 欧美丝袜丝交足nylons图片| 国产欧美日韩激情| 青青草91视频| 欧美日韩中文精品| 亚洲日穴在线视频| 丁香婷婷综合色啪| 精品久久人人做人人爽| 亚洲一区免费在线观看| 国产风韵犹存在线视精品| 4438x亚洲最大成人网| 亚洲美女淫视频| 成人精品一区二区三区中文字幕| 欧美一个色资源| 一区二区三区丝袜| 亚洲麻豆国产自偷在线| 欧美成人精品福利| 欧美男女性生活在线直播观看| 一区二区三区在线视频观看 | 最新日韩在线视频| 免费亚洲电影在线| 欧美日韩中文另类| 亚洲国产人成综合网站| 色噜噜狠狠色综合欧洲selulu| 国产精品婷婷午夜在线观看| 国产精品888| 国产视频一区二区在线| 韩国三级电影一区二区| 日韩欧美国产综合在线一区二区三区| 一区二区三区在线影院| 欧美在线观看视频一区二区三区| 中文字幕一区二区三区四区不卡| 激情欧美一区二区| 欧美精品一区男女天堂| 激情成人综合网| 成人国产精品免费网站| 精品久久久久av影院| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美肥妇free| 久久99精品国产麻豆不卡| 欧美一级高清片在线观看| 国产在线精品一区在线观看麻豆| 精品对白一区国产伦| 国产精品中文字幕日韩精品| 久久久91精品国产一区二区精品| 国产一区二区三区av电影| 国产精品久久久久影院| 色吊一区二区三区| 婷婷久久综合九色国产成人| 欧美成人在线直播| 99精品黄色片免费大全| 日韩欧美亚洲国产另类| 国产欧美一区视频| 91小视频在线观看| 99视频一区二区三区| 亚洲在线视频网站| 日韩一区二区不卡| 国产69精品久久久久毛片| 亚洲女人的天堂| 91.com在线观看| 高潮精品一区videoshd| 亚洲综合小说图片| 91精品蜜臀在线一区尤物| 国内成+人亚洲+欧美+综合在线| 国产欧美一区二区精品性色超碰 | 亚洲一区二区在线观看视频| 欧美性猛交xxxx乱大交退制版| 青青草国产精品亚洲专区无| 中文字幕在线不卡国产视频| 欧美日韩国产大片| 国产1区2区3区精品美女| 一区二区三区四区精品在线视频| 欧美一区二区三区色| 99精品欧美一区二区蜜桃免费 | 欧美日韩国产高清一区二区| 国产美女主播视频一区| 亚洲一区在线看| 日本一区二区在线不卡| 777午夜精品视频在线播放| 成人免费视频免费观看| 香蕉av福利精品导航| 久久国内精品自在自线400部| 亚洲国产精品黑人久久久| 91麻豆精品国产自产在线观看一区 | 成人黄色国产精品网站大全在线免费观看 | 99精品一区二区三区| 久久精品国产免费| 亚洲综合图片区| 国产精品嫩草久久久久| 欧美tickle裸体挠脚心vk| 欧美亚男人的天堂| 99精品视频中文字幕| 国产精品91一区二区| 久久精品国产99国产| 亚洲国产精品一区二区久久 | 麻豆精品一区二区| 亚洲福利一二三区| 亚洲色图制服丝袜| 中文字幕在线播放不卡一区| 久久久精品蜜桃| 日韩欧美电影一二三| 欧美一区二区在线免费播放| 欧美在线啊v一区| 色噜噜狠狠成人网p站| bt7086福利一区国产| 国产精品1区2区| 国产美女在线精品| 国产一本一道久久香蕉| 免费看日韩a级影片| 秋霞电影网一区二区| 日韩专区中文字幕一区二区| 亚洲成人av在线电影| 日韩高清不卡一区二区| 日日骚欧美日韩| 视频一区二区中文字幕| 日本三级韩国三级欧美三级| 日韩精品视频网站| 毛片不卡一区二区| 国产一区二区伦理| 国产成人综合亚洲91猫咪| 国产suv精品一区二区6| 99免费精品在线| 色综合久久久久网| 欧美在线不卡视频| 日韩一区二区免费高清| 欧美成人vps| 日本一区二区三区在线观看| 自拍偷拍国产亚洲| 亚洲国产日韩综合久久精品| 日韩精品乱码免费| 国产综合一区二区| www.成人在线| 欧美日韩一区成人| 精品国产乱码久久久久久蜜臀 | 欧美理论片在线| 精品国产亚洲在线| 欧美高清一级片在线观看| 亚洲欧洲中文日韩久久av乱码| 亚洲一线二线三线视频| 麻豆一区二区三| 成人黄色电影在线 | 日韩欧美黄色影院| 中文字幕日本乱码精品影院| 亚洲一级片在线观看| 蜜桃视频免费观看一区| 国产成人综合亚洲91猫咪| 日本电影欧美片| 久久综合色8888| 国产精品久久久久久久浪潮网站| 亚洲电影中文字幕在线观看| 麻豆国产欧美一区二区三区| av不卡一区二区三区| 日韩午夜三级在线| 国产精品国产三级国产aⅴ原创| 亚洲成a天堂v人片| 成人性生交大片免费看在线播放| 欧美视频日韩视频在线观看| 久久精品一二三| 亚洲成人一二三| 波多野结衣欧美| 久久婷婷国产综合国色天香| 伊人开心综合网| 丰满少妇在线播放bd日韩电影| 欧美精品一卡两卡| 国产精品久久毛片a| 激情图区综合网| 欧美色手机在线观看| 国产精品欧美极品| 久久精品免费观看| 欧美午夜不卡视频| 亚洲精品一二三| 国产成人在线网站| 欧美成人欧美edvon| 午夜精品在线视频一区| 91麻豆swag| 欧美精品高清视频| 成人网在线播放| 成人18视频在线播放| 久久久影院官网| 久久精品国产亚洲a| 7777精品伊人久久久大香线蕉 | 一区二区三区高清在线| 99久久精品国产观看| 国产亚洲欧美中文| 国产原创一区二区| 91精品国产黑色紧身裤美女| 亚洲一区视频在线| 欧美丝袜丝交足nylons| 一区二区三区日韩欧美| 在线视频综合导航| 亚洲综合色网站| 欧美日韩一级黄| 亚洲妇熟xx妇色黄| 91精选在线观看|