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

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

?? flvenc.c

?? arm平臺下的H264編碼和解碼源代碼
?? C
字號:
/* * FLV encoder. * Copyright (c) 2003 The FFmpeg Project. * * This library 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 of the License, or (at your option) any later version. * * This library 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 this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "avformat.h"#define VIDEO_FIFO_SIZE 512typedef struct FLVFrame {    int type;    int timestamp;    int flags;    uint8_t *data;    int size;    struct FLVFrame *next;} FLVFrame;typedef struct FLVContext {    int hasAudio;    int hasVideo;#ifdef CONFIG_MP3LAME    int audioTime;    int audioInPos;    int audioOutPos;    int audioSize;//    int audioRate;    int initDelay;    int soundDelay;    uint8_t *audioFifo;    int64_t sampleCount;#endif // CONFIG_MP3LAME    int64_t frameCount;    FLVFrame *frames;} FLVContext;#ifdef CONFIG_MP3LAME#define AUDIO_FIFO_SIZE 65536static const int sSampleRates[3][4] = {    {44100, 48000, 32000, 0},    {22050, 24000, 16000, 0},    {11025, 12000,  8000, 0},};static const int sBitRates[2][3][15] = {    {   {  0, 32, 64, 96,128,160,192,224,256,288,320,352,384,416,448},        {  0, 32, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,384},        {  0, 32, 40, 48, 56, 64, 80, 96,112,128,160,192,224,256,320}    },    {   {  0, 32, 48, 56, 64, 80, 96,112,128,144,160,176,192,224,256},        {  0,  8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160},        {  0,  8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160}    },};static const int sSamplesPerFrame[3][3] ={    {  384,     1152,    1152 },    {  384,     1152,     576 },    {  384,     1152,     576 }};static const int sBitsPerSlot[3] = {    32,    8,    8};static int mp3info(void *data, int *byteSize, int *samplesPerFrame, int *sampleRate, int *isMono ){    uint8_t *dataTmp = (uint8_t *)data;    uint32_t header = ( (uint32_t)dataTmp[0] << 24 ) | ( (uint32_t)dataTmp[1] << 16 ) | ( (uint32_t)dataTmp[2] << 8 ) | (uint32_t)dataTmp[3];    int layerID = 3 - ((header >> 17) & 0x03);    int bitRateID = ((header >> 12) & 0x0f);    int sampleRateID = ((header >> 10) & 0x03);    int bitRate = 0;    int bitsPerSlot = sBitsPerSlot[layerID];    int isPadded = ((header >> 9) & 0x01);    if ( (( header >> 21 ) & 0x7ff) != 0x7ff ) {        return 0;    }    if ( !isPadded ) {//        printf("Fatal error: mp3 data is not padded!\n");//        exit(0);    }    *isMono = ((header >>  6) & 0x03) == 0x03;    if ( (header >> 19 ) & 0x01 ) {        //MPEG1        *sampleRate = sSampleRates[0][sampleRateID];        bitRate = sBitRates[0][layerID][bitRateID] * 1000;        *samplesPerFrame = sSamplesPerFrame[0][layerID];    } else {        if ( (header >> 20) & 0x01 ) {            //MPEG2            *sampleRate = sSampleRates[1][sampleRateID];            bitRate = sBitRates[1][layerID][bitRateID] * 1000;            *samplesPerFrame = sSamplesPerFrame[1][layerID];        } else {            //MPEG2.5            *sampleRate = sSampleRates[2][sampleRateID];            bitRate = sBitRates[1][layerID][bitRateID] * 1000;            *samplesPerFrame = sSamplesPerFrame[2][layerID];        }    }        *byteSize = ( ( ( ( *samplesPerFrame * (bitRate / bitsPerSlot) ) / *sampleRate ) + isPadded ) );    return 1;}#endif // CONFIG_MP3LAMEstatic int flv_write_header(AVFormatContext *s){    ByteIOContext *pb = &s->pb;    FLVContext *flv = s->priv_data;    av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */    flv->hasAudio = 0;    flv->hasVideo = 0;#ifdef CONFIG_MP3LAME    flv->audioTime = -1;    flv->audioFifo = av_malloc(AUDIO_FIFO_SIZE);    flv->audioInPos = 0;    flv->audioOutPos = 0;    flv->audioSize = 0;//    flv->audioRate = 44100;    flv->initDelay = -1;    flv->soundDelay = 0;#endif // CONFIG_MP3LAME    flv->frames = 0;    put_tag(pb,"FLV");    put_byte(pb,1);    put_byte(pb,0); // delayed write    put_be32(pb,9);    put_be32(pb,0);    return 0;}static void put_be24(ByteIOContext *pb, int value){    put_byte(pb, (value>>16) & 0xFF );    put_byte(pb, (value>> 8) & 0xFF );    put_byte(pb, (value>> 0) & 0xFF );}static void InsertSorted(FLVContext *flv, FLVFrame *frame){    if ( !flv->frames ) {        flv->frames = frame;    } else {        FLVFrame *trav = flv->frames;        FLVFrame *prev = 0;        for (;trav;) {            if ( trav->timestamp >= frame->timestamp ) {                frame->next = trav;                if ( prev ) {                    prev->next = frame;                } else {                    flv->frames = frame;                }                break;            }            prev = trav;            trav = trav->next;        }        if ( !trav ) {            prev->next = frame;        }    }}static void DumpFrame(ByteIOContext *pb, FLVFrame *frame){    put_byte(pb,frame->type); // message type    put_be24(pb,frame->size+1); // include flags    put_be24(pb,frame->timestamp); // time stamp    put_be32(pb,0); // reserved    put_byte(pb,frame->flags);    put_buffer(pb, frame->data, frame->size);    put_be32(pb,frame->size+1+11); // reserved    av_free(frame->data);}static void Dump(FLVContext *flv, ByteIOContext *pb, int count){    int c=0;    FLVFrame *trav = flv->frames;    FLVFrame *prev = 0;    for (;trav;c++) {        trav = trav->next;    }    trav = flv->frames;    for ( ; c >= count; c-- ) {        DumpFrame(pb,trav);        prev = trav;        trav = trav->next;        av_free(prev);    }     flv->frames = trav;}static int flv_write_trailer(AVFormatContext *s){    int64_t file_size;    int flags = 0;    ByteIOContext *pb = &s->pb;    FLVContext *flv = s->priv_data;    Dump(flv,pb,1);    file_size = url_ftell(pb);    flags |= flv->hasAudio ? 4 : 0;    flags |= flv->hasVideo ? 1 : 0;    url_fseek(pb, 4, SEEK_SET);    put_byte(pb,flags);    url_fseek(pb, file_size, SEEK_SET);    return 0;}static int flv_write_packet(AVFormatContext *s, int stream_index,                            const uint8_t *buf, int size, int64_t timestamp){    ByteIOContext *pb = &s->pb;    AVCodecContext *enc = &s->streams[stream_index]->codec;    FLVContext *flv = s->priv_data;    if (enc->codec_type == CODEC_TYPE_VIDEO) {        FLVFrame *frame = av_malloc(sizeof(FLVFrame));        frame->next = 0;        frame->type = 9;        frame->flags = 2; // choose h263        frame->flags |= enc->coded_frame->key_frame ? 0x10 : 0x20; // add keyframe indicator        frame->timestamp = timestamp;        //frame->timestamp = ( ( flv->frameCount * (int64_t)FRAME_RATE_BASE * (int64_t)1000 ) / (int64_t)enc->frame_rate );        //printf("%08x %f %f\n",frame->timestamp,(double)enc->frame_rate/(double)FRAME_RATE_BASE,1000*(double)FRAME_RATE_BASE/(double)enc->frame_rate);        frame->size = size;        frame->data = av_malloc(size);        memcpy(frame->data,buf,size);        flv->hasVideo = 1;        InsertSorted(flv,frame);        flv->frameCount ++;    }    else if (enc->codec_type == CODEC_TYPE_AUDIO) {#ifdef CONFIG_MP3LAME        if (enc->codec_id == CODEC_ID_MP3 ) {            int c=0;            for (;c<size;c++) {                flv->audioFifo[(flv->audioOutPos+c)%AUDIO_FIFO_SIZE] = buf[c];            }            flv->audioSize += size;            flv->audioOutPos += size;            flv->audioOutPos %= AUDIO_FIFO_SIZE;            if ( flv->initDelay == -1 ) {                flv->initDelay = timestamp;            }//            if ( flv->audioTime == -1 ) {                flv->audioTime = timestamp;//                flv->audioTime = ( ( ( flv->sampleCount - enc->delay ) * 8000 ) / flv->audioRate ) - flv->initDelay - 250;//                if ( flv->audioTime < 0 ) {//                    flv->audioTime = 0;//                }//            }        }        for ( ; flv->audioSize >= 4 ; ) {            int mp3FrameSize = 0;            int mp3SampleRate = 0;            int mp3IsMono = 0;            int mp3SamplesPerFrame = 0;            int c=0;            /* copy out mp3 header from ring buffer */            uint8_t header[4];            for (c=0; c<4; c++) {                header[c] = flv->audioFifo[(flv->audioInPos+c) % AUDIO_FIFO_SIZE];            }            if ( mp3info(header,&mp3FrameSize,&mp3SamplesPerFrame,&mp3SampleRate,&mp3IsMono) ) {                if ( flv->audioSize >= mp3FrameSize ) {                    int soundFormat = 0x22;                    int c=0;                    FLVFrame *frame = av_malloc(sizeof(FLVFrame));//                    flv->audioRate = mp3SampleRate;                    switch (mp3SampleRate) {                        case    44100:                            soundFormat |= 0x0C;                            break;                        case    22050:                            soundFormat |= 0x08;                            break;                        case    11025:                            soundFormat |= 0x04;                            break;                    }                    if ( !mp3IsMono ) {                        soundFormat |= 0x01;                    }                    frame->next = 0;                    frame->type = 8;                    frame->flags = soundFormat;                    frame->timestamp = flv->audioTime;                    frame->timestamp = (1000*flv->sampleCount + mp3SampleRate/2)/(mp3SampleRate);                    frame->size = mp3FrameSize;                    frame->data = av_malloc(mp3FrameSize);                    for (;c<mp3FrameSize;c++) {                        frame->data[c] = flv->audioFifo[(flv->audioInPos+c)%AUDIO_FIFO_SIZE];                    }                    flv->audioInPos += mp3FrameSize;                    flv->audioSize -= mp3FrameSize;                    flv->audioInPos %= AUDIO_FIFO_SIZE;                    flv->sampleCount += mp3SamplesPerFrame;                    flv->audioTime += 1000*mp3SamplesPerFrame/mp3SampleRate;                    // We got audio! Make sure we set this to the global flags on closure                    flv->hasAudio = 1;                    InsertSorted(flv,frame);//                    av_log(NULL,AV_LOG_DEBUG, "insert sound\n");                    continue;                }//                av_log(NULL,AV_LOG_DEBUG, "insuficent data\n");                break;            }            av_log(NULL,AV_LOG_DEBUG, "head trashed\n");            flv->audioInPos ++;            flv->audioSize --;            flv->audioInPos %= AUDIO_FIFO_SIZE;            // no audio in here!            flv->audioTime = -1;        }#endif    }    Dump(flv,pb,128);    put_flush_packet(pb);    return 0;}static AVOutputFormat flv_oformat = {    "flv",    "flv format",    "video/x-flashvideo",    "flv",    sizeof(FLVContext),#ifdef CONFIG_MP3LAME    CODEC_ID_MP3,#else // CONFIG_MP3LAME    CODEC_ID_NONE,#endif // CONFIG_MP3LAME    CODEC_ID_FLV1,    flv_write_header,    flv_write_packet,    flv_write_trailer,};int flvenc_init(void){    av_register_output_format(&flv_oformat);    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷精品久久二区二区蜜臂av| 国产日韩综合av| 国产日韩高清在线| 亚洲成人一区在线| 91首页免费视频| 国产拍欧美日韩视频二区| 日本最新不卡在线| 在线免费视频一区二区| 欧美国产成人在线| 国产一区二区三区黄视频 | 亚洲成在线观看| 从欧美一区二区三区| 精品欧美一区二区在线观看| 亚洲一区二区高清| 精品国产乱码久久久久久久| 亚洲欧美成人一区二区三区| 国产精品1区2区3区在线观看| 91精品国产综合久久国产大片| 亚洲精品久久久蜜桃| 成人激情午夜影院| 欧美国产一区视频在线观看| 日韩av在线免费观看不卡| 欧美做爰猛烈大尺度电影无法无天| 成人免费在线视频| 不卡一区二区在线| 国产欧美日韩亚州综合| 从欧美一区二区三区| 中文字幕精品一区| 99精品国产91久久久久久| 国产精品久久毛片av大全日韩| 国产风韵犹存在线视精品| 亚洲精品一区二区在线观看| 极品少妇一区二区三区精品视频| 日韩一区国产二区欧美三区| 久久99在线观看| 久久久久久毛片| 丁香网亚洲国际| 综合自拍亚洲综合图不卡区| 91老司机福利 在线| 亚洲免费av高清| 欧美日韩精品欧美日韩精品一| 亚洲亚洲人成综合网络| 6080yy午夜一二三区久久| 欧美a一区二区| 久久久99精品久久| 不卡大黄网站免费看| 一区二区三区欧美| 欧美欧美欧美欧美首页| 国内成人免费视频| 国产精品灌醉下药二区| 欧美在线色视频| 久久精品国产免费看久久精品| 久久久精品人体av艺术| heyzo一本久久综合| 亚洲精品免费看| 日韩午夜在线影院| 成人h版在线观看| 亚洲国产成人高清精品| www国产精品av| 91麻豆精东视频| 蜜桃视频第一区免费观看| 久久精品人人做人人爽人人| 日本道在线观看一区二区| 青娱乐精品视频在线| 国产精品麻豆久久久| 欧美日韩国产另类一区| 成人小视频在线| 亚洲高清久久久| 中文字幕精品综合| 欧美一区二区在线免费播放| 成人午夜免费av| 日本欧美在线看| 亚洲色图一区二区| 日韩精品一区二区三区在线| 91美女片黄在线观看| 九九九久久久精品| 亚洲v精品v日韩v欧美v专区| 欧美国产在线观看| 欧美成人精品福利| 欧美午夜精品一区二区蜜桃| 成人免费黄色在线| 老司机免费视频一区二区| 一区二区国产视频| 国产精品私人自拍| 日韩av中文字幕一区二区三区| 国产欧美一区二区三区沐欲| 欧美优质美女网站| 国产成人av在线影院| 婷婷开心久久网| 亚洲美女屁股眼交| 国产精品视频你懂的| 日韩精品一区二区三区中文不卡| 91视频免费看| 成人av资源站| 国产伦精品一区二区三区在线观看| 亚洲成人免费在线观看| 亚洲天天做日日做天天谢日日欢| 久久久精品tv| 精品免费日韩av| 欧美一区二区不卡视频| 欧美天堂亚洲电影院在线播放| av不卡免费在线观看| 国产乱国产乱300精品| 麻豆精品一区二区综合av| 午夜av一区二区| 亚洲电影欧美电影有声小说| 日韩一区二区在线观看视频播放 | 日韩精品免费专区| 国产精品久久久久7777按摩| 国产偷国产偷精品高清尤物| 欧美一级夜夜爽| 制服.丝袜.亚洲.中文.综合| 精品视频在线看| 欧美私模裸体表演在线观看| 色综合久久中文字幕| 91麻豆国产自产在线观看| av一区二区不卡| 99国产精品久久| 色婷婷亚洲精品| 欧美私模裸体表演在线观看| 欧美日韩国产美| 777久久久精品| 日韩精品中午字幕| 精品国产乱码久久久久久久久 | 日韩欧美成人一区二区| 26uuu成人网一区二区三区| 国产精品每日更新在线播放网址| 久久久久久久久久久电影| 国产亚洲精品资源在线26u| 久久久www成人免费无遮挡大片| 国产日韩欧美a| 亚洲免费观看高清完整版在线观看 | 视频一区视频二区在线观看| 日本女人一区二区三区| 麻豆高清免费国产一区| 国产精品综合一区二区三区| 成人va在线观看| 欧美日韩精品一区二区三区四区| 91精品国产欧美日韩| 久久精品免费在线观看| 亚洲另类春色校园小说| 石原莉奈在线亚洲二区| 国产一区二区女| 91香蕉国产在线观看软件| 在线成人免费视频| 久久精品人人爽人人爽| 夜夜嗨av一区二区三区四季av| 婷婷六月综合网| 成人午夜精品一区二区三区| 欧美三级韩国三级日本三斤| 久久亚洲私人国产精品va媚药| 综合婷婷亚洲小说| 伦理电影国产精品| av不卡免费在线观看| 日韩小视频在线观看专区| 国产精品超碰97尤物18| 欧美aⅴ一区二区三区视频| 成人av网址在线| 欧美高清视频不卡网| 国产精品情趣视频| 久久精品久久精品| 色视频欧美一区二区三区| 精品剧情v国产在线观看在线| 中文字幕日韩一区| 国内国产精品久久| 51久久夜色精品国产麻豆| 国产精品毛片大码女人| 麻豆精品新av中文字幕| 在线精品亚洲一区二区不卡| 久久久精品日韩欧美| 日本不卡在线视频| 欧洲日韩一区二区三区| 中文字幕av资源一区| 精品一区精品二区高清| 欧美日韩免费不卡视频一区二区三区| 国产网红主播福利一区二区| 麻豆成人免费电影| 欧美精三区欧美精三区| 亚洲一区二区三区影院| 风间由美一区二区av101 | 日韩欧美亚洲另类制服综合在线| 亚洲日本电影在线| 成人免费毛片a| 国产丝袜欧美中文另类| 久久av资源网| 日韩欧美一区二区视频| 一区二区三区欧美久久| 91亚洲国产成人精品一区二区三| 国产亚洲一区二区三区在线观看| 麻豆国产精品一区二区三区| 欧美精品tushy高清| 视频在线在亚洲| 51精品秘密在线观看| 日韩精品成人一区二区三区| 精品视频资源站| 日本亚洲视频在线| 91精品久久久久久久91蜜桃| 首页国产欧美久久| 日韩一区二区视频| 久久99久久99|