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

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

?? cpi_playlistitem.c

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? C
?? 第 1 頁 / 共 3 頁
字號:
        if(iFrameSize > iTagDataToRead)
            return;

        pFrameData = malloc(iFrameSize+1);
        if(!ReadFile(hFile, pFrameData, iFrameSize, &dwBytesRead, NULL)) return;
        pFrameData[iFrameSize] = '\0';

        // Decode frames
        if(memcmp(ID3v2Frame.m_cFrameID, "TIT2", 4) == 0)
            pItem->m_pcTrackName = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
        else if(memcmp(ID3v2Frame.m_cFrameID, "TPE1", 4) == 0)
            pItem->m_pcArtist = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
        else if(memcmp(ID3v2Frame.m_cFrameID, "TALB", 4) == 0)
            pItem->m_pcAlbum = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
        else if(memcmp(ID3v2Frame.m_cFrameID, "TRCK", 4) == 0)
        {
            pItem->m_pcTrackNum_AsText = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
            if(pItem->m_pcTrackNum_AsText)
                pItem->m_cTrackNum = (unsigned char)atoi(pItem->m_pcTrackNum_AsText);
        }
        else if(memcmp(ID3v2Frame.m_cFrameID, "TYER", 4) == 0)
            pItem->m_pcYear = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
        else if(memcmp(ID3v2Frame.m_cFrameID, "TENC", 4) == 0)
            pItem->m_pcComment = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
        else if(memcmp(ID3v2Frame.m_cFrameID, "TCON", 4) == 0)
        {
            char* pcGenre = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
            if(pcGenre)
            {
                // Search for this genre among the ID3v1 genres (don't read it if we cannot find it)
                int iGenreIDX;
                for(iGenreIDX = 0; iGenreIDX < CIC_NUMGENRES; iGenreIDX++)
                {
                    if(stricmp(pcGenre, glb_pcGenres[iGenreIDX]) == 0)
                    {
                        pItem->m_cGenre = (unsigned char)iGenreIDX;
                        break;
                    }
                }
                free(pcGenre);
            }
        }
        else if(memcmp(ID3v2Frame.m_cFrameID, "TLEN", 4) == 0)
        {
            char* pcLength = CPLI_ID3v2_DecodeString(pFrameData, iFrameSize);
            if(pcLength)
            {
                CPLI_DecodeLength(pItem, atoi(pcLength)/1000);
                free(pcLength);
            }
        }
#ifdef _DEBUG
        /*
        else if(ID3v2Frame.m_cFrameID[0] == 'T')
        	CP_TRACE2("Text frame %4s \"%s\"", ID3v2Frame.m_cFrameID, pFrameData+1);
        else
        	CP_TRACE1("Any old frame %4s", ID3v2Frame.m_cFrameID);
        */
#endif
        free(pFrameData);
        iTagDataToRead -= iFrameSize + sizeof(ID3v2Frame);
    }

    pItem->m_enTagType = ttID3v2;
}
//
//
//
void CPLI_ReadTag_ID3v1(CPs_PlaylistItem* pItem, HANDLE hFile)
{
    DWORD dwBytesRead;
    CIs_ID3Tag ID3;

    SetFilePointer(hFile, 0-sizeof(ID3), NULL, FILE_END);
    ReadFile(hFile, &ID3, sizeof(ID3), &dwBytesRead, NULL);

    // Not enough file data returned - or the data returned does not look like an ID3
    if(dwBytesRead != sizeof(ID3) || memcmp(ID3.m_cTAG, "TAG", 3) != 0)
        return;

    // Decode the fixed strings into our dynamic strings
    CPLII_RemoveTagInfo(pItem);
    pItem->m_pcTrackName = DecodeID3String(ID3.m_cSong, 30);
    pItem->m_pcArtist = DecodeID3String(ID3.m_cArtist, 30);
    pItem->m_pcAlbum = DecodeID3String(ID3.m_cAlbum, 30);
    pItem->m_pcYear = DecodeID3String(ID3.m_cYear, 4);

    // ID3v1.1 - If the 29th byte of the comment is 0 then the 30th byte is the track num
    // ** Some dodgy implementations of ID3v1.1 just slap a <32 char byte at position 30 and hope
    //    for the best - handle these too <hmph!>
    if(ID3.m_cComment[28] == '\0' || ID3.m_cComment[29] < 32)
    {
        char cTempString[33];

        pItem->m_pcComment = DecodeID3String(ID3.m_cComment, 28);
        pItem->m_cTrackNum = ID3.m_cComment[29];

        if(pItem->m_cTrackNum != CIC_INVALIDTRACKNUM)
        {
            itoa(pItem->m_cTrackNum, cTempString, 10);
            pItem->m_pcTrackNum_AsText = (char*)malloc(CPC_TRACKNUMASTEXTBUFFERSIZE);
            strncpy(pItem->m_pcTrackNum_AsText, cTempString, CPC_TRACKNUMASTEXTBUFFERSIZE);
        }
    }
    else
    {
        pItem->m_pcComment = DecodeID3String(ID3.m_cComment, 30);
        pItem->m_cTrackNum = CIC_INVALIDTRACKNUM;
    }

    if(ID3.m_cGenre < CIC_NUMGENRES)
        pItem->m_cGenre = ID3.m_cGenre;
    pItem->m_enTagType = ttID3v1;
}
//
//
//
BOOL CPLI_IsTagDirty(CP_HPLAYLISTITEM hItem)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;

    CP_CHECKOBJECT(pItem);
    return pItem->m_bID3Tag_SaveRequired;
}
//
//
//
void CPLI_WriteTag(CP_HPLAYLISTITEM hItem)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    HANDLE hFile;

    CP_CHECKOBJECT(pItem);
    if(pItem->m_bID3Tag_SaveRequired == FALSE)
        return;
	if(stricmp(".ogg", CPLI_GetExtension(hItem)) != 0 && 
		stricmp(".mp3", CPLI_GetExtension(hItem)) !=0)
		return;
    // Try to open the file
    hFile = CreateFile(pItem->m_pcPath, GENERIC_READ | GENERIC_WRITE,
                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
                       OPEN_EXISTING, 0, 0);

    // Cannot open - fail silently
    if(hFile == INVALID_HANDLE_VALUE)
        return;

    pItem->m_bID3Tag_SaveRequired = FALSE;

	if (stricmp(".mp3", CPLI_GetExtension(hItem)) ==0)
    {
        CPLI_WriteTag_ID3v1(pItem, hFile);
        if(options.support_id3v2)
            CPLI_WriteTag_ID3v2(pItem, hFile);
    }

    CloseHandle(hFile);
}
//
//
//
void CPLI_WriteTag_ID3v1(CPs_PlaylistItem* pItem, HANDLE hFile)
{
    DWORD dwBytesTransferred;
    CIs_ID3Tag ID3;
    char cTagMagic[3];

    // Build the tag (of ID3v1.1 format)
    memset(&ID3, 32, sizeof(ID3));
    memcpy(ID3.m_cTAG, "TAG", 3);
    if(pItem->m_pcTrackName)
        strncpy(ID3.m_cSong, pItem->m_pcTrackName, 30);
    if(pItem->m_pcArtist)
        strncpy(ID3.m_cArtist, pItem->m_pcArtist, 30);
    if(pItem->m_pcAlbum)
        strncpy(ID3.m_cAlbum, pItem->m_pcAlbum, 30);
    if(pItem->m_pcYear)
        strncpy(ID3.m_cYear, pItem->m_pcYear, 4);
    if(pItem->m_pcComment)
	if(strlen(pItem->m_pcComment)>28)
	{
        strncpy(ID3.m_cComment, pItem->m_pcComment, 30);
	}else
	{
        strncpy(ID3.m_cComment, pItem->m_pcComment, 28);
    ID3.m_cComment[28] = '\0';
    ID3.m_cComment[29] = pItem->m_cTrackNum;
	}
    ID3.m_cGenre = pItem->m_cGenre;

    // Set the file pointer to the end of the file (or the start of the tag if there is one already)
    SetFilePointer(hFile, 0-sizeof(ID3), NULL, FILE_END);
    ReadFile(hFile, cTagMagic, sizeof(cTagMagic), &dwBytesTransferred, NULL);
    if(memcmp(cTagMagic, "TAG", 3) == 0)
        SetFilePointer(hFile, 0-sizeof(ID3), NULL, FILE_END);
    else
        SetFilePointer(hFile, 0, NULL, FILE_END);

    WriteFile(hFile, &ID3, sizeof(ID3), &dwBytesTransferred, NULL);
}
//
//
//
void CPLI_ID3v2_WriteSyncSafeInt(char cDest[4], const int iSource)
{
    cDest[0] = (iSource>>21) & 0x7F;
    cDest[1] = (iSource>>14) & 0x7F;
    cDest[2] = (iSource>>7) & 0x7F;
    cDest[3] = iSource & 0x7F;
}
//
//
//
void CPLI_ID3v2_WriteTextFrame(BYTE** ppDest, const char pcTag[4], const char* pcString)
{
    CIs_ID3v2Frame* pFrame = (CIs_ID3v2Frame*)*ppDest;
    BYTE* pFrameData;
    int iFrameDataLength;

    iFrameDataLength = strlen(pcString) + 1; // 1-byte for encoding

    memcpy(pFrame->m_cFrameID, pcTag, sizeof(pcTag));
    CPLI_ID3v2_WriteSyncSafeInt(pFrame->m_cSize_Encoded, iFrameDataLength);
    pFrame->m_cFlags = 0x0;

    // Write frame data
    pFrameData = ((*ppDest) + sizeof(CIs_ID3v2Frame));
    pFrameData[0] = 0x0;
    memcpy(pFrameData + 1, pcString, iFrameDataLength-1);

    *ppDest += iFrameDataLength + sizeof(CIs_ID3v2Frame);
}
//
//
//
void CPLI_WriteTag_ID3v2(CPs_PlaylistItem* pItem, HANDLE hFile)
{
    unsigned int iTagDataLength;
    unsigned int iExistingTagLength;
    DWORD dwBytesTransferred;
    char atiobuffer[33];
    BYTE* pTag;
    BYTE* pTag_Cursor;

    // Work out the size of the data in the tag frames
    iTagDataLength = 0;
    if(pItem->m_pcTrackName)
        iTagDataLength += strlen(pItem->m_pcTrackName) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_pcArtist)
        iTagDataLength += strlen(pItem->m_pcArtist) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_pcAlbum)
        iTagDataLength += strlen(pItem->m_pcAlbum) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_pcYear)
        iTagDataLength += strlen(pItem->m_pcYear) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_pcComment)
        iTagDataLength += strlen(pItem->m_pcComment) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_cGenre != CIC_INVALIDGENRE)
        iTagDataLength += strlen(glb_pcGenres[pItem->m_cGenre]) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_cTrackNum != CIC_INVALIDTRACKNUM)
        iTagDataLength += strlen(itoa(pItem->m_cTrackNum, atiobuffer, 10)) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header
    if(pItem->m_iTrackLength != 0)
        iTagDataLength += strlen(itoa(pItem->m_iTrackLength*1000, atiobuffer, 10)) + 1 + sizeof(CIs_ID3v2Frame); // 1-byte for encoding and a frame header

    // Add ID3v2 overhead
    iTagDataLength += sizeof(CIs_ID3v2Tag);

    // Quantise tag to the nearest 1K
    iTagDataLength = ((iTagDataLength>>10) + 1) << 10;

    // Is there a tag big enough in the file
    {
        CIs_ID3v2Tag existingtagheader;

        SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
        ReadFile(hFile, &existingtagheader, sizeof(existingtagheader), &dwBytesTransferred, NULL);

        if(memcmp(existingtagheader.m_cTAG, "ID3", 3) == 0)
        {
            iExistingTagLength = (existingtagheader.m_cSize_Encoded[0] << 21)
                                 | (existingtagheader.m_cSize_Encoded[1] << 14)
                                 | (existingtagheader.m_cSize_Encoded[2] << 7)
                                 | existingtagheader.m_cSize_Encoded[3];
            iExistingTagLength += sizeof(CIs_ID3v2Tag); // count the header
            if(iExistingTagLength > iTagDataLength)
                iTagDataLength = iExistingTagLength;
        }
        else
            iExistingTagLength = 0;
    }

    // Do we need to enlarge the file?
    if(iExistingTagLength < iTagDataLength)
    {
        if(CPLI_GrowFile(hFile, 0, iTagDataLength-iExistingTagLength) == FALSE)
            return;
    }

    // Build tag
    pTag = malloc(iTagDataLength);
    memset(pTag, 0, iTagDataLength); // ** must do this as all padding should be 0x00
    pTag_Cursor = pTag;

    // Header
    {
        CIs_ID3v2Tag* pHeader = (CIs_ID3v2Tag*)pTag_Cursor;
        int iSizeLessHeader = iTagDataLength - sizeof(CIs_ID3v2Tag);

        pHeader->m_cTAG[0] = 'I';
        pHeader->m_cTAG[1] = 'D';
        pHeader->m_cTAG[2] = '3';

        pHeader->m_cVersion[0] = 0x4;
        pHeader->m_cVersion[1] = 0x0;

        pHeader->m_cFlags = 0x0;

        CPLI_ID3v2_WriteSyncSafeInt(pHeader->m_cSize_Encoded, iSizeLessHeader);
        pTag_Cursor += sizeof(CIs_ID3v2Tag);
    }

    // Frames
    if(pItem->m_pcTrackName)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TIT2", pItem->m_pcTrackName);
    if(pItem->m_pcArtist)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TPE1", pItem->m_pcArtist);
    if(pItem->m_pcAlbum)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TALB", pItem->m_pcAlbum);
    if(pItem->m_pcYear)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TYER", pItem->m_pcYear);
    if(pItem->m_pcComment)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TENC", pItem->m_pcComment);
    if(pItem->m_cGenre != CIC_INVALIDGENRE)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TCON", glb_pcGenres[pItem->m_cGenre]);
    if(pItem->m_cTrackNum != CIC_INVALIDTRACKNUM)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TRCK", itoa(pItem->m_cTrackNum, atiobuffer, 10));
    if(pItem->m_iTrackLength != 0)
        CPLI_ID3v2_WriteTextFrame(&pTag_Cursor, "TLEN", itoa(pItem->m_iTrackLength * 1000, atiobuffer, 10));

    // Output tag
    SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
    WriteFile(hFile, pTag, iTagDataLength, &dwBytesTransferred, NULL);
    CP_ASSERT(dwBytesTransferred == iTagDataLength);
}
//
//
//
CPe_ReadWriteState CPLI_GetReadWriteState(const CP_HPLAYLISTITEM hItem)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    HANDLE hFile;
    CP_CHECKOBJECT(pItem);

    // We will check this every time (and not cache the result) because the
    // file could have been played with outside of CoolPlayer

    // Try to open the file in RW mode
    hFile = CreateFile(pItem->m_pcPath, GENERIC_READ | GENERIC_WRITE,
                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
                       OPEN_EXISTING, 0, 0);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        // Only cache
        CloseHandle(hFile);
        return rwsReadWrite;
    }

    // That didn't work - try a RO open
    hFile = CreateFile(pItem->m_pcPath, GENERIC_READ,
                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
                       OPEN_EXISTING, 0, 0);
    if(hFile != INVALID_HANDLE_VALUE)
    {
        CloseHandle(hFile);
        return rwsReadOnly;
    }

    return rwsBadFile;
}
//
//
//
void CPLI_SetArtist(CP_HPLAYLISTITEM hItem, const char* pcNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    STR_AllocSetString(&pItem->m_pcArtist, pcNewValue, TRUE);
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetAlbum(CP_HPLAYLISTITEM hItem, const char* pcNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    STR_AllocSetString(&pItem->m_pcAlbum, pcNewValue, TRUE);
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetTrackName(CP_HPLAYLISTITEM hItem, const char* pcNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    STR_AllocSetString(&pItem->m_pcTrackName, pcNewValue, TRUE);
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetYear(CP_HPLAYLISTITEM hItem, const char* pcNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    STR_AllocSetString(&pItem->m_pcYear, pcNewValue, TRUE);
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetGenreIDX(CP_HPLAYLISTITEM hItem, const unsigned char iNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    pItem->m_cGenre = iNewValue;
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetTrackNum(CP_HPLAYLISTITEM hItem, const unsigned char iNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    char cTempString[33];
    CP_CHECKOBJECT(pItem);

    pItem->m_cTrackNum = iNewValue;
    if(pItem->m_cTrackNum != CIC_INVALIDTRACKNUM)
    {
        if(pItem->m_pcTrackNum_AsText)
            free(pItem->m_pcTrackNum_AsText);

        pItem->m_pcTrackNum_AsText = (char*)malloc(CPC_TRACKNUMASTEXTBUFFERSIZE);
        itoa(pItem->m_cTrackNum, cTempString, 10);
        strncpy(pItem->m_pcTrackNum_AsText, cTempString, CPC_TRACKNUMASTEXTBUFFERSIZE);
    }
    else
    {
        if(pItem->m_pcTrackNum_AsText)
        {
            free(pItem->m_pcTrackNum_AsText);
            pItem->m_pcTrackNum_AsText = NULL;
        }
    }
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetTrackNum_AsText(CP_HPLAYLISTITEM hItem, const char* pcNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    if(pcNewValue[0] == '\0')
        pItem->m_cTrackNum = CIC_INVALIDTRACKNUM;
    else
        pItem->m_cTrackNum = (unsigned char)atoi(pcNewValue);

    if(pItem->m_pcTrackNum_AsText)
        free(pItem->m_pcTrackNum_AsText);

    pItem->m_pcTrackNum_AsText = (char*)malloc(CPC_TRACKNUMASTEXTBUFFERSIZE);
    strncpy(pItem->m_pcTrackNum_AsText, pcNewValue, CPC_TRACKNUMASTEXTBUFFERSIZE);
    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetComment(CP_HPLAYLISTITEM hItem, const char* pcNewValue)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    STR_AllocSetString(&pItem->m_pcComment, pcNewValue, TRUE);
    pItem->m_bID3Tag_SaveRequired = TRUE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色域天天综合网| 中文子幕无线码一区tr| 久久亚洲精品国产精品紫薇| 亚洲欧美日韩在线不卡| 国产黄色精品网站| 久久久三级国产网站| hitomi一区二区三区精品| 欧美日韩色一区| 国产人成一区二区三区影院| 亚洲成人你懂的| 波多野结衣的一区二区三区| 欧美一级久久久久久久大片| 国产精品污网站| 久久国产生活片100| 欧美日韩一区二区三区在线| 国产精品国产三级国产有无不卡| 久久精品国产色蜜蜜麻豆| 欧美视频在线一区| 亚洲精品免费电影| www.欧美.com| 欧美国产精品一区二区| 国产在线播放一区| 日韩精品一区在线| 日本sm残虐另类| 在线播放欧美女士性生活| 亚洲视频免费在线| 成人自拍视频在线观看| 久久亚洲综合色一区二区三区 | 久久久久99精品国产片| 日本欧美久久久久免费播放网| 欧美最猛性xxxxx直播| 亚洲欧美另类久久久精品2019| 99国产精品久久久久久久久久| 一区二区三区四区乱视频| 风间由美一区二区三区在线观看 | 午夜精品福利久久久| 色播五月激情综合网| 亚洲欧美自拍偷拍| 91视频在线看| 夜夜精品浪潮av一区二区三区| 日本黄色一区二区| 亚洲精品国产成人久久av盗摄| 在线观看视频欧美| 亚洲高清免费在线| 精品久久久久久久久久久久久久久久久 | 成人动漫一区二区在线| 国产精品传媒入口麻豆| 91福利在线导航| 亚洲成人黄色影院| 日韩久久久精品| 国产一区不卡视频| 日韩一区在线看| 欧美性受极品xxxx喷水| 日本不卡高清视频| 久久先锋影音av鲁色资源网| 成人国产精品免费观看| 亚洲国产aⅴ成人精品无吗| 91精品午夜视频| 国产老肥熟一区二区三区| 国产精品久久久久久久第一福利| 欧美在线影院一区二区| 久久精品国产亚洲一区二区三区| 久久精品视频免费| 欧美吻胸吃奶大尺度电影 | 亚洲综合一区二区三区| 日韩视频123| 成人免费视频caoporn| 亚洲美女少妇撒尿| 欧美成人女星排行榜| 99热这里都是精品| 日本视频在线一区| 国产精品久久久久久户外露出 | 免费观看91视频大全| 国产视频一区二区在线观看| 在线观看一区日韩| 国产一区二区三区免费播放| 亚洲精品高清在线| 国产日韩综合av| 欧美精品欧美精品系列| 国产91精品欧美| 日本人妖一区二区| 亚洲日本青草视频在线怡红院| 欧美一级高清片| 色婷婷亚洲精品| 国产精品一品视频| 三级成人在线视频| 亚洲精品网站在线观看| 国产日韩欧美高清| 欧美一区二区三区免费视频| 色又黄又爽网站www久久| 国产自产视频一区二区三区| 性做久久久久久久免费看| 最好看的中文字幕久久| 久久久国产精品麻豆| 欧美一区二区三区性视频| 91免费小视频| 成人a免费在线看| 国产一区二区三区四区五区美女| 午夜精品久久久久久久蜜桃app | 精品88久久久久88久久久| 精品婷婷伊人一区三区三| 91小视频在线免费看| 国产精品99久久久久久久vr| 美国十次了思思久久精品导航| 亚洲一区影音先锋| 亚洲免费观看高清完整版在线| 欧美经典三级视频一区二区三区| 精品不卡在线视频| 欧美tickling网站挠脚心| 91精品在线麻豆| 欧美高清一级片在线| 欧美日韩日本视频| 欧美调教femdomvk| 欧美色成人综合| 欧美在线观看你懂的| 91福利在线看| 欧美日韩大陆一区二区| 欧美日韩成人高清| 日韩一区二区在线观看视频播放| 欧美精品自拍偷拍| 制服视频三区第一页精品| 欧美一区中文字幕| 欧美va亚洲va在线观看蝴蝶网| 欧美成人vps| 国产色产综合色产在线视频| 欧美激情一区二区| 最新不卡av在线| 亚洲一区二区三区在线| 视频一区视频二区在线观看| 视频一区欧美日韩| 国模少妇一区二区三区| 国产成人综合在线观看| youjizz国产精品| 99在线精品一区二区三区| 91黄色免费观看| 在线电影欧美成精品| 精品国产凹凸成av人网站| 国产欧美一区二区精品秋霞影院| 国产精品亲子伦对白| 亚洲欧美另类图片小说| 五月天中文字幕一区二区| 精品在线你懂的| 成人综合婷婷国产精品久久免费| 91麻豆自制传媒国产之光| 欧美日韩国产天堂| 欧美精品一区二| 伊人一区二区三区| 美女视频免费一区| 色综合久久久久久久| 日韩欧美成人午夜| 亚洲欧洲成人自拍| 日韩av不卡在线观看| 99久久精品免费看| 日韩一区二区免费视频| 欧美国产精品一区二区三区| 亚洲成av人片一区二区| 国产中文字幕精品| 欧美性受极品xxxx喷水| 国产视频亚洲色图| 日韩av电影免费观看高清完整版| 国产成人av在线影院| 欧美高清hd18日本| 亚洲欧美自拍偷拍| 国产剧情一区在线| 欧美群妇大交群中文字幕| 中文在线资源观看网站视频免费不卡 | 久久国产精品色婷婷| 91小视频免费观看| 精品国产91久久久久久久妲己| 亚洲色图视频网站| 国模套图日韩精品一区二区| 欧美日韩精品欧美日韩精品| 国产欧美日韩综合精品一区二区| 性久久久久久久久| 日本韩国欧美一区二区三区| 久久精品欧美一区二区三区不卡 | 日韩午夜av一区| 亚洲国产日韩在线一区模特| 99国产一区二区三精品乱码| 欧美大片在线观看一区| 亚洲丶国产丶欧美一区二区三区| 高清shemale亚洲人妖| 精品国产三级电影在线观看| 午夜精品久久久久久久久| 91免费版pro下载短视频| 国产午夜精品理论片a级大结局 | www国产成人免费观看视频 深夜成人网| 亚洲一线二线三线久久久| 不卡的av在线| 国产精品卡一卡二| 东方aⅴ免费观看久久av| 久久―日本道色综合久久| 另类欧美日韩国产在线| 在线综合亚洲欧美在线视频| 一区二区三区免费网站| 91伊人久久大香线蕉| 1024国产精品| 99久久免费精品高清特色大片| 欧美激情在线一区二区| 国产成人一级电影|