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

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

?? mpegvideo.c

?? 杜比AC-3編碼解碼器(參考程序)
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
 * The simplest mpeg encoder
 * Copyright (c) 2000 Gerard Lantau.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <math.h>
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"

/* enable all paranoid tests for rounding, overflows, etc... */
//#define PARANOID

//#define DEBUG

/* for jpeg fast DCT */
#define CONST_BITS 14

static const unsigned short aanscales[64] = {
    /* precomputed values scaled up by 14 bits */
    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
    22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
    21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
    19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
    12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
    8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
    4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
};

static void encode_picture(MpegEncContext *s, int picture_number);
static void rate_control_init(MpegEncContext *s);
static int rate_estimate_qscale(MpegEncContext *s);
static void mpeg1_skip_picture(MpegEncContext *s, int pict_num);

#include "mpegencodevlc.h"

static void put_header(MpegEncContext *s, int header)
{
    align_put_bits(&s->pb);
    put_bits(&s->pb, 32, header);
}

static void convert_matrix(int *qmat, const UINT8 *quant_matrix, int qscale)
{
    int i;

    for(i=0;i<64;i++) {
        qmat[i] = (int)((1 << 22) * 16384.0 / (aanscales[i] * qscale * quant_matrix[i]));
    }
}


int MPV_encode_init(AVEncodeContext *avctx)
{
    MpegEncContext *s = avctx->priv_data;
    int pict_size, c_size;
    UINT8 *pict;

    dsputil_init();

    s->bit_rate = avctx->bit_rate;
    s->frame_rate = avctx->rate;
    s->width = avctx->width;
    s->height = avctx->height;
    s->gop_size = avctx->gop_size;
    if (s->gop_size <= 1) {
        s->intra_only = 1;
        s->gop_size = 12;
    } else {
        s->intra_only = 0;
    }
    s->full_search = 0;
    if (avctx->flags & CODEC_FLAG_HQ)
        s->full_search = 1;

    switch(avctx->codec->id) {
    case CODEC_ID_MPEG1VIDEO:
        s->out_format = FMT_MPEG1;
        break;
    case CODEC_ID_MJPEG:
        s->out_format = FMT_MJPEG;
        s->intra_only = 1; /* force intra only for jpeg */
        if (mjpeg_init(s) < 0)
            return -1;
        break;
    case CODEC_ID_H263:
        s->out_format = FMT_H263;
        break;
    case CODEC_ID_RV10:
        s->out_format = FMT_H263;
        s->h263_rv10 = 1;
        break;
    case CODEC_ID_DIVX:
        s->out_format = FMT_H263;
        s->h263_pred = 1;
        break;
    default:
        return -1;
    }

    switch(s->frame_rate) {
    case 24:
        s->frame_rate_index = 2;
        break;
    case 25:
        s->frame_rate_index = 3;
        break;
    case 30:
        s->frame_rate_index = 5;
        break;
    case 50:
        s->frame_rate_index = 6;
        break;
    case 60:
        s->frame_rate_index = 8;
        break;
    default:
        /* we accept lower frame rates than 24 for low bit rate mpeg */
        if (s->frame_rate >= 1 && s->frame_rate < 24) {
            s->frame_rate_index = 2;
        } else {
            return -1;
        }
        break;
    }

    /* init */
    s->mb_width = s->width / 16;
    s->mb_height = s->height / 16;
    
    c_size = s->width * s->height;
    pict_size = (c_size * 3) / 2;
    pict = malloc(pict_size);
    if (pict == NULL)
        goto fail;
    s->last_picture[0] = pict;
    s->last_picture[1] = pict + c_size;
    s->last_picture[2] = pict + c_size + (c_size / 4);
    
    pict = malloc(pict_size);
    if (pict == NULL) 
        goto fail;
    s->current_picture[0] = pict;
    s->current_picture[1] = pict + c_size;
    s->current_picture[2] = pict + c_size + (c_size / 4);

    if (s->out_format == FMT_H263) {
        int size;
        /* MV prediction */
        size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2);
        s->motion_val = malloc(size * 2 * sizeof(INT16));
        if (s->motion_val == NULL)
            goto fail;
        memset(s->motion_val, 0, size * 2 * sizeof(INT16));
    }

    if (s->h263_pred) {
        int y_size, c_size, i, size;

        y_size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2);
        c_size = (s->mb_width + 2) * (s->mb_height + 2);
        size = y_size + 2 * c_size;
        s->dc_val[0] = malloc(size * sizeof(INT16));
        if (s->dc_val[0] == NULL)
            goto fail;
        s->dc_val[1] = s->dc_val[0] + y_size;
        s->dc_val[2] = s->dc_val[1] + c_size;
        for(i=0;i<size;i++)
            s->dc_val[0][i] = 1024;
    }

    /* rate control init */
    rate_control_init(s);

    s->picture_number = 0;
    s->fake_picture_number = 0;
    /* motion detector init */
    s->f_code = 1;

    return 0;
 fail:
    if (s->motion_val)
        free(s->motion_val);
    if (s->dc_val[0])
        free(s->dc_val[0]);
    if (s->last_picture[0])
        free(s->last_picture[0]);
    if (s->current_picture[0])
        free(s->current_picture[0]);
    return -1;
}

int MPV_encode_end(AVEncodeContext *avctx)
{
    MpegEncContext *s = avctx->priv_data;
#if 0
    /* end of sequence */
    if (s->out_format == FMT_MPEG1) {
        put_header(s, SEQ_END_CODE);
    }

    if (!s->flush_frames)
        flush_put_bits(&s->pb);
#endif    
    if (s->motion_val)
        free(s->motion_val);
    if (s->h263_pred)
        free(s->dc_val[0]);
    free(s->last_picture[0]);
    free(s->current_picture[0]);
    if (s->out_format == FMT_MJPEG)
        mjpeg_close(s);
    return 0;
}

int MPV_encode_picture(AVEncodeContext *avctx,
                       unsigned char *buf, int buf_size, void *data)
{
    MpegEncContext *s = avctx->priv_data;
    int i;

    memcpy(s->new_picture, data, 3 * sizeof(UINT8 *));

    init_put_bits(&s->pb, buf, buf_size, NULL, NULL);

    /* group of picture */
    if (s->out_format == FMT_MPEG1) {
        unsigned int vbv_buffer_size;
        unsigned int time_code, fps, n;

        if ((s->picture_number % s->gop_size) == 0) {
            /* mpeg1 header repeated every gop */
            put_header(s, SEQ_START_CODE);
            
            put_bits(&s->pb, 12, s->width);
            put_bits(&s->pb, 12, s->height);
            put_bits(&s->pb, 4, 1); /* 1/1 aspect ratio */
            put_bits(&s->pb, 4, s->frame_rate_index);
            put_bits(&s->pb, 18, 0x3ffff);
            put_bits(&s->pb, 1, 1); /* marker */
            /* vbv buffer size: slightly greater than an I frame. We add
               some margin just in case */
            vbv_buffer_size = (3 * s->I_frame_bits) / (2 * 8);
            put_bits(&s->pb, 10, (vbv_buffer_size + 16383) / 16384); 
            put_bits(&s->pb, 1, 1); /* constrained parameter flag */
            put_bits(&s->pb, 1, 0); /* no custom intra matrix */
            put_bits(&s->pb, 1, 0); /* no custom non intra matrix */

            put_header(s, GOP_START_CODE);
            put_bits(&s->pb, 1, 0); /* do drop frame */
            /* time code : we must convert from the real frame rate to a
               fake mpeg frame rate in case of low frame rate */
            fps = frame_rate_tab[s->frame_rate_index];
            time_code = s->fake_picture_number;
            s->gop_picture_number = time_code;
            put_bits(&s->pb, 5, (time_code / (fps * 3600)) % 24);
            put_bits(&s->pb, 6, (time_code / (fps * 60)) % 60);
            put_bits(&s->pb, 1, 1);
            put_bits(&s->pb, 6, (time_code / fps) % 60);
            put_bits(&s->pb, 6, (time_code % fps));
            put_bits(&s->pb, 1, 1); /* closed gop */
            put_bits(&s->pb, 1, 0); /* broken link */
        }

        if (s->frame_rate < 24 && s->picture_number > 0) {
            /* insert empty P pictures to slow down to the desired
               frame rate. Each fake pictures takes about 20 bytes */
            fps = frame_rate_tab[s->frame_rate_index];
            n = ((s->picture_number * fps) / s->frame_rate) - 1;
            while (s->fake_picture_number < n) {
                mpeg1_skip_picture(s, s->fake_picture_number - 
                                   s->gop_picture_number); 
                s->fake_picture_number++;
            }

        }
        s->fake_picture_number++;
    }
    
    
    if (!s->intra_only) {
        /* first picture of GOP is intra */
        if ((s->picture_number % s->gop_size) == 0)
            s->pict_type = I_TYPE;
        else
            s->pict_type = P_TYPE;
    } else {
        s->pict_type = I_TYPE;
    }
    avctx->key_frame = (s->pict_type == I_TYPE);
    
    encode_picture(s, s->picture_number);
    
    /* swap current and last picture */
    for(i=0;i<3;i++) {
        UINT8 *tmp;
        
        tmp = s->last_picture[i];
        s->last_picture[i] = s->current_picture[i];
        s->current_picture[i] = tmp;
    }
    s->picture_number++;

    if (s->out_format == FMT_MJPEG)
        mjpeg_picture_trailer(s);

    flush_put_bits(&s->pb);
    s->total_bits += (s->pb.buf_ptr - s->pb.buf) * 8;
    avctx->quality = s->qscale;
    return s->pb.buf_ptr - s->pb.buf;
}

/* insert a fake P picture */
static void mpeg1_skip_picture(MpegEncContext *s, int pict_num)
{
    unsigned int mb_incr;

    /* mpeg1 picture header */
    put_header(s, PICTURE_START_CODE);
    /* temporal reference */
    put_bits(&s->pb, 10, pict_num & 0x3ff); 
    
    put_bits(&s->pb, 3, P_TYPE);
    put_bits(&s->pb, 16, 0xffff); /* non constant bit rate */
    
    put_bits(&s->pb, 1, 1); /* integer coordinates */
    put_bits(&s->pb, 3, 1); /* forward_f_code */
    
    put_bits(&s->pb, 1, 0); /* extra bit picture */
    
    /* only one slice */
    put_header(s, SLICE_MIN_START_CODE);
    put_bits(&s->pb, 5, 1); /* quantizer scale */
    put_bits(&s->pb, 1, 0); /* slice extra information */
    
    mb_incr = 1;
    put_bits(&s->pb, mbAddrIncrTable[mb_incr][1], 
             mbAddrIncrTable[mb_incr][0]);
    
    /* empty macroblock */
    put_bits(&s->pb, 3, 1); /* motion only */
    
    /* zero motion x & y */
    put_bits(&s->pb, 1, 1); 
    put_bits(&s->pb, 1, 1); 

    /* output a number of empty slice */
    mb_incr = s->mb_width * s->mb_height - 1;
    while (mb_incr > 33) {
        put_bits(&s->pb, 11, 0x008);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产激情二区三区| 精品三级av在线| 亚洲综合色噜噜狠狠| 色综合色狠狠综合色| 亚洲第一激情av| 91精品国产综合久久久久久久| 视频一区欧美精品| 欧美一级在线视频| 国产精品一区2区| 国产精品入口麻豆原神| 在线观看一区日韩| 男人的天堂久久精品| 久久久精品欧美丰满| 成人高清免费观看| 一区二区三区精密机械公司| 欧美精品xxxxbbbb| 国产一区二区福利| 亚洲激情男女视频| 日韩一二三区不卡| 91伊人久久大香线蕉| 亚洲不卡av一区二区三区| 2020国产精品自拍| 一本大道综合伊人精品热热| 婷婷中文字幕一区三区| 国产欧美一区二区在线| 欧美日韩中文精品| 国产精品香蕉一区二区三区| 亚洲欧美成人一区二区三区| 精品剧情v国产在线观看在线| 成a人片亚洲日本久久| 日本怡春院一区二区| 一区免费观看视频| 日韩欧美在线网站| 欧美最新大片在线看| 国产一区二区在线影院| 亚洲成av人影院| 国产精品萝li| 久久综合99re88久久爱| 欧美伊人精品成人久久综合97| 精品一区二区三区日韩| 亚洲一区二区精品视频| 中文字幕不卡一区| 欧美mv和日韩mv的网站| 欧美在线影院一区二区| 国产成人在线看| 麻豆国产91在线播放| 亚洲自拍欧美精品| 国产精品视频第一区| 精品毛片乱码1区2区3区| 欧美日韩免费高清一区色橹橹| 国产成人亚洲精品青草天美| 青青草国产精品97视觉盛宴| 亚洲最大成人综合| 日韩理论片在线| 国产午夜一区二区三区| 精品国产伦理网| 日韩女优视频免费观看| 欧美午夜视频网站| 色综合天天天天做夜夜夜夜做| 国产91精品一区二区麻豆网站| 黑人精品欧美一区二区蜜桃| 日韩二区三区在线观看| 亚洲二区在线视频| 夜夜爽夜夜爽精品视频| 亚洲美女免费在线| 亚洲精品国产a| 亚洲激情网站免费观看| 亚洲黄色录像片| 亚洲欧美成人一区二区三区| 亚洲人妖av一区二区| 国产精品久久久久久久久免费桃花 | 夜夜夜精品看看| 亚洲美女区一区| 伊人色综合久久天天| 亚洲精选视频免费看| 亚洲日本免费电影| 亚洲欧美日韩在线不卡| 尤物av一区二区| 一区二区三区不卡在线观看| 亚洲综合一区二区精品导航| 亚洲福利视频一区| 轻轻草成人在线| 精品在线一区二区三区| 国产一区二区免费在线| 粉嫩av亚洲一区二区图片| 成人免费电影视频| 91免费版pro下载短视频| 色欧美片视频在线观看| 欧美视频你懂的| 欧美精品粉嫩高潮一区二区| 日韩午夜精品电影| 久久久噜噜噜久久中文字幕色伊伊| 欧美精品一区二区三区在线播放| 欧美激情在线观看视频免费| 亚洲欧美偷拍三级| 夜夜嗨av一区二区三区网页| 日韩**一区毛片| 国产精品69久久久久水密桃| 成人午夜激情视频| 在线观看日韩av先锋影音电影院| 日韩一级免费观看| 国产人成一区二区三区影院| 亚洲精品国产无套在线观| 丝袜亚洲另类欧美综合| 国产在线视视频有精品| a4yy欧美一区二区三区| 欧美电影在哪看比较好| 国产日韩亚洲欧美综合| 亚洲人快播电影网| 麻豆精品一区二区三区| 岛国精品在线观看| 欧美日韩亚洲不卡| 欧美精品一区二区三区蜜桃| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲一区二区五区| 国产一区二区三区综合| 欧美性三三影院| 国产三级欧美三级| 亚洲风情在线资源站| 成人午夜激情视频| 日韩午夜小视频| 亚洲曰韩产成在线| 国产高清视频一区| 欧美女孩性生活视频| 国产精品水嫩水嫩| 日本美女一区二区三区视频| aaa欧美色吧激情视频| 日韩免费高清av| 亚洲一区二区欧美日韩| 国产大陆亚洲精品国产| 欧美一区二区三区在线观看视频| 中文字幕一区二区三中文字幕| 美国欧美日韩国产在线播放| 在线视频欧美精品| 中文av一区特黄| 久久91精品国产91久久小草| 在线免费av一区| 亚洲成人动漫精品| 99精品国产91久久久久久| 日韩欧美中文字幕公布| 亚洲一本大道在线| 色偷偷成人一区二区三区91 | 国产精品影视网| 欧美一区二区三区视频免费| 一个色妞综合视频在线观看| 国产91精品精华液一区二区三区| 日韩欧美一级二级| 婷婷中文字幕一区三区| 欧美午夜精品久久久| 亚洲蜜桃精久久久久久久| 国产成人啪午夜精品网站男同| 精品国产网站在线观看| 日韩av不卡一区二区| 欧美日本在线播放| 亚洲综合成人在线视频| 在线观看91视频| 亚洲黄色av一区| 色噜噜狠狠成人网p站| 亚洲视频免费观看| 色婷婷亚洲综合| 亚洲伦理在线免费看| 一本久久a久久免费精品不卡| 中文字幕中文字幕中文字幕亚洲无线| 国产成人一区在线| 国产精品色一区二区三区| 国产福利一区二区| 国产欧美一区二区在线| 国产sm精品调教视频网站| 国产日韩欧美a| 高清久久久久久| 亚洲欧洲三级电影| 91在线免费看| 国产成人日日夜夜| 亚洲国产岛国毛片在线| www.av亚洲| 亚洲自拍偷拍综合| 91精品国产综合久久精品app| 午夜精品aaa| 欧美岛国在线观看| 国产成人精品亚洲777人妖| 国产精品久久毛片| 色婷婷综合久久久| 午夜精品免费在线| 26uuu精品一区二区| 国产91综合网| 亚洲精品国产精品乱码不99| 欧美欧美欧美欧美| 国产一本一道久久香蕉| 国产精品福利一区二区三区| 欧美视频一区二区三区四区| 免费在线观看成人| 国产亚洲一区二区在线观看| 91在线视频在线| 天天操天天干天天综合网| 精品国产乱码久久久久久图片| 成人av资源网站| 性做久久久久久免费观看| 久久综合九色综合欧美就去吻 | 久久影音资源网| 99视频国产精品|