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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? mpeg.c

?? 瑞星微公司RK27XX系列芯片的SDK開(kāi)發(fā)包
?? C
字號(hào):

/* mpeg.c, main(), initialization, option processing                    */


//#include <stdio.h>
//#include <stdlib.h>
#include <ctype.h>
//#include <fcntl.h>
#include <string.h>

#define GLOBAL
#include "mpg_config.h"
#include "mpg_global.h"

/* private prototypes */
static int  Headers _ANSI_ARGS_((void));
int MpegVideoReadData(char *buffer, int size);
extern int Get_Seq_Hdr();

static void Set_Options();

#if 0
int main(argc, argv)
int argc;
char *argv[];
{
    int code, i = 0, readSize;
    char filename[300];
    FILE *pfVideoOut;
    char bitsBfr[4096];

    Set_Options();

    if (argc > 1)
    {
        /* open MPEG base layer bitstream file(s) */
        /* NOTE: this is either a base layer stream or a spatial enhancement stream */
        base.Infile = fopen(argv[1], "rb");
        if (!base.Infile)
        {
            fprintf(stderr, "Base layer input file %s not found\n", argv[1]);
            exit(1);
        }
        Main_Bitstream_Filename = argv[1];
    }
    else
    {
        printf("Usage: mpeg2decode Options: file \n");
        exit(0);
    }

    ld = &base; /* select base layer context */

    if (base.Infile != 0)
    {
        Initialize_Buffer();

        if (Show_Bits(8) == 0x47)
        {
            sprintf(Error_Text, "Decoder currently does not parse transport streams\n");
            Error(Error_Text);
        }

        next_start_code();
        code = Show_Bits(32);

        switch (code)
        {
            case SEQUENCE_HEADER_CODE:
                break;
            case PACK_START_CODE:
                System_Stream_Flag = 1;
            case VIDEO_ELEMENTARY_STREAM:
                System_Stream_Flag = 1;
                break;
            default:
                sprintf(Error_Text, "Unable to recognize stream type\n");
                Error(Error_Text);
                break;
        }

    }

    fseek(base.Infile, 0l, SEEK_SET);

    ld->Incnt = 0;
    ld->Rdptr = ld->Rdbfr + 2048;
    ld->Rdmax = ld->Rdptr;

    //  Get_Hdr();

    if (System_Stream_Flag)
    {
        sprintf(filename, "%s_demux.vid", Main_Bitstream_Filename);
        pfVideoOut = fopen(filename, "wb");

        while (!feof(base.Infile))
        {
#if 1
            if (readSize = MpegVideoReadData(bitsBfr, 4096))
            {
                fwrite(bitsBfr, 1, readSize, pfVideoOut);
                if ((++i) == 3811)
                    i = 0;
                if (readSize < 4096)
                    break;
            }
            else
            {
                break;
            }
#else
            Next_Packet();
            if ((ld->Rdbfr[0] == SEQUENCE_END_CODE >> 24)
                    && (ld->Rdbfr[1] = SEQUENCE_END_CODE >> 16)
                    && (ld->Rdbfr[2] = SEQUENCE_END_CODE >> 8)
                    && (ld->Rdbfr[3] = SEQUENCE_END_CODE & 0xff))
                break;
            if (ld->Rdmax > ld->Rdbfr + 2048)
            {
                fwrite(ld->Rdptr, 1, ld->Rdbfr + 2048 - ld->Rdptr, pfVideoOut);

                while ((ld->Rdmax - (ld->Rdbfr + 2048)) > 2048)
                {
                    fread(ld->Rdbfr, 1, 2048, ld->Infile);
                    fwrite(ld->Rdbfr, 1, 2048, pfVideoOut);
                    ld->Rdmax -= 2048;
                }
                fread(ld->Rdbfr, 1, (ld->Rdmax - (ld->Rdbfr + 2048)), ld->Infile);
                fwrite(ld->Rdbfr, 1, (ld->Rdmax - (ld->Rdbfr + 2048)), pfVideoOut);

                ld->Rdptr = ld->Rdbfr + 2048;
            }
            else
            {
                fwrite(ld->Rdptr, 1, ld->Rdmax - ld->Rdptr, pfVideoOut);
                ld->Rdptr = ld->Rdmax;
            }

#endif
        }
    }
    //ret = Decode_Bitstream();

    fclose(base.Infile);
    fclose(pfVideoOut);
    return 0;
}
#endif

static __inline void MpegGetDuration()
{
    int sizeToGetDur = 204800;

    //dts_orig = pts_orig = 0;
    mpeg.startTime = 0;
    pts_dts_orig_flag = 0;

    fseek(base.Infile, 0, SEEK_SET);
    Initialize_Buffer(ld);
    while ((pts_dts_orig_flag == 0) && (!Fault_Flag))
        Headers();

    fseek(base.Infile, 0, SEEK_END);
    mpeg.filesize = ftell(base.Infile);

retry:
    Fault_Flag = 0;
    sizeToGetDur += 102400;
    if ((sizeToGetDur != 204800) && (sizeToGetDur > 2048000))
        return;
    if (mpeg.filesize > sizeToGetDur)
        fseek(base.Infile, mpeg.filesize - sizeToGetDur, SEEK_SET);
    else
        fseek(base.Infile, 0, SEEK_SET);

    Initialize_Buffer(ld);
    if (Fault_Flag)
    {
        goto retry;
    }

    while (!Fault_Flag)
        Headers();
    if (mpeg.curTime == mpeg.startTime)
    {
        goto retry;
    }

    mpeg.duration = mpeg.curTime - mpeg.startTime;
}


int MpegDemuxInit(FILE *pfMain)
{
    int code, i = 0, seq_flag = 0;

    Set_Options();

    base.Infile = pfMain;

    ld = &base;

    System_Stream_Flag = 0;
    Fault_Flag = 0;

    Initialize_Buffer(ld);

    if (Show_Bits(ld, 8) == 0x47)
    {
        Fault_Flag = 1;
        return -1;
    }

    do
    {
        next_start_code(ld);
        code = Show_Bits(ld, 32);

        switch (code)
        {
            case SEQUENCE_HEADER_CODE:
                seq_flag = 1;
                //return 1;
                break;
            case PACK_START_CODE:
                System_Stream_Flag = 1;
            case VIDEO_ELEMENTARY_STREAM:
                System_Stream_Flag = 1;
                break;
            default:
                Flush_Buffer32(ld);
                //Fault_Flag = 1;
                //return 1;
                break;
        }

        if (seq_flag)  /* we have seq header */
            break;
        else if (i++ > 3)
            return 1;
    }
    while (!System_Stream_Flag);

    if (System_Stream_Flag)
    {
        MpegGetDuration();
        Fault_Flag = 0;
    }

    mpeg.curTime = 0;
    fseek(base.Infile, 0l, SEEK_SET);
    Initialize_Buffer(ld);
    if (!Get_Seq_Hdr())
        return -1;

    if (!Get_Hdr())
        return -1;

    /* check chroma format */
    if (chroma_format && (chroma_format != CHROMA420))
        return -1;
   // if (ld->MPEG2_Flag)
     //   return -1;

    ld->Incnt = 0;
    ld->Rdptr = ld->Rdbfr + 2048;
    ld->Rdmax = ld->Rdptr;
    fseek(base.Infile, 0l, SEEK_SET);
    mpeg.curTime = 0;

    return 0;
}

int MpegDemuxAudioInit(FILE *pfMain)
{
    if (!System_Stream_Flag)
        return 0;

    audiobase.Infile = pfMain;
    ld2 = &audiobase;
    Fault_Flag = 0;

    fseek(audiobase.Infile, 0l, SEEK_SET);
    Initialize_Buffer(ld2);
    Next_PacketAudio();
    /*    pfAuBits = fopen("D:\\audio.mp2", "wb" );
        while(1){
            if(MpegAudioGetDataToSDRAM(&mpeg, buffer, 2048) < 2048)
                break;
            RKFSFileWrite(buffer, 2048, pfAuBits);
        }
        RKFSFileClose(pfAuBits);*/
    fseek(audiobase.Infile, 0l, SEEK_SET);
    Initialize_Buffer(ld2);
    return 0;
}

int MpegVideoCheckFrameEnd(char *buffer, int fromPos, int endpos)
{
    int i, codeword = 0xffffffff;
    for (i = fromPos; i < endpos; i++)
    {
        codeword = (codeword << 8) | (buffer[i]);
        if (codeword == PICTURE_START_CODE)//SEQUENCE_HEADER_CODE)//||codeword==GROUP_START_CODE||codeword==PICTURE_START_CODE)
            break;
    }
    if (i == endpos)
        i = -1;
    return i;   //(i > 4)?(i - 4):0;
}

int MpegVideoReadData(char *buffer, int size)
{
    static int skipcnt = 0;
    int getBytes = 0, endPos, fromPos;
    int i;
    double skiplen;

    if (!System_Stream_Flag)
    {
        getBytes += fread(&buffer[getBytes], 1, size, ld->Infile);
        return getBytes;
    }
    while (1)
    {
        if ((ld->Rdptr >= ld->Rdmax))
        {
            Next_Packet(0);
            while (ld->Rdptr >= ld->Rdbfr + 2048)
            {
                if (fread(ld->Rdbfr, 1, 2048, ld->Infile) < 2048)
                {
                    Fault_Flag = 1;
                }
                ld->Rdptr -= 2048;
                ld->Rdmax -= 2048;
            }
            if (Fault_Flag)
                return getBytes;
        }
        if (size <= (ld->Rdmax - ld->Rdptr))
        {
            fromPos = getBytes;
            if (((ld->Rdmax >= ld->Rdbfr + 2048) && (size <= (ld->Rdbfr + 2048 - ld->Rdptr)))
                    || (ld->Rdmax < ld->Rdbfr + 2048))
            {
                memcpy(&buffer[getBytes], ld->Rdptr, size);
                getBytes += size;
                ld->Rdptr += size;
            }
            else
            {
                memcpy(&buffer[getBytes], ld->Rdptr, (ld->Rdbfr + 2048 - ld->Rdptr));
                getBytes += (ld->Rdbfr + 2048 - ld->Rdptr);
                size -= (ld->Rdbfr + 2048 - ld->Rdptr);
                ld->Rdptr = ld->Rdbfr + 2048;

                fread(&buffer[getBytes], 1, size, ld->Infile);
                getBytes += size;
                ld->Rdmax -= size;
            }
            size -= size;
            if (mpeg.skipFlag == MPEG_SKIP_FLAG_END)
            {
                goto seek_to;
            }
            else
            {
                return getBytes;
            }
        }
        else
        {
            fromPos = getBytes;
            if (ld->Rdmax > ld->Rdbfr + 2048)
            {
                memcpy(&buffer[getBytes], ld->Rdptr, (ld->Rdbfr + 2048 - ld->Rdptr));
                getBytes += (ld->Rdbfr + 2048 - ld->Rdptr);
                size -= (ld->Rdbfr + 2048 - ld->Rdptr);
                ld->Rdptr = ld->Rdbfr + 2048;

                fread(&buffer[getBytes], 1, ld->Rdmax - (ld->Rdbfr + 2048), ld->Infile);
                getBytes += ld->Rdmax - (ld->Rdbfr + 2048);
                size -= ld->Rdmax - (ld->Rdbfr + 2048);
                ld->Rdmax = ld->Rdptr;

            }
            else
            {
                memcpy(&buffer[getBytes], ld->Rdptr, (ld->Rdmax - ld->Rdptr));
                getBytes += (ld->Rdmax - ld->Rdptr);
                size -= (ld->Rdmax - ld->Rdptr);
                ld->Rdptr = ld->Rdmax;
            }

            if (mpeg.skipFlag == MPEG_SKIP_FLAG_END)
            {
                goto seek_to;
            }
            else
            {
                continue;
            }
        }

seek_to:
        if ((endPos = MpegVideoCheckFrameEnd(buffer, fromPos, getBytes)) > 0)
        {
            if (mpeg.duration > 0)
            {
                skiplen = (double)mpeg.seekTime * mpeg.filesize / mpeg.duration;
                ld->Rdptr = ld->Rdbfr + 2048;
                ld->Rdmax = ld->Rdptr;
                ld->Incnt = 0;
                fseek(ld->Infile, skiplen, SEEK_SET);
                mpeg.curTime = mpeg.seekTime;
                Get_GOP_Hdr();
                buffer[endPos] = 0xb8;
                size += (getBytes - endPos - 1);
                getBytes = endPos + 1;
                MpegSynAudio2Video(&mpeg);
            }
            mpeg.skipFlag = MPEG_SKIP_FLAG_NONE;
        }
        else if (size == 0)
            return getBytes;
    }
}

int MpegAudioGetDataToSDRAM(MpegDemux *mpeg, char *buffer, DWORD size)
{
    int getBytes = 0;

    if (!System_Stream_Flag)
    {
        getBytes += fread(&buffer[getBytes], 1, size, ld2->Infile);
        goto get_end;
    }

    while (1)
    {
        if ((ld2->Rdptr >= ld2->Rdmax))
        {
            Next_PacketAudio();
            while (ld2->Rdptr >= ld2->Rdbfr + 2048)
            {
                if (fread(ld2->Rdbfr, 1, 2048, ld2->Infile) < 2048)
                {
                    Fault_Flag = 1;
                }
                ld2->Rdptr -= 2048;
                ld2->Rdmax -= 2048;
            }
            if (Fault_Flag)
                goto get_end;
        }
        if (size <= (ld2->Rdmax - ld2->Rdptr))
        {
            if (((ld2->Rdmax >= ld2->Rdbfr + 2048) && (size <= (ld2->Rdbfr + 2048 - ld2->Rdptr)))
                    || (ld2->Rdmax < ld2->Rdbfr + 2048))
            {
                memcpy(&buffer[getBytes], ld2->Rdptr, size);
                getBytes += size;
                ld2->Rdptr += size;
            }
            else
            {
                memcpy(&buffer[getBytes], ld2->Rdptr, (ld2->Rdbfr + 2048 - ld2->Rdptr));
                getBytes += (ld2->Rdbfr + 2048 - ld2->Rdptr);
                size -= (ld2->Rdbfr + 2048 - ld2->Rdptr);
                ld2->Rdptr = ld2->Rdbfr + 2048;

                fread(&buffer[getBytes], 1, size, ld2->Infile);
                getBytes += size;
                ld2->Rdmax -= size;
            }
            size -= size;
            goto get_end;
        }
        else
        {
            if (ld2->Rdmax > ld2->Rdbfr + 2048)
            {
                memcpy(&buffer[getBytes], ld2->Rdptr, (ld2->Rdbfr + 2048 - ld2->Rdptr));
                getBytes += (ld2->Rdbfr + 2048 - ld2->Rdptr);
                size -= (ld2->Rdbfr + 2048 - ld2->Rdptr);
                ld2->Rdptr = ld2->Rdbfr + 2048;

                fread(&buffer[getBytes], 1, ld2->Rdmax - (ld2->Rdbfr + 2048), ld2->Infile);
                getBytes += ld2->Rdmax - (ld2->Rdbfr + 2048);
                size -= ld2->Rdmax - (ld2->Rdbfr + 2048);
                ld2->Rdmax = ld2->Rdptr;
            }
            else
            {
                memcpy(&buffer[getBytes], ld2->Rdptr, (ld2->Rdmax - ld2->Rdptr));
                getBytes += (ld2->Rdmax - ld2->Rdptr);
                size -= (ld2->Rdmax - ld2->Rdptr);
                ld2->Rdptr = ld2->Rdmax;
            }
        }
    }

get_end:
    Fault_Flag = 0;
    return getBytes;
}

void Error(void)
{
    Fault_Flag = 1;
}

static int Headers()
{
    int ret;

    ld = &base;


    /* return when end of sequence (0) or picture
       header has been parsed (1) */

    ret = Get_Hdr();

    return ret;
}

static void Set_Options()
{
#ifdef VERBOSE
    Verbose_Flag = 7;
#endif

    Fault_Flag = 0;
    System_Stream_Flag = 0;

    chroma_format = 0;
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区免费视频| 欧美日韩免费在线视频| 日韩一区二区免费在线观看| 国产成人午夜高潮毛片| 亚洲一线二线三线视频| 日韩免费电影一区| 成人听书哪个软件好| 高清国产一区二区三区| 亚洲欧美自拍偷拍| 丁香亚洲综合激情啪啪综合| 欧美一区日韩一区| 欧美精品久久一区二区三区| 精品一二三四区| 久久精品视频一区| 91久久免费观看| 91在线精品一区二区| 麻豆高清免费国产一区| 亚洲国产成人高清精品| 国产精品二区一区二区aⅴ污介绍| 日韩精品一区二区三区老鸭窝| 色婷婷精品大在线视频| 成人美女在线观看| 国产成人亚洲精品青草天美| 国产一区二区中文字幕| 国产精品久久久久久户外露出| 蜜桃视频在线观看一区二区| 亚洲一本大道在线| 日产精品久久久久久久性色| 日本伊人精品一区二区三区观看方式| 日韩电影在线一区二区三区| 国产一本一道久久香蕉| 欧美伊人久久大香线蕉综合69| 在线视频中文字幕一区二区| 3d动漫精品啪啪一区二区竹菊| 久久久久综合网| 综合网在线视频| 欧美精品国产精品| 91精品国产综合久久精品| 国产亚洲精品久| 亚洲综合一区二区精品导航| 午夜久久久久久电影| 国产一区二区在线看| 欧美日韩在线免费视频| 欧美国产丝袜视频| 欧洲国产伦久久久久久久| 国产成人免费视频网站| 欧美一二三四区在线| 亚洲图片欧美色图| 色综合视频一区二区三区高清| 欧美疯狂性受xxxxx喷水图片| 久久成人免费日本黄色| 欧美电影在线免费观看| 亚洲激情在线激情| 丁香婷婷综合网| 一区二区三区在线视频播放| 国产精品正在播放| 精品久久一区二区| 久久疯狂做爰流白浆xx| 日韩欧美在线不卡| 久久精品国产秦先生| 91精品在线一区二区| 亚洲高清免费观看高清完整版在线观看 | 福利一区二区在线观看| 国产三级三级三级精品8ⅰ区| 国产一区二区三区四区五区入口| 日韩欧美国产一区二区三区| 久久国产精品99久久人人澡| 67194成人在线观看| 日本欧美久久久久免费播放网| 91精品国产入口| 久久99久久精品| 久久九九全国免费| 91美女精品福利| 日本在线不卡一区| 久久品道一品道久久精品| 国产成a人亚洲精品| 亚洲乱码中文字幕| 日韩精品中文字幕在线一区| 亚洲制服欧美中文字幕中文字幕| 国产精品一区二区黑丝| 亚洲色图清纯唯美| 欧美人伦禁忌dvd放荡欲情| 欧美性极品少妇| 久久国产视频网| 国产精品国产三级国产普通话蜜臀 | 91国在线观看| 久久99这里只有精品| 亚洲三级电影网站| 日韩欧美精品三级| 日本高清视频一区二区| 国内精品不卡在线| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品一区二区精华| 91国内精品野花午夜精品| 精品一区二区三区在线观看| 亚洲综合久久久久| 国产精品无圣光一区二区| 中文字幕第一区| 国产凹凸在线观看一区二区| 亚洲人成伊人成综合网小说| 欧美日本国产一区| 日av在线不卡| 91成人网在线| 日本不卡免费在线视频| 亚洲成人av电影在线| 天堂一区二区在线| 国产一区在线观看视频| 国产成人啪午夜精品网站男同| 成人免费va视频| 在线免费观看一区| 日韩限制级电影在线观看| 欧美精品一区二| 国产精品不卡一区二区三区| 亚洲一区二区三区不卡国产欧美| 奇米色777欧美一区二区| 一个色综合网站| 亚洲一区中文日韩| 亚洲精品久久嫩草网站秘色| 亚洲一区二区三区国产| 亚洲欧美日韩中文播放| 国产精品久久久久aaaa樱花| 国产精品灌醉下药二区| 国产精品萝li| 亚洲欧洲av在线| 亚洲欧洲av在线| 亚洲成人资源网| 青青草精品视频| 精品一区二区三区免费| 久草在线在线精品观看| 国产麻豆视频一区二区| 成人一道本在线| 在线免费一区三区| 日韩一级大片在线观看| 欧美—级在线免费片| 亚洲人成7777| 亚洲欧洲一区二区在线播放| 天堂午夜影视日韩欧美一区二区| 日韩在线a电影| 极品瑜伽女神91| 色婷婷av一区二区三区软件| 日韩一级二级三级| 亚洲欧美aⅴ...| 美女www一区二区| 一本在线高清不卡dvd| 精品日韩一区二区三区| 亚洲女同一区二区| 国产一区二三区| 日韩欧美一级精品久久| 亚洲裸体xxx| 国产精品综合av一区二区国产馆| 精品视频一区二区三区免费| 欧美videos大乳护士334| 蜜桃视频一区二区三区在线观看| 欧美日韩免费一区二区三区视频| 1024国产精品| 日韩欧美资源站| 亚洲图片一区二区| 91搞黄在线观看| 亚洲精品国产精品乱码不99| 粉嫩av一区二区三区在线播放| 精品免费国产二区三区| 精品亚洲成av人在线观看| 欧美一区二区三区色| 麻豆精品一区二区av白丝在线| 日韩一区二区视频在线观看| 秋霞午夜av一区二区三区| 精品成人免费观看| 成人av在线资源| 亚洲一区二区三区四区的 | 亚洲免费观看高清完整| 一本一道波多野结衣一区二区| 亚洲欧美激情插 | 日本成人在线看| 久久久久久久综合色一本| 成人深夜福利app| 亚洲成人综合网站| 精品不卡在线视频| 色呦呦一区二区三区| 日本中文字幕不卡| 亚洲欧洲国产日本综合| 6080国产精品一区二区| 99精品国产99久久久久久白柏| 亚洲午夜av在线| 国产女人aaa级久久久级| 7777精品伊人久久久大香线蕉超级流畅 | 丝袜美腿成人在线| 欧美激情一二三区| 91精品国产一区二区| 成人听书哪个软件好| 韩国v欧美v日本v亚洲v| 亚洲丶国产丶欧美一区二区三区| 国产日韩在线不卡| 欧美一区二区三区小说| 欧美做爰猛烈大尺度电影无法无天| 精品无码三级在线观看视频| 天堂成人国产精品一区| 亚洲另类在线视频| 成人免费小视频| 国产精品区一区二区三区| 久久久综合视频|