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

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

?? avifile.c

?? 瑞星微公司RK27XX系列芯片的SDK開發包
?? C
?? 第 1 頁 / 共 5 頁
字號:
        return AVI_FILE_INDX_ERR;
    if (AviGetChunkPointer(aviPointer->VideoData, SIGN_MOVI))
        return AVI_FILE_INDX_ERR;
#endif

#endif

    /* Check audio stream. */
    if (stream_supported_flag.AudioSupportedFlag == FALSE)
    {
        return AVI_FILE_AUDIO_CODEC_ERR;
    }

    return AVI_FILE_PARSING_OK;
}

/********************************************************************************************
 Func:
  AviAudioGetNextChunk()
 Description:
  Get next audio chunk .
 Param:
  AviFilePointer *aviPointer - avi file pointer.
  idx1 *audioChunkInfo - chunk information.
  char *audioBuffer - Buffer for audio data.
 Return:
  0:  Success.
  -1: Get chunk error.
 Author:
  ljn
 Date:
  2007-9-18 9:58
 Log:

********************************************************************************************/
int AviAudioGetNextChunk(AviFilePointer *aviPointer, idx1 *audioChunkInfo, char *audioBuffer)
{
    MY_FILE *pFile = aviPointer->AudioData;

//Get next audio index
    if (AviFread(audioChunkInfo, sizeof(idx1), 1, aviPointer->AudioIndex) < sizeof(idx1))
        return -1;

    /* seek audio index in 'idx1'. */
    //while((audioChunkInfo->dwChunkid & 0xffff0000) != AUDIO_INDEX){
    while (!IS_AUDIO_NO1_IDX(audioChunkInfo->dwChunkid))        //jianhuan
    {
        if (AviFread(audioChunkInfo, sizeof(idx1), 1, aviPointer->AudioIndex) < sizeof(idx1))
            return -1;
    }

    /* update audio position. */
    aviPointer->AudioChunkNum++;
    audioBytePos += audioChunkInfo->dwSize;

//Read data
    /* seek audio data pointer to chunk offset. */
    AviFseek(pFile, audioChunkInfo->dwOffset - aviPointer->Audio->CurOffset - aviPointer->Audio->ReadSize, SEEK_CUR);

    /* read audio data to buffer. */
    if (AviFread(audioBuffer, audioChunkInfo->dwSize, 1, pFile) < audioChunkInfo->dwSize)
        return -1;

    aviPointer->Audio->CurOffset = audioChunkInfo->dwOffset;
    aviPointer->Audio->ReadSize = audioChunkInfo->dwSize;
    return 0;
}

/********************************************************************************************
 Func:
  AviVideoGetNextChunk()
 Description:
  Get next video chunk .
 Param:
  AviFilePointer *aviPointer - avi file pointer.
  idx1 *videoChunkInfo - chunk information.
  char *videoBuffer - Buffer for video data.
 Return:
  0:  Success.
  -1: Get chunk error.
 Author:
  ljn
 Date:
  2007-9-18 10:07
 Log:

********************************************************************************************/
int AviVideoGetNextChunk(AviFilePointer *aviPointer, idx1 *videoChunkInfo, char *videoBuffer)
{

    MY_FILE *pFile = aviPointer->VideoData;

//Get next video index
    if (AviFread(videoChunkInfo, sizeof(idx1), 1, aviPointer->VideoIndex) < sizeof(idx1))
        return -1;
    aviPointer->TotalChunkNum++;

    /* seek video index. */
    while (!IS_VIDEO_IDX(videoChunkInfo->dwChunkid))
    {
        aviPointer->TotalChunkNum++;
        if (AviFread(videoChunkInfo, sizeof(idx1), 1, aviPointer->VideoIndex) < sizeof(idx1))
            return -1;
    }
    aviPointer->VideoChunkNum++;

    /* Save key frame information. */
    if ((videoChunkInfo->dwFlags & 0x00000010) == 0x10)
    {
#ifndef  SEEK_TABLE
        keyFrameList[aviPointer->KeyFrameNum].dwSize = videoChunkInfo->dwSize;
        keyFrameList[aviPointer->KeyFrameNum].dwOffset = videoChunkInfo->dwOffset;
#ifndef ON_RKFS
        keyFrameList[aviPointer->KeyFrameNum].dwNumber = aviPointer->TotalChunkNum;
#else
        keyFrameList[aviPointer->KeyFrameNum].dwNumber = ((aviPointer->VideoIndex->Offset - idx1Pos.Offset) >> 4);
#endif
        keyFrameList[aviPointer->KeyFrameNum].dwVideoFrameNum = aviPointer->VideoChunkNum;
#endif
        aviPointer->KeyFrameNum++;
    }

    /* ND frame process. */
    if (videoChunkInfo->dwSize == 0)    //ND Frame
    {
//  videoChunkInfo->dwSize = 3;
//  videoBuffer[0] = 'N';
//  videoBuffer[1] = 'D';
//  videoBuffer[2] = 'F';
        return 0;
    }

    /* seek to chunk offset. */
    AviFseek(pFile, videoChunkInfo->dwOffset - aviPointer->Video->CurOffset - aviPointer->Video->ReadSize, SEEK_CUR);

    /* read video data to buffer. */
    if (AviFread(videoBuffer, videoChunkInfo->dwSize, 1, pFile) < videoChunkInfo->dwSize)
        return -1;

    aviPointer->Video->CurOffset = videoChunkInfo->dwOffset;
    aviPointer->Video->ReadSize = videoChunkInfo->dwSize;
    return 0;
}


/********************************************************************************************
 Func:
  AviVideoGetNextIChunk()
 Description:
  Get next video key frame.
 Param:
  AviFilePointer *aviPointer - avi file pointer.
  idx1 *videoChunkInfo - chunk information.
  char *videoBuffer - Buffer for video data.
 Return:
  0:  Success.
  -1: Get chunk error.
 Author:
  ljn
 Date:
  2007-9-18 10:18
 Log:

********************************************************************************************/
int AviVideoGetNextIChunk(AviFilePointer *aviPointer, idx1 *videoChunkInfo, char *videoBuffer, unsigned int step)
{

    MY_FILE *pFile = aviPointer->VideoData;
    int tempFrameNum, i, readNum = AVI_CHUNK_LIST_NUM;
    idx1 tempInfo;
    idx1 *videoIChunkInfo = &tempInfo;

    if (beingSkip && (step != AVI_FFD_FFW_RESUME_FLAG))
        return 0;

    aviPointer->TotalChunkNum = ((aviPointer->VideoIndex->Offset - idx1Pos.Offset) >> 4);
    if (!lastSkipPoint)
    {
        lastSkipPoint = aviPointer->VideoChunkNum;
    }

#ifdef  SEEK_TABLE
    if ((aviPointer->KeyFrameNum >= (totalKeyFrmNum - 1)) && (step != AVI_FFD_FFW_RESUME_FLAG))
        return -1;
    aviPointer->KeyFrameNum ++;
    while ((aviPointer->KeyFrameNum < (totalKeyFrmNum - 1)) && ((int)((int)(keyFrameList[aviPointer->KeyFrameNum - 1].dwVideoFrameNum) - (int)lastSkipPoint) < (int)step))
    {
        aviPointer->KeyFrameNum ++;
    }
    if (aviPointer->KeyFrameNum > totalKeyFrmNum)
        aviPointer->KeyFrameNum = totalKeyFrmNum;
    /* prevent video application from exiting soon.  */
    /*while((avih.dwTotalFrames - keyFrameList[aviPointer->KeyFrameNum-1].dwVideoFrameNum) < 80){
        aviPointer->KeyFrameNum --;
    }*/
    videoIChunkInfo->dwSize = keyFrameList[aviPointer->KeyFrameNum-1].dwSize;
    videoIChunkInfo->dwOffset = keyFrameList[aviPointer->KeyFrameNum-1].dwOffset;
    aviPointer->TotalChunkNum = keyFrameList[aviPointer->KeyFrameNum-1].dwNumber;
    aviPointer->VideoChunkNum = keyFrameList[aviPointer->KeyFrameNum-1].dwVideoFrameNum;

    AviFseek(aviPointer->VideoIndex, ((int)(idx1Pos.Offset + keyFrameList[aviPointer->KeyFrameNum-1].dwNumber*sizeof(idx1)) - (int)aviPointer->VideoIndex->Offset), SEEK_CUR);
#else   /* no seek table */
#if 1
    while (readNum > 2)
    {
        while (((int)(step + lastSkipPoint) - (int)aviPointer->VideoChunkNum) > (int)readNum)
        {
            if ((AviFread(chunkList, 1, sizeof(idx1)*readNum, aviPointer->VideoIndex)) < (sizeof(idx1)*readNum))
                return -1;
            for (i = 0; i < readNum; i++)
            {
                aviPointer->TotalChunkNum ++;
                if (IS_VIDEO_IDX(chunkList[i].dwChunkid))
                {
                    aviPointer->VideoChunkNum++;
                    if (((chunkList[i].dwFlags & 0x00000010) == 0x10))
                    {
                        keyFrameList[aviPointer->KeyFrameNum].dwSize = chunkList[i].dwSize;
                        keyFrameList[aviPointer->KeyFrameNum].dwOffset = chunkList[i].dwOffset;
#if 1   //#ifndef ON_RKFS
                        keyFrameList[aviPointer->KeyFrameNum].dwNumber = aviPointer->TotalChunkNum;
#else
                        keyFrameList[aviPointer->KeyFrameNum].dwNumber = ((aviPointer->VideoIndex->Offset - idx1Pos.Offset) >> 4);
#endif
                        keyFrameList[aviPointer->KeyFrameNum].dwVideoFrameNum = aviPointer->VideoChunkNum;
                        aviPointer->KeyFrameNum++;
                    }
                }
            }
        }
        readNum -= 2;
    }
#endif
    do
    {
//Get next video index
        if (AviFread(videoIChunkInfo, sizeof(idx1), 1, aviPointer->VideoIndex) < sizeof(idx1))
            return -1;
        aviPointer->TotalChunkNum++;
        if (IS_VIDEO_IDX(videoIChunkInfo->dwChunkid))  //(((videoIChunkInfo->dwChunkid & 0xffff0000) == VIDEO_INDEX))
            aviPointer->VideoChunkNum++;

        while ((!IS_VIDEO_IDX(videoIChunkInfo->dwChunkid)) || ((videoIChunkInfo->dwFlags & 0x00000010) != 0x10)) //(((videoIChunkInfo->dwChunkid & 0xffff0000) != VIDEO_INDEX)||
        {
            //if(((videoIChunkInfo->dwChunkid & 0xffff0000) != VIDEO_INDEX)&&((videoIChunkInfo->dwChunkid & 0xffff0000) != AUDIO_INDEX))
            //    return -1;
            if (aviPointer->VideoChunkNum >= (avih.dwTotalFrames - 1))
                return -1;
            if ((AviFread(videoIChunkInfo, sizeof(idx1), 1, aviPointer->VideoIndex)) < sizeof(idx1))
                return -1;
            aviPointer->TotalChunkNum++;
            if (IS_VIDEO_IDX(videoIChunkInfo->dwChunkid))   //(((videoIChunkInfo->dwChunkid & 0xffff0000) == VIDEO_INDEX))
                aviPointer->VideoChunkNum++;
        }

        keyFrameList[aviPointer->KeyFrameNum].dwSize = videoIChunkInfo->dwSize;
        keyFrameList[aviPointer->KeyFrameNum].dwOffset = videoIChunkInfo->dwOffset;
#ifndef ON_RKFS
        keyFrameList[aviPointer->KeyFrameNum].dwNumber = aviPointer->TotalChunkNum;
#else
        keyFrameList[aviPointer->KeyFrameNum].dwNumber = ((aviPointer->VideoIndex->Offset - idx1Pos.Offset) >> 4);
#endif
        keyFrameList[aviPointer->KeyFrameNum].dwVideoFrameNum = aviPointer->VideoChunkNum;
        aviPointer->KeyFrameNum++;
    }
    while (((int)((int)(keyFrameList[aviPointer->KeyFrameNum - 1].dwVideoFrameNum) - (int)lastSkipPoint) < (int)step));
#endif

    lastSkipPoint = aviPointer->VideoChunkNum;
    videoChunkSkipTo.ReadSize = 0;
    videoChunkSkipTo.CurOffset = videoIChunkInfo->dwOffset;
    videoChunkSkipTo.CurChunkSize = videoIChunkInfo->dwSize;
    beingSkip = AVI_FRAME_SKIP_FFD_FFW;  //skip mode 2 @ LJN
    if (step == AVI_FFD_FFW_RESUME_FLAG)
    {
#ifdef ON_RKFS
        aviPointer->Video->ReadSize = 0;
        aviPointer->Video->CurOffset = videoIChunkInfo->dwOffset;
        aviPointer->Video->CurChunkSize = videoIChunkInfo->dwSize;
        dstIndexPos.Clus = aviPointer->VideoIndex->Clus;
        dstIndexPos.Offset = aviPointer->VideoIndex->Offset;
        beingSkip = AVI_FRAME_SKIP_NONE;  //skip mode 2@LJN
        skipResume = AVI_RESUME_FIRST_CHUNK;
        AviFseek(aviPointer->VideoData, (long)(moviPos.Offset + aviPointer->Video->CurOffset + aviPointer->Video->ReadSize) - (long)(aviPointer->VideoData->Offset), SEEK_CUR);
#else
        aviPointer->Video->ReadSize = aviPointer->Video->CurChunkSize;
        AviFseek(aviPointer->VideoData, aviPointer->Video->CurChunkSize - aviPointer->Video->ReadSize, SEEK_CUR);
#endif
        lastSkipPoint = 0;
    }
    return 0;
}


/********************************************************************************************
 Func:
  AviVideoGetPreIChunk()
 Description:
  Get Pre video key frame.
 Param:
  AviFilePointer *aviPointer - avi file pointer.
  idx1 *videoChunkInfo - chunk information.
  char *videoBuffer - Buffer for video data.
 Return:
  0:  Success.
  -1: Get chunk error.
 Author:
  ljn
 Date:
  2007-9-18 10:28
 Log:

********************************************************************************************/
int AviVideoGetPreIChunk(AviFilePointer *aviPointer, idx1 *videoChunkInfo, char *videoBuffer, unsigned int step)
{

    MY_FILE *pFile = aviPointer->VideoData;
    DWORD riffType;
    int tempFrameNum, i, dstDataPos;

    if (beingSkip && (step != AVI_FFD_FFW_RESUME_FLAG))
        return 0;

#if 0
//Get next video index use fseek
    AviFseek(aviPointer->VideoIndex, (0 - sizeof(idx1) - sizeof(idx1)), SEEK_CUR);
    if (AviFread(videoChunkInfo, sizeof(idx1), 1, aviPointer->VideoIndex) < sizeof(idx1))return -1;
    while ((!IS_VIDEO_IDX(videoIChunkInfo->dwChunkid)) ||     //(((videoChunkInfo->dwChunkid & 0xffff0000) != VIDEO_INDEX)||
            ((videoChunkInfo->dwFlags & 0x00000010) != 0x10))
    {
        AviFseek(aviPointer->VideoIndex, (0 - sizeof(idx1) - sizeof(idx1)), SEEK_CUR);
        if (AviFread(videoChunkInfo, sizeof(idx1), 1, aviPointer->VideoIndex) < sizeof(idx1))return -1;
    }
#else // no fseek
    if (aviPointer->KeyFrameNum < 1)
        return -1;
    if (aviPointer->KeyFrameNum > 1)
        aviPointer->KeyFrameNum --;

    if (!lastSkipPoint)
    {
        lastSkipPoint = aviPointer->VideoChunkNum;
    }
    while ((aviPointer->KeyFrameNum > 1) && (((int)lastSkipPoint - (int)keyFrameList[aviPointer->KeyFrameNum].dwVideoFrameNum) < (int)step))
    {
        aviPointer->KeyFrameNum --;
    }

    videoChunkInfo->dwSize = keyFrameList[aviPointer->KeyFrameNum-1].dwSize;
    videoChunkInfo->dwOffset = keyFrameList[aviPointer->KeyFrameNum-1].dwOffset;
    aviPointer->TotalChunkNum = keyFrameList[aviPointer->KeyFrameNum-1].dwNumber;
    aviPointer->VideoChunkNum = keyFrameList[aviPointer->KeyFrameNum-1].dwVideoFrameNum;

//get file pointer of 'idx1' for video
#ifdef ON_RKFS
    AviFastFseek(aviPointer->VideoIndex, idx1Pos.Offset, idx1Pos.Clus);
#else
    if (AviGetChunkPointer(aviPointer->VideoIndex, SIGN_IDX1))
        return -1;
#endif
    AviFseek(aviPointer->VideoIndex, keyFrameList[aviPointer->KeyFrameNum-1].dwNumber*sizeof(idx1), SEEK_CUR);

#endif

    lastSkipPoint = aviPointer->VideoChunkNum;
//initialize current chunk information
    //AviFseek(pFile, videoChunkInfo->dwOffset-aviPointer->Video->CurOffset-aviPointer->Video->ReadSize, SEEK_CUR);
    videoChunkSkipTo.ReadSize = 0;
    videoChunkSkipTo.CurOffset = videoChunkInfo->dwOffset;
    videoChunkSkipTo.CurChunkSize = videoChunkInfo->dwSize;
    beingSkip = AVI_FRAME_SKIP_FFD_FFW;  //skip mode 2  @ LJN
    if (step == AVI_FFD_FFW_RESUME_FLAG)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日产在线观看| 亚洲在线视频免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 91黄色免费观看| 亚洲成av人片在线观看无码| 欧美主播一区二区三区| 日韩精品电影在线| 精品国产一二三| 粉嫩av一区二区三区| 最新国产精品久久精品| 在线日韩av片| 男男视频亚洲欧美| 国产欧美一区二区在线| 99精品国产热久久91蜜凸| 一区二区三区在线观看国产| 欧美日韩不卡一区| 国产一区啦啦啦在线观看| 国产精品免费视频观看| 欧美午夜不卡在线观看免费| 蜜桃av噜噜一区| 亚洲国产精品99久久久久久久久 | 日韩区在线观看| 国产一区二区三区久久悠悠色av| 中文字幕欧美区| 欧美日韩一区二区不卡| 极品少妇xxxx偷拍精品少妇| 国产精品久久久久久久久免费丝袜| 91激情五月电影| 国内精品视频一区二区三区八戒| 一区二区中文视频| 91精品久久久久久久久99蜜臂| 国产91精品久久久久久久网曝门 | 久久精品一区二区三区不卡| 色欧美日韩亚洲| 国产一二精品视频| 亚洲成人精品一区| 国产精品福利影院| 欧美一级高清片| 一本大道av一区二区在线播放| 欧美aaaaa成人免费观看视频| 成人免费一区二区三区视频| 日韩精品中文字幕在线一区| 91在线免费播放| 国产乱码精品一区二区三区av| 久久激情五月激情| 一区二区不卡在线播放| 国产亚洲欧美色| 国产精品色在线观看| 欧美精品高清视频| 97se亚洲国产综合在线| 国产真实乱子伦精品视频| 亚洲高清不卡在线| 亚洲欧洲日韩女同| 精品日韩成人av| 欧洲人成人精品| 色狠狠一区二区| 国产伦精品一区二区三区在线观看 | 日本韩国欧美一区二区三区| 国产精品一区二区黑丝| 日韩av中文在线观看| 亚洲一区在线看| 亚洲图片激情小说| 国产精品成人午夜| 国产欧美精品一区| 国产喷白浆一区二区三区| 欧美电视剧免费全集观看| 欧美精选一区二区| 欧美日韩国产成人在线免费| 色婷婷精品久久二区二区蜜臀av| 99精品视频在线观看| av亚洲精华国产精华精| 不卡一区二区中文字幕| 成人精品小蝌蚪| 国产成人精品免费网站| 国产精品66部| 国产ts人妖一区二区| 国产成人在线视频网站| 国产制服丝袜一区| 国产精品一区二区在线看| 国产精品99久久久| 风间由美性色一区二区三区| 国产69精品久久777的优势| 成人夜色视频网站在线观看| 成人精品一区二区三区四区| 99久久精品国产一区| 91麻豆蜜桃一区二区三区| 色欧美88888久久久久久影院| 色综合咪咪久久| 欧美午夜影院一区| 欧美巨大另类极品videosbest | 日韩三级免费观看| 欧美精品一区二区三| 久久精品欧美一区二区三区不卡| 国产日产亚洲精品系列| 亚洲色图另类专区| 午夜精品久久久| 另类小说欧美激情| 国产成人av资源| 97久久超碰国产精品| 欧美日韩中文另类| 欧美成人免费网站| 国产日韩欧美不卡在线| 一区二区免费看| 麻豆精品一二三| av电影在线观看不卡 | 精品久久人人做人人爽| 国产欧美一区二区精品性色超碰| 亚洲丝袜自拍清纯另类| 日韩主播视频在线| 国产a视频精品免费观看| 日韩欧美二区三区| 国产精品日韩成人| 亚洲va欧美va天堂v国产综合| 久久er精品视频| 99精品久久免费看蜜臀剧情介绍| 3atv在线一区二区三区| 日本一区二区三区dvd视频在线| 一区二区三区中文字幕| 国内精品自线一区二区三区视频| av激情亚洲男人天堂| 日韩一区二区三区视频在线观看| 国产精品你懂的在线欣赏| 天天色天天操综合| 成人性生交大片免费看中文 | 精品国产污污免费网站入口 | 日韩精品一区二区三区老鸭窝 | 3atv在线一区二区三区| 国产精品无圣光一区二区| 天天操天天干天天综合网| 高清国产午夜精品久久久久久| 欧美主播一区二区三区美女| 中文字幕精品在线不卡| 日韩成人一级片| 在线看日韩精品电影| 国产人久久人人人人爽| 日韩精品久久久久久| 97se狠狠狠综合亚洲狠狠| 精品国产91久久久久久久妲己| 一区二区三区成人| voyeur盗摄精品| 久久久一区二区三区| 日韩和的一区二区| 91精品福利视频| 亚洲桃色在线一区| 成人精品在线视频观看| 国产亚洲综合在线| 精品一区二区三区视频在线观看 | 色婷婷av一区| 国产精品电影一区二区| 国产成人免费9x9x人网站视频| 91精品一区二区三区在线观看| 一区二区三区成人| 99vv1com这只有精品| 中文一区一区三区高中清不卡| 国产美女视频一区| 久久综合九色综合97婷婷| 免费观看在线综合| 日韩欧美国产精品一区| 日韩电影一区二区三区四区| 欧美日韩精品系列| 亚洲一二三四久久| 欧美在线视频日韩| 亚洲综合久久av| 欧洲一区在线电影| 亚洲国产裸拍裸体视频在线观看乱了| 成人毛片视频在线观看| 中文字幕一区二区三区不卡在线| 884aa四虎影成人精品一区| 亚洲图片欧美色图| 欧美日韩综合在线| 日韩专区欧美专区| 精品少妇一区二区三区| 国产酒店精品激情| 国产精品免费av| 99久久婷婷国产精品综合| 日韩毛片精品高清免费| 色婷婷激情一区二区三区| 亚洲韩国精品一区| 777奇米成人网| 久久精品国产99国产精品| 26uuu精品一区二区在线观看| 国产精品99久久久久久似苏梦涵| 日本一区二区三区dvd视频在线| 不卡区在线中文字幕| 亚洲综合色婷婷| 欧美丰满嫩嫩电影| 国产一区二区三区四| 国产精品麻豆99久久久久久| 色综合久久久久久久| 日一区二区三区| 亚洲精品一区二区三区99| 成人一区二区视频| 一区二区三区丝袜| 日韩你懂的在线观看| 国产福利一区二区三区在线视频| 日韩一区在线看| 91精品国产乱| 成人午夜激情影院| 五月综合激情网| 国产日本亚洲高清|