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

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

?? formats.c

?? 杜比AC-3編碼解碼器(參考程序)
?? C
字號:
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <linux/videodev.h>
#include <linux/soundcard.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/time.h>
#include <getopt.h>
#include <string.h>

#include "mpegenc.h"

AVFormat *first_format;
/* XXX: suppress it ! */
int data_out_size;

const char *comment_string = 
"+title=Test Video +author=FFMpeg +copyright=Free +comment=Generated by FFMpeg 1.0";

void register_avformat(AVFormat *format)
{
    AVFormat **p;
    p = &first_format;
    while (*p != NULL) p = &(*p)->next;
    *p = format;
    format->next = NULL;
}

AVFormat *guess_format(const char *short_name, const char *filename, const char *mime_type)
{
    AVFormat *fmt, *fmt_found;
    int score_max, score;
    const char *ext, *p;
    char ext1[32], *q;

    /* find the proper file type */
    fmt_found = NULL;
    score_max = 0;
    fmt = first_format;
    while (fmt != NULL) {
        score = 0;
        if (fmt->name && short_name && !strcmp(fmt->name, short_name))
            score += 100;
        if (fmt->mime_type && mime_type && !strcmp(fmt->mime_type, mime_type))
            score += 10;
        if (filename && fmt->extensions) {
            ext = strrchr(filename, '.');
            if (ext) {
                ext++;
                p = fmt->extensions;
                for(;;) {
                    q = ext1;
                    while (*p != '\0' && *p != ',') 
                        *q++ = *p++;
                    *q = '\0';
                    if (!strcasecmp(ext1, ext)) {
                        score += 5;
                        break;
                    }
                    if (*p == '\0') 
                        break;
                    p++;
                }
            }
        }
        if (score > score_max) {
            score_max = score;
            fmt_found = fmt;
        }
        fmt = fmt->next;
    }
    return fmt_found;
}   

/* return TRUE if val is a prefix of str. If it returns TRUE, ptr is
   set to the next character in 'str' after the prefix */
int strstart(const char *str, const char *val, const char **ptr)
{
    const char *p, *q;
    p = str;
    q = val;
    while (*q != '\0') {
        if (*p != *q)
            return 0;
        p++;
        q++;
    }
    if (ptr)
        *ptr = p;
    return 1;
}

/* simple formats */
int raw_write_header(struct AVFormatContext *s)
{
    return 0;
}

int raw_write_audio(struct AVFormatContext *s, 
                    unsigned char *buf, int size)
{
    put_buffer(&s->pb, buf, size);
    put_flush_packet(&s->pb);
    return 0;
}

int raw_write_video(struct AVFormatContext *s, 
                    unsigned char *buf, int size)
{
    put_buffer(&s->pb, buf, size);
    put_flush_packet(&s->pb);
    return 0;
}

int raw_write_trailer(struct AVFormatContext *s)
{
    return 0;
}

AVFormat mp2_format = {
    "mp2",
    "MPEG audio layer 2",
    "audio/x-mpeg",
    "mp2,mp3",
    CODEC_ID_MP2,
    0,
    raw_write_header,
    raw_write_audio,
    NULL,
    raw_write_trailer,
};

AVFormat ac3_format = {
    "ac3",
    "raw ac3",
    "audio/x-ac3", 
    "ac3",
    CODEC_ID_AC3,
    0,
    raw_write_header,
    raw_write_audio,
    NULL,
    raw_write_trailer,
};

AVFormat h263_format = {
    "h263",
    "raw h263",
    "video/x-h263",
    "h263",
    0,
    CODEC_ID_H263,
    raw_write_header,
    NULL,
    raw_write_video,
    raw_write_trailer,
};

AVFormat mpeg1video_format = {
    "mpeg1video",
    "MPEG1 video",
    "video/mpeg",
    "mpg,mpeg",
    0,
    CODEC_ID_MPEG1VIDEO,
    raw_write_header,
    NULL,
    raw_write_video,
    raw_write_trailer,
};

/* encoder management */
AVEncoder *first_encoder;

void register_avencoder(AVEncoder *format)
{
    AVEncoder **p;
    p = &first_encoder;
    while (*p != NULL) p = &(*p)->next;
    *p = format;
    format->next = NULL;
}

int avencoder_open(AVEncodeContext *avctx, AVEncoder *codec)
{
    int ret;

    avctx->codec = codec;
    avctx->frame_number = 0;
    avctx->priv_data = malloc(codec->priv_data_size);
    if (!avctx->priv_data) 
        return -ENOMEM;
    memset(avctx->priv_data, 0, codec->priv_data_size);
    ret = avctx->codec->init(avctx);
    if (ret < 0) {
        free(avctx->priv_data);
        avctx->priv_data = NULL;
        return ret;
    }
    return 0;
}

int avencoder_encode(AVEncodeContext *avctx, UINT8 *buf, int buf_size, void *data)
{
    int ret;

    ret = avctx->codec->encode(avctx, buf, buf_size, data);
    avctx->frame_number++;
    return ret;
}

int avencoder_close(AVEncodeContext *avctx)
{
    if (avctx->codec->close)
        avctx->codec->close(avctx);
    free(avctx->priv_data);
    avctx->priv_data = NULL;
    return 0;
}

AVEncoder *avencoder_find(enum CodecID id)
{
    AVEncoder *p;
    p = first_encoder;
    while (p) {
        if (p->id == id)
            return p;
        p = p->next;
    }
    return NULL;
}


void avencoder_string(char *buf, int buf_size, AVEncodeContext *enc)
{
    switch(enc->codec->type) {
    case CODEC_TYPE_VIDEO:
        snprintf(buf, buf_size,
                 "Video: %s%s, %dx%d, %d fps, %d kb/s",
                 enc->codec->name, enc->flags & CODEC_FLAG_HQ ? " (hq)" : "", 
                 enc->width, enc->height, enc->rate, enc->bit_rate / 1000);
        break;
    case CODEC_TYPE_AUDIO:
        snprintf(buf, buf_size,
                 "Audio: %s, %d Hz, %s, %d kb/s",
                 enc->codec->name, enc->rate,
                 enc->channels == 2 ? "stereo" : "mono", 
                 enc->bit_rate / 1000);
        break;
    default:
        abort();
    }
}

/* PutByteFormat */

int init_put_byte(PutByteContext *s,
                  unsigned char *buffer,
                  int buffer_size,
                  void *opaque,
                  void (*write_packet)(void *opaque, UINT8 *buf, int buf_size),
                  int (*write_seek)(void *opaque, long long offset, int whence))
{
    s->buffer = buffer;
    s->buf_ptr = buffer;
    s->buf_end = buffer + buffer_size;
    s->opaque = opaque;
    s->write_packet = write_packet;
    s->write_seek = write_seek;
    s->pos = 0;
    s->must_flush = 0;
    return 0;
}
                  

static void flush_buffer(PutByteContext *s)
{
    if (s->buf_ptr > s->buffer) {
        if (s->write_packet)
            s->write_packet(s->opaque, s->buffer, s->buf_ptr - s->buffer);
        s->pos += s->buf_ptr - s->buffer;
    }
    s->buf_ptr = s->buffer;
}

void put_byte(PutByteContext *s, int b)
{
    *(s->buf_ptr)++ = b;
    if (s->buf_ptr >= s->buf_end) 
        flush_buffer(s);
}

void put_buffer(PutByteContext *s, unsigned char *buf, int size)
{
    int len;

    while (size > 0) {
        len = (s->buf_end - s->buf_ptr);
        if (len > size)
            len = size;
        memcpy(s->buf_ptr, buf, len);
        s->buf_ptr += len;

        if (s->buf_ptr >= s->buf_end) 
            flush_buffer(s);

        buf += len;
        size -= len;
    }
}

void put_flush_packet(PutByteContext *s)
{
    flush_buffer(s);
    s->must_flush = 0;
}

long long put_seek(PutByteContext *s, long long offset, int whence)
{
    long long offset1;

    if (whence != SEEK_CUR && whence != SEEK_SET)
        return -1;
    if (whence == SEEK_CUR) {
        offset1 = s->pos + s->buf_ptr - s->buffer;
        if (offset == 0)
            return offset1;
        offset += offset1;
    }
    offset1 = offset - s->pos;
    if (!s->must_flush && 
        offset1 >= 0 && offset1 < (s->buf_end - s->buffer)) {
        /* can do the seek inside the buffer */
        s->buf_ptr = s->buffer + offset1;
    } else {
        if (!s->write_seek)
            return -1;
        flush_buffer(s);
        s->write_seek(s->opaque, offset, SEEK_SET);
        s->pos = offset;
        s->must_flush = 1;
    }
    return offset;
}

long long put_pos(PutByteContext *s)
{
    return put_seek(s, 0, SEEK_CUR);
}

void put_le32(PutByteContext *s, unsigned int val)
{
    put_byte(s, val);
    put_byte(s, val >> 8);
    put_byte(s, val >> 16);
    put_byte(s, val >> 24);
}

void put_le64(PutByteContext *s, unsigned long long val)
{
    put_le32(s, val & 0xffffffff);
    put_le32(s, val >> 32);
}

void put_le16(PutByteContext *s, unsigned int val)
{
    put_byte(s, val);
    put_byte(s, val >> 8);
}

void put_tag(PutByteContext *s, char *tag)
{
    while (*tag) {
        put_byte(s, *tag++);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
56国语精品自产拍在线观看| 欧美大肚乱孕交hd孕妇| 日韩欧美一区二区视频| 国产精品美女久久久久高潮| 免费欧美在线视频| 色婷婷综合久久久久中文| 精品福利二区三区| 同产精品九九九| 91免费观看视频在线| 久久婷婷国产综合国色天香| 午夜私人影院久久久久| av亚洲精华国产精华精| 国产欧美综合在线观看第十页| 男男视频亚洲欧美| 欧美日韩精品电影| 亚洲一区二区美女| 色久优优欧美色久优优| 亚洲丝袜另类动漫二区| 国产成人在线视频网站| 久久婷婷色综合| 国产自产2019最新不卡| 日韩欧美在线影院| 午夜av一区二区| 欧美老年两性高潮| 三级成人在线视频| 欧美日韩国产高清一区二区| 一区二区不卡在线播放 | 国产精品乱人伦| 国产综合色在线| 欧美精品一区二区三区高清aⅴ | 97se亚洲国产综合自在线不卡| 蜜臀久久99精品久久久久久9 | 国产在线精品免费| 日韩三级免费观看| 麻豆成人久久精品二区三区小说| 欧美一级欧美三级在线观看| 日韩专区在线视频| 日韩免费观看2025年上映的电影| 日本在线不卡一区| 欧美v日韩v国产v| 韩国成人在线视频| 日本一区二区三区四区| 国产成人99久久亚洲综合精品| 国产色产综合产在线视频| 国产成+人+日韩+欧美+亚洲| 国产精品蜜臀av| 色综合色狠狠综合色| 亚洲综合久久久| 欧美精品久久久久久久久老牛影院| 日韩中文欧美在线| 久久美女艺术照精彩视频福利播放| 国产高清成人在线| 有码一区二区三区| 欧美一区二区三区公司| 国产乱妇无码大片在线观看| 国产精品久久久久桃色tv| 在线中文字幕一区二区| 美日韩一区二区| 国产精品第一页第二页第三页| 91福利社在线观看| 久久电影网站中文字幕| 国产精品不卡视频| 91精品国产综合久久久久久漫画 | 午夜精品一区二区三区电影天堂| 欧美人与z0zoxxxx视频| 黄页网站大全一区二区| 亚洲素人一区二区| 欧美videos大乳护士334| 91尤物视频在线观看| 久久国产精品露脸对白| 一区二区三区色| 久久综合久久久久88| 欧美日韩不卡在线| 成人精品国产福利| 日本欧美大码aⅴ在线播放| 久久久久国产一区二区三区四区 | 26uuu色噜噜精品一区二区| 一本到不卡精品视频在线观看| 日韩成人精品在线| 亚洲欧美日本在线| 久久众筹精品私拍模特| 欧美日韩亚洲综合在线| av成人老司机| 国产精品一级黄| 免费亚洲电影在线| 亚洲一区免费视频| 亚洲图片欧美激情| 久久久99精品久久| 欧美成人女星排行榜| 在线观看网站黄不卡| 丰满少妇久久久久久久| 狠狠色狠狠色合久久伊人| 亚洲成a人v欧美综合天堂下载| 亚洲欧美在线高清| 国产欧美一区二区精品秋霞影院 | 中国av一区二区三区| 精品精品欲导航| 69久久夜色精品国产69蝌蚪网| 成人av在线播放网站| 国产凹凸在线观看一区二区| 国产一区日韩二区欧美三区| 蜜臀国产一区二区三区在线播放| 亚洲一区二区三区四区在线| 亚洲日本va午夜在线电影| 国产精品久久久久久久久免费丝袜 | 免费成人在线视频观看| 亚洲国产美国国产综合一区二区| 国产精品人成在线观看免费| 精品av久久707| 精品入口麻豆88视频| 欧美一区二区黄色| 日韩小视频在线观看专区| 正在播放亚洲一区| 欧美一区二区三区啪啪| 日韩欧美中文字幕公布| 精品区一区二区| 久久久无码精品亚洲日韩按摩| www日韩大片| 国产欧美精品国产国产专区| 国产精品视频观看| 国产精品盗摄一区二区三区| 国产精品不卡在线| 亚洲激情六月丁香| 香蕉成人伊视频在线观看| 亚洲超丰满肉感bbw| 免费国产亚洲视频| 国模娜娜一区二区三区| 国产成人av自拍| 91视频在线看| 欧美性感一类影片在线播放| 在线播放/欧美激情| 欧美α欧美αv大片| 国产欧美日韩视频一区二区| 日韩美女视频一区| 日日摸夜夜添夜夜添精品视频| 另类中文字幕网| 国产精品一二三四五| 色综合网站在线| 欧美区在线观看| 国产日产精品一区| 亚洲一区在线电影| 久久精品免费观看| 99久久综合色| 欧美美女视频在线观看| 久久久久久亚洲综合影院红桃| 国产精品久久久久婷婷| 午夜精品福利在线| 国产精品一级在线| 欧美日韩一本到| 中文字幕久久午夜不卡| 亚洲一区二区三区四区不卡 | 亚洲成人午夜影院| 国产在线播放一区二区三区| 99精品久久99久久久久| 日韩一级黄色大片| 成人欧美一区二区三区1314| 日韩国产精品久久久久久亚洲| 国产一区二区三区久久久 | 亚洲免费观看高清在线观看| 日本中文字幕一区| 91视视频在线直接观看在线看网页在线看| 在线观看91精品国产麻豆| 中文字幕高清不卡| 蜜桃视频第一区免费观看| 色综合天天综合给合国产| 精品国产乱码久久久久久免费| 亚洲人成7777| 成人小视频在线| 精品国产乱码91久久久久久网站| 亚洲最新在线观看| 成人美女视频在线观看| 日韩欧美国产系列| 亚洲国产成人av网| 91黄色激情网站| 国产精品―色哟哟| 国产精品一区二区你懂的| 欧美日韩国产高清一区二区三区 | 日韩国产高清在线| 在线看国产一区| 亚洲免费观看高清完整版在线| 国产自产高清不卡| 日韩情涩欧美日韩视频| 午夜精品在线看| 欧美日韩精品一区二区三区| 亚洲摸摸操操av| www.av亚洲| 国产精品丝袜在线| 国产精品996| 亚洲婷婷综合久久一本伊一区| 国产乱人伦偷精品视频不卡| 欧美岛国在线观看| 久久电影网电视剧免费观看| 日韩一级片网址| 久久精品国产澳门| 精品嫩草影院久久| 狠狠色丁香久久婷婷综| 欧美成人bangbros| 狠狠色丁香婷婷综合久久片| 亚洲精品在线免费观看视频| 激情国产一区二区|