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

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

?? avifile.c

?? 瑞星微公司RK27XX系列芯片的SDK開發包
?? C
?? 第 1 頁 / 共 5 頁
字號:
        }
        aviPointer->Video->ReadSize = tempReadSize;
#ifdef ON_RKFS
//        if(aviPointer->VideoData->Offset != moviPos.Offset + aviPointer->Video->CurOffset + aviPointer->Video->ReadSize)
//            tempTest++;

#ifdef SEEK_TABLE
        if ((moviPos.Offset + chunk.dwOffset) < (long)aviPointer->VideoData->Offset)
        {
            for (j = 0; j < (AVI_VIDEO_POS_INFO_NUM - 1); j++)
            {
                if (((moviPos.Offset + chunk.dwOffset) > videoDataPosInfo[j].Offset) && ((moviPos.Offset + chunk.dwOffset) < videoDataPosInfo[j+1].Offset))
                    break;
            }
            if (j < AVI_VIDEO_POS_INFO_NUM)
                AviFastFseek(aviPointer->VideoData, videoDataPosInfo[j].Offset, videoDataPosInfo[j].Clus);
        }
#endif
        AviFseek(aviPointer->VideoData, (long)moviPos.Offset + (long)chunk.dwOffset - (long)aviPointer->VideoData->Offset, SEEK_CUR);

        /*if(aviPointer->VideoData->Offset != moviPos.Offset + chunk.dwOffset){
            aviPointer->Video->ReadSize = 0;
            continue;
        }*/
#else
        AviFseek(aviPointer->VideoData, chunk.dwOffset - aviPointer->Video->CurOffset - aviPointer->Video->ReadSize, SEEK_CUR);
#endif
        if (chunk.dwSize <= (DWORD)i)
        {
            if (AviFread(buffer + *size - i, chunk.dwSize, 1, aviPointer->VideoData) < chunk.dwSize)
                return -1;
            aviPointer->Video->ReadSize = chunk.dwSize;
        }
        else
        {
            if (AviFread(buffer + *size - i, i, 1, aviPointer->VideoData) < i)
                return -1;
            aviPointer->Video->ReadSize = i;
        }
        aviPointer->Video->CurChunkSize = chunk.dwSize;
        aviPointer->Video->CurOffset = chunk.dwOffset;
        tempReadSize = aviPointer->Video->ReadSize;
        //AviFseek(aviPointer->VideoData, (0-aviPointer->Video->CurOffset-aviPointer->Video->ReadSize), SEEK_CUR);
    }

    return 0;
}

/********************************************************************************************
 Func:
  AviAudioGetDataToSDRAM()
 Description:
  Get next video chunk information.
 Param:
  AviFilePointer *aviPointer - avi file pointer.
  char *buffer - Buffer for video data.
  DWORD *size - size to read.
 Return:
  0:  Success.
  -1: Get data error.
  >0: Size got.
 Author:
  ljn
 Date:
  2007-9-19 10:28
 Log:

********************************************************************************************/

int AviAudioGetDataToSDRAM(AviFilePointer *aviPointer, char *buffer, DWORD *size)
{
    long i, remainSize, sizeToGet = *size;
    idx1 chunk;

    remainSize = aviPointer->Audio->CurChunkSize - aviPointer->Audio->ReadSize;   //last chunk remain

    if (remainSize > 0)
    {
        if (remainSize <= sizeToGet)     // Read all remain data to SDRAM
        {
            if (AviFread(buffer, remainSize, 1, aviPointer->AudioData) < remainSize)
                return -1;
            sizeToGet -= remainSize;
            aviPointer->Audio->ReadSize = aviPointer->Audio->CurChunkSize;
        }
        else            // read size required to SDRAM
        {
            if (AviFread(buffer, sizeToGet, 1, aviPointer->AudioData) < sizeToGet)
                return -1;
            aviPointer->Audio->ReadSize += sizeToGet;
            sizeToGet = 0;
        }
    }

    for (i = sizeToGet;i > 0;i -= aviPointer->Audio->ReadSize)
    {
        if (AviAudioGetNextChunkInfo(aviPointer, &chunk) < 0)
        {
            size -= i;
            return -1;
        }
#ifdef ON_RKFS
        AviFseek(aviPointer->AudioData, (long)moviPos.Offset + (long)chunk.dwOffset - (long)aviPointer->AudioData->Offset, SEEK_CUR);
        if (aviPointer->AudioData->Offset != moviPos.Offset + chunk.dwOffset)
            return -1;
#else
        AviFseek(aviPointer->AudioData, chunk.dwOffset - aviPointer->Audio->CurOffset - aviPointer->Audio->ReadSize, SEEK_CUR);
#endif
        if (chunk.dwSize <= (DWORD)i)
        {
            if (AviFread(buffer + *size - i, chunk.dwSize, 1, aviPointer->AudioData) < chunk.dwSize)
                return -1;
            aviPointer->Audio->ReadSize = chunk.dwSize;
        }
        else
        {
            if (AviFread(buffer + *size - i, i, 1, aviPointer->AudioData) < i)
                return -1;
            aviPointer->Audio->ReadSize = i;
        }
        aviPointer->Audio->CurChunkSize = chunk.dwSize;
        aviPointer->Audio->CurOffset = chunk.dwOffset;
        //AviFseek(aviPointer->AudioData, (0-aviPointer->Audio->CurOffset-aviPointer->Audio->ReadSize), SEEK_CUR);
    }
    return 0;
}

/********************************************************************************************
 Func:
  AviAudioSeek()
 Description:
  Seek function for audio decode.
 Param:
  AviFilePointer *aviPointer - avi file pointer.
  long offset - offset.
  int origin - SEEK_SET/SEEK_CUR/SEEK_END.
 Return:
  0:  Success.
  -1: Seek error.
 Author:
  ljn
 Date:
  2007-9-20 10:28
 Log:

********************************************************************************************/
int AviAudioSeek(AviFilePointer *aviPointer, long offset, int origin)
{
    long i, remainSize, sizeToGet = offset;
    DWORD riffType;
    int indexSize;
    idx1 chunk;

    /* mp3 and mp2 audio can only seek to file head. */
    if (aviWavex.wFormatTag == SIGN_WAVE_FORAMT_MPEGLAYER3)
        offset = 0;
    if ((aviWavex.wFormatTag != SIGN_WAVE_FORAMT_AC3) && (offset != 0))
        return 0;

#ifdef ON_RKFS
    AviFastFseek(aviPointer->AudioData, moviPos.Offset, moviPos.Clus);
#else
    if (AviGetChunkPointer(aviPointer->AudioData, SIGN_MOVI))
        return AVI_FILE_NO_MOVI_CHUNK;
    AviFseek(aviPointer->AudioData, 4, SEEK_CUR);
#endif

    if (aviPointer)
    {
        switch (origin)
        {
            case SEEK_SET:
                aviPointer->AudioChunkNum = 0;
                audioBytePos = 0;
#ifdef ON_RKFS
                AviFastFseek(aviPointer->AudioIndex, idx1Pos.Offset, idx1Pos.Clus);
#else
                if (AviGetChunkPointer(aviPointer->AudioIndex, SIGN_IDX1))
                    return -1;
#endif
                if (offset > 0)
                {
                    for (i = offset;i > 0;i -= aviPointer->Audio->ReadSize)
                    {
                        if (AviAudioGetNextChunkInfo(aviPointer, &chunk) < 0)
                        {
                            return 1;
                        }
                        if ((long)chunk.dwSize <= i)
                        {
                            aviPointer->Audio->ReadSize = chunk.dwSize;
                        }
                        else
                        {
                            aviPointer->Audio->ReadSize = i;
                        }
                        aviPointer->Audio->CurChunkSize = chunk.dwSize;
                        aviPointer->Audio->CurOffset = chunk.dwOffset;
                    }
                    AviFseek(aviPointer->AudioData, aviPointer->Audio->CurOffset + aviPointer->Audio->ReadSize, SEEK_CUR);
                }
                else
                {
                    aviPointer->Audio->ReadSize = 0;
                    aviPointer->Audio->CurOffset = 0;
                    aviPointer->Audio->CurChunkSize = 0;
                    aviPointer->AudioChunkNum = 0;
                    audioBytePos = 0;
                }
                break;
            case SEEK_CUR:
                if (offset == 0)
                    break;
                if (offset > 0)
                {
                    remainSize = aviPointer->Audio->CurChunkSize - aviPointer->Audio->ReadSize;
                    if (remainSize > 0)
                    {
                        if (remainSize <= sizeToGet)
                        {
                            sizeToGet -= remainSize;
                            aviPointer->Audio->ReadSize = aviPointer->Audio->CurChunkSize;
                        }
                        else
                        {
                            aviPointer->Audio->ReadSize += sizeToGet;
                            sizeToGet = 0;
                        }
                    }

                    for (i = sizeToGet;i > 0;i -= aviPointer->Audio->ReadSize)
                    {
                        if (AviAudioGetNextChunkInfo(aviPointer, &chunk) < 0)
                        {
                            return 1;
                        }
                        if ((long)chunk.dwSize <= i)
                        {
                            aviPointer->Audio->ReadSize = chunk.dwSize;
                        }
                        else
                        {
                            aviPointer->Audio->ReadSize = i;
                        }
                        aviPointer->Audio->CurChunkSize = chunk.dwSize;
                        aviPointer->Audio->CurOffset = chunk.dwOffset;
                    }
                }
                else
                {
                    if (aviPointer->Audio->ReadSize > 0)
                    {
                        if ((long)(0 - aviPointer->Audio->ReadSize) >= sizeToGet)
                        {
                            sizeToGet += aviPointer->Audio->ReadSize;
                            aviPointer->Audio->ReadSize = 0;
                        }
                        else
                        {
                            aviPointer->Audio->ReadSize += sizeToGet;
                            sizeToGet = 0;
                        }
                    }

                    for (i = sizeToGet;i < 0;)
                    {
                        if (AviAudioGetPreChunkInfo(aviPointer, &chunk) < 0)
                        {
                            return 1;
                        }
                        if ((long)(0 -chunk.dwSize) >= i)
                        {
                            aviPointer->Audio->ReadSize = 0;
                            i += chunk.dwSize;
                        }
                        else
                        {
                            aviPointer->Audio->ReadSize = chunk.dwSize + i;
                            i = 0;
                        }
                        aviPointer->Audio->CurChunkSize = chunk.dwSize;
                        aviPointer->Audio->CurOffset = chunk.dwOffset;
                    }
                }
                break;
            case SEEK_END:
                if (AviGetChunkPointer(aviPointer->AudioIndex, SIGN_IDX1))
                    return -1;

                AviFseek(aviPointer->AudioIndex, indexSize, SEEK_CUR);

                if (offset < 0)
                {
                    for (i = offset;i < 0;)
                    {
                        if (AviAudioGetPreChunkInfo(aviPointer, &chunk) < 0)
                        {
                            return 1;
                        }
                        if ((long)(0 -chunk.dwSize) >= i)
                        {
                            aviPointer->Audio->ReadSize = 0;
                            i += chunk.dwSize;
                        }
                        else
                        {
                            aviPointer->Audio->ReadSize = chunk.dwSize + i;
                            i = 0;
                        }
                        aviPointer->Audio->CurChunkSize = chunk.dwSize;
                        aviPointer->Audio->CurOffset = chunk.dwOffset;
                    }
                }
                else
                {
                    AviAudioGetPreChunkInfo(aviPointer, &chunk);
                    aviPointer->Audio->ReadSize = chunk.dwSize;
                    aviPointer->Audio->CurOffset = chunk.dwOffset;
                    aviPointer->Audio->CurChunkSize = chunk.dwSize;
                }
                break;
            default :
                return -1;
        }
        return 0;
    }
    return -1;
}

/********************************************************************************************
 Func:
  ResetAudioPointer()
 Description:
  Reset Audio Pointer .
 Param:
  AviFilePointer *aviPointer - avi file pointer.
 Return:
  0:  Success.
  -1: Failed.
 Author:
  ljn
 Date:
  2007-9-17 15:53
 Log:

********************************************************************************************/
int ResetAudioPointer(AviFilePointer *aviPointer)
{
    DWORD riffType;
    struct
    {
        FOURCC CkID;
        DWORD Size;
        DWORD Type;
    } list;
#ifdef ON_RKFS

    /***********************************************************
    If we run this program on rk27 file system, in order to seek
    to the 'movi' and 'idx1' position fast, we can save the file
    pointer information when we parse the file. Now, we can use
    fast file seek.
    ************************************************************/

    AviFastFseek(aviPointer->AudioIndex, idx1Pos.Offset, idx1Pos.Clus);
    AviFastFseek(aviPointer->AudioData, moviPos.Offset, moviPos.Clus);
#else
    /***************************************
       [1] get file point

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av高清久久久| 极品少妇一区二区| 在线精品国精品国产尤物884a | 51精品秘密在线观看| 亚洲精品欧美激情| 91麻豆产精品久久久久久| 亚洲线精品一区二区三区八戒| 欧美性大战久久久久久久| 日本91福利区| 中文av一区特黄| 91亚洲男人天堂| 亚洲成a天堂v人片| 欧美xxx久久| 成人av在线电影| 亚洲高清不卡在线观看| 欧美一区二区精品在线| 国产一区福利在线| 国产精品免费看片| 欧美三级在线看| 黄一区二区三区| 亚洲日本va午夜在线电影| 欧美欧美欧美欧美| 国产毛片精品一区| 亚洲精品久久嫩草网站秘色| 91精品国产色综合久久ai换脸| 国产一区二区三区综合 | 亚洲天堂网中文字| 69堂精品视频| 激情亚洲综合在线| 国产一区二三区好的| 中文字幕国产一区二区| 欧美日韩一区二区在线观看视频| 久久国产精品露脸对白| 亚洲男人天堂av网| 精品区一区二区| 91福利视频久久久久| 国产真实精品久久二三区| 夜夜嗨av一区二区三区网页 | av电影一区二区| 日韩av网站在线观看| 国产精品国产三级国产aⅴ中文 | 国产精品国产三级国产普通话三级| 欧美色图在线观看| 国产成人综合在线播放| 亚洲大型综合色站| 亚洲欧洲av一区二区三区久久| 日韩精品一区二区三区视频播放 | 欧美系列亚洲系列| 国产精品538一区二区在线| 午夜精品久久久久久久99水蜜桃| 国产蜜臀av在线一区二区三区| 欧美电影在哪看比较好| 99精品国产视频| 丁香激情综合国产| 久久精品噜噜噜成人av农村| 亚洲高清视频在线| 亚洲人成网站影音先锋播放| 中文一区一区三区高中清不卡| 精品美女一区二区三区| 666欧美在线视频| 91在线视频官网| www.66久久| 99久久国产综合精品色伊| 粉嫩av一区二区三区| 国产精品69久久久久水密桃| 国产一区二区影院| 狠狠色丁香婷综合久久| 理论电影国产精品| 男女男精品网站| 麻豆国产91在线播放| 美女视频网站久久| 日本伊人精品一区二区三区观看方式 | 一区二区三区波多野结衣在线观看 | 亚洲愉拍自拍另类高清精品| 综合av第一页| 一区二区三区在线观看网站| 亚洲欧洲综合另类| 国产精品白丝在线| 亚洲精品自拍动漫在线| 亚洲欧美视频在线观看视频| 1区2区3区精品视频| 国产欧美一区二区精品久导航| 久久久综合激的五月天| 欧美激情在线一区二区三区| 国产精品久久久久久一区二区三区 | 免费人成网站在线观看欧美高清| 性做久久久久久久久| 丝袜诱惑亚洲看片| 免费在线欧美视频| 国产九九视频一区二区三区| 国产成人精品免费网站| 99久久免费视频.com| 色综合色狠狠天天综合色| 欧美中文字幕一区| 在线成人免费观看| 久久久久久久久久美女| 国产精品女主播在线观看| 最好看的中文字幕久久| 亚洲欧美偷拍三级| 丝袜美腿一区二区三区| 久久99精品久久久| 丁香亚洲综合激情啪啪综合| 91福利国产精品| 日韩一区二区不卡| 国产午夜精品久久久久久免费视 | 色琪琪一区二区三区亚洲区| 欧美精品免费视频| 久久亚洲综合色一区二区三区| 亚洲国产岛国毛片在线| 亚洲图片自拍偷拍| 国模少妇一区二区三区| 91天堂素人约啪| 日韩一级二级三级| 国产精品污www在线观看| 中文字幕欧美一区| 日韩国产欧美三级| 高清国产午夜精品久久久久久| 91电影在线观看| 国产亚洲一区二区三区四区| 亚洲人成精品久久久久久| 奇米四色…亚洲| 91影院在线观看| 欧美精品一区二区精品网| 亚洲人成在线播放网站岛国| 久久69国产一区二区蜜臀| 色天使色偷偷av一区二区| 国产精品乱人伦| 日韩精品乱码av一区二区| 国产91高潮流白浆在线麻豆| 7777精品伊人久久久大香线蕉的 | 欧美性欧美巨大黑白大战| 欧美精品一区二区不卡 | 久久先锋资源网| 亚洲无人区一区| 白白色亚洲国产精品| 欧美一区二区三区啪啪| 亚洲精品中文在线影院| 国产一区不卡视频| 欧美群妇大交群中文字幕| 自拍视频在线观看一区二区| 精品亚洲成av人在线观看| 欧美三区免费完整视频在线观看| 国产精品女人毛片| 紧缚捆绑精品一区二区| 777午夜精品免费视频| 亚洲午夜久久久| 91在线视频播放| 国产精品美女久久久久久2018 | 91免费在线播放| 国产精品三级视频| 国产麻豆日韩欧美久久| 制服丝袜成人动漫| 亚洲激情av在线| 91网站视频在线观看| 国产精品丝袜一区| 国产剧情av麻豆香蕉精品| 日韩视频一区二区| 日韩精品午夜视频| 欧美日韩精品欧美日韩精品 | 调教+趴+乳夹+国产+精品| 日本高清视频一区二区| 自拍偷拍国产亚洲| 91蜜桃视频在线| 亚洲欧洲日韩av| av激情综合网| 亚洲精选在线视频| 91麻豆精品国产91久久久| 亚洲色图清纯唯美| 99精品黄色片免费大全| 日韩毛片一二三区| 色综合久久久久久久| 亚洲精品久久久蜜桃| 欧美在线免费视屏| 亚洲一区二区三区中文字幕| 欧美性xxxxx极品少妇| 天天综合日日夜夜精品| 欧美精品一级二级三级| 免费成人在线影院| www国产亚洲精品久久麻豆| 国产成人精品免费| 中文字幕人成不卡一区| 91福利国产成人精品照片| 三级亚洲高清视频| 日韩欧美国产综合一区| 国产一区二区成人久久免费影院 | 中文字幕在线播放不卡一区| 91丨porny丨国产入口| 亚洲综合一区二区精品导航| 欧美丰满一区二区免费视频| 久久99国产精品尤物| 中文字幕第一页久久| 色综合久久精品| 麻豆高清免费国产一区| 国产日韩欧美电影| 日本乱人伦aⅴ精品| 日韩精品亚洲专区| 中文字幕精品一区二区精品绿巨人 | 亚洲精品videosex极品| 欧美大片拔萝卜| 成人性生交大片免费看中文|