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

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

?? dnxhdenc.c.svn-base

?? mediastreamer2是開源的網絡傳輸媒體流的庫
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
/* * VC3/DNxHD encoder * Copyright (c) 2007 Baptiste Coudurier <baptiste dot coudurier at smartjog dot com> * * VC-3 encoder funded by the British Broadcasting Corporation * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *///#define DEBUG#define RC_VARIANCE 1 // use variance or ssd for fast rc#include "avcodec.h"#include "dsputil.h"#include "mpegvideo.h"#include "dnxhddata.h"typedef struct {    uint16_t mb;    int value;} RCCMPEntry;typedef struct {    int ssd;    int bits;} RCEntry;int dct_quantize_c(MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);typedef struct DNXHDEncContext {    MpegEncContext m; ///< Used for quantization dsp functions    AVFrame frame;    int cid;    const CIDEntry *cid_table;    uint8_t *msip; ///< Macroblock Scan Indices Payload    uint32_t *slice_size;    struct DNXHDEncContext *thread[MAX_THREADS];    unsigned dct_y_offset;    unsigned dct_uv_offset;    int interlaced;    int cur_field;    DECLARE_ALIGNED_16(DCTELEM, blocks[8][64]);    int      (*qmatrix_c)     [64];    int      (*qmatrix_l)     [64];    uint16_t (*qmatrix_l16)[2][64];    uint16_t (*qmatrix_c16)[2][64];    unsigned frame_bits;    uint8_t *src[3];    uint16_t *table_vlc_codes;    uint8_t  *table_vlc_bits;    uint16_t *table_run_codes;    uint8_t  *table_run_bits;    /** Rate control */    unsigned slice_bits;    unsigned qscale;    unsigned lambda;    unsigned thread_size;    uint16_t *mb_bits;    uint8_t  *mb_qscale;    RCCMPEntry *mb_cmp;    RCEntry   (*mb_rc)[8160];} DNXHDEncContext;#define LAMBDA_FRAC_BITS 10static int dnxhd_init_vlc(DNXHDEncContext *ctx){    int i;    CHECKED_ALLOCZ(ctx->table_vlc_codes, 449*2);    CHECKED_ALLOCZ(ctx->table_vlc_bits,    449);    CHECKED_ALLOCZ(ctx->table_run_codes,  63*2);    CHECKED_ALLOCZ(ctx->table_run_bits,     63);    for (i = 0; i < 257; i++) {        int level = ctx->cid_table->ac_level[i] +            (ctx->cid_table->ac_run_flag[i] << 7) + (ctx->cid_table->ac_index_flag[i] << 8);        assert(level < 449);        if (ctx->cid_table->ac_level[i] == 64 && ctx->cid_table->ac_index_flag[i])            level -= 64; // use 0+(1<<8) level        ctx->table_vlc_codes[level] = ctx->cid_table->ac_codes[i];        ctx->table_vlc_bits [level] = ctx->cid_table->ac_bits[i];    }    for (i = 0; i < 62; i++) {        int run = ctx->cid_table->run[i];        assert(run < 63);        ctx->table_run_codes[run] = ctx->cid_table->run_codes[i];        ctx->table_run_bits [run] = ctx->cid_table->run_bits[i];    }    return 0; fail:    return -1;}static int dnxhd_init_qmat(DNXHDEncContext *ctx, int lbias, int cbias){    // init first elem to 1 to avoid div by 0 in convert_matrix    uint16_t weight_matrix[64] = {1,}; // convert_matrix needs uint16_t*    int qscale, i;    CHECKED_ALLOCZ(ctx->qmatrix_l,   (ctx->m.avctx->qmax+1) * 64 * sizeof(int));    CHECKED_ALLOCZ(ctx->qmatrix_c,   (ctx->m.avctx->qmax+1) * 64 * sizeof(int));    CHECKED_ALLOCZ(ctx->qmatrix_l16, (ctx->m.avctx->qmax+1) * 64 * 2 * sizeof(uint16_t));    CHECKED_ALLOCZ(ctx->qmatrix_c16, (ctx->m.avctx->qmax+1) * 64 * 2 * sizeof(uint16_t));    for (i = 1; i < 64; i++) {        int j = ctx->m.dsp.idct_permutation[ff_zigzag_direct[i]];        weight_matrix[j] = ctx->cid_table->luma_weight[i];    }    ff_convert_matrix(&ctx->m.dsp, ctx->qmatrix_l, ctx->qmatrix_l16, weight_matrix,                      ctx->m.intra_quant_bias, 1, ctx->m.avctx->qmax, 1);    for (i = 1; i < 64; i++) {        int j = ctx->m.dsp.idct_permutation[ff_zigzag_direct[i]];        weight_matrix[j] = ctx->cid_table->chroma_weight[i];    }    ff_convert_matrix(&ctx->m.dsp, ctx->qmatrix_c, ctx->qmatrix_c16, weight_matrix,                      ctx->m.intra_quant_bias, 1, ctx->m.avctx->qmax, 1);    for (qscale = 1; qscale <= ctx->m.avctx->qmax; qscale++) {        for (i = 0; i < 64; i++) {            ctx->qmatrix_l  [qscale]   [i] <<= 2; ctx->qmatrix_c  [qscale]   [i] <<= 2;            ctx->qmatrix_l16[qscale][0][i] <<= 2; ctx->qmatrix_l16[qscale][1][i] <<= 2;            ctx->qmatrix_c16[qscale][0][i] <<= 2; ctx->qmatrix_c16[qscale][1][i] <<= 2;        }    }    return 0; fail:    return -1;}static int dnxhd_init_rc(DNXHDEncContext *ctx){    CHECKED_ALLOCZ(ctx->mb_rc, 8160*ctx->m.avctx->qmax*sizeof(RCEntry));    if (ctx->m.avctx->mb_decision != FF_MB_DECISION_RD)        CHECKED_ALLOCZ(ctx->mb_cmp, ctx->m.mb_num*sizeof(RCCMPEntry));    ctx->frame_bits = (ctx->cid_table->coding_unit_size - 640 - 4) * 8;    ctx->qscale = 1;    ctx->lambda = 2<<LAMBDA_FRAC_BITS; // qscale 2    return 0; fail:    return -1;}static int dnxhd_encode_init(AVCodecContext *avctx){    DNXHDEncContext *ctx = avctx->priv_data;    int i, index;    ctx->cid = ff_dnxhd_find_cid(avctx);    if (!ctx->cid || avctx->pix_fmt != PIX_FMT_YUV422P) {        av_log(avctx, AV_LOG_ERROR, "video parameters incompatible with DNxHD\n");        return -1;    }    av_log(avctx, AV_LOG_DEBUG, "cid %d\n", ctx->cid);    index = ff_dnxhd_get_cid_table(ctx->cid);    ctx->cid_table = &ff_dnxhd_cid_table[index];    ctx->m.avctx = avctx;    ctx->m.mb_intra = 1;    ctx->m.h263_aic = 1;    dsputil_init(&ctx->m.dsp, avctx);    ff_dct_common_init(&ctx->m);    if (!ctx->m.dct_quantize)        ctx->m.dct_quantize = dct_quantize_c;    ctx->m.mb_height = (avctx->height + 15) / 16;    ctx->m.mb_width  = (avctx->width  + 15) / 16;    if (avctx->flags & CODEC_FLAG_INTERLACED_DCT) {        ctx->interlaced = 1;        ctx->m.mb_height /= 2;    }    ctx->m.mb_num = ctx->m.mb_height * ctx->m.mb_width;    if (avctx->intra_quant_bias != FF_DEFAULT_QUANT_BIAS)        ctx->m.intra_quant_bias = avctx->intra_quant_bias;    if (dnxhd_init_qmat(ctx, ctx->m.intra_quant_bias, 0) < 0) // XXX tune lbias/cbias        return -1;    if (dnxhd_init_vlc(ctx) < 0)        return -1;    if (dnxhd_init_rc(ctx) < 0)        return -1;    CHECKED_ALLOCZ(ctx->slice_size, ctx->m.mb_height*sizeof(uint32_t));    CHECKED_ALLOCZ(ctx->mb_bits,    ctx->m.mb_num   *sizeof(uint16_t));    CHECKED_ALLOCZ(ctx->mb_qscale,  ctx->m.mb_num   *sizeof(uint8_t));    ctx->frame.key_frame = 1;    ctx->frame.pict_type = FF_I_TYPE;    ctx->m.avctx->coded_frame = &ctx->frame;    if (avctx->thread_count > MAX_THREADS || (avctx->thread_count > ctx->m.mb_height)) {        av_log(avctx, AV_LOG_ERROR, "too many threads\n");        return -1;    }    ctx->thread[0] = ctx;    for (i = 1; i < avctx->thread_count; i++) {        ctx->thread[i] =  av_malloc(sizeof(DNXHDEncContext));        memcpy(ctx->thread[i], ctx, sizeof(DNXHDEncContext));    }    for (i = 0; i < avctx->thread_count; i++) {        ctx->thread[i]->m.start_mb_y = (ctx->m.mb_height*(i  ) + avctx->thread_count/2) / avctx->thread_count;        ctx->thread[i]->m.end_mb_y   = (ctx->m.mb_height*(i+1) + avctx->thread_count/2) / avctx->thread_count;    }    return 0; fail: //for CHECKED_ALLOCZ    return -1;}static int dnxhd_write_header(AVCodecContext *avctx, uint8_t *buf){    DNXHDEncContext *ctx = avctx->priv_data;    const uint8_t header_prefix[5] = { 0x00,0x00,0x02,0x80,0x01 };    memcpy(buf, header_prefix, 5);    buf[5] = ctx->interlaced ? ctx->cur_field+2 : 0x01;    buf[6] = 0x80; // crc flag off    buf[7] = 0xa0; // reserved    AV_WB16(buf + 0x18, avctx->height); // ALPF    AV_WB16(buf + 0x1a, avctx->width);  // SPL    AV_WB16(buf + 0x1d, avctx->height); // NAL    buf[0x21] = 0x38; // FIXME 8 bit per comp    buf[0x22] = 0x88 + (ctx->frame.interlaced_frame<<2);    AV_WB32(buf + 0x28, ctx->cid); // CID    buf[0x2c] = ctx->interlaced ? 0 : 0x80;    buf[0x5f] = 0x01; // UDL    buf[0x167] = 0x02; // reserved    AV_WB16(buf + 0x16a, ctx->m.mb_height * 4 + 4); // MSIPS    buf[0x16d] = ctx->m.mb_height; // Ns    buf[0x16f] = 0x10; // reserved    ctx->msip = buf + 0x170;    return 0;}static av_always_inline void dnxhd_encode_dc(DNXHDEncContext *ctx, int diff){    int nbits;    if (diff < 0) {        nbits = av_log2_16bit(-2*diff);        diff--;    } else {        nbits = av_log2_16bit(2*diff);    }    put_bits(&ctx->m.pb, ctx->cid_table->dc_bits[nbits] + nbits,             (ctx->cid_table->dc_codes[nbits]<<nbits) + (diff & ((1 << nbits) - 1)));}static av_always_inline void dnxhd_encode_block(DNXHDEncContext *ctx, DCTELEM *block, int last_index, int n){    int last_non_zero = 0;    int offset = 0;    int slevel, i, j;    dnxhd_encode_dc(ctx, block[0] - ctx->m.last_dc[n]);    ctx->m.last_dc[n] = block[0];    for (i = 1; i <= last_index; i++) {        j = ctx->m.intra_scantable.permutated[i];        slevel = block[j];        if (slevel) {            int run_level = i - last_non_zero - 1;            int sign;            MASK_ABS(sign, slevel);            if (slevel > 64) {                offset = (slevel-1) >> 6;                slevel = 256 | (slevel & 63); // level 64 is treated as 0            }            if (run_level)                slevel |= 128;            put_bits(&ctx->m.pb, ctx->table_vlc_bits[slevel]+1, (ctx->table_vlc_codes[slevel]<<1)|(sign&1));            if (offset) {                put_bits(&ctx->m.pb, 4, offset);                offset = 0;            }            if (run_level)                put_bits(&ctx->m.pb, ctx->table_run_bits[run_level], ctx->table_run_codes[run_level]);            last_non_zero = i;        }    }    put_bits(&ctx->m.pb, ctx->table_vlc_bits[0], ctx->table_vlc_codes[0]); // EOB}static av_always_inline void dnxhd_unquantize_c(DNXHDEncContext *ctx, DCTELEM *block, int n, int qscale, int last_index){    const uint8_t *weight_matrix;    int level;    int i;    weight_matrix = (n&2) ? ctx->cid_table->chroma_weight : ctx->cid_table->luma_weight;    for (i = 1; i <= last_index; i++) {        int j = ctx->m.intra_scantable.permutated[i];        level = block[j];        if (level) {            if (level < 0) {                level = (1-2*level) * qscale * weight_matrix[i];                if (weight_matrix[i] != 32)                    level += 32;                level >>= 6;                level = -level;            } else {                level = (2*level+1) * qscale * weight_matrix[i];                if (weight_matrix[i] != 32)                    level += 32;                level >>= 6;            }            block[j] = level;        }    }}static av_always_inline int dnxhd_ssd_block(DCTELEM *qblock, DCTELEM *block){    int score = 0;    int i;    for (i = 0; i < 64; i++)        score += (block[i]-qblock[i])*(block[i]-qblock[i]);    return score;}static av_always_inline int dnxhd_calc_ac_bits(DNXHDEncContext *ctx, DCTELEM *block, int last_index){    int last_non_zero = 0;    int bits = 0;    int i, j, level;    for (i = 1; i <= last_index; i++) {        j = ctx->m.intra_scantable.permutated[i];        level = block[j];        if (level) {            int run_level = i - last_non_zero - 1;            level = FFABS(level);            if (level > 64) {                level = 256 | (level & 63); // level 64 is treated as 0                bits += 4;            }            level |= (!!run_level)<<7;            bits += ctx->table_vlc_bits[level]+1 + ctx->table_run_bits[run_level];            last_non_zero = i;        }    }    return bits;}static av_always_inline void dnxhd_get_pixels_4x8(DCTELEM *restrict block, const uint8_t *pixels, int line_size){    int i;    for (i = 0; i < 4; i++) {        block[0] = pixels[0];        block[1] = pixels[1];        block[2] = pixels[2];        block[3] = pixels[3];        block[4] = pixels[4];        block[5] = pixels[5];        block[6] = pixels[6];        block[7] = pixels[7];        pixels += line_size;        block += 8;    }    memcpy(block   , block- 8, sizeof(*block)*8);    memcpy(block+ 8, block-16, sizeof(*block)*8);    memcpy(block+16, block-24, sizeof(*block)*8);    memcpy(block+24, block-32, sizeof(*block)*8);}static av_always_inline void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, int mb_y){    const uint8_t *ptr_y = ctx->thread[0]->src[0] + ((mb_y << 4) * ctx->m.linesize)   + (mb_x << 4);    const uint8_t *ptr_u = ctx->thread[0]->src[1] + ((mb_y << 4) * ctx->m.uvlinesize) + (mb_x << 3);    const uint8_t *ptr_v = ctx->thread[0]->src[2] + ((mb_y << 4) * ctx->m.uvlinesize) + (mb_x << 3);    DSPContext *dsp = &ctx->m.dsp;    dsp->get_pixels(ctx->blocks[0], ptr_y    , ctx->m.linesize);    dsp->get_pixels(ctx->blocks[1], ptr_y + 8, ctx->m.linesize);    dsp->get_pixels(ctx->blocks[2], ptr_u    , ctx->m.uvlinesize);    dsp->get_pixels(ctx->blocks[3], ptr_v    , ctx->m.uvlinesize);    if (mb_y+1 == ctx->m.mb_height && ctx->m.avctx->height == 1080) {        if (ctx->interlaced) {            dnxhd_get_pixels_4x8(ctx->blocks[4], ptr_y + ctx->dct_y_offset    , ctx->m.linesize);            dnxhd_get_pixels_4x8(ctx->blocks[5], ptr_y + ctx->dct_y_offset + 8, ctx->m.linesize);            dnxhd_get_pixels_4x8(ctx->blocks[6], ptr_u + ctx->dct_uv_offset   , ctx->m.uvlinesize);            dnxhd_get_pixels_4x8(ctx->blocks[7], ptr_v + ctx->dct_uv_offset   , ctx->m.uvlinesize);        } else            memset(ctx->blocks[4], 0, 4*64*sizeof(DCTELEM));    } else {        dsp->get_pixels(ctx->blocks[4], ptr_y + ctx->dct_y_offset    , ctx->m.linesize);        dsp->get_pixels(ctx->blocks[5], ptr_y + ctx->dct_y_offset + 8, ctx->m.linesize);        dsp->get_pixels(ctx->blocks[6], ptr_u + ctx->dct_uv_offset   , ctx->m.uvlinesize);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品国产视频| 亚洲香肠在线观看| 亚洲视频一二三区| 久久成人综合网| 欧美性生交片4| 国产精品家庭影院| 国产一区福利在线| 51久久夜色精品国产麻豆| 亚洲精品欧美专区| 成人av电影在线网| 国产丝袜在线精品| 国产专区欧美精品| 欧美成人性战久久| 亚洲成va人在线观看| 在线一区二区观看| 国产精品传媒入口麻豆| 国产黄色成人av| 久久免费视频一区| 日本va欧美va瓶| 69av一区二区三区| 亚洲成av人在线观看| 欧美视频一二三区| 亚洲综合免费观看高清完整版在线| 成人中文字幕电影| 久久久www成人免费毛片麻豆| 久久福利视频一区二区| 日韩欧美在线一区二区三区| 日本欧美在线观看| 欧美videos大乳护士334| 蜜桃视频一区二区| 日韩欧美国产麻豆| 国产自产高清不卡| 日本一区二区三区四区| 成人黄色在线网站| 亚洲女同女同女同女同女同69| 北条麻妃国产九九精品视频| 亚洲天堂av老司机| 欧美日韩在线精品一区二区三区激情 | 日日摸夜夜添夜夜添精品视频 | 日韩一卡二卡三卡| 精品中文字幕一区二区小辣椒| 日韩视频免费直播| 国产成人免费视频网站| 国产精品麻豆99久久久久久| 91视频在线看| 亚洲www啪成人一区二区麻豆 | 97久久超碰国产精品| 洋洋成人永久网站入口| 91麻豆精品国产91久久久| 麻豆国产精品一区二区三区| 久久影院电视剧免费观看| 成人h版在线观看| 亚洲私人影院在线观看| 欧美精品123区| 久草中文综合在线| 中文字幕免费在线观看视频一区| 91视频在线观看免费| 丝瓜av网站精品一区二区 | 亚洲综合色自拍一区| 91精品国产色综合久久不卡电影| 精品亚洲成a人在线观看 | 99re成人精品视频| 午夜精品久久久久久久久久| 精品久久久久香蕉网| 99久久国产综合精品色伊| 午夜在线成人av| 欧美激情在线看| 69堂精品视频| 97se亚洲国产综合自在线| 五月婷婷久久综合| 欧美激情综合网| 欧美一区二区美女| 色婷婷国产精品久久包臀 | 视频在线在亚洲| 国产清纯白嫩初高生在线观看91 | 欧美午夜精品久久久久久超碰| 国产综合色精品一区二区三区| 亚洲人精品午夜| 2019国产精品| 欧美美女一区二区| av激情成人网| 韩国av一区二区三区四区| 一区二区三区欧美激情| 久久日一线二线三线suv| 欧美日免费三级在线| zzijzzij亚洲日本少妇熟睡| 精油按摩中文字幕久久| 亚洲一区二区三区爽爽爽爽爽| 久久久久88色偷偷免费| 欧美一区二区在线免费播放| 色美美综合视频| 成人黄色小视频在线观看| 狠狠色2019综合网| 蜜桃视频在线观看一区二区| 亚洲动漫第一页| 亚洲靠逼com| 亚洲欧美一区二区三区国产精品| 久久久蜜桃精品| 日韩精品一区二区三区在线播放 | 色婷婷香蕉在线一区二区| 粉嫩蜜臀av国产精品网站| 麻豆精品视频在线观看视频| 亚洲国产一区二区视频| 又紧又大又爽精品一区二区| 国产精品对白交换视频| 国产精品私房写真福利视频| 久久精品夜色噜噜亚洲aⅴ| 2欧美一区二区三区在线观看视频| 在线播放一区二区三区| 欧美高清激情brazzers| 欧美日韩不卡在线| 91精品国产综合久久久久久| 欧美巨大另类极品videosbest | 91传媒视频在线播放| 色狠狠av一区二区三区| 欧美影院午夜播放| 欧美美女直播网站| 51久久夜色精品国产麻豆| 91精品国产综合久久久蜜臀粉嫩 | 亚洲日本乱码在线观看| 自拍偷拍亚洲综合| 亚洲综合偷拍欧美一区色| 婷婷亚洲久悠悠色悠在线播放| 日韩成人伦理电影在线观看| 日韩精品1区2区3区| 久久99久久久欧美国产| 国产老妇另类xxxxx| 成人av资源在线观看| 一本大道久久a久久综合| 欧美在线免费观看亚洲| 91精品国产欧美日韩| 精品国产乱码久久久久久老虎| 国产日产精品1区| 亚洲国产中文字幕| 精品一区二区精品| 成人一级黄色片| 色狠狠色噜噜噜综合网| 91麻豆精品国产91久久久久久| 2022国产精品视频| 亚洲欧美成人一区二区三区| 日韩 欧美一区二区三区| 国产成人夜色高潮福利影视| 色乱码一区二区三区88| 欧美r级电影在线观看| 亚洲同性同志一二三专区| 日韩av一级电影| 国产福利一区二区三区视频在线| 99国产精品视频免费观看| 欧美高清hd18日本| 欧美高清一级片在线观看| 亚洲一区二区视频| 国产精品资源网| 欧美性xxxxx极品少妇| 久久综合狠狠综合久久激情| 亚洲精品国产无套在线观| 久久er99热精品一区二区| 91亚洲永久精品| 久久蜜桃av一区二区天堂| 亚洲综合激情小说| 国产精品一区二区三区99| 91国偷自产一区二区开放时间| 欧美xxxx老人做受| 午夜欧美在线一二页| 成人免费高清视频| 亚洲精品一区二区精华| 亚洲综合色区另类av| 成人精品国产一区二区4080| 日韩一级大片在线| 一级做a爱片久久| 丁香天五香天堂综合| 日韩女优毛片在线| 亚洲韩国一区二区三区| 99久久综合99久久综合网站| 精品国产乱码久久久久久1区2区 | 一本久道久久综合中文字幕 | 日韩精品一区二区三区蜜臀| 一区二区三区国产精品| 风流少妇一区二区| 日韩午夜精品视频| 无码av中文一区二区三区桃花岛| 99久久久免费精品国产一区二区 | 99精品国产热久久91蜜凸| 久久精品日产第一区二区三区高清版| 亚洲午夜羞羞片| 91福利精品视频| 亚洲欧美激情视频在线观看一区二区三区| 精品在线你懂的| 日韩精品一区二区三区视频播放| 天天色综合成人网| 欧美日韩精品电影| 亚洲成人资源在线| 欧美色图天堂网| 午夜精品久久一牛影视| 欧美三区在线观看| 首页国产欧美久久| 日韩一区二区高清| 国产在线精品免费| 国产日产欧产精品推荐色| 国产91丝袜在线观看| 中文成人综合网|