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

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

?? cpi_playlistitem.c

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? C
?? 第 1 頁 / 共 3 頁
字號:
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//
void CPLI_SetTrackStackPos(CP_HPLAYLISTITEM hItem, const int iNewPos)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    CP_CHECKOBJECT(pItem);

    pItem->m_iTrackStackPos = iNewPos;
    if(iNewPos == 0)
    {
        pItem->m_cTrackStackPos_AsText[0] = '>';
        pItem->m_cTrackStackPos_AsText[1] = '>';
        pItem->m_cTrackStackPos_AsText[2] = '>';
        pItem->m_cTrackStackPos_AsText[3] = '\0';
    }
    else if(iNewPos == CIC_TRACKSTACK_UNSTACKED)
    {
        pItem->m_cTrackStackPos_AsText[0] = '\0';
    }
    else
    {
        _snprintf(pItem->m_cTrackStackPos_AsText, sizeof(pItem->m_cTrackStackPos_AsText), "%d", iNewPos);
    }
}
//
//
//
void CPLI_CalculateLength(CP_HPLAYLISTITEM hItem)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    const char* pcExtension;

    CP_CHECKOBJECT(pItem);

    pcExtension = CPLI_GetExtension(hItem);

    if(stricmp(pcExtension, ".mp3") == 0
            || stricmp(pcExtension, ".mp2") == 0)
    {
        CPLI_CalculateLength_MP3(pItem);
    }

//    pItem->m_bID3Tag_SaveRequired = TRUE;
    CPL_cb_OnItemUpdated(hItem);
}
//
//
//

//
//
//

//
//
//
void CPLI_CalculateLength_MP3(CPs_PlaylistItem* pItem)
{
    BYTE pbBuffer[0x8000];
    unsigned int iBufferCursor;
    DWORD dwBufferSize;
    HANDLE hFile;
    BOOL bFoundFrameHeader;
    int iBitRate;
    DWORD dwFileSize;
    int iMPEG_version;
    int iLayer;
    BOOL bMono;
    unsigned int iVBRHeader;

    // - Try to open the file
    hFile = CreateFile(pItem->m_pcPath, GENERIC_READ,
                       FILE_SHARE_READ, 0,
                       OPEN_EXISTING, 0, 0);
    dwFileSize = GetFileSize(hFile, NULL);

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

    // Read the first 64K of the file (that should contain the first frame header!)
    ReadFile(hFile, pbBuffer, sizeof(pbBuffer), &dwBufferSize, NULL);
    CloseHandle(hFile);

    iBufferCursor = 0;

    // Skip over a any ID3v2 tag
    {
        CIs_ID3v2Tag* pHeader = (CIs_ID3v2Tag*)(pbBuffer + iBufferCursor);

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

    // Seek to the start of the first frame
    bFoundFrameHeader = FALSE;
    while(iBufferCursor < (dwBufferSize-4))
    {
        if(pbBuffer[iBufferCursor] == 0xFF
                && (pbBuffer[iBufferCursor+1] & 0xE0) == 0xE0)
        {
            bFoundFrameHeader = TRUE;
            break;
        }
        iBufferCursor++;
    }
    if(bFoundFrameHeader == FALSE)
        return;

    // Work out MPEG version
    if( ((pbBuffer[iBufferCursor+1] >> 3) & 0x3) == 0x3)
        iMPEG_version = 1;
    else
        iMPEG_version = 2;

    // Work out layer
    iLayer = 0x4 - ( (pbBuffer[iBufferCursor+1] >> 1) & 0x3);
    if(iLayer == 0)
        return;

    // Work out stereo
    if( (pbBuffer[iBufferCursor+3]>>6) == 0x3)
        bMono = TRUE;
    else
        bMono = FALSE;

    // Work out the VBR header should be
    if(iMPEG_version == 1)
        iVBRHeader = (iBufferCursor+4) + (bMono ? 17 : 32);
    else
        iVBRHeader = (iBufferCursor+4) + (bMono ? 9 : 17);


    // Is this a VBR file
    if( (iBufferCursor+iVBRHeader+12) < dwBufferSize
            && pbBuffer[iVBRHeader]=='X'
            && pbBuffer[iVBRHeader+1]=='i'
            && pbBuffer[iVBRHeader+2]=='n'
            && pbBuffer[iVBRHeader+3]=='g')
    {
        int iNumberOfFrames;
        int iFreq;
        int iDetailedVersion;
        const int aryFrequencies[3][3] = {
                                             {44100, 48000, 32000}, //MPEG 1
                                             {22050, 24000, 16000}, //MPEG 2
                                             {32000, 16000,  8000}  //MPEG 2.5
                                         };

        if( ((pbBuffer[iBufferCursor+1] >> 3) & 0x3) == 0x3)
            iDetailedVersion = 1;
        else if( ((pbBuffer[iBufferCursor+1] >> 3) & 0x3) == 0x2)
            iDetailedVersion = 2;
        else
            iDetailedVersion = 3;

        // Get the number of frames from the Xing header
        iNumberOfFrames = (pbBuffer[iVBRHeader+8] << 24)
                          | (pbBuffer[iVBRHeader+9] << 16)
                          | (pbBuffer[iVBRHeader+10] << 8)
                          | pbBuffer[iVBRHeader+11];

        if( ((pbBuffer[iBufferCursor+2]>>2) & 0x3) == 0x3)
            return;
        iFreq = aryFrequencies[iDetailedVersion-1][(pbBuffer[iBufferCursor+2]>>2) & 0x3];

        CPLI_DecodeLength(pItem, (8 * iNumberOfFrames * 144)/iFreq);
    }
    // Work out the bit rate for a CBR file
    else
    {
        const int aryBitRates[2][3][16] = {
                                              {         //MPEG 2 & 2.5
                                                  {0, 32, 48, 56, 64, 80, 96,112,128,144,160,176,192,224,256,0}, //Layer I
                                                  {0,  8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160,0}, //Layer II
                                                  {0,  8, 16, 24, 32, 40, 48, 56, 64, 80, 96,112,128,144,160,0}  //Layer III
                                              },{       //MPEG 1
                                                  {0, 32, 64, 96,128,160,192,224,256,288,320,352,384,416,448,0}, //Layer I
                                                  {0, 32, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,384,0}, //Layer II
                                                  {0, 32, 40, 48, 56, 64, 80, 96,112,128,160,192,224,256,320,0}  //Layer III
                                              }
                                          };

        iBitRate = aryBitRates[2-iMPEG_version][iLayer-1][pbBuffer[iBufferCursor+2]>>4];
        if(iBitRate)
            CPLI_DecodeLength(pItem, (dwFileSize*8)/(iBitRate*1000) );
    }
}
//
//
//
BOOL CPLI_RenameTrack(CP_HPLAYLISTITEM hItem, const CPe_FilenameFormat enFormat)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    char cPath[MAX_PATH];
    char cNewPath[MAX_PATH];
    BOOL bMoved;
    const char* pcExtension;

    CP_CHECKOBJECT(pItem);

    strncpy(cPath, pItem->m_pcPath, MAX_PATH);

    // Remove the filename from the path
    {
        int iLastSlashIDX, iCharIDX;
        iLastSlashIDX = CPC_INVALIDCHAR;

        for(iCharIDX = 0; cPath[iCharIDX]; iCharIDX++)
        {
            if(cPath[iCharIDX] == '\\')
                iLastSlashIDX = iCharIDX;
        }

        if(iLastSlashIDX != CPC_INVALIDCHAR)
            cPath[iLastSlashIDX] = '\0';
    }

    pcExtension = CPLI_GetExtension(hItem);

    // Apply the name format
    {
        char cNewFilename[MAX_PATH];
        const char* pcTitle;
        const char* pcArtist;
        const char* pcAlbum;

        if(pItem->m_pcTrackName)
            pcTitle = pItem->m_pcTrackName;
        else
            pcTitle = "<title>";
        if(pItem->m_pcArtist)
            pcArtist = pItem->m_pcArtist;
        else
            pcArtist = "<title>";
        if(pItem->m_pcAlbum)
            pcAlbum = pItem->m_pcAlbum;
        else
            pcAlbum = "<album>";


        switch(enFormat)
        {
        case rwsArtistAlbumNumberTitle:
            sprintf(cNewFilename, "%s - %s - %02d - %s%s", pcArtist, pcAlbum, (int)pItem->m_cTrackNum, pcTitle, pcExtension);
            break;
        case rwsArtistNumberTitle:
            sprintf(cNewFilename, "%s - %02d - %s%s", pcArtist, (int)pItem->m_cTrackNum, pcTitle, pcExtension);
            break;
        case rwsAlbumNumberTitle:
            sprintf(cNewFilename, "%s - %02d - %s%s", pcAlbum, (int)pItem->m_cTrackNum, pcTitle, pcExtension);
            break;
        case rwsAlbumNumber:
            sprintf(cNewFilename, "%s - %02d%s", pcAlbum, (int)pItem->m_cTrackNum, pcExtension);
            break;
        case rwsNumberTitle:
            sprintf(cNewFilename, "%02d - %s%s", (int)pItem->m_cTrackNum, pcTitle, pcExtension);
            break;
        case rwsTitle:
            sprintf(cNewFilename, "%s%s", pcTitle, pcExtension);
            break;
        default:
            CP_FAIL("Unknown rename format");
        }

        // Replace illegal chars with _
        {
            int iCharIDX;

            for(iCharIDX = 0; cNewFilename[iCharIDX]; iCharIDX++)
            {
                if(cNewFilename[iCharIDX] == '\\'
                        || cNewFilename[iCharIDX] == '/'
                        || cNewFilename[iCharIDX] == ':'
                        || cNewFilename[iCharIDX] == '"')
                {
                    cNewFilename[iCharIDX] = '_';
                }
            }
        }

        sprintf(cNewPath, "%s\\%s", cPath, cNewFilename);
    }

    CP_TRACE2("Rename \"%s\" to \"%s\"", pItem->m_pcPath, cNewPath);
    bMoved = MoveFile(pItem->m_pcPath, cNewPath);
    if(bMoved)
    {
        CPLI_SetPath(pItem, cNewPath);

        // Update interface
        CPL_cb_OnItemUpdated(hItem);
    }

    return bMoved;
}
//
//
//
void CPLI_SetPath(CPs_PlaylistItem* pItem, const char* pcPath)
{
    int iCharIDX, iLastSlashIDX;
    char cFullPath[MAX_PATH];

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

    // Store the full path to the file if this isn't a stream
    if(strnicmp(CIC_HTTPHEADER, pcPath, 5) != 0
            && strnicmp("https:", pcPath, 6) != 0
            && strnicmp("ftp:", pcPath, 4) != 0)
    {
        _fullpath(cFullPath, pcPath, MAX_PATH);
        STR_AllocSetString(&pItem->m_pcPath, cFullPath, FALSE);
    }
    else
        STR_AllocSetString(&pItem->m_pcPath, pcPath, FALSE);

    // Get the filename (the string following the last slash)
    iLastSlashIDX = 0;
    for(iCharIDX = 0; pItem->m_pcPath[iCharIDX]; iCharIDX++)
    {
        if(pItem->m_pcPath[iCharIDX] == '\\')
            iLastSlashIDX = iCharIDX;
    }
    pItem->m_pcFilename = pItem->m_pcPath + iLastSlashIDX + 1;
}
//
//
//
const char* CPLI_GetExtension(const CP_HPLAYLISTITEM hItem)
{
    CPs_PlaylistItem* pItem = (CPs_PlaylistItem*)hItem;
    int iCharIDX;
    const char* pcLastDot;

    CP_CHECKOBJECT(pItem);

    pcLastDot = NULL;
    for(iCharIDX = 0; pItem->m_pcPath[iCharIDX]; iCharIDX++)
    {
        if(pItem->m_pcPath[iCharIDX] == '.')
            pcLastDot = pItem->m_pcPath + iCharIDX;
        // If there is a directory name with a dot in it we don't want that!
        else if(pItem->m_pcPath[iCharIDX] == '\\')
            pcLastDot = NULL;
    }

    // Ensure the string is valid
    if(!pcLastDot)
        pcLastDot = "";

    return pcLastDot;
}
//
//
//
/*
void CPLI_OGG_SkipOverTab(FILE* pFile)
{
    CIs_ID3v2Tag tag;
    int iStreamStart = 0;

    memset(&tag, 0, sizeof(tag));
    fread(&tag, sizeof(tag), 1, pFile);

    if(memcmp(tag.m_cTAG, "ID3", 3) == 0)
    {
        iStreamStart = sizeof(CIs_ID3v2Tag);
        iStreamStart += (tag.m_cSize_Encoded[0] << 21)
                        | (tag.m_cSize_Encoded[1] << 14)
                        | (tag.m_cSize_Encoded[2] << 7)
                        | tag.m_cSize_Encoded[3];
    }

    fseek(pFile, iStreamStart, SEEK_SET);
}*/
//
//
//
/*void CPLI_OGG_DecodeString(char** ppcString, const char* pcNewValue)
{
    int iStringLength;

    if(*ppcString)
        free(*ppcString);

    iStringLength = strlen(pcNewValue);
    *ppcString = malloc(iStringLength + 1);
    memcpy(*ppcString, pcNewValue, iStringLength+1);
}*/

//
//
//
void CPLI_ShrinkFile(HANDLE hFile, const DWORD dwStartOffset, const unsigned int iNumBytes)
{
    BYTE pBuffer[0x10000];
    DWORD dwLength;
    DWORD dwBytesTransferred;
    DWORD dwCursor;

    CP_TRACE1("Shrunking file by %d bytes", iNumBytes);

    dwLength = GetFileSize(hFile, NULL);
    CP_ASSERT( (dwStartOffset+iNumBytes) < dwLength);
    dwCursor = dwStartOffset;
    while((dwCursor+iNumBytes) < dwLength)
    {
        unsigned int iChunkSize;

        iChunkSize = 0x10000;
        if(iChunkSize > dwLength-(dwCursor+iNumBytes) )
            iChunkSize = dwLength-(dwCursor+iNumBytes);

        SetFilePointer(hFile, dwCursor + iNumBytes, NULL, FILE_BEGIN);
        ReadFile(hFile, pBuffer, iChunkSize, &dwBytesTransferred, NULL);
        CP_ASSERT(dwBytesTransferred == iChunkSize);

        SetFilePointer(hFile, dwCursor, NULL, FILE_BEGIN);
        WriteFile(hFile, pBuffer, iChunkSize, &dwBytesTransferred, NULL);

        dwCursor += iChunkSize;
    }

    SetFilePointer(hFile, dwLength - iNumBytes, NULL, FILE_BEGIN);
    SetEndOfFile(hFile);
}
//
//
//
BOOL CPLI_GrowFile(HANDLE hFile, const DWORD dwStartOffset, const unsigned int iNumBytes)
{
    DWORD dwFileSize;
    unsigned int iFileCursor;
    DWORD dwBytesTransferred;
    BYTE* pbReadBlock[0x10000];

    dwFileSize = GetFileSize(hFile, NULL);
    CP_TRACE1("Enlarging file by %d bytes", iNumBytes);

    // Try to write extra data to end of file - if we fail then clip the file and return
    // (so that we don't corrupt the file in short of space situations)
    {
        BYTE* pbExtra;

        pbExtra = (BYTE*)malloc(iNumBytes);
        memset(pbExtra, 0, iNumBytes);
        SetFilePointer(hFile, dwFileSize + iNumBytes, NULL, FILE_BEGIN);
        WriteFile(hFile, pbExtra, iNumBytes, &dwBytesTransferred, NULL);
        if(dwBytesTransferred != iNumBytes)
        {
            // Failed - clip file again and abort tag write
            SetFilePointer(hFile, dwFileSize, NULL, FILE_BEGIN);
            SetEndOfFile(hFile);
            return FALSE;
        }
    }

    // Enlarge tag
    iFileCursor = dwFileSize;
    while(iFileCursor > dwStartOffset)
    {
        unsigned int iBlockSize;

        iBlockSize = 0x10000;
        if( (iFileCursor - dwStartOffset) < iBlockSize)
            iBlockSize = iFileCursor - dwStartOffset;

        // Read a chunk
        SetFilePointer(hFile, iFileCursor - iBlockSize, NULL, FILE_BEGIN);
        ReadFile(hFile, pbReadBlock, iBlockSize, &dwBytesTransferred, NULL);
        CP_ASSERT(dwBytesTransferred == iBlockSize);

        // Write chunk at offsetted position
        SetFilePointer(hFile, iFileCursor - iBlockSize + iNumBytes, NULL, FILE_BEGIN);
        WriteFile(hFile, pbReadBlock, iBlockSize, &dwBytesTransferred, NULL);
        CP_ASSERT(dwBytesTransferred == iBlockSize);

        iFileCursor -= iBlockSize;
    }

    return TRUE;
}
//
//
//

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区免费观看| 日本成人在线看| 久久午夜羞羞影院免费观看| 日韩欧美你懂的| 精品国偷自产国产一区| 91麻豆精品国产91久久久资源速度| 欧美在线一二三四区| 欧美无乱码久久久免费午夜一区 | 中文字幕视频一区| 亚洲欧洲美洲综合色网| 国产精品久久福利| 亚洲一区二区av在线| 日韩电影在线一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 久久精工是国产品牌吗| 成人一区二区三区| 色婷婷综合久色| 日韩三级高清在线| 久久久久久久久久久99999| 亚洲欧洲99久久| 午夜欧美2019年伦理| 国产精品18久久久久久vr| 99久久久精品| 欧美欧美欧美欧美| 久久久天堂av| 亚洲国产婷婷综合在线精品| 狠狠色狠狠色综合系列| 成人av网址在线| 欧美一区二区三区色| 国产欧美日韩一区二区三区在线观看| 亚洲裸体xxx| 免费av成人在线| 99精品黄色片免费大全| 日韩午夜在线观看视频| 亚洲视频在线观看一区| 久久精品久久精品| 欧美这里有精品| 国产亚洲制服色| 丝袜脚交一区二区| 成人午夜短视频| 日韩免费电影网站| 一区二区三区美女| 国产a久久麻豆| 欧美变态口味重另类| 一区二区免费看| 福利电影一区二区| 日韩欧美一级在线播放| 一区二区免费在线播放| 成人精品国产福利| 久久女同性恋中文字幕| 日本伊人精品一区二区三区观看方式 | 亚洲欧美在线观看| 狂野欧美性猛交blacked| 在线精品视频免费播放| 久久精品一区蜜桃臀影院| 免费在线观看一区二区三区| 99久精品国产| 中文字幕国产一区| 国产在线国偷精品产拍免费yy| 欧美最猛黑人xxxxx猛交| 国产精品久久一卡二卡| 国产成人免费视频一区| 精品国产123| 久久99久久99| 日韩欧美一区在线| 日韩经典中文字幕一区| 欧美日韩在线免费视频| 亚洲一级二级在线| 色激情天天射综合网| 国产精品久久久久天堂| 波多野结衣欧美| 久久亚洲二区三区| 国产成人午夜精品影院观看视频 | 老色鬼精品视频在线观看播放| 欧美日韩国产一二三| 青草国产精品久久久久久| 日本韩国视频一区二区| 亚洲一区二区三区视频在线| 91免费视频网址| 亚洲最新视频在线观看| 欧美日韩中文字幕精品| 午夜精品国产更新| 日韩欧美不卡在线观看视频| 国产麻豆成人传媒免费观看| 久久精品水蜜桃av综合天堂| 99天天综合性| 亚洲午夜精品网| 欧美电影免费观看高清完整版在线| 奇米精品一区二区三区在线观看| 日韩欧美美女一区二区三区| 国产精品一区二区三区99| 中文字幕亚洲不卡| 欧美日韩精品专区| 久久99精品国产.久久久久久 | 欧美精品三级在线观看| 日本欧美加勒比视频| 久久久久国产免费免费| 91丨九色丨黑人外教| 亚洲高清免费视频| 久久一区二区三区四区| 波多野结衣精品在线| 亚洲成人免费观看| 日本一区二区三区四区| 欧美日韩中文字幕精品| 国产成人免费视频一区| 亚洲国产精品嫩草影院| 欧美韩国日本综合| 91精品国产福利| 99v久久综合狠狠综合久久| 五月天亚洲精品| 国产精品欧美久久久久一区二区 | 国产一区二区三区日韩| 一区二区三区日本| 2欧美一区二区三区在线观看视频| 成人午夜短视频| 奇米影视一区二区三区| 樱桃国产成人精品视频| 欧美精品一区二区精品网| 欧美视频一区二区在线观看| 国产精品亚洲人在线观看| 天天综合天天做天天综合| 国产精品福利电影一区二区三区四区 | 中文字幕五月欧美| 精品免费日韩av| 欧美日韩一区二区三区四区 | 亚洲欧美一区二区久久| 亚洲精品在线一区二区| 欧美日韩久久不卡| 91视频在线观看| 国产一区二区在线视频| 性欧美疯狂xxxxbbbb| 《视频一区视频二区| 国产亚洲精品aa| 欧美tk—视频vk| 久久影院视频免费| 日韩一区二区三区在线| 色欧美日韩亚洲| 色偷偷成人一区二区三区91| 成人开心网精品视频| 国产高清亚洲一区| 国产盗摄视频一区二区三区| 久久精品国产澳门| 蜜臀va亚洲va欧美va天堂| 日韩电影一二三区| 婷婷成人激情在线网| 五月天中文字幕一区二区| 亚洲国产欧美在线| 亚洲成人精品在线观看| 亚洲一区中文日韩| 亚洲一区二区三区中文字幕在线| 国产精品久久久久久久蜜臀| 中文字幕欧美国产| 国产精品沙发午睡系列990531| 国产精品天干天干在线综合| 国产欧美一二三区| 国产精品久久久久久一区二区三区| 国产色综合一区| 成人免费在线观看入口| 亚洲精品成人a在线观看| 亚洲一区二区三区四区五区中文| 一区二区三区欧美日| 五月天视频一区| 韩国精品一区二区| 国产精品综合二区| av在线不卡免费看| 欧美影院一区二区| 91麻豆精品国产91| 国产人久久人人人人爽| 国产精品国产a级| 五月婷婷久久综合| 国产一区二区在线看| 99精品在线观看视频| 欧美男人的天堂一二区| 精品久久久久久久久久久久久久久 | 成人激情动漫在线观看| 91国偷自产一区二区三区成为亚洲经典| 欧美性受xxxx黑人xyx| 日韩欧美一区二区三区在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 久久99热99| 97aⅴ精品视频一二三区| 91精品福利在线一区二区三区| 91精品国产综合久久久久| 国产欧美日韩另类一区| 亚洲六月丁香色婷婷综合久久| 午夜电影网亚洲视频| 成人av在线观| 欧美一级在线观看| 亚洲欧洲日韩女同| 久热成人在线视频| 91丝袜国产在线播放| 久久综合色播五月| 亚洲精品国产a| 国产一区二区三区精品视频| 在线观看亚洲a| 欧美韩日一区二区三区| 久久精品噜噜噜成人av农村| 91国内精品野花午夜精品| 亚洲同性同志一二三专区| 久久精品国产久精国产爱|